- 嵌入式系統設計與實踐:Linux篇
- 季江民
- 752字
- 2020-04-03 09:21:44
2.4 S3C2410處理器概述
S3C2410處理器是韓國Samsung公司基于ARM公司的ARM920T處理器核,開發的32位RISC微處理器,采用0.18um制造工藝的32位微控制器。該處理器擁有:獨立的16KB指令Cache和16KB數據Cache, MMU,支持TFT的LCD控制器,NAND閃存控制器,3路UART,4路DMA,4路帶PWM的Timer, I/O口,RTC,8路10位ADC, Touch Screen接口,IIC-BUS接口,IIS-BUS接口,2個USB主機,1個USB設備,SD主機和MMC接口,2路SPI。S3C2410處理器最高可運行在203MHz。
核心板的尺寸僅相當于名片的2/3大小,開發商可以充分發揮想象力,設計制造出小體積,高性能的嵌入式應用產品。
2.4.1 S3C2410芯片的功能單元
S3C2410芯片集成了大量的功能單元,包括:
● 內部1.8V,存儲器3.3V,外部I/O3.3V,16KB數據Cache,16KB指令Cache, MMU。
● 內置外部存儲器控制器(SDRAM控制和芯片選擇邏輯)。
● LCD控制器,一個LCD專業DMA。
● 4個帶外部請求線的DMA。
● 3個通用異步串行端口(IrDA1.0,16-Byte Tx FIFO and 16-Byte Rx FIFO),2通道SPI。
● 一個多主IIC總線,一個IIS總線控制器。
● SD主接口版本1.0和多媒體卡協議版本2.11兼容。
● 兩個USB HOST,一個USB DEVICE(VER1.1)。
● 4個PWM定時器和一個內部定時器。
● 看門狗定時器。
● 117個通用I/O。
● 56個中斷源。
● 24個外部中斷。
● 電源控制模式:標準、慢速、休眠、掉電。
● 8通道10位ADC和觸摸屏接口。
● 帶日歷功能的實時時鐘。
● 芯片內置PLL。
● 設計用于手持設備和通用嵌入式系統。
● 16/32位RISC體系結構,使用ARM920T CPU核的強大指令集。
● 帶MMU的先進的體系結構支持WinCE、EPOC32、Linux。
● 指令緩存(Cache)、數據緩存、寫緩存和物理地址TAG RAM,減小了對主存儲器帶寬和性能的影響。
● ARM920T CPU核支持ARM調試的體系結構。
● 內部先進的位控制器總線(AMBA)(AMBA2.0, AHB/APB)。
2.4.2 S3C2410芯片的系統管理
● 小端/大端支持
● 地址空間:每個BANK為128MB(全部為1GB)。
● 每個BANK可編程為8/16/32位數據總線。
● BANK0到BANK6為固定起始地址。
● BANK7可編程BANK起始地址和大小。
● 一共8個存儲器BANK。
● 前6個存儲器BANK用于ROM、SRAM和其他。
● 兩個存儲器BANK用于ROM、SRAM和SDRAM(同步隨機存儲器)。
● 支持等待信號用以擴展總線周期。
● 支持SDRAM掉電模式下的自刷新。
● 支持不同類型的ROM用于啟動(NOR/NAND FLASH、EEPROM和其他)。
在時鐘方面S3C2410也有突出的特點,該芯片集成了一個具有日歷功能的RTC和具有PLL(MPLL和UPLL)的芯片時鐘發生器。MPLL產生主時鐘,能夠使處理器工作頻率最高達到203MHz。這個工作頻率能夠使處理器輕松運行于Windows CE, Linux等操作系統以及進行較為復雜的信息處理。UPLL產生實現主從USB功能的時鐘。
S3C2410將系統的存儲空間分成8組(Bank),每組大小是128MB,共1G。Bank0到Bank5的開始地址是固定的,用于ROM和SRAM。Bank6和Bank7用于ROM, SRAM或SDRAM,這兩個組可編程且大小相同。Bank7的開始地址是Bank6的結束地址,靈活可變。所有內存塊的訪問周期都可編程。S3C2410采用nGCS [7:0]8個通用片選信號選擇這些組。
2.4.3 S3C2410芯片的啟動模式
S3C2410支持從NAND FLASH啟動,NAND FLASH具有容量大,比NOR FLASH價格低等特點。系統采用NAND FLASH與SDRAM組合,可以獲得非常高的性價比。S3C2410具有三種啟動方式,可通過OM [1:0]管腳通過復位期間上拉下拉電阻的電平邏輯進行選擇,當:
OM[1:0]=00時,處理器通過NAND FLASH啟動;
OM[1:0]=01時,處理器通過16位寬的ROM啟動;
OM[1:0]=10時,處理器通過32位寬的ROM啟動;
OM[1:0]=11時,處理器處于測試模式。
當處理器從NAND FLASH啟動時,內置的NAND FLASH將訪問控制接口,并將代碼自動加載到容量為4KB的內部SRAM中并且運行,SRAM的起始地址空間為0x00000000,然后SRAM中的引導程序將操作系統鏡像加載到SDRAM中,操作系統就在SDRAM中運行。
2.4.4 S3C2410系統結構
S3C2410系統結構主要由兩大部分構成: ARM920T內核及片內外設。
ARM920T內核包括三部分:ARM9內核ARM9TDMI、32KB的Cache、MMU,如圖2.8所示。片內外設分為高速外設和低速外設,分別用AHB總線和APB總線。

