IO口流驱动
输出引脚合适,读引脚去读不进来,(输入输出用的是不同的引脚)!
下面是读端口的流驱动:
DWORD GPI_Read(DWORD dwData, LPVOID pBuf, DWORD Len)
{
BYTE* pdatabuf;
BYTE gpioNum;
BYTE gpioState;
pdatabuf = (BYTE*)pBuf;
gpioState= *pdatabuf ;
gpioNum = *pdatabuf++;
RETAILMSG(1,(TEXT("*****GPILED: GPI_Read\r\n")));
if(gpioNum == 0 || gpioNum == 1 || gpioNum == 2|| gpioNum == 3)
{
*pdatabuf =(v_pIOPregs->GPFDAT & (1<<gpioNum))?1:0;
}
RETAILMSG(1,(TEXT("state: %d\r\n"),*pdatabuf));
//---read pins-----
//------------PB7------12-----read single ---in 0-----
if(gpioNum == 12)
{
v_pIOPregs->GPBCON &= ~(1<<(14));//00 input
v_pIOPregs->GPBCON &= ~(1<<(15));
v_pIOPregs->GPBUP &= ~(1<< 7);
if(v_pIOPregs->GPBDAT & ( 1 <<7))
gpioState = 1;
else
gpioState = 0;
RETAILMSG(1,(TEXT("state: %d\r\n"),gpioNum));
}
//--------------PB9----13----read single -----in 1---
if(gpioNum == 13)
{
v_pIOPregs->GPBCON &= ~(1<<(18));
v_pIOPregs->GPBCON &= ~(1<<(19));
v_pIOPregs->GPBUP &= ~(1<<9);
if(v_pIOPregs->GPBDAT & ( 1 <<9))
gpioState = 1;
else
gpioState = 0;
RETAILMSG(1,(TEXT("state: %d\r\n"),gpioNum));
}
//---------PE11--------14-----read single------in 2---------
if(gpioNum == 14)
{
v_pIOPregs->GPECON &= ~(1<<(22));
v_pIOPregs->GPECON &= ~(1<<(23));
v_pIOPregs->GPEUP &= ~(1<<11);
if(v_pIOPregs->GPEDAT & ( 1 <<11))
gpioState = 1;
else
gpioState = 0;
RETAILMSG(1,(TEXT("state: %d\r\n"),gpioNum));
}
//---------PE12------15------read single-----in 3---------
if(gpioNum == 15)
{
v_pIOPregs->GPECON &= ~ (1<<(24));
v_pIOPregs->GPECON &= ~(1<<(25));
v_pIOPregs->GPEUP &= ~(1<<12);
if(v_pIOPregs->GPEDAT & ( 1 <<12))
gpioState = 1;
else
gpioState = 0;
RETAILMSG(1,(TEXT("state: %d\r\n"),gpioNum));
}
//---------PE13-----16--------read single---in 4--------
if(gpioNum == 16)
{
v_pIOPregs->GPECON &= ~ (1<<(26));
v_pIOPregs->GPECON &= ~ (1<<(27));
v_pIOPregs->GPEUP &= ~ (1<<13);
if(v_pIOPregs->GPEDAT & ( 1 <<13))
gpioState = 1;
else
gpioState = 0;
RETAILMSG(1,(TEXT("state: %d\r\n"),gpioNum));
}
return 1;
}