[讨论] USART 使用PDCA进行收发,遇到以下问题

eeleader   2010-6-23 13:49 楼主
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/ 欢迎光临网上店铺!

回复评论

暂无评论,赶紧抢沙发吧
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复