|
DWORD GPIO_Write(DWORD dwData, LPCVOID pBuf, DWORD Len)
{
BYTE* pdatabuf;
BYTE gpioNum;
BYTE gpioState;
pdatabuf = (BYTE*)pBuf;
gpioNum = *pdatabuf++;
gpioState = *pdatabuf;
RETAILMSG(1,(TEXT("gpioNum : %d\r\n"),gpioNum));
RETAILMSG(1,(TEXT("gpioState : %d\r\n"),gpioState));
if(gpioNum == 3 || gpioNum == 4 || gpioNum == 9) //这里可以选择你要用的gpio口 GPIO0-31由寄存器GPDR0 GPSR0 GPCR0控制
{
//GPIO32-63 由GPDR1...控制 GPIO64-95由GPDR2...控制
if(gpioState == 1)
//GPIO96- 由GPDR3...控制
{
g_pGPIORegs->GPDR0 |= (1<
g_pGPIORegs->GPSR0 |= (1<
}
else
{
g_pGPIORegs->GPDR0 |= (1<
g_pGPIORegs->GPCR0 |= (1<
}
}
else if(gpioNum == 101 || gpioNum ==102 || gpioNum == 103 || gpioNum == 104)
{
if(gpioState == 1)
{
g_pGPIORegs->GPDR3 |= (1<<(gpioNum % 32));
g_pGPIORegs->GPSR3 |= (1<<(gpioNum % 32));
}
else
{
g_pGPIORegs->GPDR3 |= (1<<(gpioNum % 32));
g_pGPIORegs->GPCR3 |= (1<<(gpioNum % 32));
}
}
return 1;
}
DWORD GPI_Read(DWORD dwData, LPVOID pBuf, DWORD Len)
{
BYTE* pdatabuf;
BYTE gpioNum;
pdatabuf = (BYTE*)pBuf;
gpioNum = *pdatabuf++;
if(gpioNum == 3 || gpioNum ==4 || gpioNum == 9)
{
*pdatabuf =(g_pGPIORegs->GPLR0 & (1<
}
if(gpioNum == 101 || gpioNum ==102 || gpioNum == 103 || gpioNum == 104)
{
*pdatabuf =(g_pGPIORegs->GPLR3 & (1<<(gpioNum % 32)))?1:0;
}
RETAILMSG(1,(TEXT("state: %d\r\n"),*pdatabuf));
return 1;
}
看这两个例程我感到很困惑 这里既没有对LEN做出处理 我想同时读2个gpio的状态都不行 还有里面只对部分寄存器进行了操作? |
|