当前位置: 代码迷 >> WinCE >> S5PV210的IO配置,不知哪里出了有关问题,请
  详细解决方案

S5PV210的IO配置,不知哪里出了有关问题,请

热度:83   发布时间:2016-04-28 12:03:44.0
S5PV210的IO配置,不知哪里出了问题,请高手指点

//调用
void CTestGPIODlg::OnBnClickedButOn()
{
DeviceIoControl(m_hGPIO,IO_CTL_GPH0_1_ON,NULL,0,NULL,0,NULL,NULL);
}

void CTestGPIODlg::OnBnClickedButtOff()
{
DeviceIoControl(m_hGPIO,IO_CTL_GPH0_1_OFF,NULL,0,NULL,0,NULL,NULL);
}

void CTestGPIODlg::OnBnClickedButRead()
{
                     BYTE result;
result=DeviceIoControl(m_hGPIO,IO_CTL_GPH0_0_state,NULL,0,NULL,0,NULL,NULL);
}

//初始化
BOOL Init_GPIO_Fun()
{
BOOL bResult = TRUE;
PHYSICAL_ADDRESS ioPhysicalBase = {0, 0};
// GPIO Virtual alloc
ioPhysicalBase.LowPart = BASE_REG_PA_GPIO;
g_pIOPregs = (PGPIO_REG)MmMapIoSpace(ioPhysicalBase, sizeof(GPIO_REG), FALSE);
if(g_pIOPregs == NULL)
{
ERRMSG((TEXT("[GPIO] For pGPIOregs: MmMapIoSpace failed!\r\n")));
bResult = FALSE;
}
else
{
g_pIOPregs->GPH0.GP_DRV_SR = 0XFFFF; //DRV:MAX  (0,1)<<2*X 00->1X 01->2*X MAX:4X
g_pIOPregs->GPH0.GP_PUD=0XAAAA; //UP  (0,1)<<2*X          00 PULL DISABLE 
g_pIOPregs->GPH0.GP_CON &= ~(0x0F << 0);
g_pIOPregs->GPH0.GP_CON &= ~(0x0F << 4);
g_pIOPregs->GPH0.GP_CON |= (0x01 << 4);
g_pIOPregs->GPH0.GP_DAT &= ~(0x01 << 1);
}

return bResult;
}
//处理
BYTE PIO_IOControl(
           DWORD  hOpenContext,
      DWORD  dwCode,
   PBYTE  pBufIn,
   DWORD  dwLenIn,
   PBYTE  pBufOut,
   DWORD  dwLenOut,
   PDWORD pdwActualOut )
{
BYTE retVal;
RETAILMSG(1, (TEXT("::: SPL_IOControl.\r\n")));
retVal=0;
switch( dwCode )
{
case IO_CTL_GPH0_1_ON:
g_pIOPregs->GPH0.GP_DAT |= (0x01 << 1);// OUTPUT high
break;
case IO_CTL_GPH0_1_OFF:
g_pIOPregs->GPH0.GP_DAT &= ~(0x01 << 1);// OUTPUT LOW
break;
break;
case IO_CTL_GPH0_0_state:
retVal=g_pIOPregs->GPH0.GP_DAT;
break;
}
   RETAILMSG(1,(TEXT("g_pIOPregs->GPH0.GP_CON is 0x%x\r\n"), g_pIOPregs->GPH0.GP_CON));
   RETAILMSG(1,(TEXT("g_pIOPregs->GPH0.GP_PUD is 0x%x\r\n"), g_pIOPregs->GPH0.GP_PUD));
   RETAILMSG(1,(TEXT("g_pIOPregs->GPH0.GP_DRV_SR is 0x%x\r\n"), g_pIOPregs->GPH0.GP_DRV_SR));
   RETAILMSG(1,(TEXT("g_pIOPregs->GPH0.GP_DAT is 0x%x\r\n"), g_pIOPregs->GPH0.GP_DAT));
return retVal;
}

IO口输出控制有问题,输入也有问题。通过串口输出信息,参数应当都是对的。
g_pIOPregs->GPH0.GP_CON is 0x11fff010
g_pIOPregs->GPH0.GP_PUD is 0xaaaa
g_pIOPregs->GPH0.GP_DRV_SR is 0xffff
g_pIOPregs->GPH0.GP_DAT is 0xfd

------解决方案--------------------
你既然代码修改出来的值是对的,那么你说的输入输出有问题是指什么?寄存器如果配置是正确的,那么是不是应该找找硬件原因。
------解决方案--------------------
接分啦....
------解决方案--------------------
做嵌入式,一定要有怀疑是硬件原因引起问题的
------解决方案--------------------
引用:
结果发现是硬件的问题。散分。。。。

原来早就决解了。
------解决方案--------------------

解决得好快!
------解决方案--------------------
这看起来很 高大上啊
------解决方案--------------------
谢谢楼主。接分同时学了代码
------解决方案--------------------
我被散分两个字深深地打动了。。。。。
------解决方案--------------------
冲着散分来的,哈哈。我也做嵌入式。
------解决方案--------------------
楼主是来炫耀的~
鼓掌

平均散分吧
------解决方案--------------------
混口饭吃的~!
  相关解决方案