2595|0

6892

帖子

0

TA的资源

五彩晶圆(高级)

楼主
 

USART 使用PDCA进行收发,遇到以下问题 [复制链接]

1、配置USART 发送、接收均使用PDCA,数据能正确接收和发送,按资料上说,当PDCA的TCR为零时,应该会使USART的状态寄存器CSR中RXBUFF或TXBUFE为有效,
   本来我打算使用USART的RXBUFF中断功能,但是我一直不能进入中断,后来读取USART的状态寄存器,发现RXBUFF、TXBUFE位一直为零,不知道为什么?
2、按照我看资料上的理解,USART中断功能选项有:RXRDY,TXRDY,ENDTX,ENDRX,TXBUFE,RXBUFF……,RXRDY和TXRDY用串口接收发送中断没有问题,都可以正常 
   的进入中断。TXBUFE、RXBUFF应该是跟使用USART的PDCA相关,当PDCA的TCR递减为零时,就会使USART状态寄存器中相应的TXBUFE、RXBUFF位置1,如果使
   用了USART的TXRDY或TXRDY中断功能,就会进入USART中断。当重新配置PDCA BUF时,也就是调用一次pdca_reload_channel()函数,就会清除TXBUFE或
   RXBUFF位,不知道我的理解有错么?但是当我使用RXRDY或TXRDY中断时,一直无法进入中断,后来读USART 状态寄存器发现RXBUFF、TXBUFE从来没有为1 
   过。ENDTX和ENDRX不明白该怎么使用?
3、另外我用STUDIO创建了一个PDCA的例子,在中断函数的首行加入了以下调试语句:
    if(EXAMPLE_USART->csr&AVR32_USART_CSR_TXBUFE_MASK)  
        LED_On(LED2);
    else
        LED_Off(LED2);
    LED_Toggle(LED3);

    结果只有LED3闪烁,LED2一直灭,串口一直有数据输出。按道理进入中断后,RXBUFE为应该为1,LED应该亮才是呀,执行pdca_reload_channel()函数后
    才会清除RXBUFE位。
    我又试着将中断方式改为USART的TXBUFE中断,INTC_register_interrupt()函数中参数AVR32_PDCA_IRQ_0改为:AVR32_USART1_IRQ_0,
     将pdca_enable_interrupt_reload_counter_zero(PDCA_CHANNEL_USART_EXAMPLE)改为:EXAMPLE_USART->ier=AVR32_USART_IER_TXBUFE_MASK;
    中断函数的内容不变,结果串口只输出一次后就再没有数据输出了,LED3也不闪烁,也就说没有进入中断,不知道哪里有问题,请大家多指教!
此帖出自单片机论坛
点赞 关注
个人签名一个为理想不懈前进的人,一个永不言败人!
http://shop57496282.taobao.com/
欢迎光临网上店铺!
 

回复
举报
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/7 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表