初级会员

- 积分
- 59
- 金钱
- 59
- 注册时间
- 2016-9-10
- 在线时间
- 17 小时
|
以下所说的都是我自己理解的,我是很白的小白,学东西不喜欢学的似懂非懂,所以把我的感悟写下来,这里可能错误百出,但是我说服了我自己。请大神指出我的错误,共同进步。
RS通过硬件与A10相连,CS通过硬件选择了Bank1的区四,那么我们就可以知道基地址是0X6C000000。接着推算A10的偏移量。地址是内存的编号,且每一个字节就要有一个地址值。这一点要清楚。
0x6C00000 0000 (我将最后一位16进制转成了2进制 书写有些不规范)
0x6C00000 0001 这两个对应的是 A0 (为什么A0对应两个地址值(两个字节)? 因为外设是16位的。)哪到底用谁来映射A0呢?
此时我们将上面的地址右移一位 (只关注最后一个16进制位) 变成了 0000 它就是A0的地址,A0 = 0
A1 0x6C00000 0010 0x6C00000 0011 右移一位 为0001 此时A1 = 0
如何快速找到A10: A10在32内部 111,1111,1110 相当于(A10 A9 A8 A7 A6 A5 A4 A3 A2 A1 A0),(只是满足这样的规律,真正的地址不是一位)。然后右移一位 011,1111,1111 对应到A10 此时A10 = 0,即LCD_REG = 0。
结构体是一片连续的内存,且程序中定义的结构体类型成员是16位,那么LCD_RCG 在32内部位 为111,1111,1111 这不对, 因为这个应该是A10的第二个字节的地址。 正确的是1000,0000,0000 它右移一位 0100,0000,0000 此时A11 = 0 A10 = 1 即 LCD_RCG = 1. 第一次作为生产者发帖。 好鸡冻。
|
|