基于CAN總線(xiàn)的溫室測(cè)控系統(tǒng)的研究與設(shè)
3 軟件設(shè)計(jì)
本系統(tǒng)的軟件程序設(shè)計(jì)是在Freescale公司的集成開(kāi)發(fā)環(huán)境——Freescale Codewarrior 5.1下完成的。該系統(tǒng)的軟件由CAN控制器軟件和應(yīng)用層通信協(xié)議構(gòu)成。
3.1 CAN總線(xiàn)驅(qū)動(dòng)層軟件實(shí)現(xiàn)
CAN控制器軟件主要包括器件初始化、數(shù)據(jù)發(fā)送和接收。初始化工作主要是對(duì)QG8微處理器、SPI接口和MCP2515CAN控制器的初始化。其中微處理器初始化主要包括定時(shí)器、變量和外部中斷的初始化。需要特別注意的是飛思卡爾單片機(jī)的定時(shí)器與其他單片機(jī)(如51系列單片機(jī))不太一樣,QG8微處理器的定時(shí)器是不能預(yù)置某個(gè)數(shù)值的,而且是只讀的,因此必須要有輔助寄存器才能實(shí)現(xiàn)該定時(shí)器的功能,本文采用的是QG8微處理器的16位的定時(shí)器模塊TPM:SPI接口的初始化主要包括對(duì)控制寄存器SPIC1和SPIC2、波特率寄存器SPIBR、狀態(tài)寄存器SPIS、數(shù)據(jù)寄存器SPID的設(shè)置。MCP2515的初始化為復(fù)位MCP2515、寄存器配置。只有對(duì)MCP2515初始化后,進(jìn)入了配置模式才能對(duì)相關(guān)的寄存器進(jìn)行初始化,初始化工作完成后進(jìn)入工作模式,進(jìn)行報(bào)文發(fā)送。為了能使節(jié)點(diǎn)穩(wěn)定的通信,CAN總線(xiàn)上所有的節(jié)點(diǎn)都必須有相同的波特率。對(duì)于振蕩器時(shí)鐘頻率不同的器件,可以通過(guò)對(duì)波特率預(yù)分頻比和每一個(gè)時(shí)間段中時(shí)間份額數(shù)量的設(shè)置來(lái)調(diào)整比特率。
QG8是通過(guò)使用標(biāo)準(zhǔn)SPI讀/寫(xiě)命令對(duì)寄存器進(jìn)行讀/寫(xiě)操作。外部數(shù)據(jù)和命令式通過(guò)SI引腳在SCK時(shí)鐘信號(hào)上升沿傳送到器件中。MCP25 15在SCK下降沿通過(guò)SO引腳發(fā)送數(shù)據(jù)。本文采用狀態(tài)查詢(xún)方式發(fā)送報(bào)文。首先應(yīng)該禁止CAN發(fā)送中斷產(chǎn)生,以保證報(bào)文發(fā)送不被中斷。為了啟動(dòng)報(bào)文發(fā)送,必須將相應(yīng)緩沖器的TxBnCTRL TxREQ位置1,文中是通過(guò)調(diào)用RTS2515()請(qǐng)求發(fā)送來(lái)實(shí)現(xiàn)的。緩沖器中TxBnCTRL TxP1:0>優(yōu)先級(jí)最高的報(bào)文在總線(xiàn)空閑時(shí)首先被發(fā)送。如果發(fā)送成功將產(chǎn)生中斷來(lái)通知接收,否則TxBnC TRL TxRR和CANINIF.MERRF將被置位,產(chǎn)生發(fā)送錯(cuò)誤狀態(tài),同時(shí)INT引腳置位,產(chǎn)生中斷請(qǐng)求。具體報(bào)文發(fā)送流程如圖4所示。
評(píng)論