基于S3C44B0和μCOS-II的CAN節(jié)點的設計
引言
在系統越來越復雜,功能越來越強大的今天,嵌入式系統的設計中采用實時多任務操作系統已經成為嵌入式應用設計的主流。μCOS-II是一個開源嵌入式實時操作系統(Real Time Operating System, RTOS),它已經被成功移植到各種CPU上。但是基于μCOS-II的應用軟件需要在移植操作系統后自行完成。模塊化的應用程序設計可以使得嵌入式設計變得更加方便,產品的開發(fā)更加迅速。S3C44B0是三星公司生產的一種ARM7芯片,性能強大,在通用嵌入式設計中運用廣泛。CAN總線(Control Area Network)是一種有效支持分布式控制和實時控制的現場總線,由于其高性能和高可靠性,CAN總線的應用范圍廣布過程工業(yè)、機器人和機械工業(yè)等領域。論文將μCOS-II移植到S3C44B0上,設計開發(fā)了基于μCOS-II的CAN通訊模塊,與傳統的前后臺形式的系統相比較,CAN總線在μCOS- II下運行,實時性更容易得到保證,更容易進行功能擴展。
1 S3C44BO簡介
S3C44B0是三星公司設計的16/32位RISC處理器,為手持設備等提供一個低成本高性能的方案。S3C44B0提供2.5V ARM7TDMI內核,最高時鐘頻率66MHz,總線尋址空間達到256M,采用中斷矢量表來減少中斷延遲,提供30個中斷源,支持C語言編程和多任務處理,具有豐富的片內資源:LCD控制器、2路UART、2路DMA、外部存儲器控制器、5路帶PWM輸出的定時器、看門狗、RTC、8路10bit ADC、IIC接口、IIS接口、SIO等等。
2 SJA1000和82C250簡介
SJA1000是一種獨立CAN控制器,它是PHILIPS公司的PCA82C200 CAN控制器的替代產品。SJA1000具有BasicCAN和PeliCAN兩種工作方式,PeliCAN工作方式支持具有很多新特性的CAN2.0B 協議。SJA1000同時支持11位和29位識別碼,位速率最快可達1Mbits/s,時鐘頻率最高為24MHz,支持PeliCAN模式的擴展功能,如支持一些錯誤分析功能,支持系統診斷、系統維護、系統優(yōu)化等。
82C250是PHILIPS公司生產的CAN總線收發(fā)器,提供對總線的差動發(fā)送和差動接收功能,另外還具有電流限制電路,提供了對總線的進一步保護功能。
3μCOS-II在S3C44B0上的移植
μCOS-II (micro-controller OS II)是一種開放式的操作系統內核,它是專為微控制器系統和軟件開發(fā)而設計的占先式的實時多任務操作系統微內核。μCOS-II是一個源碼公開、可移植、可固化、可剪裁、具可剝奪性、可確定性的實時多任務操作系統。它的絕大部分代碼是用ANSI C語言編寫的,只有和處理器相關的不到200行代碼是用匯編語言編寫,因此可移植性很好,比較容易移植到各種體系的CPU上面。本文中將μCOS-II移植到S3C44B0上面運行,該移植工作主要是三個文件的修改工作:
改頭文件OS_CPU.H相關內容,包括:數據類型定義、堆棧增長方向、中斷相關的一些宏定義等。
在OS_CPU_C.C中編寫任務堆棧初始化函數及系統HOOK函數。
在OS_CPU_A.ASM中編寫四個匯編語言函數:OSSstartHighRdy()、OSCtxSw()、OSIntCtxSw()和OSTickISR()。
完成上述工作后,μCOS-II就可以運行在S3C44B0處理器上了。
4 CAN總線智能節(jié)點的軟硬件結構
CAN總線是現場總線的一種,它結構簡單,通信方式靈活,采用非破壞性仲裁技術,通信采用短幀格式,從而可以形成低成本,高性能,實時性好的通訊系統。
4.1 CAN總線智能節(jié)點的硬件結構
用S3C44B0和SJA1000來實現CAN總線節(jié)點時,SJA1000采用地址數據復用的數據傳輸方式,而S3C44B0卻采用分開的地址總線與數據總線,因此,不能像51系列單片機和SJA-1000那樣直接相連,而必須另想辦法。將發(fā)送的地址和數據都從數據總線上發(fā)出,而用IO口和 nGCSx, nOE, nWE等信號來形成ALE信號和讀、寫、片選信號接到SJA1000,這樣就可以完成S3C44B0和SJA1000的連接,在硬件上形成CAN總線節(jié)點,同時為了保證信號不互相干擾,采用光耦6N137來進行隔離。另外,S3C44B0的3.3V信號和SJA1000的5V信號之間需要進行電平轉換。
4.2 CAN總線智能節(jié)點的軟件結構
采用BasicCAN模式,RX和TX緩沖器各是10個字節(jié)長,其中兩個ID字節(jié)和最多8個數據字節(jié)。其中ID字節(jié)1是8個ID位,ID字節(jié)2是3 個ID位,1個遠程發(fā)送請求位和4個數據長度代碼位。11位的ID能夠建立2032種報文類型,足夠普通應用的需求。ID位的規(guī)定可根據實際需要自行定義。
發(fā)送報文時調用CAN發(fā)送函數U8 BCAN_DATA_WRITE(U8 *SendDataBuf),其中*SendDataBuf指向要發(fā)的內容。在這個函數里,將報文內容按CAN接受緩沖器規(guī)定的格式填入,然后調用命令函數U8 BCAN_CMD_PRG(U8 cmd),其中cmd參數決定命令類型,選用發(fā)送數據命令將報文發(fā)送出去。
接收報文時調用CAN接收函數U8 BCAN_DATA_RECEIVE(U8 *RcvDataBuf),其中*RcvDataBuf是報文的存儲地址。在這個函數里,讀取接收緩沖區(qū)里的數據,并存到指定的位置。
這兩個函數只是發(fā)送與接收函數,具體的發(fā)送和接收需要建立相應的任務或中斷,并調用這兩個函數來完成。其中發(fā)送采用主動方式,當發(fā)送任務接到啟動發(fā)送的指令后調用CAN發(fā)送函數進行數據發(fā)送,接收采用中斷方式,CAN中斷的優(yōu)先級高于時鐘中斷和其他任務。
評論