对于cortex-m3 来说可以进行位带操作,下面就STM32F103这款芯片说一下位别名区的地址是如何设计的。
如我想控制PC4 I/O 输出高低电平则计算如下:
公式:位别名地址=0x42000000(外设区位别名基地址) + 外设区位字节地址偏移量× 32 + 操作位号(0~7) × 4
1-位别名地址:
对于Cortex-M3来说其内部有2个位带寻址区
1)内部SRAM位别名基地址地址 0x22000000
2)片内外设区位别名基地址 0x42000000
这里我举个I/O控制的例子,则应该选0x42000000。
2-外设区位字节地址偏移量:
查手册可知道 如果要设置或复位某个I/O管脚则只需要 设置GPIO_BSRR 和 GPIO_BRR这两个寄存器的响应位即可。
那么偏移量地址是如何算的呢?首先从手册的内存地址可以看出来,GPIOC寄存器区的起始地址为0x4001 1000然后再查GPIO_BSRR 及 GPIO_BRR寄存器的地址偏移量为 0x10 及0x14.
所以其总地址偏移量分别为 [(0x4001 1000-0x4000 0000)+0x10] 及
[(0x4001 1000-0x4000 0000)+0x14]
3-操作位号:
n=4;及 该寄存器第四位。
所以其位带别名地址为:
1)0x42000000+ [(0x4001 1000-0x4000 0000)+0x10] * 32 + 4*4 =0x42220210;
2)0x42000000+ [(0x4001 1000-0x4000 0000)+0x14] * 32 + 4*4 =0x42220290;
阅读(8521) | 评论(1) | 转发(0) |