原创 ModBus移植笔记

2009-5-6 14:22 4716 4 4 分类: 软件与OS
2009.04.30

月底了,自己花在ModBus上面的时间已经很多了。从刚开始的熟悉协议到阅读周立功的源码,加上期间自己考驾照一周,打篮球眼角缝了几针修养了一周,不知不觉一个月就这样飞快的过了,而ModBus的学习进度却像蜗牛爬一样。都没有什么进展。原先的计划是先把ZLG/ModBus移植到EASYARM2104上面,然后自己把整个上层协议写一下,却发现,自己去卡死在移植这上面。因为移植过程中总是会出现各种各样的莫名其妙的问题。有时候真的想,如果不涉及底层那该多好啊。至少我这个人物是早就可以完成的。经过N次的折磨开发板及被折磨之后,今天晚上终于移植成功了。

ZLG/ModBus提供了上层协议,涉及到底层的那些函数要自己写。比如,串口发送接收函数,定时器的初始化及其中断的设置。源程序里面带着一个不完整的基于Magic2410的实验代码。但是这个平台跟我现在在用的EASYARM2104还是有差别的。Magic2410的mcu是三星的S3C2410,ARM9,内部有四个定时器。而EASYARM2104的mcu是LPC2106,ARM7核,两个定时器。 这那个实验程序里面,就是充分利用了四个定时器来。其中一个用作uC/OS II的时钟节拍发生器,剩下三个分别实现T15,T35,T10mS。那我在移植的时候就呆了。LPC2106只有两个定时器,一个给uC/OS II 用了,剩下一个怎么能实现三个定时呢?
我这边试了几种方法:

1)把Timer1用来实现T15。 T35用UART0的CTI中断来实现。T10mS就直接用uC/OS II的延时函数来实现。

用这种办法,把Slave程序烧写到板上。然后主机上上面打开ModBus调试精灵,想从站发命令。发现,该命令可以接收到。即在ADU的缓冲区里面看到发过去的命令,但是ADU没有进一步处理,没有成功提取出PDU。而这部分的工作室由CTI中断实现的。也就是说,发生CTI中断。但是我之前的设置都没有问题啊!!查看了LPC2106的manual guide,才知道问题出在哪里。

我在初始化UART0的时候,把激活接收中断的触发点设置为一个字节。这样,一点U0RBR寄存器里面有数据,就发生中断,该终端会调用ReceivOneChar函数接收一个字节。如果命令有八个字节的话,就会发生八次这样的中断。而CTI中断的触发条件是:当UART0 Rx FIFO包含至少一个字节,并且在接受3.5至4.5个字节的时间内没有发生任何的UART0 Rx FIFO动作时触发的。也就很明显了。一旦FIFO里面有一个字节,都会发生RDA中断,数据就会被取走。故前面那个条件无法满足。也就无法激活CTI超时中断。

2)用Timer1实现T15,T35则利用字节数做为出发的条件。
3)用Timer1实现T35,T15则不实现,UART0发动的时候,连续发送就好了。而此时T35触发的中断,完成ADU的检测,及ADU2PDU的处理。
to be continue...


文章评论0条评论)

登录后参与讨论
相关推荐阅读
chengzi31 2009-06-22 21:18
汉字点阵字库的原理与显示
一、什么是点阵?我们先看两个字的点阵图:A字母的点阵是这样的:8×16汉字“你”的点阵是这样的:16×16以上的两个文字的字模信息,应该让我们很清楚的明白了文字的显示原理。但是又是如何获取这些字模信息...
chengzi31 2009-06-10 00:07
openSUSE LiveCD 11.1 的硬盘安装
前阵子无意间接触了openSUSE linux感觉这个发行版还是蛮清爽的。有点想试试的冲动,下了个liveCD11.1,刻了盘,要安装的时候,结果发现我的CDROM弹不出来。最后没辙了,只好改硬盘的安...
chengzi31 2009-06-07 15:20
中点画线算法-原理及实现
计算机图形学-中点画线算法 在编写的FDGK/GUI决定采用中点画线算法绘制直线。故先研究了一下算法。中点画线算法的原则是:如下图所示,但斜率K<1时,选定一个点之后,再计算中点M。如果M>...
chengzi31 2009-06-02 17:12
UML学习笔记
20090526 UML概述UML:unified modeling language。统一建模语言模型就是对现实的简化。认识误区:UML是一种方法论:UML是一种语言UML是一堆图形:图形只是建模的...
chengzi31 2009-05-22 15:58
LCD drive 学习笔记
see also: http://docs.google.com/View?id=dhd5grmt_366g7bns5c2LCD原理及驱动最近有在用SmartARM2200的开发板,上面有带一块tft...
chengzi31 2009-05-19 10:18
FreeRTOS移植笔记
本次移植的目标板是:easyARM2104. 用ADS1.2作为调试平台。移植前,看了一下官方的一些参考治疗,我摘抄了一些:1、configuration the Time tick interrup...
广告
我要评论
0
4
1
2
3
4
5
6
7
8
9
0
广告
关闭 热点推荐上一条 /5 下一条