WinCE开发GPIO驱动,需要了解寄存器知识吗?
才接触WinCE,嵌入式开发,网上看文章说:通过GPIO控制设备,是通过虚拟寄存器来实现的
“GPIO是ARM芯片最基本的输入输出通道,在ADS下操作就是一个单片机工作,
直接读写其寄存器.在ARM9平台上,Windows CE系统将GPIO的实地址(例如2410的
GPIO的基地址为0x56000000)映射到虚拟地址空间(GPIO对应为0xB1600000),
这样,通过对这段虚拟地址空间的操作,就能够完成对GPIO或者其他片内资源的
控制、输入、输出工作.”
以前一直做应用系统开发,也做过linux下ARM的简单字符设备驱动,但都没有涉及到
寄存器的相关知识,请问大侠们:我现在要通过GPIO读取一些传感器的状态数据,做这个驱动,
需要了解寄存器的知识不?如果需要,需要了解哪些知识?
请高手指点,非常感谢!!!
不需要什么,上拉,下拉,配置成输入,输出,读写等即可。
这个简单,写个流驱动,地址映射问题不用管,直接virtualalloc和virtualcopy就行,配置一下IO口,把它配成输入输出的就行,这个看一下datasheet就知道,然后就可以操作IO口了,
在驱动也就是对GPIO进行输入,输出操作。关键是要把物理地址映射成虚拟地址。调用virtualalloc 和virtualcopy即可 。虚拟过来后,对寄存器的操作和没操作系统下是一样的!
下面这个结构,每一行都表示什么呀?
网上找了好久,都没有找到解释,麻烦高人们解释一下嘛:每一行定义代表什么?
不胜感激!!
// Registers : I/O port
#define IOP_BASE 0xB1600000 //0x56000000
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
unsigned int rGSTATUS3; //B8
unsigned int rGSTATUS4; //BC
}IOPreg;
了解一下,你用的是哪一个GPIO口,找到对应用控制寄存器器对应位,就可以了,比如说 GPK6,你就找GPKCON ,GPKDAT
这只是用来操作CPU寄存器的一个结构体而已,没有什么特别的意义
里面的结构成员可以理解成对应的CPU寄存器
要做GPIO驱动开发,先去研读一下CPU SPEC中关于GPIO的一章节,然后找一个有用到GPIO控制的驱动代码看一下
模仿着就可以开始做了,没有什么复杂的
只是一个结构体而已,你看成是一个定义就可以了,我觉得没有什么讲的 呵呵
这个东西我回答了好多次啊。楼主发问没有搜索吗?
这是利用结构体特性来的
首先是定一个结构体指针,指向uncache的IO虚拟地址
这个IO的每个寄存器地址刚好相差4
结构体存储各个成员之间的地址也刚好相差4
所以这样就整好访问到寄存器了。
呵呵,当然需要操作寄存器了。驱动就是跟硬件打交道的。