2440的串口发送中断的总结

最近在调试2440的串口发送中断,遇到了不少的问题,现根据调试的结果总结一下:


不知道是2440的硬件设计问题,还是我没有弄明白它这么设计的根据或者使用方法,总之遇到了不少问题。

根据遇到的问题得出三个结论(我认为的结论),如果你使用了串口的发送中断,并开启了FIFO功能,那么在配置上需要注意


1、UCON的Transmit Mode必须一开始就打开,而且后面不需要关闭,除非你最后确定不再使用串口发送了。

原因是这个位不打开,你没法发送数据,它不仅是个中断标志位,还是发送模式的选择位。如果你打开了串口发送中断

INTSUBMSK &= ~(BIT_SUB_RXD0 | BIT_SUB_TXD0);

又设置了发送中断函数siors_tx_isr()

那么不设置这一位,你中断没法进去,这个很明显,关键是你直接写s3c_utxh也没用。可能有人觉得这是废话,但是一开始我就没有打开,然后直接写s3c_utxh一组数据,

然后再打开这一位,中断打开后,FIFO里面的数据就直接发出去了,不过我发现没有进入中断函数,不知道什么原因,难道跟Triggle Level有关?


2、还是UCON寄存器,是Tx Interrupt Type这一位,关于选择Pulse或者Level的问题,开始我选择了Pulse位,然后单步执行,程序就无休止一直循环于发送中断函数,

就是它一直会进中断,这也可以理解,就是FIFO开始一直为空,而你打开了中断位,所以它一直进入中断。所以选择Level这一位。


3、还有就是UFCON寄存器的Tx FIFO Triggle Level这一位,开始我选择了32byte,每次填32byte,但是每次都发不全。这一位的含义是讲发送FIFO里面剩余32个byte后就会触发中断,

后来根据网上的文章,改成了16byte,它的工作原理是这样的,比如你有100个byte需要发送,你的FIFO是64byte,你一次性写入48个数据,然后FIFO移出了32byte,还剩余16byte,这时触发中断,中断里面再去填48位,然后再移出48byte,还剩16byte再次产生中断。最后还有4byte,直接写入s3c_utxh,这样所以的数据就全部发出去了。我搞不明白的是32byte为什么不行,难道设置成32byte时,需要每次写入的数据要大于这个32吗?我没有去验证。


遇到同样问题的同学请参考以下文章

http://blog.csdn.net/stephen_yu/article/details/19199399



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值