想实现TM4C124 UART 使用ucdma 接收不定长的数据帧,参考了http://no001.blog.51cto.com/1142339/902155 这篇博客中stm32 的实现方式。
其中用到的方法是把uart rx 和定时器的捕获引脚连接在一起,同时也复位了定时器不让定时器产生超时中断,
直到数据接收完毕后,脉冲捕获脚没有信号触发定时器复位,引起超时从而触发一帧数据接收完毕中断。使用这种方法是用到了stm32 定时器中的
引脚复位模式,而我看了一下tm4c123的数据手册 定时器模式里好像没有这种模式,只能实现脉冲捕获计数但没有复位的描述 不知道是不支持这种模式
还是有其他方法实现? 希望有熟悉定时器的朋友解答一下,谢谢!
Maka Luo:
如果需要引脚复位,可以采用GPIO中断模式,在GPIO中断处理函数中去复位Timer count值来实现Timer reset.
不知道是否理解你的问题?
alex c:
回复 Maka Luo:
谢谢 你理解是对的,gpio 也能实现timer count复位,但我觉得这样做并不好,因为会一直触发中断和我用uart 搭配ucdma 来减少中断的初衷相违背。
看来TM4C123无法参考stm32的这种方式了。
Maka Luo:
回复 alex c:
那是否可以用Timer来做,Timer定时长度小于超时,实现定时count清0.
alex c:
回复 Maka Luo:
无法用TIMER定时长度来做 因为uart 接收的数据是不定长的所以无法确定TIMER 的超时时间,但是可以考虑用uart rx触发一个Gpio
中断,在中断里启用一个timer 设置一定的超时时间, 超时时间到了去判断ucdam的数据转发状态,由此来判断是否一个帧数据接收完毕。
但是这样做也比较麻烦,而且有可能会出现数据漏处理的情况。
在uart启用ucdma功能后 uart本身的rt /rx 中断就被屏蔽了 ,ucdma数据手册里好像也没有看到有接收超时中断的功能,否则利用接收超时中断
的方法来做是最简单也是最安全的
Maka Luo:
回复 alex c:
好像没有超时中断功能,也没有更多意见。