S3C2440是SOC(system on chip),板载CPU,内存管理器,GPIO控制器,协议类接口,内存类接口,NAND控制器等。
CPU和内存类接口:
其中ARM9为32位处理器,可是一般在实际只用到其中27条地址线。
对不同位宽的设备,有不同的处理方式。
当执行语句:
mov r0 #3
LdrB r1 [r0] //r1寄存器读取地址3处的一个字节
CPU地址 | 内存控制器转发给ROM | ROM返回数据 | 内存控制器处理数据 | |
8bitROM | 0011 | 0011 | 8bit(3) | 接收8bit(3) |
16bitROM | 0011 | 0001 | 16bit(1) | 接收16bit(1),并读取要的地址3内容 |
32bitROM | 0011 | 0000 | 32bit(0) | 接收32bit(0),并读取要的地址3内容 |
现在改一下
mov r0 #4
Ldr r1 [r0] //现在一次读取四个字节 从地址4开始读取,读取地址 4,5,6,7处的内容
CPU地址 | 内存控制器转发给ROM | ROM返回数据 | 内存控制器处理数据 | |
8bitROM | 0100 | 0100 0101 0110 0111 |
得到地址4的1byte 得到地址5的1byte ... |
之后将4byte组装完成后,再传个CPU |
16bitROM | 0100 | 0010 0011 |
得到地址2的2byte,和地址3的2byte | 同上 |
32bitROM | 0100 | 0000 0001 |
得到地址0的1byte 和地址1的3byte |
同上 |
怎么确定芯片访问地址呢?
1.根据片选信号确定基地址
2.根据芯片所接地址线,确定范围。