時間:2009-05-18 16:59:15來源:ronggang
[/align]
三星的S3C2510A ARM處理器,內(nèi)部集成了PCI(MINI-PCI)& PC Card控制器,根據(jù)應(yīng)用需要將S3C2510A的PCI(MINI-PCI)& PC Card控制器設(shè)置為PCI Host工作模式,這是通過設(shè)定PCI_PCCDM和PCI_HOSTM兩個配置引腳的電平來實現(xiàn)的[2]。見上頁表1所示。
S3C2510A內(nèi)嵌的PCI總線控制器符合PCI總線規(guī)范2.2版本,具有32bit地址/數(shù)據(jù)復(fù)用總線,支持非線性傳輸和突發(fā)傳輸,最高數(shù)據(jù)傳輸速度可以達(dá)到264MB/s@66Mhz(132MB/s@33Mhz) 。而且?guī)в械刂纷儞Q機(jī)制,可以將內(nèi)部的PCI總線地址映射到內(nèi)存或者外圍設(shè)備。2510A的引腳定義是根據(jù)
PCI總線來命名的,因此設(shè)計者只需將S3C2510A的PCI控制引腳接出即可。 在設(shè)計中設(shè)定PCI總線的時鐘頻率為66Mhz,因此主板上PCI總線的最高傳輸速度可以達(dá)到264MB,能夠滿足數(shù)據(jù)的快速傳輸。在這里需要利用時鐘反饋來彌補(bǔ)PCI的時鐘延遲。
[align=center]
圖3. S3C2510A的PCI控制器時鐘反饋機(jī)制
Fig3. PCI Clock Schemes[/align]
如上圖所示,當(dāng)PCI控制器工作在PCI HOST模式下時,其時鐘源是由系統(tǒng)內(nèi)部提供的,S3C2510A有3個PCI時鐘輸出信號PCICLK1,PCICLK2和PCICLK3,將PCI設(shè)備診斷寄存器PCIDIAG0的DC3位設(shè)置為1,即將PCICLK3設(shè)置為輸出無效,此時PCICLK1與PCICLK3相連,通過PCICLK3將時鐘信號反饋給處理器內(nèi)核,這樣可以使外部PCI設(shè)備與PCI時鐘保持一致,從而彌補(bǔ)時鐘延遲[3]。
2.2 系統(tǒng)以及PCI控制器的工作啟動順序
系統(tǒng)上電之后,系統(tǒng)以及PCI控制器的啟動順序如圖4所示:其中在對PCI控制器的特殊功能寄存器進(jìn)行配置時需要首先關(guān)閉中斷,即設(shè)置PCIINTEN=0。然后設(shè)置PCI控制和狀態(tài)寄存器PCICON[ARB,ATS,SPL,IOP,MMP],某些需要的情況下還要設(shè)置PCI診斷寄存器,這個寄存器是針對測試功能的,在PCMCIA Host工作模式下不需要進(jìn)行設(shè)置。然后要對與基地址有關(guān)的寄存器PCIBAM0~1和PCIBATPA0~2進(jìn)行設(shè)計,設(shè)置完之后要配置有關(guān)PCI重啟和時鐘的寄存器,其中關(guān)鍵的一步是設(shè)置PCI重啟和時鐘寄存器PCIRCC[MSK]=0,這是為了防止重啟信號和時鐘信號的沖突[3]。
[align=center]
圖4.PCI控制器及外圍設(shè)備的啟動順序
Fig4. PCI Controller’s Booting Sequence[/align]
在PCI控制器偵測外圍設(shè)備并初始化外圍設(shè)備的寄存器時,需要完成以下工作:
1) 讀取所有的配置寄存器值,包括PCIHID,PCIHSC,PCIHSSID等等。
2) 檢查BAR(Backup Address Register)的范圍并一一分配空間。
3) 使能外部設(shè)備并激活總線。
以上配置都是在PCI視頻處理卡的驅(qū)動中完成的,因為已經(jīng)把驅(qū)動程序加載到了uClinux的內(nèi)核中,所以系統(tǒng)啟動之后,操作系統(tǒng)會自動配置PCI外部設(shè)備。
3. 系統(tǒng)軟件設(shè)計
系統(tǒng)的軟件主要由Boot Loader和嵌入式uClinux兩大部分組成,其中Boot Loader相當(dāng)于PC機(jī)的BIOS,是在操作系統(tǒng)內(nèi)核運(yùn)行前運(yùn)行的一段程序,其主要作用在于初始化硬件設(shè)備,建立系統(tǒng)的內(nèi)存空間映射,然后再調(diào)用操作系統(tǒng)內(nèi)核。嵌入式uClinux是這個系統(tǒng)的OS,主要包括設(shè)備驅(qū)動程序和上層應(yīng)用程序。這里主要介紹一下移植Boot Loader的方法和uClinux中設(shè)備驅(qū)動程序的實現(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的移植來介紹如何建立主板的BootLoader。
U-Boot相當(dāng)于一個小型的Linux系統(tǒng),其工作涉及到硬件系統(tǒng)的初始化,存儲空間分配等等,因此其移植工作需要認(rèn)真地閱讀相關(guān)芯片的硬件手冊,在設(shè)計過程中主要完成了以下工作,相關(guān)的程序編寫可以根據(jù)U-Boot提供的例程來完成:
1) 修改Makefile配置文件,添加針對目標(biāo)板的編譯命令行。
2) 在CPU目錄下建立arm940t目錄,主要包括系統(tǒng)入口函數(shù)start.S,中斷設(shè)置函數(shù)代碼interrupts.c,CPU相關(guān)代碼文件cpu.c以及串口初始化代碼相關(guān)文件serial.c等。
3) 在Board目錄下建立S3C2510目錄,主要包括FLASH初始化代碼flash.c,內(nèi)存分配代碼memsetup.S,連接器文件u-boot.lds等。
4) 編寫配置文件,即:include/configs/s3c2510.h,完成了寄存器的定義等系統(tǒng)配置,大部分工作是參考S3C2510的數(shù)據(jù)手冊來進(jìn)行的。
5) 編寫flash.c文件,根據(jù)使用的AMD的NOR Flash來編寫Flash的驅(qū)動,主要有flash芯片的型號,容量大小,打印信息,flash擦除函數(shù)等。
6) 修改SDRAM的大小,只要修改前面建立的配置文件include/configs/s3c2510.h中的#define PHYS_SDRAM_SIZE 0X200000即可。其大小是根據(jù)實際應(yīng)用中SDRAM的大小來確定的。
7) 修改串口參數(shù)文件serial.c。包括設(shè)置串口波特率,其中波特率是由下式計算得出:
RUBRDIV0=( (int)(MCLK/16./(gd ->baudrate) + 0.5) -1 )。
8) 修改start.S文件,一個可執(zhí)行的Image 必須有一個入口點(diǎn)并且只能有一個唯一的全局入口,通常這個入口放在Rom(flash)的0x0 地址。例如start.S 中的.globl _start_start: 。
完成上面工作后就可以將U-Boot編譯,通過Jtag口下載到目標(biāo)板進(jìn)行調(diào)試。
3.2 uClinux設(shè)備驅(qū)動編寫
Linux的內(nèi)核是由設(shè)備管理、進(jìn)程管理、內(nèi)存管理和文件系統(tǒng)一起組成,Linux設(shè)備驅(qū)動可以分為字符類(Character)設(shè)備,塊類(Block)設(shè)備,網(wǎng)絡(luò)接口類設(shè)備和其他非標(biāo)準(zhǔn)驅(qū)動。其中PCI設(shè)備被看作是字符型設(shè)備[5]。
每個PCI外設(shè)都由一個總線號、一個設(shè)備號和一個功能號來標(biāo)示,共有三個訪問空間,即內(nèi)存空間、I/O端口和配置寄存器。PCI配置空間由256個字節(jié)組成,且每個設(shè)備功能都有一個配置空間,用于決定PCI器件的工作方式和映射到系統(tǒng)中的地址。基本功能函數(shù)如下:
int pci_present(void) //檢查系統(tǒng)是否支持PCI
struct pci_dev //PCI設(shè)備的軟件對象
int pci_find_device(……)//尋找指定的PCI設(shè)備
int pci_find_class(……) //尋找指定的PCI屬類
int pci_read_config_byte(…..) //讀配置空間
int pci_write_config_byte(…..) //寫配置空間
下面通過添加系統(tǒng)的PCI設(shè)備驅(qū)動來介紹uClinux設(shè)備驅(qū)動的實現(xiàn)步驟:
1) 創(chuàng)建1個PCI設(shè)備,命令如下:
mknod pci_dev c 245 0
其中c表示字符設(shè)備,245表示主設(shè)備號,0代表次設(shè)備號。
2) 初始化外部設(shè)備,將函數(shù)pci_dev_init()添加到uClinux/linux/drivers/char/mem.c文件的chr_dev_init()中,chr_dev_init()將在系統(tǒng)啟動時被調(diào)用,會完成設(shè)備驅(qū)動的初始化工作:
/*修改file_operations數(shù)據(jù)結(jié)構(gòu)*/
Struct file_operations pci_dev_fops={
read: pci_dev_read;
write:pci_dev_write;
open:pci_dev_open;
release:pci_dev_release;};
/*初始化PCI外部設(shè)備*/
Int pci_dev_init(void){
int result;
printk(“pci_dev_init()\n”);
/*設(shè)備注冊*/
result =
register_chrdev(245,”pci_dev”,&pci_dev_fops);}
3) 設(shè)備驅(qū)動文件pci_dev.c的編寫。設(shè)備注冊接口函數(shù),中斷處理函數(shù)等構(gòu)成了PCI設(shè)備驅(qū)動主要代碼。即file_operations中的函數(shù)。設(shè)備驅(qū)動與內(nèi)核關(guān)系緊密,在編寫過程中需要注意庫函數(shù)的使用和I/O空間分配。在嵌入式系統(tǒng)編程過程中無法使用LibC提供的標(biāo)準(zhǔn)庫。I/O空間檢查。要根據(jù)S3C2510A的PCI配置寄存器所給定的基址來讀寫數(shù)據(jù)。因為PCI定義的I/O空間是32位地址空間,因此,內(nèi)存和I/O可以使用相同的配置接口。
4) PCI設(shè)備的加載。
因為uClinux不支持設(shè)備驅(qū)動的動態(tài)加載,因此需要把驅(qū)動編譯到uClinux內(nèi)核中,首先需修改makefile文件,添加下行:
obj_$(CONFIG_PCI_DEV) +=pci_dev.o
接著修改config.in,添加:
bool ‘pci_dev install‘ CONFIG_ PCI_DEV,
添加這行的目的是為了在配置目標(biāo)板Linux系統(tǒng)內(nèi)核時以便對這個設(shè)備進(jìn)行選擇。
最后在目標(biāo)系統(tǒng)的makefile中添加設(shè)備節(jié)點(diǎn):
pci_dev,c,245,0
這樣在配置Linux內(nèi)核時就可以選擇pci_dev install,然后進(jìn)行編譯,這樣PCI設(shè)備驅(qū)動就加載到了uClinux系統(tǒng)中。
4. 小結(jié)
使用該主板和PCI接口視頻處理卡組成的視頻傳輸系統(tǒng)在局域網(wǎng)內(nèi)進(jìn)行視頻傳輸時畫面流暢、畫質(zhì)清晰。帶有PCI接口的通用嵌入式主板的開發(fā)可以減少嵌入式系統(tǒng)的重復(fù)開發(fā),縮短開發(fā)周期。核心板和擴(kuò)展接口板的設(shè)計使主板的應(yīng)用更加方便、靈活,只需根據(jù)具體應(yīng)用將不同的數(shù)據(jù)處理卡與該主板結(jié)合,便能構(gòu)成不同的功能系統(tǒng),應(yīng)用于各種具體需求。
參考文獻(xiàn)
[1] 李善平.劉文峰.王煥龍.Linux與嵌入式系統(tǒng)[M].北京:清華大學(xué)出版社,2003.1-4
[2] 李貴山, 威德虎. PCI局部總線開發(fā)者指南[M]. 西安:西安電子科技大學(xué)出版社, 1997
[3] snmsung electronics. S3C2510A 32bit RISC Microprocessor user’s manual[M], 2003.3, 43-47
[4] 李駒光.聶雪媛.江澤明.王兆衛(wèi).ARM應(yīng)用系統(tǒng)開發(fā)詳解[M] .北京:清華大學(xué)出版社,2003.202-205
[5] Alessandro rubini, Jonathan corbet著,魏永明,駱剛, 姜軍譯.Linux 設(shè)備驅(qū)動程序(第2版)[M],中國電力出版社,2002.11 502-526
標(biāo)簽:
傳動網(wǎng)版權(quán)與免責(zé)聲明:凡本網(wǎng)注明[來源:傳動網(wǎng)]的所有文字、圖片、音視和視頻文件,版權(quán)均為傳動網(wǎng)(m.y3602.cn)獨(dú)家所有。如需轉(zhuǎn)載請與0755-82949061聯(lián)系。任何媒體、網(wǎng)站或個人轉(zhuǎn)載使用時須注明來源“傳動網(wǎng)”,違反者本網(wǎng)將追究其法律責(zé)任。
本網(wǎng)轉(zhuǎn)載并注明其他來源的稿件,均來自互聯(lián)網(wǎng)或業(yè)內(nèi)投稿人士,版權(quán)屬于原版權(quán)人。轉(zhuǎn)載請保留稿件來源及作者,禁止擅自篡改,違者自負(fù)版權(quán)法律責(zé)任。
產(chǎn)品新聞
更多>勇梅機(jī)械液壓閘門給煤機(jī)的優(yōu)點(diǎn)
2025-10-22
2025-10-17
2025-10-11
「一體機(jī)性價比王者」NK290M普及型數(shù)控...
2025-10-09
2025-09-23
2025-09-23