基于MPC8280 多通道控制器驅動的研究與實現
3.2 中斷處理
當一個MCC 通道產生中斷請求時,CP 將中斷信息寫入循環中斷表,然后修改T/RINTPTRR并設置MCCM 寄存器中相應的TINT 或者RINTx 比特。當MCC 中斷到達內核后由內核調用中斷處理函數。中斷處理函數首先清除中斷,然后根據MCCE[RINTx]和MCCE[TINT]的值來處理相應的循環中斷表。
3.3 接收數據
數據接收程序通過一個先進先出的消息隊列和中斷處理程序相配合來完成數據的接收。當MCC 的某個通道接收到數據后會設置相應的中斷事件比特位。之后中斷處理函數將收到的數據進行封裝后發送到消息隊列。數據接收任務從消息隊列接收數據,然后根據 MCC 通道號調用相應的由用戶安裝的數據接收回調函數。最后由回調函數完成數據的處理。
3.4 發送數據
數據的發送過程由通信協處理器完成。數據發送函數將所發送的數據復制到所使用通道的緩沖區,然后設置相應的控制寄存器,由通信協處理器完成數據從緩沖區到線路接口的發送。數據發送完成后通信協處理器設置中斷寄存器MCCE 相應的RINT 比特位。并由中斷處理程序通知數據發送函數數據發送已完成。
4 結束語
該驅動程序在基于MPC8280 處理器的VxWorks5.5 操作系統上進行了測試。MCC 通道工作在Transparent 模式下,對多種數據模式進行長時間的數據收發表明該驅動能較穩定地運行。
由于該驅動的中斷處理函數檢查所有循環中斷表的條目并將收到的數據從 MCC 通道的數據緩存發送到消息隊列,由此引入了較大的處理延遲,在數據量較大時甚至有可能會造成數據丟失。改進的關鍵在于中斷處理函數和數據接收函數的配合。作為一種改進方法可考慮在中斷處理函數內僅執行那些必須的操作,如清除中斷,重新設置相關寄存器參數等。將數據處理放在另外一個單獨的任務中去執行,并盡量減少數據搬移次數,優化所執行的操作等。最終在程序運行的速度和所完成的功能之間作合適的折中,從而獲得所需的性能。本文引用地址:http://www.104case.com/article/156903.htm
評論