1.其实位绑定并不需要我们去做绑定操作,他是本身就联系在一起的了,我们只需计算出他的地址就可以直接操作了。
2.系统只对一下两组地址做了位绑定,也就是只有在一下两组地址内的才可以进行位绑定操作:
------SRM区: 0x2000 0000 -- 0x200F FFFF
------片上外设区: 0x4000 0000 -- 0x400F FFFF
3.对应地址的计算办法:
------SRM区: 关联的地址=0x2200 0000 +( (A-0x2000 0000)*8 + n)*4
-------------解析: A:原来的地址
---------------------*8:因为每个地址对应一个字节,一个字节有8位
---------------------n: 代表在这个字节中的第几位
---------------------*4:因为每一位对应一个字(不是字节),一个字是4个字节的,就是32位。也就是说原来地址中的每一位对应新地址中的32位。这样做的目的是因为32位的系统,一个指令周期就可以操作一个32位的数,这样比你拿原来的地址进行位的与或操作快。
------片上外设区: 关联的地址=0x4200 0000 + ((A-0x4000 0000)*8 + n)*4
4.例子:
------u32 *PAI11=(u32*)(0x4200 0000 + ((0x4001 0808 - 0x4000 0000)*8 +11)*4)
------等同于:
------u32 *PAI11=(u32*)(0x4200 0000 + ((0x4001 0809 - 0x4000 0000)*8 +3)*4)
------然后就直接操作就可以了,只看最后一位,也就是: *PAI11 = 0 和 =2 、=4 ...都一样,对应位为0;;; *PAI11 = 1 和 =3....都一样,对应位为1。
5.例子,采用宏定义的方法处理: