位綁定操做

  • 總存儲空間4 GByte,0x0000 0000~0xFFFF FFFF

 

  • 位帶區:   支持位帶操做的地址區
  • 位帶別名:對別名地址的訪問最終做用到位帶區的訪問上(注意:這中間有一個地址映射過程)
  • 支持位綁定區域:
    一、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,詳見例程綁定公式計算。
 
    二、片上外設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)
相關文章
相關標籤/搜索