圖2.8 S3C2410的結構
2.4.5 S3C2410的引腳分布及信號描述
S3C2410引腳圖如圖2.9所示,在圖中畫實心的引腳標記為M8,因此引腳處于M行,第8列,各引腳的功能分布可查閱相關資料。

圖2.9 S3C2410引腳
S3C2410芯片上有117個多功能I/O引腳.分別是:
端口A(GPA):23個輸出端口;
端口B(GPB):11個輸入/輸出端口;
端口C(GPC):16個輸入/輸出端口;
端口D(GPD):16個輸入/輸出端口;
端口E(GPE):16個輸入/輸出端口;
端口F(GPF):8個輸入/輸出端口;
端口G(GPG):16個輸入/輸出端口;
端口H(GPH):11個輸入/輸出端口。
每個端口都可以通過軟件配置寄存器來滿足不同系統和設計的需要。在運行主程序之前,必須先對每一個用到的引腳的功能進行設置。如果某些引腳的復用功能沒有使用,那么可以先將該引腳設置為I/O口。
2.4.6 S3C2410芯片與端口相關的寄存器
(1)端口控制寄存器(GPACON—GPHCON):在S3C2410芯片中,大部分引腳是多路復用的,所以要確定每個引腳的功能。PnCON(端口控制寄存器)能夠定義引腳功能。如果GPF0—GPF7和GPG0—GPG7被用作掉電模式下的喚醒信號,那么這些端口必須配置成中斷模式。
(2)端口數據寄存器(GPADAT—GPHDAT):如果端口定義為輸出口,那么輸出數據可以寫入PDATn中的相應位;如果端口定義為輸入口,那么輸入數據可以從PDATn相應的位中讀入。
(3)端口上拉寄存器(GPBUP—GPHUP):通過配置端口上拉寄存器,可以使該組端口與上拉電阻連接或斷開。當寄存器中相應的位配置為0時,該引腳接上拉電阻;當寄存器中相應的位配置為1時,該引腳不接上拉電阻。
(4)外部中斷控制寄存器(EXTINTn):通過不同的信號方式可以使24個外部中斷被請求。EXTINTn寄存器可以根據外部中斷的需要,將中斷觸發信號配置為低電平觸發,高電平觸發,下降沿觸發,上升沿觸發和邊沿觸發幾種方式。
2.4.7 端口A引腳定義及功能設置
端口A(GPA)共有23個輸出引腳,其引腳功能如表2.2所示。
表2.2 端口A引腳定義

在端口A中控制寄存器GPACON地址是0x56000000,數據寄存器GPADAT地址是0x56000004, GPACON復位默認值是0x7FFFFF。
端口A與端口B—H在功能選擇方面有所不同,GPACON中每一位對應一根引腳,共23根引腳。當某位設為0時,相應引腳設置為輸出引腳,此時可以在GPADAT中相應位寫入0或1,讓此引腳輸出低電平或高電平;當GPACON某位設為1時,相應引腳為地址線或用于地址控制,此時GPADAT無用。一般而言GPACON通常設為全1,以便訪問外部存儲器件。
2.4.8 端口B-H引腳定義及功能設置
端口B—H在寄存器操作方面完全相同。如果用x表示B—H中的一個字符,即GPxCON中每兩位控制一根引腳:00表示輸入、01表示輸出、10表示特殊功能、11保留不用。GPxDAT用于讀/寫引腳:當引腳設為輸入時,讀此寄存器可知相應引腳的狀態是高是低;當引腳設為輸出時,寫此寄存器相應位可令此引腳輸出低電平或高電平。GPxUP:某位為0時,相應引腳無內部上拉;為1時,相應引腳使用內部上拉,端口B—H引腳定義如表2.3-2.9所示。
表2.3 端口B引腳定義

