小弟用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口是输入还是输出的要怎么设置,这个参数是什么含义???
一般来说,BSP里会把soc的很多寄存器映射到一个结构体(就是楼主贴的这一堆),然后通过MmMapIOSpace等函数把这个结构体和寄存器映射起来。
所以结构体的顺序一定要和寄存器的layout顺序一致,这样才能一一映射嘛。
楼主要先阅读soc手册的找到相应的寄存器。
楼主,如果是在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下面的文件,你也可以找到。别担心,就是那几个文件而已,你看过几次自然胸有成竹了
LS,我也找到这个文件,并且已经可以操作GPIO的输入输出,只是我想知道这个结构体的具体定义,每个参数分别是什么意思,因为之后,我想应该会有说明档吧,我用的是2440,结构定义上好象和2410差不多,请知道的出来说一下!!!
引用: 引用 3 楼 linchunfu 的回复:
LS,我也找到这个文件,并且已经可以操作GPIO的输入输出,只是我想知道这个结构体的具体定义,每个参数分别是什么意思,因为之后,我想应该会有说明档吧,我用的是2440,结构定义上好象和2410差不多,请知道的出来说一下!!!
-------------看这些变量的名字就知道是2440/2410的端口啊,寄存器了。你看看2440的数据手册就知道了
结构体变量的意义要通过IOPREG这个东西来确定是什么意思,通常会把IOPREG绑定到一个寄存器的地址上,然后就可以通过+4来访问下一个寄存器了
顶下楼上的,说得很清楚.在2440.H的文件中会把这些变量与具体的地址绑起来的,你直接操作这些IO就可以了啊
明白了,之前没去看s3c2440的文档,还想再问一下,我不是太明白pull up上拉是什么意思,pull up对于一个pin来说具体的意义应该是什么,如果我要定义按键pin脚的话,是不是应该定义pull up为enable
引用: 引用 7 楼 linchunfu 的回复:
明白了,之前没去看s3c2440的文档,还想再问一下,我不是太明白pull up上拉是什么意思,pull up对于一个pin来说具体的意义应该是什么,如果我要定义按键pin脚的话,是不是应该定义pull up为enable
----------我也是初学者,这个按键引脚我也没有试过,不过我觉得这个上拉应该和单片机的上拉的意思和作用是一样的,上拉一般是指一端拉接上高电平(通过软件控制ARM9内部的一个MOS管脚导通,具体看单片机的做法,好像2440的芯片手册没有讲得那么详细)一般用来读外部引脚的的电平状态。总之你多看BSP的驱动源码,你自然会知道是怎么回事。
pull up上拉,有时也有可能是上升沿看具体语境了.