F28335的配置代码如下
void SCIControlInit()
{
SciaRegs.SCICCR.all = 0x0007; //1个停止位、无奇偶校验、无Loop模式、空闲线模式、8位数据
ScibRegs.SCICCR.all = 0x0007; //1个停止位、无奇偶校验、无Loop模式、空闲线模式、8位数据
ScicRegs.SCICCR.all = 0x0007; //1个停止位、无奇偶校验、无Loop模式、空闲线模式、8位数据
SciaRegs.SCICTL1.all = 0x0003; //接收中断错误禁用、发送器唤醒禁用、休眠禁用、发送器使能、接收器使能
ScibRegs.SCICTL1.all = 0x0003; //接收中断错误禁用、发送器唤醒禁用、休眠禁用、发送器使能、接收器使能
ScicRegs.SCICTL1.all = 0x0003; //接收中断错误禁用、发送器唤醒禁用、休眠禁用、发送器使能、接收器使能
SciaRegs.SCIHBAUD = 0x0028; //SCIA:115200波特率,实际11433波特率
SciaRegs.SCILBAUD = 0x0000;
ScibRegs.SCIHBAUD = 0x0001; //SCIB:9600波特率
ScibRegs.SCILBAUD = 0x00E7;
ScicRegs.SCIHBAUD = 0x0001; //SCIC:9600波特率
ScicRegs.SCILBAUD = 0x00E7;
SciaRegs.SCICTL1.bit.SWRESET = 1; //复位
ScibRegs.SCICTL1.bit.SWRESET = 1; //复位
ScicRegs.SCICTL1.bit.SWRESET = 1; //复位
SciaRegs.SCIPRI.bit.SOFT = 1;
SciaRegs.SCIPRI.bit.FREE = 1;
ScibRegs.SCIPRI.bit.SOFT = 1;
ScibRegs.SCIPRI.bit.FREE = 1;
ScicRegs.SCIPRI.bit.SOFT = 1;
ScicRegs.SCIPRI.bit.FREE = 1;
//SciXRegs.SCIRXST.all = 0x0000; //接收状态标志位
}
在使用Scib与PC机进行串口调试时,用的代码如下:
ScibSendEnable(); //发送使能
for(j=0;j<7;j++)
{
while (ScibRegs.SCICTL2.bit.TXRDY != 1) { }//等待发送缓存清空
ScibRegs.SCITXBUF = BBitReadTX[j]; //BBitReadTX 为unsigned char 类型字符数组
}
ScibReceiveEnable(); //接收使能
如果单步调试,PC机能收到正确的数据。但连续执行时,PC总是只收到5个Byte的数据(理应是7个)。
这是什么原因呢?是不是相SCITXBUF中写数据时,应该加延时哇?
这个程序无需用到FIFO。