您的位置: OpenADSP社区论坛 -> Blackfin专区 -> 新手上路 -> BF533的简单接口问题(UART接口)
本帖共有455个阅读者
发表帖子 发表投票 回复主题
BF533的简单接口问题(UART接口)
米兰的小铁匠(论坛新手)
米兰的小铁匠
头衔:社区公民
帮派:无帮无派
帖数:8
金钱:184
积分:14
注册时间:2014/4/13
楼主信息 | 留言 | Email | 主页 | 编辑 | 管理 | 离线
BF533的简单接口问题(UART接口)
代码如下

EX_INTERRUPT_HANDLER(UART_ISR)
{
if(*pUART_LSR&DR)           //判断是否有新的数据。
{
if(cont>512) //防止buff溢出,测试代码,将接收到的数据重复写入512字节的buff
cont = 0;
RXbuf[cont]=*pUART_RBR;
cont++;
}
}

void Init_Interrupts(void)
{
*pSIC_IAR0 = 0xffffffff;    
*pSIC_IAR1 = 0xf3ffffff;     // UART 中断等级定义
*pSIC_IAR2 = 0xfffFFffF;
register_handler(ik_ivg10, UART_ISR); // UART ISR -> IVG 10
*pSIC_IMASK = 0x00004000;
}

void Test_TX(void)
{
int i;
for(i=0;i<50;i++) //发送测试函数,将生成的数据通过IR发送出去。
{
*pUART_THR=TXbuf[i];
     while(!(*pUART_LSR&0x0020));
    }
}
在主函数里有: while(1)
Test_TX();

我想问的是···是当UART_THR里接收到一个数据就引发中断并在中断函数里把数据传给接受buff(这样就是50次中断),还是说当UART_THR接收完整串字符才引发一次中断??



新手上路,勿喷勿笑,多多指教!
等级:论坛新手 参考IP地址:*.*.*.*
2014/4/30 9:32:05
尊贵身份标志
andy(论坛版主)
andy
头衔:社区公民
帮派:无帮无派
帖数:2287
金钱:11132
积分:2263
注册时间:2011/6/8
1信息 | 留言 | Email | 主页 | 编辑 | 管理 | 离线
UART的FIFO只有16bit,所以一旦FIFO中有数据,就会中断。是1个字节一次中断。
你可以这样做,当进入中断后,查询FIFO是否满,如果满就读取数据。直到FIFO空,再退出中断。有必要的话,在每读一次数据后,加几个ssync(); 语句做延时,用于等待其他数据填入FIFO。
这样一次中断就可以读完全不数据。

这家伙很懒,什么也没有留下!
等级:论坛版主 参考IP地址:*.*.*.*
2014/4/30 9:39:16
Powered by OpenADSP Copyright © 2010 www.Openadsp.com. All rights reserved.159385 Call, 1 Queries, Processed in 0.031250 second(s),