关 闭

新闻中心

EEPW首页 > 工控自动化 > 设计应用 > 基于以太网和CAN总线的楼宇自动化系统设计

基于以太网和CAN总线的楼宇自动化系统设计

作者:时间:2012-11-21来源:网络收藏

3 软件架构
软件由主控机人机接口界面、上位机软件、设备节点软件组成。上位机软件包括嵌入式TCP/IP协议簇、收发软件包、CAN收发软件包等,设备节点软件包括CAN模块、数据采集分析模块等组成。
3.1 移植μC/OS-Ⅱ实时操作系统的方法
上位机既要和主控机通信,又要负责管理下属的设备节点,负载较大。移植μC/OSⅡ操作系统可以使上位机具有多任务运行的功能。 μC/OS-Ⅱ是一个完整的,可移植、固化、裁剪的占先式实时多任务内核。它包含了任务调度、任务管理、时间管理、内存管理和任务间的通信和同步等基本功能。μC/OS-Ⅱ采用的是可剥夺型实时多任务内核,可剥夺型的实时内核在任何时候都运行就绪了的最高优先级的任务。
在ARM下移植μC/OS-Ⅱ操作系统主要是修改μC/OS-Ⅱ中一部分与CPU相关的汇编代码,这里主要是任务上下文的切换代码。
任务切换发生在任务调度的时候,μC/OS-Ⅱ下任务调度的时机主要有以下几种情况:1)高优先级的任务因为需要某种临界资源,主动请求挂起,让出处理器,此时将调度就绪状态的最高优先级任务并执行。2)高优先级的任务因为时钟节拍到来,在时钟中断的处理程序中,内核发现更高优先级的任务就绪,获得了执行条件,则在中断后直接切换到更高优先级任务执行。
任务切换就是保存前一个任务的基本信息,同时读取新任务在上一次被切换时保存的这些信息。调度器将前一任务的上述信息保存在该任务的栈空间中,其目的是为了下次运行时能够恢复到被切换时的状态,调度器将从该任务的栈空间中读取上述信息,从而从该任务上次被中断的位置继续执行,其基本过程如下:
1)将当前任务的PC位置、通用寄存器数据、CPU状态入栈。
2)将全局变量OSPrioCur(当前任务优先级变量)的值修改为全局变量OSPrioHighRdy(最高优先级任务优先级)的值,即把最高就绪任务优先级设置为新的当前任务优先级。
3)将原任务TCB的第一个成员(指向栈顶的指针*OSTCB-StkPtr)的值修改为当前SP寄存器的值,以便再次返回。
4)获取最高优先级的任务控制块中第一个成员(指向堆栈栈顶指针*OSTCBStkPtr)的值并将其保存到SP寄存器中。
5)将OSTCBCur的值修改为新就绪最高优先级任务的任务控制块地址。
6)将新任务的PC地址、通用寄存器数据、CPU状态出栈,开始执行新的任务。
因为任务切换是将当前任务的基本信息保存起来(入任务栈),并加载新任务的基本信息(出栈),而这些信息很大一部分都被存储在CPU的寄存器中,因此根据处理器的不同,此函数在实现上略有差异,一般都采用汇编语言实现。
3.2 编写设备驱动程序
设备驱动程序主要包括和CAN软件包,驱动主要是初始化LPC2478内部以太网模块的一些重要的寄存器如MAC配置寄存器、MAC地址寄存器、命令寄存器、状态寄存器、中断状态寄存器等等。以太网模块内部采用DMA方式读取数据,分别使用接收、发送描述符数组来表示接收和发送的数据块。以太网模块发送和接受数据的流程如图2所示。

本文引用地址:http://www.eepw.com.cn/article/159681.htm

c.JPG


CAN的初始化包括初始化时钟分频寄存器,同时选择能支持扩展帧的PeliCAN模式,设置接收中断,采用中断来接收数据,设置总线时序寄存器、输出控制寄存器等。初始化CAN流程图如图3所示。

d.JPG



评论


相关推荐

技术专区

关闭