2.1 BSP軟件的定義
所謂BSP軟件通常是指針對具體的硬件平臺、用戶編寫的驅(qū)動代碼和部分設(shè)備驅(qū)動的集合。它所實(shí)現(xiàn)的功能包括初始化、驅(qū)動部分設(shè)備。BSP軟件是介于底層硬件設(shè)備環(huán)境和上層操作系統(tǒng)之間的一個軟件接口,它的主要功能是系統(tǒng)加電后初始化目標(biāo)機(jī)硬件、初始化操作系統(tǒng)及提供部分硬件的驅(qū)動程序。BSP軟件屬于嵌入式軟件的一部分,其在目標(biāo)機(jī)應(yīng)用系統(tǒng)中的層次如圖3所示。
BSP軟件是根據(jù)具體的硬件環(huán)境進(jìn)行設(shè)計(jì)和開發(fā)的,因此只能運(yùn)行在指定設(shè)備的硬件環(huán)境中。
2.2 BSP軟件的職責(zé)
根據(jù)上節(jié)關(guān)于BSP軟件的定義,BSP軟件的職責(zé)主要包括以下兩點(diǎn):
(1)目標(biāo)機(jī)硬件環(huán)境的初始化。
(2)硬件驅(qū)動程序的集成。訪問硬件設(shè)備驅(qū)動程序,BSP必須包含設(shè)備驅(qū)動程序的相關(guān)支持、設(shè)備的配置管理等。
3 PPC8270的BSP開發(fā)過程
3.1 目標(biāo)機(jī)硬件環(huán)境的初始化
所謂目標(biāo)機(jī)硬件環(huán)境的初始化是指從目標(biāo)機(jī)系統(tǒng)上電復(fù)位開始到操作系統(tǒng)開始初始化用戶應(yīng)用時的一段時間內(nèi)系統(tǒng)所執(zhí)行的過程,該過程主要包括兩部分工作:CPU初始化和目標(biāo)機(jī)初始化。
3.1.1 CPU初始化
CPU初始化的目的是通過對CPU內(nèi)部各種控制與狀態(tài)寄存器的設(shè)置來使得CPU具有確定的工作方式和穩(wěn)定的狀態(tài),在該開發(fā)實(shí)例中,主要完成以下幾種工作:
(1)設(shè)置CPU啟動方式為冷啟動;
(2)通過IMMR設(shè)置PPC8270芯片內(nèi)部存儲空間為0xF0000000;
(3)通過清除MSR(Machine state register)使PPC8270芯片達(dá)到初始工作狀態(tài);
(4)根據(jù)應(yīng)用需求對目標(biāo)系統(tǒng)進(jìn)行空間配置,并進(jìn)行IBAT,DBAT以及TLB的初始化;
(5)初始化指令Cache和數(shù)據(jù)Cache;
(6)初始化棧地址為0x20000。
3.1.2 目標(biāo)機(jī)初始化
初始化控制芯片的寄存器、I/O設(shè)備寄存器,為整個軟件系統(tǒng)提供底層硬件環(huán)境的支持。在該開發(fā)實(shí)例中,目標(biāo)機(jī)的初始化主要完成:
(1)將目標(biāo)機(jī)啟動地址設(shè)置為0xFFF00100;
(2)PCI總線的初始化,包括PCI總線配置地址和數(shù)據(jù)地址的指定;
(4)將FLASH基地址配置為0xFF800000;
(5)通過清除MSR(Machine State Register)使PPC8270芯片達(dá)到初始工作狀態(tài)。
3.2 硬件驅(qū)動程序的開發(fā)
PPC8270的BSP開發(fā)涉及的基本硬件資源包括串口控制器、中斷控制器、定時器、網(wǎng)絡(luò)控制器,在該開發(fā)實(shí)例中,上述基本硬件資源均采用PPC8270處理器內(nèi)部集成的控制芯片。
3.2.1 串口控制器驅(qū)動開發(fā)
串口通信是目標(biāo)機(jī)與宿主機(jī)聯(lián)系的橋梁,在BSP的硬件驅(qū)動開發(fā)中,通常首先進(jìn)行的是串口控制器的開發(fā),從而為后續(xù)的開發(fā)工作提供更多的調(diào)試途徑。在該開發(fā)實(shí)例中采用PPC8270內(nèi)部集成的SCC(Serial Communications Controllers)作為串口控制器,根據(jù)上層操作系統(tǒng)的需求,串口控制器驅(qū)動應(yīng)具有的基本功能包括:串口初始化和串口的讀/寫。
串口控制器的驅(qū)動開發(fā)首先應(yīng)完成串口初始化的工作,使串口芯片達(dá)到一個確定的工作狀態(tài),主要包括以下幾個方面的內(nèi)容:
(1)輸入/輸出端口的初始化。PPC8270內(nèi)部包含4路通用的輸入/輸出端口。每路輸入/輸出端口包含4組獨(dú)立的可讀/寫的配置寄存器:PODRA(Port OpenDrain Registers)-PODRD,PDIRA(Port Data Direction Registers)-PDIRD,PSORA(Port Special Options Registe-rs)-PSORD和PDATA(Port Data Registers)-PDATD。根據(jù)本實(shí)例硬件設(shè)計(jì),采用第四路輸入/輸出端口,因此應(yīng)對其各配置寄存器進(jìn)行設(shè)置,并將其與采用的串口通道進(jìn)行連接。
(2)串口波特率的初始化。對于SCC的波特率初始化可通過PPC8270內(nèi)部BRGs(Baud-Rate Generators)來實(shí)現(xiàn),并通過CMXSCR(CMX SCC Clock Route Register)的設(shè)置將BRG的設(shè)置與具體的串口通道進(jìn)行連接。在該實(shí)例中,設(shè)置串口波特率為115 200 Kb。
(3)緩沖區(qū)描述符的初始化。SCC接收數(shù)據(jù)和發(fā)送數(shù)據(jù)的緩沖區(qū)是通過緩沖區(qū)描述符來指定的,包括接收緩沖區(qū)描述符和發(fā)送緩沖區(qū)描述符。SCC緩沖區(qū)描述符的結(jié)構(gòu)如圖4所示。
?
SCC串口發(fā)送和接收數(shù)據(jù)均通過緩沖區(qū)描述符來查詢數(shù)據(jù)狀態(tài)與地址,因此,緩沖區(qū)描述符的初始化應(yīng)完成緩沖區(qū)描述符起始地址的指定、緩沖區(qū)長度的初始化以及串口發(fā)送接收的工作方式設(shè)置。
(4)參數(shù)RAM的初始化。SCC中每一路串口通道均可以進(jìn)行獨(dú)立的參數(shù)RAM初始化,主要完成本串口通道基地址、串口中斷處理方式以及串口數(shù)據(jù)的傳送方式的設(shè)置。
(5)UART工作方式設(shè)置。
(6)串口中斷向量的掛接。
在完成串口初始化的基礎(chǔ)上,可以進(jìn)一步進(jìn)行串口讀/寫功能的開發(fā)。基于SCC的串口讀/寫控制是通過緩沖區(qū)描述符來實(shí)現(xiàn)的。當(dāng)接收緩沖區(qū)描述符中指定的緩沖區(qū)地址有新的接收數(shù)據(jù)到達(dá)時,接收緩沖區(qū)描述符的狀態(tài)會發(fā)生改變。當(dāng)發(fā)送緩沖區(qū)描述符中指定的緩沖區(qū)地址有新的發(fā)送數(shù)據(jù)到達(dá)時,發(fā)送緩沖區(qū)描述符的狀態(tài)會發(fā)生改變。因此,可以通過對緩沖區(qū)描述符狀態(tài)的監(jiān)控,來確定何時從接收緩沖區(qū)拷貝數(shù)據(jù)以及何時將發(fā)送數(shù)據(jù)拷貝至發(fā)送緩沖區(qū),從而完成串口數(shù)據(jù)的接收和發(fā)送。
3.2.2 中斷控制器驅(qū)動開發(fā)
中斷機(jī)制是目標(biāo)機(jī)感知事件的重要手段,PPC8270具有內(nèi)部集成的中斷控制器,對各類中斷源的中斷向量號進(jìn)行了明確的定義,并在一定程度上規(guī)定了各類中斷源的中斷優(yōu)先級。在中斷控制器驅(qū)動中,應(yīng)實(shí)現(xiàn)的主要功能包括:中斷控制器的初始化、中斷向量的獲取以及中斷的使能與禁止。
(1)中斷控制器的初始化。PPC8270集成中斷控制器的初始化過程較為簡單,主要的工作是通過SIMR(SIU Interrupt Mask Registers)的設(shè)置將所有中斷源對應(yīng)的中斷信號進(jìn)行禁止。
(2)中斷向量的獲取。PPC8270集成中斷控制器獲取中斷向量可通過讀取SIVEC(SIU Interrupt Vector Register)寄存器來獲得。
(3)中斷的使能和禁止。在PPC8270集成中斷控制器中,通過對SIMR中相應(yīng)數(shù)據(jù)位的置位與復(fù)位操作來實(shí)現(xiàn)指定中斷源的使能與禁止。
3.2.3 定時器驅(qū)動開發(fā)
定時器是一種特殊的中斷源,可為系統(tǒng)運(yùn)行提供時間精度的支持,PPC8270內(nèi)部具有4路獨(dú)立的16位定時器,也可以作為2路32位定時器使用,4路定時器分別擁有獨(dú)立的寄存器組:包括TMR(Timer Mode Register),TCR(Timer Counter Register),TRR(Timer Reference Register),TER(Timer Event Register),TGCR(Timer Global Configuration Register),可以根據(jù)應(yīng)用的需要對相應(yīng)的寄存器進(jìn)行設(shè)置來完成定時器的初始化、定時器的使能與禁止、定時器頻率的設(shè)置與獲取等功能。
(1)定時器的初始化。定時器的初始化主要是通過TRR來完成定時器的時鐘頻率設(shè)置并將指定的定時器中斷連接到相應(yīng)的中斷處理程序。
(2)定時器的啟動與停止。定時器的啟動與停止應(yīng)能夠根據(jù)指定的定時器通道完成定時器的啟動與停止,包含兩方面的內(nèi)容:即指定定時器中斷向量的使能與禁止和通過TGCR對指定定時器進(jìn)行的啟動與停止。
(3)定時器頻率的設(shè)置與獲取。
評論
查看更多