基于MCF52235 的RFID 通用开发平台设计
2.2软件设计
根据平台的软件构件层次模型,先将各个模块的驱动程序封装成构件。底层软件构件是与硬件直接打交道的,它由头文件和源程序文件两部分组成。编程思想是分析构件的共性和个性,抽取出构件的属性和对外接口函,用户使用该构件时只需了解其接口函数,而不必去了解内部具体如何实现。
头文件部分给出构件属性的宏定义和对外接口函数的原型说明,源程序部分是函数的实现。
以太网构件主要包括以太网物理收发器(EPHY)和快速以太网控制器(FEC)的初始化、TCP/IP协议栈实现。它的接口函数原型说明如下:
//==================================
uint8 hw_ephy_init(uint16 sysclk,uint8 ratemode,
uint8 dupmode,uint8 autoneg);//EPHY初始化
void hw_fec_init(uint8 mac_addr_fec[6];//FEC初始化
int8 hw_fec_sendframe(uint8 ch[],uint8destAdd[6],uint8 srcAdd[6],uint16 lenType,uint16len);//发送单个以太网帧
uint8 hw_fec_receiveframe(uint8 ch[],uint16 *len);//接收单个以太网帧
uint hw_icmp_handle(PACKET p);//处理接收到的ICMP包,响应ping请求
int hw_udp_send(unshort fport,unshort lport,
PACKET p);//发送UDP包
//==================================
RC531射频模块与MCF52235通信严格按照串行通信时序要求。RC531与ISO/IEC 14443 TypeA和Type B卡通信,则按照A、B卡调制和编码的方式设置相关的寄存器,并根据ISO/IEC 14443协议来设计软件即可。读卡器与A、B卡之间的通信是按照应答方式来进行的,非接触式的卡有很多工作状态,各个状态的转化可通过读卡器向卡发送一系列命令完成。射频构件的接口函数说明如下所示:
// ==操作Type A卡的部分主要函数======
void pcdinit();//R初始化
char pcdreset();//RC531复位
char pcdrequest(uint8 req_code);//寻卡
char pcdanticoll(uint8 *snr);//防碰撞
char pcdselect(uint8 *snr);//选定一张卡
// =========操作Type B卡的函数========
void pcdinitB();//B卡初始化
char pcdrequestB(uint8 *pupi);//寻B卡
char pcdattrib(uint8 *pupi);//发送attrib命令
char pcdhaltB(uint8 *pupi);// B卡挂起
char pcdgetUID(uint8 *snr,uint8 *len);//获得B卡的ID
//==================================
MCF52235与LCD构件的通信同样采用串行方式。串行通信的一次数据分3个字节传输。第一个字节数据格式为11111AB0,表示串行控制,A是选择数据方向,1表示LCD到MCF52235,0表示MCF52235到LCD. B是选择数据类型,1表示数据为显示数据,0表示数据为控制命令。第二个字节格式为DDDD0000,表示8位数据的高4位。第三个字节格式为0000DDDD表示8位数据的低4位。
LCD 构件接口函数说明如下所示:
//==================================
void lcd_init();//初始化
void lcd_display (const char* buf, int line);//在第line 行显示buf,line>=0 && line<= 3
//==================================
USB 软件构件比较简单,只需对MC9S12UF32的USB 模块进行初始化,UF32 便可以和MCF52235 进行交互了。 由于MCF52235 与UF32采用串口连接, 因此只要在串口中断程序中调用USB 构件,UF32 便可从串口接收数据, 然后通过USB 传送给上位机。 上位机通过USB 接口发送数据给UF32 也产生一个中断,在中断程序把数据缓存起来再调用USB 构件, 通过串口发送给MCF52235. USB 构件接口函数说明如下所示:
//==================================
void uf32_uart_init(void);//uf32 模块初始化
void uf32_uart_send(uint8 ch[],uint32 n); //发送数据
uint32 uf32_uart_rev (uint8 ch [],uint32 n); //接收数据
//==================================
语音构件相对比较简单,接口函数说明如下所示:
//==================================
void audio_init();//语音模块初始化
void audio_play(int i);//语音播放
void audio_stop();//语音停止
//==================================
串口构件接口函数说明如下所示:
//==================================
uint8 hw_uart_init(uint8 uartNo, uint32 baud);//串口初始化
uint8 hw_uart_rev_one (uint8 uartNo, uint8 *fp); //串口接收一个字节到fp
uint8 hw_uart_send_one(uint8 uartNo, unit8 ch);
//串口发送一个字
- 可的冷链物流周转箱的RFID解决方案(09-11)
- RFID在生产线自动化的应用(12-22)
- IBM中国银行业RFID VIP识别解决方案(01-10)
- 基于RFID的高速公路监控系统的解决方案(12-07)
- 大众汽车厂游乐园的RFID应用(10-06)
- RFID识别技术的企业生产线管理解决方案(02-22)