基于S3C2440和嵌入式Linux的擴展串口設計
因為方案采用中斷方式,所以將NSEL置高位,即允許芯片中斷。16C554A有INTA、INTB、INTC、IN TD4個中斷線,第一片擴展串口與系統(tǒng)總線的EINT1,EINT2,EINT5,EINT6相連,第二片擴展串口與GPIO中的EINT11,EINT13,EINT15,EIN39中斷相連,使得任一片芯片的任意的端口都能產生中斷。
S3C2440的A0,A1,A2,A4,A5,A24通過不同組合可以選擇8個不同的端口。nGCS5與74LS138譯碼器片選腳相連,根據S3C2440對地址空間的定義,這樣就確定了第一片16C554A擴展芯片4個端口的訪問地址為0X28000000,0X28000010,0X28000020,0X28000030,第二片16C554A擴展芯片4個端口的訪問地址為0X29000000,0X29000010,0X29000020,0X29000030,根據端口基地址就可以確定片內的各個寄存器地址。具體連接如圖4所示。本文引用地址:http://www.104case.com/article/150465.htm
3 驅動程序移植
軟件設計主要是為設備編寫驅動程序。設備驅動是介于硬件和操作系統(tǒng)之間的軟件接口,主要功能包括:探測和初始化設備;從設備接收數據并提交給內核;從內核接收數據送到設備;檢測和處理設備錯誤。
串口驅動程序從上到下分為4層:終端設備層、行規(guī)程、串口抽象層、串口芯片層。其中,串口芯片層與具體的芯片相關,主要是向串口抽象層提供串口芯片所用的資源,還進行一些與芯片相關的設置。
TL16C554A擴展串口芯片屬于標準串口,內核的串口驅動程序對它支持它的驅動程序就是Linux內核代碼中的driver/seria/8250.c.入口函數是serial8250_init,它用于向串口抽象層提供注冊串口的物理信息。串口的物理信息主要有兩類:訪問地址和中斷號。所以只要設置好這兩類物理信息,就可以驅動擴展串口了,圖5為驅動程序移植流程。
3.1 構建擴展串口的數據結構
串口的物理信息存儲在內核源程序arch/arm/plats3c24xx/common-smdk.c中,所以主要工作是在commonsmdk.c源文件中增加三段代碼:
1)增加頭文件
源程序中要包含頭文件linux/serial_8250.h,用于告訴編譯器使用8250.c作為擴展串口的源程序;
評論