基于嵌入式硬件平臺(tái)的劃片機(jī)視覺系統(tǒng)設(shè)計(jì)
S3C2510 ARM處理器,內(nèi)部PCI(MINI-PCI)&PC Card控制器符合PCI總線規(guī)范2.2版本,將S3C2510的PCI(MINI-PCI)&PC Card控制器設(shè)置為PCI Host工作模式(見表1),具有32bit地址/數(shù)據(jù)復(fù)用總線,支持非線性傳輸和突發(fā)傳輸,最高數(shù)據(jù)傳輸速度可以達(dá)到264 MB/s及66 MHz(132 MB/s及33 MHz)。而且?guī)в械刂纷儞Q機(jī)制,可以將內(nèi)部的PCI總線地址映射到內(nèi)存或者外圍設(shè)備。在設(shè)計(jì)中設(shè)定PCI總線的時(shí)鐘頻率為66 MHz,因此主板上PCI總線的最高傳輸速度可以達(dá)到264 MB/s,能夠滿足數(shù)據(jù)的快速傳輸。系統(tǒng)利用時(shí)鐘反饋來彌補(bǔ)PCI的時(shí)鐘延遲。
當(dāng)PCI控制器工作在PCI HOST、模式下時(shí),其時(shí)鐘源是由系統(tǒng)內(nèi)部提供的,S3C2510有3個(gè)PCI時(shí)鐘輸出信號(hào)PCICLK1,PCICLK2和PCILK3,將PCI設(shè)備診斷寄存器PCIDIAG0的DC3位設(shè)置為l,即將PCICLK3設(shè)置為輸出無效,此時(shí)PCICLK1與PCICLK3相連,通過PCICLK3將時(shí)鐘信號(hào)反饋給處理器內(nèi)核,這樣可以使外部PCI設(shè)備與PCI時(shí)鐘保持一致,從而彌補(bǔ)時(shí)鐘延遲。
系統(tǒng)以及PCI控制器的啟動(dòng)順序如圖4所示。其中在對(duì)PCI控制器的特殊功能寄存器進(jìn)行配置時(shí)需要首先關(guān)閉中斷,即設(shè)置PCIINTEN=0。然后設(shè)置PCI控制和狀態(tài)寄存器PCICON[ARB,ATS,SPL,IOP,MMP],某些需要的情況下還要設(shè)置PCI診斷寄存器,這個(gè)寄存器是針對(duì)測(cè)試功能的,在PCMCIA Host工作模式下不需要進(jìn)行設(shè)置。然后要對(duì)與基地址有關(guān)的寄存器PCIBAM0~l和PCI-BATPA0~2進(jìn)行設(shè)計(jì),設(shè)置完之后要配置有關(guān)PCI重啟和時(shí)鐘的寄存器,其中關(guān)鍵的一步是設(shè)置PCI重啟和時(shí)鐘寄存器PCIRCC[MSK]=0,這是為了防止重啟信號(hào)和時(shí)鐘信號(hào)的沖突。
在PCI控制器偵測(cè)外圍設(shè)備并初始化外圍設(shè)備的寄存器時(shí),需要完成以下工作:
(1)讀取所有的配置寄存器值,包括PCIHID,PCIHSC,PCIHSSID等;
(2)檢查BAR(Backup Address Register)的范圍并一一分配空間;
(3)使能外部設(shè)備并激活總線。
以上配置都是在PCI圖像采集模塊的驅(qū)動(dòng)中完成的,因?yàn)橐呀?jīng)把驅(qū)動(dòng)程序加載到了ARM Linux的內(nèi)核中,所以系統(tǒng)啟動(dòng)之后,操作系統(tǒng)會(huì)自動(dòng)配置PCI外部設(shè)備。
3 ARM Linux移植和設(shè)備驅(qū)動(dòng)實(shí)現(xiàn)
3.1 Boot Loader的移植
Boot Loader是和硬件緊密連接的,系統(tǒng)是通過Boot Loader。來調(diào)用操作系統(tǒng)內(nèi)核并最終運(yùn)行操作系統(tǒng)。本系統(tǒng)采用了U-Boot(Universal Boot Loader)作為。Boot Loader,U-Boot相當(dāng)于一個(gè)小型的Linux系統(tǒng),其工作涉及到硬件系統(tǒng)的初始化、存儲(chǔ)空間分配等,在設(shè)計(jì)過程中主要完成了以下工作,相關(guān)的程序編寫根據(jù)U-Boot提供的例程來完成:
(1)修改Makefile配置文件,添加針對(duì)目標(biāo)板的編譯命令行;
(2)在CPU目錄下建立arm940t目錄,主要包括中斷設(shè)置函數(shù)代碼interrupts9c,系統(tǒng)入口函數(shù)start.S,CPU相關(guān)代碼文件cpu.c以及串口初始化代碼相關(guān)文件serial.c等;
(3)在Board目錄下建立S3C2510目錄,主要包括FLASH初始化代碼flash.c,連接器文件u-boot.1ds,內(nèi)存分配代碼MEMSetup.S等;
(4)編寫配置文件,即:include/configs/s3c25 l0.h,對(duì)寄存器的定義等系統(tǒng)配置,大部分工作是參考S3C25l0的數(shù)據(jù)手冊(cè)來進(jìn)行的;
(5)編寫flash.c文件,根據(jù)使用的AMD的NOR Flash來編寫Flash的驅(qū)動(dòng),包括flash芯片的型號(hào),打印信息,容量大小,flash擦除函數(shù)等;
(6)修改SDRAM的大小,修改配置文件in-clude/configs/s3c25 10.h 中 的 #define PHYS _SDRAM_ SIZE值。其大小是根據(jù)實(shí)際應(yīng)用中SDRAM的大小來確定;
(7)修改串口參數(shù)文件serial.C。主要是設(shè)置串口波特率,波特率計(jì)算公式為:RUBRDIVO=((int)(MCLK/16./(gd_>baudrate)+0.5)-1);
(8)修改start.S文件,一個(gè)可執(zhí)行的Image必須有一個(gè)入口點(diǎn)并且只能有一個(gè)唯一的全局入口,修改start.S中的.globl _start _start:使其放在Rom(flash)的0×0地址。編譯U-Boot,通過Jtag口下載到目標(biāo)板進(jìn)行調(diào)試。
評(píng)論