阅读:1676回复:5
在inter pxa255或者250cpu上做过gpio程序的进来看看
我想编写一个程序控制pxa255的gpio某些引脚的输出信号,大家看看下面的代码
#include \"xsc1.h\" volatile GPIO_REGS *pGPIOReg = NULL; if(!pGPIOReg) { if(!(pGPIOReg=(volatile GPIO_REGS *)VirtualAlloc(0,0x1000,MEM_RESERVE,PAGE_NOACCESS))) { RETAILMSG(1, (TEXT(\"VirtualAlloc() failed!\\r\\n\")) ); } else if(!VirtualCopy((PVOID)pGPIOReg,(PVOID)GPIO_BASE_U_VIRTUAL,0x1000, PAGE_READWRITE|PAGE_NOCACHE)) { VirtualFree((PVOID)pGPIOReg, 0, MEM_RELEASE); pGPIOReg = NULL; RETAILMSG(1, (TEXT(\"VirtualCopy() failed!\\r\\n\")) ); } else { RETAILMSG(1, (TEXT(\"VirtualCopy() succeed!\\r\\n\"))); } } //Disable GPIO Alternative Function pGPIOReg->GAFR0_x &= ~GPIO_3_AF3; //Set GPIO Direction as Output pGPIOReg->GPDR_x |= GPIO_3; //Set GPIO Level High pGPIOReg->GPSR_x |= GPIO_3; //Set GPIO Level Low pGPIOReg->GPCR_x |= GPIO_3; return TRUE; 程序能够成功运行,只是不能控制gpio信号,大家帮我看看问题可能出在哪里? |
|
沙发#
发布于:2004-04-26 11:25
没有人 ,自己顶
|
|
板凳#
发布于:2004-07-07 17:02
你把//Set GPIO Level High
pGPIOReg->GPSR_x |= GPIO_3; 或者 //Set GPIO Level Low pGPIOReg->GPCR_x |= GPIO_3; 拿掉一个,很显然这两者冲突 |
|
地板#
发布于:2004-07-07 18:26
我记不大清楚了,250中,设置GPIO为output是写1吗,查一下吧
|
|
|
地下室#
发布于:2004-07-08 08:33
没错,是在GPDR寄存器中写1,这样就定义为输出引脚。也只有定义为输出引脚,GPSR与GPCR的设置才会有效,否则会被忽略。
我说的这两者冲突实际上也并不是冲突,表达不当,你代码的最后将GPIO3设置为低电平。 |
|
5楼#
发布于:2004-07-08 09:49
Set GPIO Level High之后最好延时一下,再Set GPIO Level Low
|
|