MPC860的HDLC通道驅動程序的設計與實現
每個SCC有四個地址存儲器HADDR1~HADDR4,所以每個SCC可識別四個地址,包括廣播地址。接收時,通過與HDLC幀的目的地址進行比較,確定接收該幀還是丟棄。
3.3 初始化收發緩存區描述符
(1)在初始化緩存區描述符的過程中,收發都必須停止。通過將GSMR_L2的ENT和ENR置零,然后配置CPCR中的CP命令就可以禁止收發。
(2)配置收發緩存區描述符:
①配置當前接收緩存區描述符表的基地址,即IMMR的基地址再加上收發緩存區描述符表相對于IMMR的偏移地址。由于發送緩存區描述符表緊跟在接收緩存區描述符表的后面,因此發送緩存區描述符表的基地址為接收緩存區描述符表的基地址加上整個接收緩存區描述符表的長度。
②初始化發送緩存區描述符表和接收緩存區描述符表。如果收發緩存區都為空,分別將每一個發送緩存區描述符表和接收緩存區描述符表的狀態模式參數中的狀態位E置1、數據長度置0,
并將它們的地址設置成相應的值。如果收緩存區或發緩存區不為空,則應該先將這些緩存區清零。值得注意的是,最后一個收發緩存區描述符表的W位必須置1。
(3)初始化完成后,應該將ENT和ENR位置
3.4 收發功能的實現
3.4.1 接收函數
SMR_L2寄存器的ENR位置1的前提下,HDLC控制器進入接收允許狀態。在正式讀入數據前,必須先檢測幀開始標志,并匹配地址,然后決定是否進入接收狀態。進入接收狀態后,首先提取RxBD的狀態模式字節,若接收未準備好,則繼續等待,若準備好了,則開始接收。由于一個數據包可以放置于多個緩存,所以檢測RxBD狀態模式字節的L位,以判斷是否為本幀的最后一個緩存:如果不是,則關閉這個緩存,處理下一個緩存描述字;如果是,接收完最后一個緩存的數據后結束接收過程。對于最后一個buffer,需要檢測是否有接收錯誤。
3.4.2 發送函數
發送函數流程圖如圖4所示。
在GSMR_L2寄存器的ENT位置1的前提下,HDLC控制器進入發送允許狀態。首先提取TxBD的狀態模式字節,若發送未準備好,則繼續等待,若準備好了,則進入發送狀態,在發送數據中間插入適當的標志位后就可以發送。由于一個發送數據包可以包含多個緩存,所以檢測TxBD狀態模式字節的L位,以判斷是否為最后一個緩存:如果不是,則關閉這個緩存,處理下一個緩存描述字;如果是,控制器進入關閉發送狀態。對于最后一個buffer,需要做兩件事情:(1)檢測是否有發送錯誤。(2)以剩下的實際數據長度作為發送幀中數據段的長度發送出去。
3.5 中斷處理
在這個驅動程序中,只處理SCC2產生的中斷。首先確定是否是CPM產生的中斷,然后讀取寄存器CPM中斷向量寄存器(CIVR)的VN字段判斷是否為SCC2產生的中斷。如果是的話,就讀取SCEE確定中斷類型,然后做出相應的處理。
評論