按照Cycle模式,其处理多通道数据的代码如下(以地址为0x10的那片ADS8364为例):
PBDATDIR &= 0XFFFB; // 给IOPB2一个低电平脉冲,复位ADS8364
asm (' NOP');
PBDATDIR |= 0X0004;
PBDATDIR &= 0XFFFD; // 给IOPB1一个低电平脉冲,触发ADS8364采样
asm ('NOP');
PBDATDIR |= 0X0002;
Delay_2ms(); // 延时一段时间,等待采样结束
/* 来自ADS8364的6个测量值:6个通道 */
Channel1 = port10;
Channel2 = port10;
Channel3 = port10;
Channel4 = port10;
Channel5 = port10;
Channel6 = port10;
3.2 基于CAN总线的通讯模块
测距数据采集板发送测距数据以中断的方式完成。TMS320LF2407有专门的mailbox中断,用于响应发送/接收中断。每个接触式传感器的测距值在DSP内用2个字节存储,而CAN总线传输标准要求每个数据帧最多只能传输8个字节的数据。本系统有12个传感器,共有24个字节存储所有测距值。CAN总线传输所有测距值需要3个数据帧才能传送完。该系统中将通讯模块分成发送和接收模块两个部分。在设计中将发送和接收封装成结构体,大大简化了通讯驱动模块的设计,并可将此通讯结构应用在任何CAN通讯方面,具有很强的通用性。
发送模块:
typedef struct Transmit
{
BOOLEAN ExtendFlag; // 扩展帧标志
BOOLEAN RemoteFlag; // 远程帧标志
LONG ID; // 本机地址
BYTE DataLen; // 发送数据长度
BYTE Data[8]; // 待发数据缓冲区
}TRANSMIT;
接收模块:
typedef struct Receive
{
BYTE DataLen;
BYTE Data[8];
}RECEIVE;
编写驱动函数不仅能省去对寄存器的繁琐设置,使数据帧的发送和接收更方便,而且可使代码具有很强的可移植性,调用驱动函数的代码完全可以在不同的系统中移植,只要改写驱动函数部分即可。
本文介绍的显示器边框检测系统采用接触式测距的方式,并用TMS320LF2407作为核心处理器,可以达到很高的测量精度。通过CAN总线通讯,可以将测量数据可靠地发给PC机,并实现大规模检测。此系统已经在实际生产中得到应用,验证了硬件系统的可靠性和稳定性。