在端口B中控制寄存器GPBCON地址是0x56000010,數據寄存器GPBDAT地址是0x56000014,上拉電阻寄存器GPBUP地址為0x56000018, GPBCON復位默認值為0x0, GPBUP復位默認值為0x0。
例如:通過內存映射把GPBCON寄存器地址0x56000010映射到標識符GPBCON上,把GPBDAT寄存器地址0x56000014映射到標識符GPBDAT上,并設置GPB7為輸出口,輸出為0,用C語言的語句可表示為:
#define GPBCON (*(volatile unsigned long *)0x56000010) #define GPBDAT (*(volatile unsigned long *)0x56000014) GPBCON=0x00004000; //設置GPB7為輸出口,兩個位控制1個引腳,00輸入、01輸出 GPBDAT=0x00000000; //令GPB7輸出0
如果使用端口映射,就必須用匯編語言完成對設備的控制,上述C程序可以改寫為:
LDR R0, =0x56000010; R0設為GPBCON寄存器,用于選擇端口B引腳 MOV R1, #0x00004000 STR R1, [R0];設置GPB7為輸出口 LDR R0, =0x56000014; R0設為GPBDAT寄存器,此寄存器用于讀/寫端口B各引腳的數據 MOV R1, #0x00000000;此值改為0x00000080,可讓LED1熄滅 STR R1, [R0]; GPB7輸出0, LED1點亮
表2.4 端口C引腳定義

在端口C中控制寄存器GPCCON地址是0x56000020,數據寄存器GPCDAT地址是0x56000024,上拉電阻寄存器GPCUP地址為0x56000028, GPCCON復位默認值為0x0, GPCUP復位默認值為0x0。
例如:
#define rGPCCON (*(volatile unsigned*)0x56000020) //Port C控制寄存器 #define rGPCDAT (*(volatile unsigned*)0x56000024) //Port C數據寄存器 #define rGPCUP (*(volatile unsigned*)0x56000028) //Port C上拉電阻禁止寄 存器
表2.5 端口B引腳定義

在端口D中控制寄存器GPDCON地址是0x56000030,數據寄存器GPDDAT地址是0x56000034,上拉電阻寄存器GPDUP地址為0x56000038, GPDCON復位默認值為0x0, GPDUP復位默認值為0xF000。
表2.6 端口E引腳定義

在端口E中控制寄存器GPECON地址是0x56000040,數據寄存器GPEDAT地址是0x56000044,上拉電阻寄存器GPEUP地址為0x56000048, GPECON復位默認值為0x0, GPEUP復位默認值為0x0。
表2.7 端口F引腳定義

在端口F中控制寄存器GPFCON地址是0x56000050,數據寄存器GPFDAT地址是0x56000054,上拉電阻寄存器GPFUP地址為0x56000058, GPFCON復位默認值為0x0, GPFUP復位默認值為0x0。
表2.8 端口G引腳定義

在端口G中控制寄存器GPGCON地址是0x56000060,數據寄存器GPGDAT地址是0x56000064,上拉電阻寄存器GPGUP地址為0x56000068, GPGCON復位默認值為0x0, GPFUP復位默認值為0xF800。
表2.9 端口H引腳定義

在端口H中控制寄存器GPHCON地址是0x56000070,數據寄存器GPHDAT地址是0x56000074,上拉電阻寄存器GPHUP地址為0x56000078, GPHCON復位默認值為0x0, GPHUP復位默認值為0x0。
例如:
設有LED1, LED2分別接GPE11, GPE12兩腳,如圖2.10所示,如何控制GPE11, GPE12兩腳的輸出,讓LED燈各閃爍10次。

