首页 > 其他 > 详细

位绑定操作

时间:2016-05-10 23:18:12      阅读:409      评论:0      收藏:0      [点我收藏+]
  • 总存储空间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)

     

位绑定操作

原文:http://www.cnblogs.com/alfred-yang/p/5479734.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!