2812的串口FIFO

[复制链接]
3488|0
 楼主| jy_Zhou 发表于 2007-4-15 15:51 | 显示全部楼层 |阅读模式
请教各位老师F2812的FIFO问题<br /><br />想完成的任务:上位机发送10个字节给DSP,DSP将接收到的数据存放在数组a[10]里,并将a[10]发送给上位机,再将数组a[10]中数据值加上0x10后发送给上位机。数据接收使用FIFO,数据发送是直接往SciaRegs.SCITXBUF中写值,没有使能发送FIFO功能及发送FIFO中断。<br /><br />程序如下<br /><br />#define&nbsp;ReceBufferLength&nbsp;10<br />#define&nbsp;SendBufferLength&nbsp;8<br /><br />Uint16&nbsp;DataReceived[ReceBufferLength];<br /><br />//--------------------------------------------------<br />interrupt&nbsp;void&nbsp;ISR_SCIRXINTA(void);<br /><br /><br />void&nbsp;InitScia(void)<br />{&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;*UART_MODE&nbsp;=&nbsp;0x44;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;EALLOW;<br />&nbsp;&nbsp;&nbsp;&nbsp;GpioMuxRegs.GPFMUX.all&nbsp;=&nbsp;0x0030;//设置GPIO为外设方式<br />&nbsp;&nbsp;&nbsp;&nbsp;EDIS;<br /><br /><br />&nbsp;&nbsp;&nbsp;&nbsp;SciaRegs.SCICCR.all&nbsp;=&nbsp;0x0007;<br />&nbsp;&nbsp;&nbsp;&nbsp;/*-------------------------------------------------------------------------------<br />&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;Set&nbsp;SCICTL1.SW&nbsp;Reset&nbsp;0&nbsp;to&nbsp;reset&nbsp;the&nbsp;SCI&nbsp;module<br />&nbsp;&nbsp;&nbsp;&nbsp;-------------------------------------------------------------------------------*/<br />&nbsp;&nbsp;&nbsp;&nbsp;SciaRegs.SCICTL1.all&nbsp;=&nbsp;0x0003;<br />&nbsp;&nbsp;&nbsp;&nbsp;SciaRegs.SCICTL2.all&nbsp;=&nbsp;0x0002;<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;/*-------------------------------------------------------------------------------<br />&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;Band&nbsp;Rate&nbsp;=&nbsp;9600,&nbsp;LSPCLK&nbsp;=&nbsp;37.5M<br />&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;BRR&nbsp;=&nbsp;LSPCLK&nbsp;/&nbsp;(band&nbsp;rate&nbsp;*&nbsp;8)&nbsp;-&nbsp;1&nbsp;=&nbsp;487(0x01E7H)<br />&nbsp;&nbsp;&nbsp;&nbsp;-------------------------------------------------------------------------------*/<br />&nbsp;&nbsp;&nbsp;&nbsp;SciaRegs.SCIHBAUD&nbsp;=&nbsp;0x0001;<br />&nbsp;&nbsp;&nbsp;&nbsp;SciaRegs.SCILBAUD&nbsp;=&nbsp;0x00E7;<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;SciaRegs.SCICTL1.all&nbsp;=&nbsp;0x0023;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;PieCtrl.PIEIER9.bit.INTx1&nbsp;=&nbsp;1;//允许接收中断<br />&nbsp;&nbsp;&nbsp;&nbsp;PieCtrl.PIEIER9.bit.INTx2&nbsp;=&nbsp;0;//禁止发送中断<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />}<br /><br />void&nbsp;InitSciaFIFO(void)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;SciaRegs.SCIFFTX.all&nbsp;=&nbsp;0xe000;<br />&nbsp;&nbsp;&nbsp;&nbsp;SciaRegs.SCIFFRX.all&nbsp;=&nbsp;0x202a;<br />&nbsp;&nbsp;&nbsp;&nbsp;SciaRegs.SCIFFCT.all&nbsp;=&nbsp;0x000A;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;Set&nbsp;the&nbsp;delay&nbsp;time&nbsp;as&nbsp;10&nbsp;clocks<br />&nbsp;&nbsp;&nbsp;&nbsp;SciaRegs.SCIPRI.all&nbsp;=&nbsp;0x0010;&nbsp;&nbsp;&nbsp;&nbsp;<br />}<br /><br />interrupt&nbsp;void&nbsp;ISR_SCIRXINTA(void)<br />{<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;Uint16&nbsp;i,&nbsp;j;<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;for(i&nbsp;=&nbsp;0;&nbsp;i&nbsp;&lt&nbsp;ReceBufferLength;&nbsp;i++)&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;接收到的数据存入数组<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DataReceived&nbsp;=&nbsp;SciaRegs.SCIRXBUF.all&nbsp;&&nbsp;Factor_GetData;<br />&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;for(j&nbsp;=&nbsp;0;&nbsp;j&nbsp;&lt&nbsp;ReceBufferLength;&nbsp;j++)&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;原值返回<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SciaRegs.SCITXBUF&nbsp;=&nbsp;DataReceived[j];&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;for(j&nbsp;=&nbsp;0;&nbsp;j&nbsp;&lt&nbsp;(ReceBufferLength);&nbsp;j++)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;原值加0x10返回<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SciaRegs.SCITXBUF&nbsp;=&nbsp;DataReceived[j]&nbsp;+&nbsp;0x10;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;SciaRegs.SCIFFRX.bit.RXFIFORESET&nbsp;=&nbsp;0;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;Reset&nbsp;the&nbsp;FIFO&nbsp;receive&nbsp;stack<br />&nbsp;&nbsp;&nbsp;&nbsp;SciaRegs.SCIFFRX.bit.RXFIFORESET&nbsp;=&nbsp;1;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;Enable&nbsp;the&nbsp;FIFO&nbsp;receive&nbsp;operation<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;PieCtrl.PIEACK.all|=&nbsp;PIEACK_GROUP9;<br />}<br /><br />发送的值是:00&nbsp;01&nbsp;02&nbsp;03&nbsp;04&nbsp;05&nbsp;06&nbsp;07&nbsp;08&nbsp;09<br /><br />理论上应该收到的是:00&nbsp;01&nbsp;02&nbsp;03&nbsp;04&nbsp;05&nbsp;06&nbsp;07&nbsp;08&nbsp;09&nbsp;10&nbsp;11&nbsp;12&nbsp;13&nbsp;14&nbsp;15&nbsp;16&nbsp;17&nbsp;18&nbsp;19&nbsp;<br /><br />但实际收到的是:&nbsp;&nbsp;&nbsp;&nbsp;00&nbsp;04&nbsp;05&nbsp;06&nbsp;07&nbsp;08&nbsp;09&nbsp;10&nbsp;11&nbsp;12&nbsp;13&nbsp;14&nbsp;15&nbsp;16&nbsp;17&nbsp;18&nbsp;19&nbsp;<br /><br />01&nbsp;02&nbsp;03丢失了!<br /><br />我还发现,如果把FIFO深度改为5,则正确,但是如果深度为5时,连续回送20个数据也会有数据丢失。只要回送的数据超过17个,则会有丢失,只有17个数据被送回。<br /><br />请问,小弟的问题出在哪里?这个17是怎么回事?是哪个寄存器设的不对吗?请各位帮忙看看,非常感谢!!!<br />
您需要登录后才可以回帖 登录 | 注册

本版积分规则

2

主题

2

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部