回答

收藏

【赚周年币】技术贴Week1-Day5——找GPIO寄存器?

#线上活动 #线上活动 2023 人阅读 | 0 人回复 | 2017-01-02



手把手教你找GPIO寄存器 IODIR 定义  
手把手教你找寄存器定义
一直就很纳闷,没有一个 向 c8051f410.h的头文件定义特殊功能寄存器,找不见定义,使用起来就无从下手 ,心里总是不舒坦 ;
    从网上看了一些帖子,都说就是在头文件里(我也是这么认为的,肯定要有定义的,不然无法调用)  
StartUp{        ………..        ……….
GEL_MapAdd(0x3400u,2,0x0400u,1,1);        /* GPIO 1KW */         ………..          }
这段映射 0x3400u 为 GPIO空间,其实只是表示这段 i/o空间可读可写;

下面是我一步一步地追踪,这些都是要用到的宏定义;

#define PREG16(addr) (*(volatile ioport Uint16*)(addr))

从一个 ioport Uint16*类型的 地址中取出 地址内容,就是IODIR寄存器的值了

#define _GPIO_IODIR_ADDR                                    (0x3400u)  //定义了IO地址常量
#define _GPIO_IODIR                               PREG16(_GPIO_IODIR_ADDR)  //得到寄存器的地址
#define _IODIR                              _GPIO_IODIR   定义了  _IODIR 常量  
#define GPIO_ADDR(Reg)                    _GPIO_##Reg##_ADDR 两个变量合并 #define _PREG_SET(PregAddr, Val)         PREG16(PregAddr) = (Uint16)Val #define   GPIO_RSET(Reg,Val)   _PREG_SET(GPIO_ADDR(##Reg),Val)

从这个宏定义开始
  1:GPIO_RSET(IODIR,1)
   这句很明显了,把IODIR寄存器的值置 1     

2:_PREG_SET(GPIO_ADDR(##IODIR),1)   利用这两个宏
    #define   GPIO_RSET(Reg,Val)   _PREG_SET(GPIO_ADDR(##Reg),Val)       #define GPIO_ADDR(Reg)                    _GPIO_##Reg##_ADDR         分解的到
         a:GPIO_ADDR(IODIR)                    _GPIO_##Reg##_ADDR              _GPIO_ IODIR _ADDR  
         b:_PREG_SET(_GPIO_ IODIR _ADDR,1)      

3:接下来
         #define _PREG_SET(PregAddr, Val)         PREG16(PregAddr) = (Uint16)Val      
          PREG16(_GPIO_ IODIR _ADDR)  =1;   

     4::#define PREG16(addr) (*(volatile ioport Uint16*)(addr)) *  
          *(_GPIO_ IODIR _ADDR) = 1;      

5:  这句就简单了 *(0x3400u) = 1;

究竟 IODIR 是在哪里定义的呢?
   开始我也很迷惑,仔细想想后,惶然大悟,快乐!!
     问题出在,这些都是宏语句,执行编译前,就已经把 GPIO_RSET(IODIR,1) 翻译成*(0x3400u) = 1;
       编译器不认识IODIR ,而 IODIR在直到
  #define GPIO_ADDR(Reg)                    

_GPIO_##Reg##_ADDR 两个变量合并   

前就是个字符串,连个常量都算不上(不知道这么说确切不,完全是因为它在语句的位置,赋予了它意义)
    跟单片机 类比  SFR   IODIR  = 0X3400;



评分

参与人数 2 +25 收起 理由
EEboard爱板网 + 15 3周发帖养成记 奖励
loveeeboard + 10

查看全部评分

分享到:
回复

使用道具 举报

您需要登录后才可以回帖 注册/登录

本版积分规则

关闭

站长推荐上一条 /3 下一条