科威PLC芯片组开发实例(六)
上讲驱动语句解释:在上面一讲,笔者给出了一段基本用户驱动语句段的代码,下面是详细解释它们的时候了。
1. 第1~4句:是将3个头文件和1个库文件添加到你的驱动工程项目中,这个就不在解释了。
2. 第5~24句:是将F040的中断跳转重定义,查阅F040的说明书我们可以看到,0X0003H是外部中断0的代码起始地址,在内核中,将外部中断0的起始代码重新定义到0E003H开始了。这里就产生了3个问题:
① 为什么要将中断的起始代码地址重定义?
答:这个是为了方便代码管理,前面笔者曾经提到过,驱动下载到内核里,是存放在一
块相应的地址空间由内核调用的。这个地址你现在可以看到,是从0XE000H开始的,由于用户中断也属用户驱动的一部分,所以,它的这部分代码也必须保存到0XE000H以后的一个地址段内,而默认的中断起始代码从哪里开始呢?以外部中断0为例,你可以从说明书上看到,它的起始地址是0X0003H,这样用户驱动流程代码和用户驱动中断代码就被分成了2个地址段,给内核的管理造成了麻烦。所以我们必须要进行中断代码地址重定义的工作。
② 如何实现中断的起始代码地址重定义?
答:还是以外部中断0为例,内核在这里直接用了一个“LJMP 0XE003H”即完成了地址重定义的工作,是不是很简单?
③ 科威PLC芯片组还有其他的中断重定义了吗?我可以用它们吗?
答:我们只能够用到上面代码给出的这些中断,还有的中断比如T0,T1等中断已被内核占用,我们编写用户驱动就无缘使用它们啦!
3. 第18句:用户I/O口配置程序:根据设计的输入输出功能配置相应的端口(推挽或者漏级),用户不可配置的I/O口资源为P4.4、P4.5、P4.6、P4.7、P5、P6、P7及UART0。理由还是那句话:内核已占用…此段程序会在内核重新上电后调用一次。
4. 第19句:用户上电初始化程序:用户嵌入程序中用到的输入输出变量,中间变量,指针变量,位变量等在重新上电后必需进行初始化处理,此段程序在内核重新上电后调用一次。
5. 第20句:用户设置初始化程序:内核重新上电后进入梯型图下载状态或内核从梯型图运型状态进入梯型图下载状态时调用此程序一次。
6. 第21句:用户运行初始化程序:内核重新上电后第一次运行梯型图或内核从下载梯型图状态进入梯型图运行状态时调用此程序一次。这个子程序大家可以看到,与上面一个的流程是相反的。
7. 第22句:用户演算周期扫描程序:所有梯形图执行完后,即调用该程序,调用周期为梯型图演算周期,一般的数据处理、开关量输入/输出的刷新及代码执行时间较长的程序均放在此程序中执行。
8. 第23句:用户每步执行程序:梯形图每执行一步,即调用此程序一次。需要快速执行的事件可在此程序或用户中断程序中完成,内核周期性地调用此程序,周期小于50US。
50US有多少个指令周期呢?我们可以算算:设1个指令周期的执行时间为t,系统时钟频率为f,那么1S=1000000US, f = 24.5MHZ,那么t = 1000000/24500000 = 0.04US,也就是说50US可以执行的指令周期数为50/0.04 = 1250个。这里有两点需要说明一下,一条语句所占的指令周期并不一定只有一个,比如NOP指令所占的指令周期为1,但是CJNE指令就不止1个了,具体占了几个笔者不记得了~,这个可以在说明书里面查到。另外一点是假设你编写的总代码折合成指令周期数是2000个,那是不是就不能满足要求了呢?答案是不一定,只要你最长的一次执行过程所花费的指令周期数不超过1250个就行了,因为往往在程序里会有条件跳转的代码。举个例子吧,假设你的STEP里面有2个条件执行过程A和B,A条件的执行过程一共有1100个指令周期,B条件有900个。虽然A+B一共有2000个超过了1250个,但是因为是条件跳转,程序是不可能同时执行A和B的。所以算起来你的程序最长的指令周期数是1100个而不是2000个!哎呀,估计越讲越难让人理解了…打住,往下走吧,毕竟,计算每条语句所占用的系统时间并将其代码优化都是些达人们,我们还是先看简单的。
9. 第24句:用户2.5mS定时运行程序:需要定时采样的流程可放在此程序中完成,但该段程序代码执行时间必须小于50 US。数据处理程序不宜放在此段程序中执行。注意这里是内核给提供的软中断,如果你的驱动里面没有什么高级的中断并频繁发生,那么它就是2.5ms调用一次,很准!同时你得注意,它的返回语句不是“RETI”而是“RET”,为什么?因为它是“软”的嘛,是内核给定义的,又不是F040的规范中断,呵呵!
10. 第25句:用户驱动程序编程起始位置,从这里往下就是你自由发挥的空间了哦~
11. 第26句:别忘了给你的驱动程序加个完美的“句号”。
看到这里,你应该对科威PLC芯片组的开发有了一定的了解了吧。?完全没了解??看来笔者的水平差了点,就请将就多看几遍吧…-_-!不是有一句话就作“书读百遍,其意自现”的么。有问题或不懂的给回下贴嘛,笔者看到了一定给你解答^-^~!
在下一讲里面,就要开始实战了,笔者将基于科威公司出产的EASY-M0806R这款PLC重新编写IO驱动程序,手头上有这款PLC的朋友也可以跟着做哦~!
本帖首发中国工控网科威PLC论坛,转载请声明!