Microblaze的uart编程

此前一直在做microblaze的uart的编程,但是无奈,Xilinx提供的驱动感觉不是非常的靠谱,很多时候,查看接收它提供的uart的接收函数,明明看见接收FIFO中在没有有效数据或者接收到足够的数据时就会退出相应的接收的状态。但是我在实际编程中却发现,如果你代码中要接收5byte的数据,只要接收没有完全,就不会产生中断。这个让我调试时感到很是纠结,就是一直在等待数据的接收完成,原来以为是查询模式下才会出现的问题,但是,后来,中断模式下也是这个问题,然后我就服了。由于发送数据的时候,自己要发送多少数据一般都是可以通过程序计算出来的,所以,我贴出发送端的代码也没有什么意思。

我的这段代码是参考网上的一位博主的文章,原博主我现在已经找不到了,只是发现伟大的百度文库上有这篇文章《Microblaze的串口收发》,实际测试中,发现它的这段代码不能够接收全部的数据,就是在接收到比较长的连续数据时,会有部分数据丢失,我不知道是他代码的原因还是我移植的问题。后来我把代码修改成为了,当末尾接收到\r\n时,退出接收程序,而接收我也没有使用Xilinx的驱动。
在利用这段代码前,请先参考网上其他的Microblaze中断编程的博文配置好uart的中断。
void uart_rx_Handler(void *CallBackRef, unsigned int ByteCount)
{
XUartLite *InstancePtr=(XUartLite*)CallBackRef;
int i=0;
while(1)
{
if(!(XUartLite_IsReceiveEmpty(InstancePtr->RegBaseAddress)))
{
buff[i]=XUartLite_ReadReg(InstancePtr->RegBaseAddress,XUL_RX_FIFO_OFFSET);
}
if(buff[i-1]==0x0A)break;
}
buff[i]=0;
//print anything recv from uartlite
xil_printf(buff);
}
因为这段代码我是直接从项目的代码中删除那些在这里我认为是多余的部分,也没有经过测试就直接贴上来的,如果有跑不通的欢迎指出。


 青春就应该这样绽放  游戏测试:三国时期谁是你最好的兄弟!!  你不得不信的星座秘密

转载于:https://www.cnblogs.com/zhumai/archive/2012/04/13/2778382.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值