请教访问GPIO的结构体IOPreg的意义

caesar1980   2008-9-18 09:15 楼主
小弟用2440,操作GPIO的的时候,需要把IO口映射到如下的结构体中
typedef struct  {
                unsigned int  rGPACON;                        // 00
                unsigned int  rGPADAT;
                unsigned int  rPAD1[2];
   
                unsigned int  rGPBCON;                        // 10
                unsigned int  rGPBDAT;
                unsigned int  rGPBUP;
                unsigned int  rPAD2;
   
                unsigned int  rGPCCON;                        // 20
                unsigned int  rGPCDAT;
                unsigned int  rGPCUP;
                unsigned int  rPAD3;
   
                unsigned int  rGPDCON;                        // 30
                unsigned int  rGPDDAT;
            unsigned int  rGPDUP;
            unsigned int  rPAD4;
   
                unsigned int  rGPECON;                        // 40
                unsigned int  rGPEDAT;
                unsigned int  rGPEUP;
                unsigned int  rPAD5;
   
                unsigned int  rGPFCON;                        // 50
                unsigned int  rGPFDAT;
                unsigned int  rGPFUP;
                unsigned int  rPAD6;
   
                unsigned int  rGPGCON;                        // 60
                unsigned int  rGPGDAT;
                unsigned int  rGPGUP;
                unsigned int  rPAD7;
   
                unsigned int  rGPHCON;                        // 70
                unsigned int  rGPHDAT;
                unsigned int  rGPHUP;
                unsigned int  rPAD8;
   
                unsigned int  rMISCCR;                        // 80
                unsigned int  rDCKCON;               
                unsigned int  rEXTINT0;
                unsigned int  rEXTINT1;               
                unsigned int  rEXTINT2;                        // 90
                unsigned int  rEINTFLT0;
                unsigned int  rEINTFLT1;
                unsigned int  rEINTFLT2;
                unsigned int  rEINTFLT3;                // A0
                unsigned int  rEINTMASK;
                unsigned int  rEINTPEND;
                unsigned int  rGSTATUS0;                // AC
                unsigned int  rGSTATUS1;                // B0
                unsigned int  rGSTATUS2;                // B4 ;;; SHL
                unsigned int  rGSTATUS3;                // B8
                unsigned int  rGSTATUS4;                // BC
       
                unsigned int  rFLTOUT;                        // C0
                unsigned int  rDSC0;
                unsigned int  rDSC1;
                unsigned int  rMSLCON;

                unsigned int  rGPJCON;                        // D0
                unsigned int  rGPJDAT;
                unsigned int  rGPJUP;
                unsigned int  rPAD9;
       
}IOPreg;

找了很久也找不到这个结构体的说明,比如我要设置IO口是输入还是输出的要怎么设置,这个参数是什么含义???

回复评论 (11)

一般来说,BSP里会把soc的很多寄存器映射到一个结构体(就是楼主贴的这一堆),然后通过MmMapIOSpace等函数把这个结构体和寄存器映射起来。
所以结构体的顺序一定要和寄存器的layout顺序一致,这样才能一一映射嘛。
楼主要先阅读soc手册的找到相应的寄存器。
点赞  2008-9-18 10:43
楼主,如果是在2410的平台上,wince4.2或者wince4.2升级wince5.0的BSP,那么这个文件在HALL\INC下面的2410.h里面
这个东西很有趣,使用一个32位地址绑定到IOPreg,然后根据C语言的结构体存储特点,来访问unsigned int  rGPJUP这些寄存器,unsigned int  在PB下刚好占据4个字节,刚好和这些寄存器的物理地址互相之间相差4个字节想吻合,所以就可以通过IOPreg来访问这些寄存器了。
在别的平台上你只要仔细找找BSP下面的文件,你也可以找到。别担心,就是那几个文件而已,你看过几次自然胸有成竹了
点赞  2008-9-18 11:13
LS,我也找到这个文件,并且已经可以操作GPIO的输入输出,只是我想知道这个结构体的具体定义,每个参数分别是什么意思,因为之后,我想应该会有说明档吧,我用的是2440,结构定义上好象和2410差不多,请知道的出来说一下!!!
点赞  2008-9-19 08:16
引用: 引用 3 楼 linchunfu 的回复:
LS,我也找到这个文件,并且已经可以操作GPIO的输入输出,只是我想知道这个结构体的具体定义,每个参数分别是什么意思,因为之后,我想应该会有说明档吧,我用的是2440,结构定义上好象和2410差不多,请知道的出来说一下!!!


-------------看这些变量的名字就知道是2440/2410的端口啊,寄存器了。你看看2440的数据手册就知道了
点赞  2008-9-19 08:25
结构体变量的意义要通过IOPREG这个东西来确定是什么意思,通常会把IOPREG绑定到一个寄存器的地址上,然后就可以通过+4来访问下一个寄存器了
点赞  2008-9-19 08:26
顶下楼上的,说得很清楚.在2440.H的文件中会把这些变量与具体的地址绑起来的,你直接操作这些IO就可以了啊
点赞  2008-9-19 09:01
明白了,之前没去看s3c2440的文档,还想再问一下,我不是太明白pull up上拉是什么意思,pull up对于一个pin来说具体的意义应该是什么,如果我要定义按键pin脚的话,是不是应该定义pull up为enable
点赞  2008-9-19 09:32
引用: 引用 7 楼 linchunfu 的回复:
明白了,之前没去看s3c2440的文档,还想再问一下,我不是太明白pull up上拉是什么意思,pull up对于一个pin来说具体的意义应该是什么,如果我要定义按键pin脚的话,是不是应该定义pull up为enable


----------我也是初学者,这个按键引脚我也没有试过,不过我觉得这个上拉应该和单片机的上拉的意思和作用是一样的,上拉一般是指一端拉接上高电平(通过软件控制ARM9内部的一个MOS管脚导通,具体看单片机的做法,好像2440的芯片手册没有讲得那么详细)一般用来读外部引脚的的电平状态。总之你多看BSP的驱动源码,你自然会知道是怎么回事。
点赞  2008-9-19 10:05
pull up上拉,有时也有可能是上升沿看具体语境了.
点赞  2008-9-19 18:19
具体看看datasheet应该能明白的
点赞  2008-9-20 10:48
学习一下,俺也在这个定义~~
点赞  2010-6-21 20:34
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复