新手求助-关于UART的问题

2019-03-24 09:21发布

本帖最后由 23124515 于 2016-5-18 10:52 编辑

这两天看G2开发板的出厂程序,在UART部分会有给TACCR0加一个Bitime的语句(红字标出)
不是很懂为什么要设这么一个语句,看注释是说给CCR0一个补偿,但是捕捉部分感觉应该是和CCR1有关的啊
所以在这想问问各位前辈,第一TACCR0在这段程序中的意义是什么,第二为什么要加一个这样的语句,最后那个Add Space start bit是为什么?

感谢大家!!

程序部分如下:
void Transmit()
{
  BitCnt = 0xA;                             // Load Bit counter, 8data + ST/SP
  /* Simulate a timer capture event to obtain the value of TAR into the TACCR0 register */
  TACCTL0 = CM_1 + CCIS_2  + SCS + CAP + OUTMOD0;
  //CM_1capture on rising edge, CCIS_2 initially set to GND as input,SCS 用来使Capture和Clock同步 // clear CCIFG flag
  TACCTL0 |= CCIS_3;   //CCIS_2(GND)~CCIS_3(VCC) change input to Vcc, effectively rising the edge, triggering the capture action
  while (!(TACCTL0 & CCIFG));    //allowing for the capturing//updating TACCR0.
  TACCR0 += Bitime ;                           // Some time till first bit (BitTime=52)
  TXByte |= 0x100;                          // Add mark stop bit to TXByte (1 0000 0000)
  TXByte = TXByte << 1;                     // Add space start bit 把最右边的位数给空出来
  TACCTL0 =  CCIS0 + OUTMOD0 + CCIE;          // TXD = mark = idle CCIS-01:CCI0B OUTMOD:set
  while ( TACCTL0 & CCIE );                   // Wait for TX completion THEN JUMP OUT
}

// Timer A0 interrupt service routine
#pragma vector=TIMER0_A0_VECTOR
__interrupt void Timer_A (void)
{
  if (timerMode == TIMER_UART_MODE)     // IF IN UART MODE
  {
    TACCR0 += Bitime;                         // Add Offset to TACCR0
    if (TACCTL0 & CCIS0)                      // TX on CCI0B?
    {
      if ( BitCnt == 0)       //TX A BIT,BITCNT-1,AT LAST ALL BITS ARE TXED ,BITCNT=0
      {
        P1SEL &= ~(TXD+RXD);      //Make TXD RXD NO LONGER WORK
        TACCTL0 &= ~ CCIE ;                   // All bits TXed, disable interrupt
      }
      else          //IF BITS ARE NOT ALL TRANSFERED
      {
        TACCTL0 |=  OUTMOD2;                  // TX Space, SWITCHED TO RESET FUNC, OUTPUT 0
        if (TXByte & 0x01)       // IF LAST BIT OF TXByte IS 1
         TACCTL0 &= ~ OUTMOD2;                 // TX Mark, SWITCHED BACK TO SET FUNC
        //SO IF LAST BIT IS 1,OUTPUT "1" ,OTHERWISE OUTPUT "0".
        TXByte = TXByte >> 1;     //TXBYTE RIGHT MOVE A BIT
        BitCnt --;
      }
    }





此帖出自小平头技术问答
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
5条回答
23124515
2019-03-25 09:44
 精彩回答 2  元偷偷看……0人看过

一周热门 更多>

相关问题

    相关文章