打印

这样的编程方法之思考

[复制链接]
1570|16
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
ihafd|  楼主 | 2015-1-12 10:06 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
用MSP430FR5739 系统DCO 是24MHz  
每3mS通过SPI读10个字节(SPI速度是2分频,再快就读到乱码了),然后通过UART,波特率是115200 发送15个字节。

按理来计数时间是足够的。但试来试去,总是有些数据丢失了。

我已经把程序上的大部函数都关了。还是不行。总是有些数据丢失了。如果UART 只发三个数据就发没有丢数据。

应该怎样处理才可以不丢数据?用DMA的试不行。我试了用DMA的方式好像更慢啊?DMA的方式我还不太了解.

谢谢!~!

相关帖子

沙发
dirtwillfly| | 2015-1-12 13:41 | 只看该作者
单独调试SPI或者UART,没问题吧?

使用特权

评论回复
板凳
ihafd|  楼主 | 2015-1-12 15:00 | 只看该作者
单独调试是没有题的.

上面的情况,如果UART 只发三个字节的数据就没有丢数据。

使用特权

评论回复
地板
ihafd|  楼主 | 2015-1-12 15:02 | 只看该作者
单项调试是行的.
但是我要把收到的数据马上发出去,然后再接收新的啊.

使用特权

评论回复
5
helongdm| | 2015-1-12 15:47 | 只看该作者
你的3ms周期是间隔3ms还是加上spi读uart发总共就3ms    算算你的uart 15个字节都1ms多了,再加上你的spi  和程序  算算你的时间吧

使用特权

评论回复
6
zyj9490| | 2015-1-12 19:02 | 只看该作者
本帖最后由 zyj9490 于 2015-1-12 19:05 编辑

用外部晶振试下,或降低UART波特率,232非同步传输协议,就靠晶振的频率一致。多用缓冲,SPI提升中断优先级。

使用特权

评论回复
7
ihafd|  楼主 | 2015-1-12 21:31 | 只看该作者
3mS是包括SPI读和UART发送的时间.

115200 波特率发15个字节:
115200 / 8 = 14400
1/14400  * 15 =  1.04ms  

SPI 时钟是24MHz的2分频速度很快的。大约0.5mS吧

这样算起来3mS应该够的啊。

使用特权

评论回复
8
hdp7891000| | 2015-1-12 21:57 | 只看该作者
用中断啊

使用特权

评论回复
9
dirtwillfly| | 2015-1-12 22:04 | 只看该作者
ihafd 发表于 2015-1-12 21:31
3mS是包括SPI读和UART发送的时间.

115200 波特率发15个字节:

既然单独调试两个讯通都没问题。那就是两个通讯相互影响了。
发送15个字符要1ms还多,接收10个字符也用不少时间的。这样可能时间就超了。
不要按计算出来的理想值来考虑,代码具体执行的时间可以在调试时看到

使用特权

评论回复
10
shenmu2012| | 2015-1-12 22:32 | 只看该作者
DMA的应用啊,不是很了解的,参照参考代码的吧。

使用特权

评论回复
11
yklstudent| | 2015-1-12 22:39 | 只看该作者
楼主的理论水平很高

使用特权

评论回复
12
好吃好好吃| | 2015-1-12 23:06 | 只看该作者
UART发送要加上起始位,停止位,校验位,结束位的。另外你一边读一边发送,要考虑下相互影响。比如说设个缓冲区加标志位,读到了再发送。

使用特权

评论回复
13
ihafd|  楼主 | 2015-1-13 08:56 | 只看该作者
用DMA可行吗?
我试了用DMA好像更慢哦!  我不太了解DMA方式的思想.

用缓冲的方法行吗?
例如加缓冲,但如果读的快发的慢,那不是缓冲也会溢出?

使用特权

评论回复
14
forrest11| | 2015-1-13 09:48 | 只看该作者
本帖最后由 forrest11 于 2015-1-13 09:49 编辑

1. 串口所用时间算错了。没有计算起始,停止位开销。 实际应该是1.3ms。
2. 理论SPI接口0.1ms可以传输完全部10 bytes,但必须保证10bytes的传输背靠背,中间间隔<1us.实际传输时间要去测量。
3. 如果SPI和串口都用中断方法话,就一定要保证时序:SPI数据每隔3mm发送过来。这样的话,要规划好每个接口的时间。如SPI接口分配时间0.3ms, 其它单片机处理时间1.2ms,串口处理时间1.3ms。
4. 用示波器观察实际各阶段完成所需时间。如有误差,需找到原因并编程调整。

使用特权

评论回复
评分
参与人数 1威望 +2 收起 理由
dirtwillfly + 2 很给力!
15
forrest11| | 2015-1-13 09:54 | 只看该作者
楼主来个波形图能说明一切问题。

使用特权

评论回复
16
dirtwillfly| | 2015-1-15 20:08 | 只看该作者
forrest11 发表于 2015-1-13 09:48
1. 串口所用时间算错了。没有计算起始,停止位开销。 实际应该是1.3ms。
2. 理论SPI接口0.1ms可以传输完全 ...

分析得很仔细

使用特权

评论回复
17
cowboy2014| | 2015-4-30 13:53 | 只看该作者
楼主的分析能力很强

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

290

主题

844

帖子

3

粉丝