井下仪器总线转换功能模块设计
无需占用FPGA的内部逻辑资源,而是由器件内部提供的可配置存储器实现。引出FIFO的半满指示信号送往DSP的硬件中断管脚,并通过地址译码电路,将FIFO映射到DSP的外部I/0读地址。当FIFO中的数据达到容量的一半时,对DSP产生硬件中断,使DSP进入硬件中断程序,DSP可循环读取FIFO的I/o映射地址,即可将FIFO中的数据全部读出。
需要注意的是,所有的FPGA产生或输入的信号均需经过电平变换后,才能送往DTB总线。存储器接口单元利用DSP提供的总线信号,实现FPGA与DSP之间并行的双向数据传输。其基本方法是利用地址译码电路,将FPGA中实现的命令寄存器、状态寄存器和FIFO等具有数据存储功能的部件映射到DSP的外部I/O地址上,DSP通过读写I/O地址,可以对FPGA中存储的数据进行访问。
3 DSP程序设计
系统为CAN/DTB转换模块分配了1个CAN总线ID,该模块中DSP程序所执行的功能类似于1个430 kbit/s传输速率的井下仪器。DSP程序包括系统的初始化、FPGA内部数据的读取、CAN接口数据收发等主要功能。与普通井下仪器的差别在于FPGA通过FIFO传送的数据不是该模块自身采集的,而是由DTB总线上挂接的100 kbit/s传输速率的仪器所采集的。
3.1系统初始化
初始化单元完成DSP初始化、CAN控制器初始化、以及清空FIFO中数据等工作。DSP初始化主要设置相关寄存器来配置系统时钟的频率、启动看门狗、打开相关中断等工作。CAN控制器初始化包括设置CAN通信的波特率以及同步跳转宽度、采样次数和重同步方式;设置邮箱工作方式,启动邮箱工作并设置邮箱的ID;此外,还要设置CAN控制器的中断。清空FIFO中的数据,以防止丢失FIFO的半满中断信号。
3.2 FPGA中断服务程序
当FPGA内部的FIFO存储的数据容量超过一半时,向DSP的硬件管脚产生硬件中断,DSP进入FPGA的中断服务程序。
FPGA中断服务程序用于从FPGA的FIFO中读取数据,其流程见图4。设置1个变量N,等于FIFO存储容量的一半,DSP循环读取FIFO中的数据,每读一次将N减1,直到N等于0时,中断服务程序结束。读取的数据存放在数据存储区中,由CAN接口按照一定的帧格式和流程要求发送给USB/CAN转换模块。
图4 FPGA中断服务程序
3.3 CAM控制器接收中断服务程序
无论CAN接收到数据,还是发送数据成功,均进入CAN中断服务程序,程序流程见图5。在中断服务程序中,首先通过状态寄存器,判断是发送中断还是接收中断。如果是发送中断,表明上一次的发送成功,相应地设置发送成功标志。如果是接收中断,则需进一步判断接收到的是远程帧还是数据帧。如果是数据帧,表明接收的是仪器的控制命令,DSP需要将收到的命令发送到FPGA内的命令寄存器,再由FPGA将命令通过DSIG信号发往井下仪器。如果是远程帧,表示主控节点请求该节点发送1帧数据,则在程序中,将全局变量nSendNum赋值为要发送的1帧数据的长度,nSendNum的值取决于当前所挂接的仪器种类和仪器数量,由计算机软件进行配置。
图5 CAN中断服务程序
3.4系统主程序
主程序主要是依据全局变量nSendNum、缓冲区数据长度和发送成功标志等状态信息,决定数据发送的一个循环流程(见图6)。在初始化完成后
图6 CAN接收服务程序
主程序处于等待状态,判断nSendNum是否为0。如果不为0,则表示已经接收到主控节点请求发送数据的远程帧,因此进人数据发送流程。接着判断发送缓冲区中的数据是否有一完整帧的长度(仪器不同,帧长也不同),如果不足则停止发送,否则就将缓冲区的数据填入CAN的发送邮箱,启动发送流程,并将要发送的数据nSendNum减去8(CAN每次能够发送8 Byte的数据)。循环进行CAN的发送程序,直到nSendNum等于0,表示一帧数据发送结束,主程序重新回到等待状态。
4 结束语
经过实验和应用的验证,所设计的综合测试设备与相应的计算机测试程序配合,可同时用于DTB和CAN这2套通讯协议方式的测井系统的测试、维修和生产,已开始在各仪器使用单位推广。
总线转换数据传输总线可编程门阵 相关文章:
- Windows CE 进程、线程和内存管理(11-09)
- RedHatLinux新手入门教程(5)(11-12)
- uClinux介绍(11-09)
- openwebmailV1.60安装教学(11-12)
- Linux嵌入式系统开发平台选型探讨(11-09)
- Windows CE 进程、线程和内存管理(二)(11-09)