S3C2440集成了丰富了外设控制器(LCD控制器、USBDevice控制器、USBHost控制器、NANDFLASH控制器、I2C控制器、SPI控制器等)。要控制这些外设就要设置相应控制器的寄存器以产生相应的驱动时序。学习S3C2440,主要是如何配置寄存器。下面是S3C2440特殊功能寄存器地址:
图1内存映射
下面就来详细分析。
图2S3C2440结构框图
先介绍一下AMBA(AdvancedMicro-ControllerBusArchitecture)是由ARMLimited公司推出的On-ChipBus片上总线规范,是目前芯片总线的主流标准。一开始AMBA1.0只有ASB和APB,为了节省面积,这时候的总线协定都是采用3态的总线,到后来的AMBA2.0版本,新增了AHB总线,共定义了3组总线:高性能总线(AdvancedHighPerformanceBus,AHB)、系统总线(AdvancedSystemBus,ASB)和外设总线(AdvancedPeripheralBus,APB)。
图3典型的基于AMBA总线的系统
关于AMBA总线的更多的内容可上网查看,中文的资料都有很多。由图2可知AHB总线上挂载了LCD控制器、中断控制器、USBHost控制器、电源管理、NAND控制器、Camera控制器、存储器控制器以及AHBtoAPB桥和DMA控制器。APB总线上挂载了UART控制器、I2C控制器、USBDevice控制器、I3S控制器SDI/MMC控制器、GPIO、Watchdog/定时器、RTC、ADC、SPI、AC97。下面这段话是摘自S3C2440芯片手册:
"TheS3C2440Aholds13busmasters.TheyincludeDRAMrefreshcontroller,LCD_DMA,CAMIFDMA,DMA0,DMA1,DMA2,DMA3,USB_HOST_DMA,EXT_BUS_MASTER,Testinterfacecontroller(TIC)andARM920T."
S3C2440A有13个主设备。当AHB总线上的主设备读写从设备时,发出的地址经过AHB总线的译码器(通过内存映射表)产生该地址所对应从设备的选择信号,选中从设备;这样就可以对从设备进行读写啦。
图4AHB译码器
图5译码器的具体实现代码
译码器的内存映射表具有相对的独立性。如果AHB总线上的从设备发生了变化,必须对内存映射表进行修改以确保每个地址都对应正确的从设备。下面是内存映射表的一个例子。
图6内存映射表
使用了两种内存映射表:正常工作下的内存映射表和重新启动时的内存映射表。在正常工作时,微处理器的从设备包括内部RAM、外部RAM、外部ROM和AHB/APB桥;当系统重新启动时,系统的内存映射不包括内部RAM,而是将0x0000—0000至0x0000—03FF的内存地址段映射为nash。这个部分包含系统的启动和初始化代码。当系统启动完成初始化后,AMBA总线将产生一个Remap信号,送入译码器,将译码器的当前内存映射表改为正常工作状态下的内存映射表。
下面是S3C2440的地址映射
AHBMemoryMap
Memorycontrol0x480000000x48000030
USBHOST0x490000000x49000058
INTERRUPT0x4a0000000x4a00001c
DMA0x4b0000000x4b0000e0
CLOCK&POWERMANAGEMENT0x4c0000000x4c000018
*LCDCONTROLLER0x4d0000000x4d0000600x4d000400(Palettestartaddress)
NandFlash0x4E0000000x4E00003C
CameraInterface0x4F0000000x4F0000A0
APBMemoryMap
UART00x500000000x50000028
UART10x500040000x50004028
UART20x500080000x50008028
PWMTIMER0x510000000x51000040
USBDEVICE0x520001400x5200026c
WATCHDOGTIMER0x530000000x53000008
IIC0x540000000x54000010
IIS0x550000000x55000010
AC970x5b0000000x5b00001C
I/OPORT
A0x560000000x56000004
B0x560000040x56000018
C0x560000200x56000028
D0x560000300x56000038
E0x560000400x56000048
F0x560000500x56000058
G0x560000600x56000068
H0x560000700x56000078
J0x560000d00x560000d8
other0x560000800x560000cc
RTC0x570000400x57000088
ADC0x580000000x58000014
SPI0x590000000x59000034
SDInterface0x5a0000000x5a000040
总结:AHB总线上的译码器根据地址产生相应的片选信号,选中对应的设备。AHB总线上有一个AHBtoAPB桥,桥是AHB总线的从设备,是APB总线上唯一的主设备。桥是一个协议转换器(AHB协议到APB协议的转换),它还要完成APB总线的地址译码工作。