Chinaunix首页 | 论坛 | 博客
  • 博客访问: 585360
  • 博文数量: 119
  • 博客积分: 6010
  • 博客等级: 准将
  • 技术积分: 1583
  • 用 户 组: 普通用户
  • 注册时间: 2008-08-15 09:18
文章分类

全部博文(119)

文章存档

2011年(3)

2010年(21)

2009年(44)

2008年(51)

我的朋友

分类:

2008-11-12 16:13:22

对于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;
     
     
阅读(8427) | 评论(1) | 转发(0) |
给主人留下些什么吧!~~

seeking1994172015-10-29 09:22:05

(0x4001 1000-0x4000 0000)+0x10中的0x4000 0000代表什么??