- 总存储空间4 GByte,0x0000 0000~0xFFFF FFFF
- 位带区: 支持位带操作的地址区
- 位带别名:对别名地址的访问最终作用到位带区的访问上(注意:这中间有一个地址映射过程)
- 支持位绑定区域:
1、SRAM区1 MByte, 位带区字节地址 A=0x2000 0000~0x200F FFFF,位序号 n=0~7
别名区地址 AliasAddr = 0x2200 0000 + ((A-0x2000 0000)*8 + n)*4
= 0x2200 0000 + (A-0x2000 0000)*32 + n*4
说明:A为所在字节,每个字节8位,再加第n位。最后乘4因为一位的地址有4个字节。只能一次处理32位数据,故每个位绑定的地址是32位。
如果A是ODR寄存器基址(ODR为32位,低16位有效),也可以n=0~15,详见例程绑定公式计算。
2、片上外设1 MByte, A=0x4000 0000~0x400F FFFF
AliasAddr = 0x4200 0000 + (A-0x4000 0000)*32 + n*4
- 代码实现
1 #define GPIOA_ODR_A (GPIOA_BASE+0x0c)//A口输出寄存器 ODR 基地址 2 #define GPIOA_IDR_A (GPIOA_BASE+0x08) 3 #define GPIOB_ODR_A (GPIOB_BASE+0x0c) 4 #define GPIOB_IDR_A (GPIOB_BASE+0x08) 5 #define GPIOC_ODR_A (GPIOC_BASE+0x0c) 6 #define GPIOC_IDR_A (GPIOC_BASE+0x08) 7 #define GPIOD_ODR_A (GPIOD_BASE+0x0c) 8 #define GPIOD_IDR_A (GPIOD_BASE+0x08) 9 #define GPIOE_ODR_A (GPIOE_BASE+0x0c) 10 #define GPIOE_IDR_A (GPIOE_BASE+0x08) 11 12 #define BitBand(Addr,BitNum) *((volatile unsigned long *)((Addr&0xF0000000)+0x02000000 + ((Addr&0x000FFFFF)<<5) + (BitNum<<2)))//BitNum=0~15 13 14 #define PAOut(n) BitBand(GPIOA_ODR_A,n) 15 #define PAIn(n) BitBand(GPIOA_IDR_A,n) 16 #define PBOut(n) BitBand(GPIOB_ODR_A,n) 17 #define PBIn(n) BitBand(GPIOB_IDR_A,n) 18 #define PCOut(n) BitBand(GPIOC_ODR_A,n) 19 #define PCIn(n) BitBand(GPIOC_IDR_A,n) 20 #define PDOut(n) BitBand(GPIOD_ODR_A,n) 21 #define PDIn(n) BitBand(GPIOD_IDR_A,n) 22 #define PEOut(n) BitBand(GPIOE_ODR_A,n) 23 #define PEIn(n) BitBand(GPIOE_IDR_A,n)
时间: 2024-10-27 00:41:52