我也遇到的类似的问题,麻烦高手看看
在友善光盘提供的BSP和LEDtest代码中,改动如下代码,想实现GPF5的高低电平变化,可是没能成功
改动文件1:C:\WINCE500\PLATFORM\mini2440\Src\Kernel\Oal\init.c
s2440IOP->GPECON = (s2440IOP->GPECON & ~(0x3<<30)) | (0x1<<30);
s2440IOP->GPECON = (s2440IOP->GPECON & ~(0x3<<28)) | (0x1<<28);
//增加GPF端口初始化
s2440IOP->GPFDAT = 0xF0;
s2440IOP->GPFUP = 0xFF;
s2440IOP->GPFCON = 0x55aa;......
改动文件2:C:\WINCE500\PLATFORM\mini2440\Src\Drivers\LEDdriver\LEDdriver.cpp
#define IO_CTL_LED_4_OFF 0x09
#define IO_CTL_LED_ALL_OFF 0x0a
#define IO_WHJ_ON 0x0b
#define IO_WHJ_OFF 0x0c......
BOOL LEDGpioInit()
{
RETAILMSG(1,(TEXT("LED_Gpio_Setting----\r\n")));
s2440IOP->rGPBCON = (s2440IOP->rGPBCON &~(3 << 10)) | (1<< 10); // GPB5 == OUTPUT.
s2440IOP->rGPBCON = (s2440IOP->rGPBCON &~(3 << 12)) | (1<< 12); // GPB6 == OUTPUT.
s2440IOP->rGPBCON = (s2440IOP->rGPBCON &~(3 << 14)) | (1<< 14); // GPB7 == OUTPUT.
s2440IOP->rGPBCON = (s2440IOP->rGPBCON &~(3 << 16)) | (1<< 16); // GPB8 == OUTPUT.
s2440IOP->rGPFCON = (s2440IOP->rGPFCON &~(3 << 10)) | (1<< 10); // GPF5 == OUTPUT WHJ.
return TRUE;
}
BOOL LED_IOControl(DWORD hOpenContext,
DWORD dwCode,
PBYTE pBufIn,
DWORD dwLenIn,
PBYTE pBufOut,
DWORD dwLenOut,
PDWORD pdwActualOut)
{
LEDGpioInit();
switch(dwCode)
{
case IO_CTL_LED_1_ON:
s2440IOP->rGPBDAT=s2440IOP->rGPBDAT&~(0x1<<5);
break;
case IO_CTL_LED_2_ON:
s2440IOP->rGPBDAT=s2440IOP->rGPBDAT&~(0x1<<6);
break;
case IO_CTL_LED_3_ON:
s2440IOP->rGPBDAT=s2440IOP->rGPBDAT&~(0x1<<7);
break;
case IO_CTL_LED_4_ON:
s2440IOP->rGPBDAT=s2440IOP->rGPBDAT&~(0x1<<8);
break;
case IO_CTL_LED_ALL_ON:
s2440IOP->rGPBDAT=s2440IOP->rGPBDAT&~(0xF<<5);
break;
case IO_CTL_LED_1_OFF:
s2440IOP->rGPBDAT=s2440IOP->rGPBDAT|(0x1<<5);
break;
case IO_CTL_LED_2_OFF:
s2440IOP->rGPBDAT=s2440IOP->rGPBDAT|(0x1<<6);
break;
case IO_CTL_LED_3_OFF:
s2440IOP->rGPBDAT=s2440IOP->rGPBDAT|(0x1<<7);
break;
case IO_CTL_LED_4_OFF:
s2440IOP->rGPBDAT=s2440IOP->rGPBDAT|(0x1<<8);
break;
case IO_CTL_LED_ALL_OFF:
s2440IOP->rGPBDAT=s2440IOP->rGPBDAT|(0xF<<5);
break;
case IO_WHJ_ON:
s2440IOP->rGPFDAT=s2440IOP->rGPFDAT&~(0x1<<5);
break;
case IO_WHJ_OFF:
s2440IOP->rGPFDAT=s2440IOP->rGPFDAT|(0x1<<5);
break;
default:
break;
}
改动文件3:D:\mini2440\evc\my2440\LEDtest\LEDTESTDlg.cpp
......
void CLEDTESTDlg::OnButton1()
{
// TODO: Add your control notification handler code here
DeviceIoControl(leddriver,IO_CTL_LED_1_ON, NULL,0,NULL,0,NULL,NULL);
MessageBox(L"1");
DeviceIoControl(leddriver,IO_WHJ_ON, NULL,0,NULL,0,NULL,NULL);
MessageBox(L"2");
}
......
void CLEDTESTDlg::OnButton6()
{
// TODO: Add your control notification handler code here
DeviceIoControl(leddriver,IO_CTL_LED_1_OFF,NULL,0,NULL,0,NULL,NULL);
MessageBox(L"3");
DeviceIoControl(leddriver,IO_WHJ_OFF,NULL,0,NULL,0,NULL,NULL);
MessageBox(L"4");
}
......