DSP2812 SCI FIFO模式调试心得 dsp2812串口通信程序
SCI通信格式中的数据位数是指采用SCI传输数据时一帧数据的位数,一帧传输1~8位,则两帧传输2~16位;FIFO深度是指有多少数据存入到FIFO中时会产生中断请求事件,FIFO的深度设定时当然要大于所定义的数据格式的位数,数据位数一定的情况下,深度越大所发生的中断请求频率越低。
2、实际测试
当波特率设定为19200时,以串口调试软件“xfcom21.exe”测试数据位分别为1~8,深度分别为1~16。
串口调试软件截图
结果为:
数据位<7位时,无论FIFO深度为多少,传输均错误,数据位为7或8位时,FIFO深度在大于数据位的情况下,传输均正确;且当数据位=深度时,传输的数据在自行设定的buffer数组中各位始终保持不变,稳定传输,当数据位小于8位时,buffer数组中各位轮流变换传输,且变换与FIFO深度与数据位数有关系。
说明对于FIFO堆栈深度的设定只影响中断产生事件的频率,SCI串口传输时设定数据位数为7或8位传输较为稳定。
3、测试所用程序
void InitSci(void)
{
SciaRegs.SCICCR.bit.STOPBITS=0; //1位停止位
SciaRegs.SCICCR.bit.PARITYENA=0; //禁止极性功能
SciaRegs.SCICCR.bit.LOOPBKENA=0; //禁止回送测试模式功能
SciaRegs.SCICCR.bit.ADDRIDLE_MODE=0; //空闲线模式
SciaRegs.SCICCR.bit.SCICHAR=7; //8位数据位
SciaRegs.SCICTL1.bit.TXENA=1; //SCIA模块的发送使能
SciaRegs.SCICTL1.bit.RXENA=1; //SCIA模块的接收使能
SciaRegs.SCIHBAUD=0;
SciaRegs.SCILBAUD=0xC2; //波特率为19200
SciaRegs.SCIFFTX.bit.TXFIFOXRESET=1; //重新使能发送FIFO的操作
SciaRegs.SCIFFTX.bit.SCIFFENA=1; //使能SCI FIFO的功能
SciaRegs.SCIFFTX.bit.TXFFST=0; //发送FIFO队列为空
SciaRegs.SCIFFTX.bit.TXFFINT=0; //没有产生发送FIFO中断
SciaRegs.SCIFFTX.bit.TXINTCLR=0; //没有清除TXFFINT的标志位
SciaRegs.SCIFFTX.bit.TXFFIENA=1; //使能发送FIFO中断
SciaRegs.SCIFFTX.bit.TXFFILIL=0; //发送中断级别为0,也就是当发送FIFO为空时发生中断
SciaRegs.SCIFFRX.bit.RXFFOVF=0; //接收FIFO没有溢出
SciaRegs.SCIFFRX.bit.RXOVF_CLR=1; //对RXFFOVF标志位没有影响
SciaRegs.SCIFFRX.bit.RXFIFORESET=1; //重新使能接收FIFO的操作
SciaRegs.SCIFFRX.bit.RXFIFST=0; //接收FIFO队列为空
SciaRegs.SCIFFRX.bit.RXFFINT=0; //没有产生接收中断
SciaRegs.SCIFFRX.bit.RXFFINTCLR=1; //清除接收中断标志位
SciaRegs.SCIFFRX.bit.RXFFIENA=1; //使能FIFO接收中断
SciaRegs.SCIFFRX.bit.RXFFIL=8; //FIFO接收中断级别为8.也就是说当接收FIFO中有8个字符时发生中断
SciaRegs.SCICTL1.bit.SWRESET=1; //重启SCI
}
DSP28_DefaultIsr.c文件下相应中断函数处:
interrupt void SCIRXINTA_ISR(void) // SCI-A接收中断函数
{
int i;
for(i=0;i<8;i++)
{
buffer[i] = SciaRegs.SCIRXBUF.all; //接收数据
}
//if(strncmp(buffer,"hellodsp",8)==0)
//{
SciaRegs.SCIFFTX.bit.TXINTCLR=1; //清除发送中断标志位,使其响应新的中断
//}
SciaRegs.SCIFFRX.bit.RXFIFORESET=0;
SciaRegs.SCIFFRX.bit.RXFIFORESET=1;
SciaRegs.SCIFFRX.bit.RXFFINTCLR=1;
PieCtrl.PIEACK.all=0x0100; //使得同组其他中断能够得到响应
EINT; //开全局中断vcc
}
interrupt void SCITXINTA_ISR(void) // SCI-A发送中断函数
{
int i;
for(i=0;i<8;i++)
{
SciaRegs.SCITXBUF=buffer[i]; //发送数据
}
PieCtrl.PIEACK.all=0x0100; //使得同组其他中断能够得到响应
EINT; //开全局中断
}
更多阅读
串口线与并口线的区别 串口并口区别
串口线与并口线的区别——简介我们经常碰到串口线或者并口线,究竟他们有什么区别呢?串口线与并口线的区别——工具/原料串口线,并口线串口线与并口线的区别——方法/步骤串口线与并口线的区
串口通信的分类 基于fpga的串口通信
串口通信的分类串口通信可以分为同步通信和异步通信两类。同步通信是按照软件识别同步字符来实现数据的发送和接收,异步通信是一种利用字符的再同步技术的通信方式。2.1同步通信同步通信是一种连续串行传送数据的通信方式,一次通信
cc2531USBdongle实现MT模式数据转发串口 stm32f103双串口转发
由于项目需求要实现CC2531USBdongle的MT模式来实现dongle的数据转发功能,框架简图1所示。PC端实现了MT模式,也可以用Ztool。总结起来就是dongle在MT模式下接收串口数据(数据满足MT格式),然后将数据解析为具体方法,接收到node端发送的数据
如何用VB编写串口程序 如何编写串口驱动程序
VB控件MSComm功能介绍VB中的MSComm 控件通过串行端口传输和接收数据,为应用程序提供串行通讯功能。MSComm控件在串口编程时非常方便,程序员不必去花时间去了解较为复杂的API函数,而且在VC、VB、Delphi等语言中均可使用。 Microsoft Com
h3c路由器串口配置命令 h3c路由器命令大全
路由器串口配置命令http://www.net130.com/ 日期:2005-10-31浏览次数: 17421. async mode设置异步串口的建立链路方式。async mode { dedicate | interactive }【缺省情况】异步串口的缺省建立链路方式为直接方式(dedicate)。【命令模式