3. 软件设计
在32位机系统中,由于软件较复杂,基于操作系统的软件开发占有重要地位。操作系统的作用是负责整个系统的任务调度、存储分配、时钟管理和中断管理,并提供文件管理等基本服务,S1C33 32位芯片使用EPSON公司的ROS33操作系统,其核心为广泛应用于各种嵌入式系统的iTron 3.0 OS Kernel,ROS33 Kernel具有:支持µITRON 3.0标准、内核优化并紧凑(最小可为1.7k)、响应快(CPU主频为33MHz时,最快调度响应时间为7.8 µs)、支持基于ANSI 标准的C语言等特点。本设计的主应用程序框架如下:
#include “ros33.h”
void main()
{
sys_ini(); //用于初始化ROS33所用的参数和资源
vcre_tsk(task ID, task startup address, priority, initial address of stack); //定义被执行的任务
…
sta_tsk(task ID, task startup code); //激活执行
…
sys_sta();
}
该系统通信协议采用“ID+命令+数据+校验”的形式,其中,ID为网络设备标识符,采用ID.18~ID.20。标识符ID.21~ID.28作为固定命令,不参与验收滤波。数据表示通信的具体内容,校验采用校验和的形式,为1个字节。由于CAN总线本身有15位CRC校验,并且本系统节点数较少,竞争不会十分激烈,所以通信可靠性较高。
软件设计思路如下:系统上电后,S1C33209先对自身和SJA1000初始化,以确定工作主频、波特率及输出特性等,然后接收来自上位机的控制命令,同时将获取的采用数据通过SJA1000传送到CAN总线上或备份到Flash存储器中。其中对SJA1000初始化是设计的重点,必须对写入每个寄存器的内容进行仔细和全面考虑,否则系统将无法正常工作。设上位机SJA1000适配卡的ACR为xx20,AMR为FF00,下位机测控中心SJA1000的ACR为xx40,AMR为FF00。下面是初始化程序:
Void CAN_Init(viod)
{ CANMODE=ox09; //进入复位模式,单项验收滤波,对SJA1000初始化
CANCDR=0x88; //选择PeilCAN模式
CANIER=0x1A; //开放接收中断、超载中断和错误中断
CANAMR0=0xFF; //接收屏蔽寄存器内容在单片机RAM中的值
CANACR1=0x40;
CANBTR0=0x03; //总线定时寄存器
CANBTR1=0xFF;
CANOCR=0xAA; //输出控制寄存器
CANMODE=0x08; //返回工作状态
由于测控系统对通信实时性要求较高,一旦接收到来自上位机的控制命令必须及时响应,为此CAN总线上接收信息采用中断方式,即SJA1000无错地接收到信息后使INT变为低电平,下降沿触发S1C33209外部中断0,使其进入中断服务程序,其流程如图2所示。
图2 接收流程图