FIFO功能是直接在BUF那加了一个16级深的队列(入SHF+BUF+FIFO;出FIFO+BUF+SHF),也就是原来只能存一个字节的BUF现在可以存1个字节+FIFO个数据。
1.如果发送的时候,在SCIFFENT=1 FIFO使能,我向BUF写入了10个字节数据,
for(temp=0;temp<10;temp++) SciaRegs.SCITXBUF = Sci_VarRx[temp];
如果不打开匹配中断TXFFIENA=0,这10个数据是不是就直接发送出去了?
如果不打开匹配中断TXFFIENA=0,TXFFIL皮配中断的设置也应该没用了吧。
如果在普通SCI模式下,这样写的问题是不是:10个数据只能发出最后一个,也就是增强型FIFO在这点上有优势。
2.在发送数据时,如果打开匹配中断TXFFIENA=1;中断匹配TXTFIL设为10,是不是当TXFFST小于等于10的时候产生发送中断?
也就是如果在SCIFFENT=1 FIFO使能的情况下,程序刚开始跑就会产生发送中断(复位后TXFFST应该为0吧)?
这里有点迷糊的是 中断怎么产生的?
同样在接收数据的时候也类似。
3.如果发送大量数据比如说发送400个字节的数据Sci_VarRx[400],FIFO功能的优越性体现在哪里?
我尝试过用
for(temp=0;temp<400;temp++)
{
SciaRegs.SCITXBUF = Sci_VarRx[temp];
while(SciaRegs.SCICTL2.bit.TXRDY != 1) {}
}
发送数据,是可行的无论改程序是在主程序的死循环内还是在接收数据中断内,都能实现数据的发送。
但是,如果不加while(SciaRegs.SCICTL2.bit.TXRDY != 1) {}的话PC只能收到17个字节的数据。
这样的FIFO在发送大量数据的时候与普通方式SCI比有什么优势?
弄了FIFO两三天了,这几点一直弄不清楚。还有一些问题正在尝试解决。
期待您的回答。 |