<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > 【UART】USCI:UART模式

          【UART】USCI:UART模式

          作者: 時間:2016-11-25 來源:網(wǎng)絡(luò) 收藏

          3.11 線路空閑多處理器模式(待續(xù))

          3.12 地址位多處理器模式(待續(xù))

          3.13 自動波特率檢測(待續(xù))

          3.2





          此寄存器主要是配置USCI,PUC后時鐘選擇外部時鐘,所以初始化時除了置位 UCSWRST 位外還需配置時鐘源。其它的默認就行。

          四、低功耗 UART模式下使用 USCI模塊

          USCI 模塊提供低功耗模式下的自動時鐘激活功能。當(dāng) USCI 時鐘源由于設(shè)備處于低功耗模式不活動時,無論時鐘源的控制位如何設(shè)置,USCI 模塊會在需要時激活時鐘源,時鐘將保持活動狀態(tài)直到 USCI模塊返回空閑狀態(tài)。USCI模塊返回到閑狀態(tài)后,將反轉(zhuǎn)時鐘源控制位的設(shè)置。

          eg.
          void InitUARTA1(void)
          {
          UCA1CTL1 |= UCSWRST;// PUC后,UCSWRST位自動置位,這使 USCI保持在復(fù)位狀態(tài)
          UCA1CTL0 = 0x00;
          UCA1CTL1 |= UCSSEL_2; // SMCLK
          UCA1BR0 = 216; // 24MHz 115200
          UCA1BR1 = 0; // 24MHz 115200
          UCA1MCTL = UCBRS_2 + UCBRF_0; //0x04+0x00
          P5SEL = 0xC0; // P5.6/7 = USCI_A0 TXD/RXD
          UCA1CTL1 &= ~UCSWRST; // **Initialize USCI state machine**,。清除UCSWRST 將釋放 USCI, UCA1IE |= UCRXIE; // Enable USCI_A1 RX interrupt
          }
          #pragma vector = USCI_A1_VECTOR
          __interrupt void USCI_A1_ISR(void)
          {
          switch (__even_in_range(UCA1IV,4))
          {
          case 0:break;
          case 2:
          g_uartBufA[g_bufALen] = UCA1RXBUF;
          if (g_uartBufA[g_bufALen]==0xFF)
          {
          }
          if (g_uartBufA[g_bufALen++]==0xFD) //判斷PC機發(fā)送的命令幀是否已完
          {
          g_bufALen=0;
          g_uartReceive = 1;// 置位
          }
          break;
          case 4:break; // Vector 4 - TXIFG
          default: break;
          }
          }
          void USciSend( )
          {
          unsigned char i;
          for (i = 0; i <g_bufALen; i++)
          {
          while (!(UCA1IFG & UCTXIFG));
          UCA1TXBUF = g_uartBufA[uartBuf1];
          }
          }//UCA1MCTL 是UCA1的調(diào)制控制寄存器




          五、波特率的產(chǎn)生

          USCI 波特率發(fā)生器可以從非標準源頻率中產(chǎn)生標準的波特率,可以通過UCOS16位選擇系統(tǒng)提供的兩種操作模式。波特率可以通過使用BRCLK 產(chǎn)生,根據(jù) UCSSELx設(shè)置,BRCLK 可以作為外部時鐘 UCAxCLK或內(nèi)部時鐘ACLK 或SMCLK 的時鐘源。

          5.1低頻波特率

          當(dāng)UCOS16=0 時選擇低頻模式。該模式允許從低頻時鐘源產(chǎn)生波特率(例如從32768Hz 晶振產(chǎn)生9600波特)。通過使用較低的輸入頻率,可以降低模塊的功耗。在高頻和高分頻設(shè)置下使用這種模式,將會使多數(shù)表決在逐漸縮小的窗口中執(zhí)行,因此會降低多數(shù)表決法的優(yōu)勢(下面的例子都是這種模式)。

          在低頻模式下,波特率發(fā)生器使用1個預(yù)分頻器和1個調(diào)制器產(chǎn)生位時鐘時序。這種組合下,產(chǎn)生波特率時支持小數(shù)分頻;在這種模式下,最大的 USCI波特率是UART 源時鐘頻率 BRCLK的1/3 。

          每一位的時序如圖所示,對于接收的每一位,為了確定該位的值,采用多數(shù)表決法。這些采樣點發(fā)生在N/2-1/2,N/2 和N/2 + 1/2 個BRCLK 周期處,這里N 是每個BITCLK 時鐘中 BRCLKs 的數(shù)值。


          調(diào)制是建立在如表15-2 所示的 UCBRSx 設(shè)置基礎(chǔ)上的。表中1個1 表示m= 1,相應(yīng)的BITCLK 周期是一個BRCLK 周期,它比m=0 時的BITCLK 周期長。調(diào)制在8位后進行,但以新的開始位重新啟動。

          5.2 過采樣波特率的產(chǎn)生

          當(dāng)UCOS16=1時,選擇過采樣模式。該模式支持在較高輸入時鐘頻率下對UART 位流采樣。在多數(shù)表決方法的結(jié)果總是一個位時鐘周期的1/16位置。當(dāng)使能IrDA 編碼器和解碼器時,這種模式也支持帶有3/16位時間的IrDA脈沖。

          該模式使用一個預(yù)分頻器和調(diào)制器產(chǎn)生BITCLK16 時鐘,該時鐘比 BITCLK 快16倍。這種組合方式支持波特率產(chǎn)生時 BITCLK16 和BITCLK 的小數(shù)分頻。在這種情況下,最大的USCI 波特率是 UART源時鐘頻率BRCLK的1/16。當(dāng)UCBRx 設(shè)置為0或1時,將忽略第一級分頻器和調(diào)制器,BRCLK等于 BITCLK16—在這種情況下BITCLK16沒有調(diào)制,因此將忽略 UCBRFx位。

          BITCLK16 調(diào)制是建立在如表15-3 所示的 UCBRFx 設(shè)置基礎(chǔ)上的。表中1個1 表示相應(yīng)的 BITCLK16 周期一個BRCLK周期,它比m=0 時的BITCLK16周期長。以每一個新位時序開始調(diào)制;BITCLK調(diào)制是建立在如前所述的 UCBRSx設(shè)置(見表15-2)基礎(chǔ)上的。

          5.3 設(shè)置波特率

          430的波特率設(shè)置用三個寄存器實現(xiàn):
          UxBR0:波特率發(fā)生器分頻系數(shù)低8位;
          UxBR1:波特率發(fā)生器分頻系數(shù)高8位;
          UxMCTL:波特率發(fā)生器分頻系數(shù)的小數(shù)部分實現(xiàn);
          對于給定的BRCLK時鐘源,所使用的波特率將決定分頻因子 N:N = fBRCLK/波特率。分頻因子N 通常不是一個整數(shù)值,因此至少需要一個分頻器和一個調(diào)制器來盡可能接近分頻因子,如果N 值等于或大于16,可以通過置位UCOS16 選擇過采樣波特率產(chǎn)生模式。

          在低頻模式下,分頻因子的整數(shù)部分通過預(yù)分頻器實現(xiàn)UCBRx = INT(N);
          小數(shù)部分由帶有下面nominal公式的調(diào)制器實現(xiàn):UCBRSx = round((N–INT(N))× 8),(round表示舍入)
          UCBRSx計數(shù)值增1或減1,對任何給定的位給一個較小的最大比特誤差。為了檢測是不是這種情況,對于每個UCBRSx設(shè)置的每一位都必須經(jīng)過詳細的誤差計算;

          在過采樣模式下,預(yù)分頻器設(shè)置為:UCBRx = INT(N/16),第一階調(diào)制器設(shè)置為:UCBRFx = round(((N/16)– INT(N/16) ) × 16 ),當(dāng)需要更高精度時,UCBRSx調(diào)制器可以實現(xiàn)從 0到7 的值。對于給定位,為了找到最低的最大誤碼率設(shè)置,對于帶有初始UCBRFx設(shè)置和增1 或減 1的 UCBRFx設(shè)置的 UCBRSx從0到7的所有設(shè)置,都必須經(jīng)過詳細的誤差計算。

          下面詳解上例中的四條語句:

          UCA1CTL1 |= UCSSEL_2; // SMCLK
          UCA1BR0 = 216; // 24MHz 115200
          UCA1BR1 = 0; // 24MHz 115200
          UCA1MCTL = UCBRS_2 + UCBRF_0; //0x04+0x00

          這里 SMCLK 已在時鐘部分初始化,其時鐘源為: Fdcoclkdiv = (760+1)*32768 = 24.936448 MHZ;
          分頻系數(shù) N = 24936448/115200 = 216.462222,UCA1BR0是分頻系統(tǒng)整數(shù)部分的低8位、UCA1BR1是高8位,所以..
          UCA1MCTL 是波特率發(fā)生器分頻系數(shù)的小數(shù)部分,由于是低頻模式(UCOS16=0),UCA1MCTL 寄存器中的UCBRFx 位忽略,而UCBRSx = round((N–INT(N))× 8) 即 UCBRSx = 0.46×8 四舍五入取為 4。
          UCBRSx 的值也可以這么解釋: 0.46*8=3.68 四舍五入為 4個1,把這4個1分成8位均勻排開 01010101 (LSB在前),對照表15-2 查得UCBRSx=0x04。

          3.1 串行口寄存器的初始化
          MSP430 的串行口波特發(fā)生器使用1 個分頻計數(shù)器 和1 個調(diào)整器, 分頻因子N 由送到分頻計數(shù)器的時鐘 ( BRCLK ) 頻率和所需的波特率來決定, N=BRCLK/波 特率。 本系統(tǒng)中使用8 MHz 晶振,即BRCLK = 8 MHz ,要求 串行口波特率為1.5Mbps 時,分頻因子大約是5.333333。這樣波特率發(fā)生器的分頻計數(shù)器BRCLK 值是5 ;而調(diào)整 器UMCTL 的值為24H 。當(dāng)然實際誤差為1.56%,為此先采用6 MHz,12 MHz 的晶振進行接收發(fā)送測試, 證明這 個誤差

          上一頁 1 2 下一頁

          關(guān)鍵詞: UARTUSCIUART模

          評論


          相關(guān)推薦

          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();