采用原理图输入和硬件描述语言相结合的方式,进行编译后写人器件中;同时可在线更改写入内容,修改和调试简单易行。FPGA的设计主要由两部分组成:第一部分实现时序逻辑控制信号的转换,第二部分实现地址译码和地址数据线的复用。QuartusⅡ图表文件及器件管脚如图3所示。
由于PC/104的地址总线和数据总线是各自独立的,SJA1000T的地址总线和数据总线是分时复用的,所以它们之间不能直接相连,必须通过时序逻辑控制,再配合软件来实现读/写操作。对SJA1000T的操作方法是:首先,对地址为CAN首地址+0(A2A1A0=000)的端口进行写操作(WR为低,有效),CANALE为高,有效,此时复用的地址、数据总线上的数据被视为地址信号,进入SJA1000T内部锁存器;然后,对地址为cAN首地址+1(A2A1A0=001)的端口进行读或写操作(RD/WR为低,有效),CANALE为低,上述中的地址信号已被锁存,此时复用的地址、数据总线上的数据被视为数据信号,这样即可完成对SJA1000T的各个寄存器和缓冲区的读或写操作。
1.3 硬件电路测试
主要检测硬件结构及电路板设计是否正确。建立一个简单的通讯连接,将两个通讯板连接进行测试,用通讯板A作为输出,通讯板B作为输入。编程通过通讯板A发送数据,内容为8个随机数,检测通讯板B接收数据,如果不同则作加1计数。反之将通讯板B作为输出,通讯板A作为输入,进行相同测试。测试200万次循环未见异常。
2 软件设计
2.1 软件流程图
在该通讯板的设计中,控制部分的核心采用了PC/104嵌入式计算机系统。由于PC/104嵌入式计算机系统几乎具有和一般的PC机一样的强大功能,所以该通讯板的开发是在和系统模块栈接在一起后,直接在嵌入式计算机上进行的。这些工作都是采用C语言进行编程设计的。采用C语言的优点在于其快速性、高效性。在利用嵌入式计算机强大资源的条件下,C语言能满足模块的实时性要求。在系统软件的设计中,采用了结构化、模块化的设计方法,满足了仪器功能的要求。本接口系统的软件任务基本为在CAN协议芯片SJA1000T有中断发生时,根据SJA1000T的中断寄存器的内容完成相应的操作(如发送、接收数据帧等)。其流程图如图4所示。
系统设计中要进行接口驱动程序的设计,为保证操作系统的稳定和安全,驱动程序必须按一定的规范来编写。本系统的驱动程序主要考虑以下内容:设置端口和中断号,设置通讯板通讯默认参数,通讯板内存分配,映射I/O地址,创建通讯板事件和数据接收事件,初始化中断等。
SJA1000T初始化只有在复位模式下才能进行,初始化主要包括:工作方式的设置、接收滤波方式的设置、接收屏蔽寄存器和接收代码寄存器的设置、波特率设置和中断允许寄存器的设置等。SJA1000T在完成初始化后就可以回到工作状态进行正常的通讯任务了。