圖2.10 LED與S3C2410
void LED_DispOn(void) { rGPEDAT=rGPEDAT | (0x03 << 11); } void LED_DispOff(void) { rGPEDAT=rGPEDAT & (~ (0x03 << 11)); } int main( void) { int i ; rGPECON= ( rGPECON & (~(0x0F<<22))) | (0x05<<22) ; //// rGPECON[25:22]=0101b,設置GPE11,12兩腳為GPIO輸入模式 for(i=0; i<10; i++) { LED_DispOff( ) ; Delay(5); /////表示延遲5s LED_DispOn( ) ; Delay(5); ………… } } 思考: 閱讀下列程序,請分析程序的功能 #define GPBCON (*(volatile unsigned long *)0x56000010) #define GPBDAT (*(volatile unsigned long *)0x56000014) #define GPFCON (*(volatile unsigned long *)0x56000050) #define GPFDAT (*(volatile unsigned long *)0x56000054) /* 設根據硬件特性LED1—LED4 對應GPB7—GPB10 */ #define GPB7_out (1<<(7*2)) #define GPB8_out (1<<(8*2)) #define GPB9_out (1<<(9*2)) #define GPB10_out (1<<(10*2)) /* 設根據硬件特性鍵盤K1—K3對應GPF1—GPF3, K4對應GPF7 */ #define GPF1_in ~(3<<(1*2)) #define GPF2_in ~(3<<(2*2)) #define GPF3_in ~(3<<(3*2)) #define GPF7_in ~(3<<(4*2)) int main() { //LED1—LED4對應的4根引腳設為輸出 GPBCON=GPB7_out | GPB8_out | GPB9_out | GPB10_out ; //K1—K4 對應的4根引腳設為輸入 GPFCON &= GPF1_in & GPF2_in & GPF3_in & GPF7_in ; while(1) { //若Kn為0(表示按下),則令LEDn為0(表示點亮) ,11110000000 GPBDAT = ((GPFDAT & 0x0e)<<6) | ((GPFDAT & 0x80)<<3); } return 0; }
2.5 嵌入式開發板
目前有很多公司研發自己的S3C2410開發板,雖然從功能上講有些差異,但原理基本一致。S3C2410開發板外圍電路接口非常豐富,功能強大,適用于各種手持設備、消費電子和工業控制設備的開發。如圖2.11所示的是某企業生產的S3C2410開發板的實物圖。

圖2.11 某企業生產的S3C2410開發板
在圖2.12中的S3C2410開發板器件布局圖,數模轉換芯片接口中芯片內部集成8通道10bitADC,有電位器調節的電壓輸入、溫度傳感器輸入、D/A輸出引腳經隔離后的輸入;可以外接SPI接口的鍵盤控制芯片ZLG7289;雙Ethernet以太網接口可以用CS8900擴展的10M以太網接口或DM9000擴展的10M/100M以太網接口;系統帶有三部分的LED顯示。通過ZLG7290驅動的8位8段數碼管,顯示數字信息,通過總線驅動的8×8數碼管點陣,顯示點陣信息;VIDEO擴展接口,通過專用視頻編碼芯片CH7004輸出如下形式的視頻信號:VGA信號,可以直接連接顯示器;電視機接口(S端子)直接連接電視機;視頻口(AV端子)直接連接電視機。

圖2.12 某企業生產的S3C2410開發板器件布局
IIS音頻擴展接口,通過音頻擴展芯片支持MIC輸入及耳機音頻輸出;為了方便視聽,板載音頻功放和兩個1W的喇叭,左右聲道經功放驅動后直接由板載喇叭發聲,當然也可以通過板上跳線關閉這個在線播放的功能IDE接口,通過板載的IDE接口還可以直接連接筆記本的IDE硬盤,支持DMA方式。
擴展總線接口,總線接口通過兩個96P×2的歐式座擴展出來,不僅引出了總線的信號,而且通過板載的CPLD擴展了多個I/O口,方便了用戶的使用;而且,結實耐用的歐式座適用用戶的不斷插拔;通過擴展總線可以擴展如下擴展模塊:
FPGA(Altera Cyclone)設計擴展模塊:實現MCU+FPGA架構的綜合設計;
DSP(TI 5402)擴展模塊:實現MCU+DSP架構的綜合設計;
GPS擴展模塊:實現地理信息相關的綜合設計;
GPRS擴展模塊:實現遠程無線通信的綜合設計;
電機擴展模塊:包括步進、直流、交流電機模塊,實現電機相關的綜合控制設計;
指紋傳感器(ATMEL FCD4B14)擴展模塊:實現信號處理的綜合設計。