sunshine_fl
驱动牛犊
驱动牛犊
  • 注册日期2002-08-22
  • 最后登录2005-09-23
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:1611回复:5

在inter pxa255或者250cpu上做过gpio程序的进来看看

楼主#
更多 发布于:2004-04-24 10:39
我想编写一个程序控制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信号,大家帮我看看问题可能出在哪里?
sunshine_fl
驱动牛犊
驱动牛犊
  • 注册日期2002-08-22
  • 最后登录2005-09-23
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2004-04-26 11:25
没有人 ,自己顶
chephia
驱动牛犊
驱动牛犊
  • 注册日期2004-07-07
  • 最后登录2005-05-12
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2004-07-07 17:02
你把//Set GPIO Level High
pGPIOReg->GPSR_x |= GPIO_3;
或者
//Set GPIO Level Low
pGPIOReg->GPCR_x |= GPIO_3;
拿掉一个,很显然这两者冲突
microsun
论坛版主
论坛版主
  • 注册日期2002-11-11
  • 最后登录2014-07-18
  • 粉丝0
  • 关注0
  • 积分1052分
  • 威望1159点
  • 贡献值0点
  • 好评度848点
  • 原创分0分
  • 专家分0分
地板#
发布于:2004-07-07 18:26
我记不大清楚了,250中,设置GPIO为output是写1吗,查一下吧
学海无涯
chephia
驱动牛犊
驱动牛犊
  • 注册日期2004-07-07
  • 最后登录2005-05-12
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2004-07-08 08:33
没错,是在GPDR寄存器中写1,这样就定义为输出引脚。也只有定义为输出引脚,GPSR与GPCR的设置才会有效,否则会被忽略。
我说的这两者冲突实际上也并不是冲突,表达不当,你代码的最后将GPIO3设置为低电平。
wchsuperman
驱动牛犊
驱动牛犊
  • 注册日期2004-03-02
  • 最后登录2005-11-26
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2004-07-08 09:49
Set GPIO Level High之后最好延时一下,再Set GPIO Level Low
游客

返回顶部