基于PPC8270的BSP開(kāi)發(fā)與實(shí)現
2.2 BSP軟件的職責
根據上節關(guān)于BSP軟件的定義,BSP軟件的職責主要包括以下兩點(diǎn):
(1)目標機硬件環(huán)境的初始化。
(2)硬件驅動(dòng)程序的集成。訪(fǎng)問(wèn)硬件設備驅動(dòng)程序,BSP必須包含設備驅動(dòng)程序的相關(guān)支持、設備的配置管理等。
3 PPC8270的BSP開(kāi)發(fā)過(guò)程
3.1 目標機硬件環(huán)境的初始化
所謂目標機硬件環(huán)境的初始化是指從目標機系統上電復位開(kāi)始到操作系統開(kāi)始初始化用戶(hù)應用時(shí)的一段時(shí)間內系統所執行的過(guò)程,該過(guò)程主要包括兩部分工作:CPU初始化和目標機初始化。
3.1.1 CPU初始化
CPU初始化的目的是通過(guò)對CPU內部各種控制與狀態(tài)寄存器的設置來(lái)使得CPU具有確定的工作方式和穩定的狀態(tài),在該開(kāi)發(fā)實(shí)例中,主要完成以下幾種工作:
(1)設置CPU啟動(dòng)方式為冷啟動(dòng);
(2)通過(guò)IMMR設置PPC8270芯片內部存儲空間為0xF0000000;
(3)通過(guò)清除MSR(Machine state register)使PPC8270芯片達到初始工作狀態(tài);
(4)根據應用需求對目標系統進(jìn)行空間配置,并進(jìn)行IBAT,DBAT以及TLB的初始化;
(5)初始化指令Cache和數據Cache;
(6)初始化棧地址為0x20000。
3.1.2 目標機初始化
初始化控制芯片的寄存器、I/O設備寄存器,為整個(gè)軟件系統提供底層硬件環(huán)境的支持。在該開(kāi)發(fā)實(shí)例中,目標機的初始化主要完成:
(1)將目標機啟動(dòng)地址設置為0xFFF00100;
(2)PCI總線(xiàn)的初始化,包括PCI總線(xiàn)配置地址和數據地址的指定;
(3)SDRAM初始化;
(4)將FLASH基地址配置為0xFF800000;
(5)通過(guò)清除MSR(Machine State Register)使PPC8270芯片達到初始工作狀態(tài)。
3.2 硬件驅動(dòng)程序的開(kāi)發(fā)
PPC8270的BSP開(kāi)發(fā)涉及的基本硬件資源包括串口控制器、中斷控制器、定時(shí)器、網(wǎng)絡(luò )控制器,在該開(kāi)發(fā)實(shí)例中,上述基本硬件資源均采用PPC8270處理器內部集成的控制芯片。
3.2.1 串口控制器驅動(dòng)開(kāi)發(fā)
串口通信是目標機與宿主機聯(lián)系的橋梁,在BSP的硬件驅動(dòng)開(kāi)發(fā)中,通常首先進(jìn)行的是串口控制器的開(kāi)發(fā),從而為后續的開(kāi)發(fā)工作提供更多的調試途徑。在該開(kāi)發(fā)實(shí)例中采用PPC8270內部集成的SCC(Serial Communications Controllers)作為串口控制器,根據上層操作系統的需求,串口控制器驅動(dòng)應具有的基本功能包括:串口初始化和串口的讀/寫(xiě)。
串口控制器的驅動(dòng)開(kāi)發(fā)首先應完成串口初始化的工作,使串口芯片達到一個(gè)確定的工作狀態(tài),主要包括以下幾個(gè)方面的內容:
(1)輸入/輸出端口的初始化。PPC8270內部包含4路通用的輸入/輸出端口。每路輸入/輸出端口包含4組獨立的可讀/寫(xiě)的配置寄存器:PODRA(Port OpenDrain Registers)-PODRD,PDIRA(Port Data Direction Registers)-PDIRD,PSORA(Port Special Options Registe-rs)-PSORD和PDATA(Port Data Registers)-PDATD。根據本實(shí)例硬件設計,采用第四路輸入/輸出端口,因此應對其各配置寄存器進(jìn)行設置,并將其與采用的串口通道進(jìn)行連接。
(2)串口波特率的初始化。對于SCC的波特率初始化可通過(guò)PPC8270內部BRGs(Baud-Rate Generators)來(lái)實(shí)現,并通過(guò)CMXSCR(CMX SCC Clock Route Register)的設置將BRG的設置與具體的串口通道進(jìn)行連接。在該實(shí)例中,設置串口波特率為115 200 Kb。
(3)緩沖區描述符的初始化。SCC接收數據和發(fā)送數據的緩沖區是通過(guò)緩沖區描述符來(lái)指定的,包括接收緩沖區描述符和發(fā)送緩沖區描述符。SCC緩沖區描述符的結構如圖4所示。本文引用地址:http://dyxdggzs.com/article/161778.htm
SCC串口發(fā)送和接收數據均通過(guò)緩沖區描述符來(lái)查詢(xún)數據狀態(tài)與地址,因此,緩沖區描述符的初始化應完成緩沖區描述符起始地址的指定、緩沖區長(cháng)度的初始化以及串口發(fā)送接收的工作方式設置。
(4)參數RAM的初始化。SCC中每一路串口通道均可以進(jìn)行獨立的參數RAM初始化,主要完成本串口通道基地址、串口中斷處理方式以及串口數據的傳送方式的設置。
(5)UART工作方式設置。
(6)串口中斷向量的掛接。
在完成串口初始化的基礎上,可以進(jìn)一步進(jìn)行串口讀/寫(xiě)功能的開(kāi)發(fā)。基于SCC的串口讀/寫(xiě)控制是通過(guò)緩沖區描述符來(lái)實(shí)現的。當接收緩沖區描述符中指定的緩沖區地址有新的接收數據到達時(shí),接收緩沖區描述符的狀態(tài)會(huì )發(fā)生改變。當發(fā)送緩沖區描述符中指定的緩沖區地址有新的發(fā)送數據到達時(shí),發(fā)送緩沖區描述符的狀態(tài)會(huì )發(fā)生改變。因此,可以通過(guò)對緩沖區描述符狀態(tài)的監控,來(lái)確定何時(shí)從接收緩沖區拷貝數據以及何時(shí)將發(fā)送數據拷貝至發(fā)送緩沖區,從而完成串口數據的接收和發(fā)送。
評論