TI中文支持网
TI专业的中文技术问题搜集分享网站

28335的串口读取问题

使用定时器0对外部传感器定时采样,并进行相关的解算,频率为400hz,仿真时整个计算需要约1ms的时间,其中的一个传感器使用串口和28335进行通信,传感器发送到28335的频率是200hz,波特率115200,使用仿真器调试的时候发现传感器发送来的数据有时会有错乱的现象,这是什么原因?使用ti的定时器例程,定时器中断程序中加入延时1ms的程序,串口接收也会出现错误。

mangui zhang:

用中断接收吧    要不就是收到一帧数据后  进入解算单元   然后关闭串口中断接收

完成解算后在使能接收

使用定时器0对外部传感器定时采样,并进行相关的解算,频率为400hz,仿真时整个计算需要约1ms的时间,其中的一个传感器使用串口和28335进行通信,传感器发送到28335的频率是200hz,波特率115200,使用仿真器调试的时候发现传感器发送来的数据有时会有错乱的现象,这是什么原因?使用ti的定时器例程,定时器中断程序中加入延时1ms的程序,串口接收也会出现错误。

user4192203:

回复 mangui zhang:

void Scib_Init(){ /* SciA FIFO Init */ ScibRegs.SCIFFTX.all=0xC029; ScibRegs.SCIFFRX.all=0x2041; ScibRegs.SCIFFCT.all=0x0; ScibRegs.SCIFFRX.bit.RXFFIENA = 1; // Rx Int Enable //ScibRegs.SCIFFTX.all=0x8000; // Note: Clocks were turned on to the SCIA peripheral // in the InitSysCtrl() function ScibRegs.SCICCR.all =0x0007; // 1 stop bit, No loopback // No parity,8 char bits, // async mode, idle-line protocol ScibRegs.SCICTL1.all =0x0003; // enable TX, RX, internal SCICLK, // Disable RX ERR, SLEEP, TXWAKE ScibRegs.SCICTL2.all =0x0003; ScibRegs.SCICTL2.bit.TXINTENA = 1; ScibRegs.SCICTL2.bit.RXBKINTENA =1; #if (CPU_FRQ_150MHZ) ScibRegs.SCIHBAUD =0x0000; // 115200 ScibRegs.SCILBAUD =0x0008; #endif #if (CPU_FRQ_100MHZ) ScicRegs.SCIHBAUD =0x0001; // 9600 baud @LSPCLK = 20MHz. ScicRegs.SCILBAUD =0x0044; #endif

ScibRegs.SCICTL1.all =0x0023; // Relinquish SCI from Reset ScibRegs.SCIFFTX.bit.TXFIFOXRESET=1; ScibRegs.SCIFFRX.bit.RXFIFORESET=1;}

__interrupt void SCIRXINTb_ISR(void){

Uint8 ScibRevData; while(ScibRegs.SCIFFRX.bit.RXFFST > 0) { ScibRevData = ScibRegs.SCIRXBUF.all; if((ScibRevData== '@') || (RX_Count >= 30)) { RX_Count = 0; } RxBuffer[RX_Count++] = ScibRevData; }

ScibRegs.SCIFFRX.bit.RXFFOVRCLR=1; // Clear Overflow flag ScibRegs.SCIFFRX.bit.RXFFINTCLR=1; // Clear Interrupt flag PieCtrlRegs.PIEACK.bit.ACK9 = 1; // Issue PIE ack

}

这两个子程序分别是串口b的初始化和中断服务,一帧数据是以’@‘开始,一共30个字节的数据,调试时发现RxBuffer的数据有时出现错乱。可以改哪里?

使用定时器0对外部传感器定时采样,并进行相关的解算,频率为400hz,仿真时整个计算需要约1ms的时间,其中的一个传感器使用串口和28335进行通信,传感器发送到28335的频率是200hz,波特率115200,使用仿真器调试的时候发现传感器发送来的数据有时会有错乱的现象,这是什么原因?使用ti的定时器例程,定时器中断程序中加入延时1ms的程序,串口接收也会出现错误。

user4192203:

回复 mangui zhang:

使用中断接收,测试时发现需要在定时器中断里加入EINT;在串口中断里才能接收到一个完整的帧,如果没有这句话就会出现接收帧错误。但是这样会影响主中断。

使用定时器0对外部传感器定时采样,并进行相关的解算,频率为400hz,仿真时整个计算需要约1ms的时间,其中的一个传感器使用串口和28335进行通信,传感器发送到28335的频率是200hz,波特率115200,使用仿真器调试的时候发现传感器发送来的数据有时会有错乱的现象,这是什么原因?使用ti的定时器例程,定时器中断程序中加入延时1ms的程序,串口接收也会出现错误。

rookiecalf:

回复 user4192203:

测试一下高优先级中断占用的时间,如果时间占满的话,可能导致低优先级的sci处理不了。

赞(0)
未经允许不得转载:TI中文支持网 » 28335的串口读取问题
分享到: 更多 (0)