//调用
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
------解决方案--------------------
你既然代码修改出来的值是对的,那么你说的输入输出有问题是指什么?寄存器如果配置是正确的,那么是不是应该找找硬件原因。
------解决方案--------------------
接分啦....
------解决方案--------------------
做嵌入式,一定要有怀疑是硬件原因引起问题的
------解决方案--------------------
原来早就决解了。
------解决方案--------------------
解决得好快!
------解决方案--------------------
这看起来很 高大上啊
------解决方案--------------------
谢谢楼主。接分同时学了代码
------解决方案--------------------
我被散分两个字深深地打动了。。。。。
------解决方案--------------------
冲着散分来的,哈哈。我也做嵌入式。
------解决方案--------------------
楼主是来炫耀的~
鼓掌
平均散分吧
------解决方案--------------------
混口饭吃的~!