TI论坛
直播中

陈蓓萤

7年用户 212经验值
私信 关注
[问答]

28035的sci通讯不正常

SciaRegs.SCICCR  的STOP BITS 设定为0时1个停止位时,通讯不正常;
设定为1时2个停止位,通讯正常,想问一下为什么?

回帖(6)

笪琳琳

2018-11-5 10:04:42
您好!
请参考TI的F28035的官方历程,就用的是1个停止位
void scia_fifo_init()
[
  SciaRegs.SCICCR.all =0x0007;   // 1 stop bit,  No loopback
                                 // No parity,8 char bits,
                                 // async mode, idle-line protocol
  SciaRegs.SCICTL1.all =0x0003;  // enable TX, RX, internal SCICLK,
                                 // Disable RX ERR, SLEEP, TXWAKE
  SciaRegs.SCICTL2.bit.TXINTENA =1;
  SciaRegs.SCICTL2.bit.RXBKINTENA =1;
  SciaRegs.SCIHBAUD = 0x0000;
  SciaRegs.SCILBAUD = SCI_PRD;
  SciaRegs.SCICCR.bit.LOOPBKENA =0; // Enable loop back
  SciaRegs.SCIFFTX.all=0xC000;
  SciaRegs.SCIFFRX.all=0x0028;
  SciaRegs.SCIFFCT.all=0x00;
  SciaRegs.SCICTL1.all =0x0023;     // Relinquish SCI from Reset
  SciaRegs.SCIFFTX.bit.SCIRST=1;
  SciaRegs.SCIFFTX.bit.TXFIFOXRESET=1;
  SciaRegs.SCIFFRX.bit.RXFIFORESET=1;
]
                                                                         如果您认为此问题已被解答,请在“这是否解答您的问题” 后,点击“是”按钮! 谢谢您的合作!
举报

陈蓓萤

2018-11-5 10:12:35
引用: www033 发表于 2018-11-5 19:06
您好!
请参考TI的F28035的官方历程,就用的是1个停止位
void scia_fifo_init()

void scia_fifo_init()
[
SciaRegs.SCICCR.all =0x0087;   // 2 stop bit,  No loopback
                                 // no parity,8 char bits,
                                 // async mode, idle-line protocol
  SciaRegs.SCICTL1.all =0x0007;  // enable TX, RX, internal SCICLK,
                                 // Disable RX ERR, SLEEP, TXWAKE
  SciaRegs.SCICTL2.bit.TXINTENA =1;
  SciaRegs.SCICTL2.bit.RXBKINTENA =1;
  SciaRegs.SCIHBAUD = 0x0000;
  SciaRegs.SCILBAUD = 0x0060;
//  SciaRegs.SCICCR.bit.LOOPBKENA =1; // Enable loop back
  SciaRegs.SCIFFTX.all=0xC028;
  SciaRegs.SCIFFRX.all=0x0021;
  SciaRegs.SCIFFCT.all=0x00;
  SciaRegs.SCICTL1.all =0x0023;     // Relinquish SCI from Reset
  SciaRegs.SCIFFTX.bit.TXFIFOXRESET=1;
  SciaRegs.SCIFFRX.bit.RXFIFORESET=1;
]
上面的程序能正常工作
void scia_fifo_init()
[
SciaRegs.SCICCR.all =0x0007;   // 1stop bit,  No loopback
                                 // no parity,8 char bits,
                                 // async mode, idle-line protocol
  SciaRegs.SCICTL1.all =0x0007;  // enable TX, RX, internal SCICLK,
                                 // Disable RX ERR, SLEEP, TXWAKE
  SciaRegs.SCICTL2.bit.TXINTENA =1;
  SciaRegs.SCICTL2.bit.RXBKINTENA =1;
  SciaRegs.SCIHBAUD = 0x0000;
  SciaRegs.SCILBAUD = 0x0060;
//  SciaRegs.SCICCR.bit.LOOPBKENA =1; // Enable loop back
  SciaRegs.SCIFFTX.all=0xC028;
  SciaRegs.SCIFFRX.all=0x0021;
  SciaRegs.SCIFFCT.all=0x00;
  SciaRegs.SCICTL1.all =0x0023;     // Relinquish SCI from Reset
  SciaRegs.SCIFFTX.bit.TXFIFOXRESET=1;
  SciaRegs.SCIFFRX.bit.RXFIFORESET=1;
]
改成一个停止位就不行,为什么?
举报

陈蓓萤

2018-11-5 10:30:56
引用: am3x2k 发表于 2018-11-5 19:14
void scia_fifo_init()
[
SciaRegs.SCICCR.all =0x0087;   // 2 stop bit,  No loopback

interrupt void sciaTxFifoIsr(void)
[
        Uint16 i;
        EINT;
        if(SdataA_Num<=16)
        [
            for(i=0; i< SdataA_Num; i++)
            [
            while (SciaRegs.SCIFFTX.bit.TXFFST != 0)[]            
                    SciaRegs.SCITXBUF=SdataA;     // Send data
                ]               
                EDIS;   // This is needed to disable write to EALLOW protected registers
            PieCtrlRegs.PIEIER9.bit.INTx2=0;     // PIE Group 9, INT2
            EINT;
SciaRegs.SCIFFTX.bit.TXFFINTCLR=1;        // Clear SCI Interrupt flag
        PieCtrlRegs.PIEACK.all|=0x100;      // Issue PIE ACK
]
SdataA_Num = 7 ,我上位机只能收到5个字节,CRC校验的字节丢失。
举报

笪琳琳

2018-11-5 10:38:21
引用: am3x2k 发表于 2018-11-5 19:32
interrupt void sciaTxFifoIsr(void)
[
        Uint16 i;

用历程也不行么?
                                                                         如果您认为此问题已被解答,请在“这是否解答您的问题” 后,点击“是”按钮! 谢谢您的合作!
举报

更多回帖

×
20
完善资料,
赚取积分