基于MCF52235 的RFID 通用開(kāi)發(fā)平臺(tái)設(shè)計(jì)
MCF52235與LCD構(gòu)件的通信同樣采用串行方式。串行通信的一次數(shù)據(jù)分3個(gè)字節(jié)傳輸。第一個(gè)字節(jié)數(shù)據(jù)格式為11111AB0,表示串行控制,A是選擇數(shù)據(jù)方向,1表示LCD到MCF52235,0表示MCF52235到LCD. B是選擇數(shù)據(jù)類型,1表示數(shù)據(jù)為顯示數(shù)據(jù),0表示數(shù)據(jù)為控制命令。第二個(gè)字節(jié)格式為DDDD0000,表示8位數(shù)據(jù)的高4位。第三個(gè)字節(jié)格式為0000DDDD表示8位數(shù)據(jù)的低4位。
本文引用地址:http://www.ex-cimer.com/article/266844.htmLCD 構(gòu)件接口函數(shù)說(shuō)明如下所示:
//==================================
void lcd_init();//初始化
void lcd_display (const char* buf, int line);//在第line 行顯示buf,line>=0 && line<= 3
//==================================
USB 軟件構(gòu)件比較簡(jiǎn)單,只需對(duì)MC9S12UF32的USB 模塊進(jìn)行初始化,UF32 便可以和MCF52235 進(jìn)行交互了。 由于MCF52235 與UF32采用串口連接, 因此只要在串口中斷程序中調(diào)用USB 構(gòu)件,UF32 便可從串口接收數(shù)據(jù), 然后通過(guò)USB 傳送給上位機(jī)。 上位機(jī)通過(guò)USB 接口發(fā)送數(shù)據(jù)給UF32 也產(chǎn)生一個(gè)中斷,在中斷程序把數(shù)據(jù)緩存起來(lái)再調(diào)用USB 構(gòu)件, 通過(guò)串口發(fā)送給MCF52235. USB 構(gòu)件接口函數(shù)說(shuō)明如下所示:
//==================================
void uf32_uart_init(void);//uf32 模塊初始化
void uf32_uart_send(uint8 ch[],uint32 n); //發(fā)送數(shù)據(jù)
uint32 uf32_uart_rev (uint8 ch [],uint32 n); //接收數(shù)據(jù)
//==================================
語(yǔ)音構(gòu)件相對(duì)比較簡(jiǎn)單,接口函數(shù)說(shuō)明如下所示:
//==================================
void audio_init();//語(yǔ)音模塊初始化
void audio_play(int i);//語(yǔ)音播放
void audio_stop();//語(yǔ)音停止
//==================================
串口構(gòu)件接口函數(shù)說(shuō)明如下所示:
//==================================
uint8 hw_uart_init(uint8 uartNo, uint32 baud);//串口初始化
uint8 hw_uart_rev_one (uint8 uartNo, uint8 *fp); //串口接收一個(gè)字節(jié)到fp
uint8 hw_uart_send_one(uint8 uartNo, unit8 ch);
//串口發(fā)送一個(gè)字節(jié)
//==================================
SPI 構(gòu)件接口函數(shù)說(shuō)明如下所示:
//==================================
uint8 hw_spi_init (uint8 spiNo,uint8 master);//SPI 初始化
uint8 hw_spi_send (uint8 spiNo,uint8 data [],uint8 len);//SPI 發(fā)送數(shù)據(jù)
uint8 hw_spi_re(uint8 spiNo,uint8 data[]); //SPI接收數(shù)據(jù)
uint8 hw_spi_enable_re_int (uint8 spiNo); //開(kāi)SPI 接收中斷
uint8 hw_spi_disable_re_int (uint8 spiNo); //關(guān)SPI 接收中斷
//==================================
GPIO 構(gòu)件接口函數(shù)說(shuō)明如下所示:
//==================================
uint8 hw_gpio_init (uint8 port,uint8 pin,uint8dir,uint8 state);//初始化端口為GPIO 引腳
uint8 hw_gpio_set (uint8 port,uint8 pin, uint8state); //設(shè)置指定引腳狀態(tài)
uint8 hw_gpio_get(uint8 port,uint8 pin);//獲取指定引腳狀態(tài)
uint8 hw_gpio_reverse(uint8 port,uint8 pin);//反轉(zhuǎn)指定引腳狀態(tài)
//==================================
高層構(gòu)件包括三個(gè)部分:FreeRTOS 操作系統(tǒng)在MCF52235 上的移植[13-14],Shell 的實(shí)現(xiàn),網(wǎng)絡(luò)命令和信息的封裝。 將FreeRTOS 移植到MCF52235主要是實(shí)現(xiàn)3 個(gè)底層匯編級(jí)的支持函數(shù),tk_frame(task *tk, int (*entry)(), int arg)函數(shù)為tk 進(jìn)程創(chuàng)建堆棧幀保存進(jìn)程的各種狀態(tài);tk_switch (task *tk)函數(shù)用于把當(dāng)前進(jìn)程切換到tk 進(jìn)程;tk_getsp()函數(shù)返回當(dāng)前堆棧指針。 另外,在FreeRTOS 中運(yùn)行一個(gè)Shell 進(jìn)程,進(jìn)程函數(shù)為int keyboard (int param),可調(diào)試或查看系統(tǒng)狀態(tài)信息,比如各個(gè)進(jìn)程的運(yùn)行狀態(tài)、ARP 表、IP 地址、MAC 地址、連接狀態(tài)等。
Shell 實(shí)現(xiàn)的效果如圖5 所示。
在實(shí)際應(yīng)用中,通常一臺(tái)PC 主機(jī)管理若干讀卡器, 一個(gè)讀卡器可以為若干PC 主機(jī)服務(wù)。 每個(gè)PC 主機(jī)和讀卡器都具有不同的IP 地址, 一臺(tái)PC主機(jī)可以控制讀寫(xiě)器1 讀寫(xiě)每個(gè)Type A 卡的某個(gè)塊數(shù)據(jù), 還可以同時(shí)控制讀寫(xiě)器2 讀寫(xiě)每個(gè)TypeA 卡的另一個(gè)塊數(shù)據(jù), 或者請(qǐng)求讀取Type B 卡的UID, 整個(gè)網(wǎng)絡(luò)關(guān)系比較復(fù)雜。 因此采用將主機(jī)發(fā)送的命令、網(wǎng)絡(luò)信息、卡信息封裝在如下所示的若干個(gè)數(shù)據(jù)結(jié)構(gòu)中。
//==================================
struct invite_info //PC 主機(jī)發(fā)送的讀卡請(qǐng)求
{ char del_or_add; //主機(jī)離開(kāi)或加入
uint8 type; //卡的類型
uint8 block; //要訪問(wèn)的數(shù)據(jù)塊
uint8 password[6]; //塊的密碼
};
struct ip_arrays_B //讀Type B 卡信息
{ ip_addr ipaddress; //IP 地址
int port; //UDP 端口號(hào)
};
struct send_data_type //發(fā)送到主機(jī)的數(shù)據(jù)
{ uint8 sn[4]; //序列號(hào)
uint8 block; //塊號(hào)
uint8 data[16]; //16 個(gè)字節(jié)塊數(shù)據(jù)
uint8 ret; //返回值
};
struct IC_ope //用于消費(fèi)用途的RFID 應(yīng)用
{
uint8 block; //總的金額數(shù)
float fsub; //每次刷卡扣除的金額數(shù)量
uint8 *pass;
};
struct record_info //記錄卡信息
{ //此塊引用計(jì)數(shù),0 表示沒(méi)有請(qǐng)求讀這塊數(shù)據(jù)
uint8 ref; //引用計(jì)數(shù)
uint8 block; //塊號(hào)
uint8 password[6]; //塊的訪問(wèn)密碼
};
struct ip_arrays_A //讀Type A 卡信息
{ ip_addr ipaddress; //IP 地址
int port; // UDP 端口號(hào)
uint8 block [num_of_rf_structs]; //這個(gè)UDP連接要讀取的所有塊
};
struct net_cmd //發(fā)送到板子的命令
{ uint8 lenth; //請(qǐng)求數(shù)據(jù)長(zhǎng)度
uint8 cmdope; //操作碼
uint8 data[1]; //數(shù)據(jù)
};//=================================
3 RFID 通用開(kāi)發(fā)平臺(tái)應(yīng)用
基于此平臺(tái)文中開(kāi)發(fā)了學(xué)生機(jī)房上機(jī)刷卡系統(tǒng)。 在每個(gè)機(jī)房安裝一臺(tái)讀卡器,PC 主機(jī)的數(shù)據(jù)庫(kù)中存儲(chǔ)了每個(gè)機(jī)房的課表、任課教師和學(xué)生的信息。 學(xué)生持卡到各個(gè)機(jī)房的讀卡器上刷卡,讀卡器將讀到的信息通過(guò)網(wǎng)絡(luò)傳輸?shù)絇C 主機(jī)上,統(tǒng)計(jì)學(xué)生人數(shù)和上、下課時(shí)間等情況, 相關(guān)信息顯示在LCD 上并進(jìn)行語(yǔ)音提示。 PC 端軟件實(shí)現(xiàn)了網(wǎng)絡(luò)通信功能和學(xué)生機(jī)房上機(jī)刷卡管理系統(tǒng)。 網(wǎng)絡(luò)通信通過(guò)CManagerDlg:: m_skInfo 和CManagerDlg::
m_skCmd 這2 個(gè)sokcet 接口完成。 學(xué)生機(jī)房上機(jī)刷卡管理系統(tǒng)開(kāi)發(fā)軟件采用VC++2012 和SQLServer 2012 關(guān)系型數(shù)據(jù)庫(kù)管理系統(tǒng)。 學(xué)生機(jī)房上機(jī)刷卡管理系統(tǒng)界面如圖6 所示。
4 結(jié)語(yǔ)
現(xiàn)有RFID 系統(tǒng)開(kāi)發(fā)基本是根據(jù)具體應(yīng)用需求進(jìn)行單獨(dú)設(shè)計(jì)的。 而這些不同的應(yīng)用系統(tǒng)在軟、硬件部分具有很大的重復(fù)性,為提高軟、硬件的可重用性,文中通過(guò)分析RFID 射頻識(shí)別系統(tǒng)一般模型,提出了一種基于MCF52235 的RFID 通用開(kāi)發(fā)平臺(tái)軟、硬件構(gòu)件化設(shè)計(jì)方案,設(shè)計(jì)了集成多種接口的具備通用功能的RFID 開(kāi)發(fā)平臺(tái),并將該平臺(tái)應(yīng)用于學(xué)生機(jī)房上機(jī)管理系統(tǒng)中。 實(shí)踐證明它為RFID 系統(tǒng)開(kāi)發(fā)提供了一個(gè)快速、通用的軟、硬件模型。
pa相關(guān)文章:pa是什么
上拉電阻相關(guān)文章:上拉電阻原理 鎖相環(huán)相關(guān)文章:鎖相環(huán)原理
評(píng)論