新聞中心

        EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > 基于嵌入式硬件平臺的劃片機視覺系統(tǒng)設(shè)計

        基于嵌入式硬件平臺的劃片機視覺系統(tǒng)設(shè)計

        作者: 時間:2016-12-02 來源:網(wǎng)絡(luò) 收藏

        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ù)傳輸速度可以達到264 MB/s及66 MHz(132 MB/s及33 MHz)。而且?guī)в械刂纷儞Q機制,可以將內(nèi)部的PCI總線地址映射到內(nèi)存或者外圍設(shè)備。在設(shè)計中設(shè)定PCI總線的時鐘頻率為66 MHz,因此主板上PCI總線的最高傳輸速度可以達到264 MB/s,能夠滿足數(shù)據(jù)的快速傳輸。系統(tǒng)利用時鐘反饋來彌補PCI的時鐘延遲。

        當(dāng)PCI控制器工作在PCI HOST、模式下時,其時鐘源是由系統(tǒng)內(nèi)部提供的,S3C2510有3個PCI時鐘輸出信號PCICLK1,PCICLK2和PCILK3,將PCI設(shè)備診斷寄存器PCIDIAG0的DC3位設(shè)置為l,即將PCICLK3設(shè)置為輸出無效,此時PCICLK1與PCICLK3相連,通過PCICLK3將時鐘信號反饋給處理器內(nèi)核,這樣可以使外部PCI設(shè)備與PCI時鐘保持一致,從而彌補時鐘延遲。

        系統(tǒng)以及PCI控制器的啟動順序如圖4所示。其中在對PCI控制器的特殊功能寄存器進行配置時需要首先關(guān)閉中斷,即設(shè)置PCIINTEN=0。然后設(shè)置PCI控制和狀態(tài)寄存器PCICON[ARB,ATS,SPL,IOP,MMP],某些需要的情況下還要設(shè)置PCI診斷寄存器,這個寄存器是針對測試功能的,在PCMCIA Host工作模式下不需要進行設(shè)置。然后要對與基地址有關(guān)的寄存器PCIBAM0~l和PCI-BATPA0~2進行設(shè)計,設(shè)置完之后要配置有關(guān)PCI重啟和時鐘的寄存器,其中關(guān)鍵的一步是設(shè)置PCI重啟和時鐘寄存器PCIRCC[MSK]=0,這是為了防止重啟信號和時鐘信號的沖突。

        在PCI控制器偵測外圍設(shè)備并初始化外圍設(shè)備的寄存器時,需要完成以下工作:

        (1)讀取所有的配置寄存器值,包括PCIHID,PCIHSC,PCIHSSID等;

        (2)檢查BAR(Backup Address Register)的范圍并一一分配空間;

        (3)使能外部設(shè)備并激活總線。

        以上配置都是在PCI圖像采集模塊的驅(qū)動中完成的,因為已經(jīng)把驅(qū)動程序加載到了ARM Linux的內(nèi)核中,所以系統(tǒng)啟動之后,操作系統(tǒng)會自動配置PCI外部設(shè)備。

        3 ARM Linux移植和設(shè)備驅(qū)動實現(xiàn)

        3.1 Boot Loader的移植

        Boot Loader是和硬件緊密連接的,系統(tǒng)是通過Boot Loader。來調(diào)用操作系統(tǒng)內(nèi)核并最終運行操作系統(tǒng)。本系統(tǒng)采用了U-Boot(Universal Boot Loader)作為。Boot Loader,U-Boot相當(dāng)于一個小型的Linux系統(tǒng),其工作涉及到硬件系統(tǒng)的初始化、存儲空間分配等,在設(shè)計過程中主要完成了以下工作,相關(guān)的程序編寫根據(jù)U-Boot提供的例程來完成:

        (1)修改Makefile配置文件,添加針對目標(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,對寄存器的定義等系統(tǒng)配置,大部分工作是參考S3C25l0的數(shù)據(jù)手冊來進行的;

        (5)編寫flash.c文件,根據(jù)使用的AMD的NOR Flash來編寫Flash的驅(qū)動,包括flash芯片的型號,打印信息,容量大小,flash擦除函數(shù)等;

        (6)修改SDRAM的大小,修改配置文件in-clude/configs/s3c25 10.h 中 的 #define PHYS _SDRAM_ SIZE值。其大小是根據(jù)實際應(yīng)用中SDRAM的大小來確定;

        (7)修改串口參數(shù)文件serial.C。主要是設(shè)置串口波特率,波特率計算公式為:RUBRDIVO=((int)(MCLK/16./(gd_>baudrate)+0.5)-1);

        (8)修改start.S文件,一個可執(zhí)行的Image必須有一個入口點并且只能有一個唯一的全局入口,修改start.S中的.globl _start _start:使其放在Rom(flash)的0×0地址。編譯U-Boot,通過Jtag口下載到目標(biāo)板進行調(diào)試。



        評論


        技術(shù)專區(qū)

        關(guān)閉
        主站蜘蛛池模板: 黄平县| 尼木县| 涿鹿县| 龙游县| 扎兰屯市| 那曲县| 大英县| 文化| 铜鼓县| 浑源县| 灵璧县| 庆元县| 北碚区| 龙山县| 尼玛县| 凭祥市| 贵阳市| 隆安县| 新邵县| 蛟河市| 方正县| 峨山| 习水县| 莱西市| 苍南县| 航空| 石渠县| 鸡西市| 横山县| 徐汇区| 宜宾县| 平乡县| 青龙| 乐陵市| 宣武区| 交城县| 临澧县| 邛崃市| 沙雅县| 镇沅| 桃园市|