• «
  • 1
  • 2
  • »
  • Pages: 1/2     Go
主题 : GPIO驱动为什么不行? 复制链接 | 浏览器收藏 | 打印
级别: 新手上路
UID: 10154
精华: 0
发帖: 6
金钱: 30 两
威望: 6 点
综合积分: 12 分
注册时间: 2009-10-26
最后登录: 2012-09-10
楼主  发表于: 2010-03-01 09:24

 GPIO驱动为什么不行?

刚接触wince,我把例程中的LED驱动中的GPB8改称GPF5,具体改动如下:
BOOL LEDGpioInit()
{
RETAILMSG(1,(TEXT("LED_Gpio_Setting----\r\n")));
.....
// s2440IOP->rGPBCON  = (s2440IOP->rGPBCON  &~(3 << 16)) | (1<< 16); // GPB8 ==
s2440IOP->rGPFCON  = (s2440IOP->rGPFCON  &~(3 << 10)) | (1<< 10);
//GPF5==OUTPUT
OUTPUT.
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_4_ON:
// s2440IOP->rGPBDAT=s2440IOP->rGPBDAT&~(0x1<<8);
  s2440IOP->rGPFDAT=s2440IOP->rGPFDAT&~(0x1<<5);//GPF5置低

  break;
  .....
  case IO_CTL_LED_4_OFF:
  //s2440IOP->rGPBDAT=s2440IOP->rGPBDAT|(0x1<<8);
  s2440IOP->rGPFDAT=s2440IOP->rGPFDAT|(0x1<<5);//GPF5置高

  break;
  default:
  break;  
}
    
RETAILMSG(1,(TEXT("LED:Ioctl code = 0x%x\r\n"), dwCode));
return TRUE;
}
    其他的我没有动,改完我在PB5里编译了一下,然后就SYSGEN了,再把生成的bin烧入核心板,然后调用“mini2440测试”程序测试,怎么点“LED4_ON”或者“LED4_OFF”都没有用,在示波器上看不到任何电平变化。PF5偶尔还有脉冲,这是为什么?请高手指点
自由,自强,共享,共创。
级别: 论坛版主
UID: 12573
精华: 27
发帖: 8838
金钱: 46490 两
威望: 9298 点
综合积分: 18216 分
注册时间: 2010-01-09
最后登录: 2019-07-16
1楼  发表于: 2010-03-01 12:45
可能还要改init.c里面的设置,同样仿照GPB端口
新手如何向我们反馈有效的信息,以便解决问题,见此贴:
http://www.arm9home.net/read.php?tid-14431.html

[注]: 此处签名链接仅为指引方向,而非解答问题本身.
级别: 新手上路
UID: 10154
精华: 0
发帖: 6
金钱: 30 两
威望: 6 点
综合积分: 12 分
注册时间: 2009-10-26
最后登录: 2012-09-10
2楼  发表于: 2010-03-01 16:35

 回 1楼(mindee) 的帖子

谢谢二楼回复!但是我在init.c里参照GPB端口对GPF5进行设置
还是不行,出现的结果跟前面一样。不知还有什么地方不对?
init.c在Kernel/Oal下
级别: 新手上路
UID: 10154
精华: 0
发帖: 6
金钱: 30 两
威望: 6 点
综合积分: 12 分
注册时间: 2009-10-26
最后登录: 2012-09-10
3楼  发表于: 2010-03-01 18:35

 回 2楼(gao8003) 的帖子

我后来在init.c里仅仅将GPF端口初始化一下,其他的都不动
也不对GPF5进行任何操作,
但用示波器在GPF5上测的有脉冲出现(当wince 起来之后)
具体改动如下:
void ConfigureGPIO()
{
......
   s2440IOP->GPBDAT    = 0x62;
    s2440IOP->GPBUP     = 0x7FF;
    s2440IOP->GPBCON    = 0x15401; //0x2A96A4;
.......
//增加GPF端口初始化
    s2440IOP->GPFDAT    = 0xF0;
    s2440IOP->GPFUP     = 0xFF;
    s2440IOP->GPFCON    = 0x55aa;
.......
}
请指点
steven
级别: 新手上路
UID: 15784
精华: 0
发帖: 20
金钱: 100 两
威望: 20 点
综合积分: 40 分
注册时间: 2010-03-09
最后登录: 2011-05-06
4楼  发表于: 2010-04-19 10:28
是不是該先確認一下GPF5是不是被用來控制其他裝置了?
级别: 新手上路
UID: 22370
精华: 0
发帖: 9
金钱: 45 两
威望: 9 点
综合积分: 18 分
注册时间: 2010-05-31
最后登录: 2011-06-10
5楼  发表于: 2010-05-31 15:14
我也遇到的类似的问题,麻烦高手看看
在友善光盘提供的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");
}

......
级别: 新手上路
UID: 22370
精华: 0
发帖: 9
金钱: 45 两
威望: 9 点
综合积分: 18 分
注册时间: 2010-05-31
最后登录: 2011-06-10
6楼  发表于: 2010-05-31 15:22
接着楼上,我装的系统是友善光盘中的wince5.0
级别: 新手上路
UID: 22370
精华: 0
发帖: 9
金钱: 45 两
威望: 9 点
综合积分: 18 分
注册时间: 2010-05-31
最后登录: 2011-06-10
7楼  发表于: 2010-06-02 10:33

这里人气不旺啊
这两天想到个原因,BSP中改动的代码没有编译。于是,自己重新编译了一个NK.bin文件。
GPF5是有脉冲输出了,但是没有规律。还请高手指点哈啊
级别: 侠客
UID: 2432
精华: 0
发帖: 94
金钱: 730 两
威望: 323 点
综合积分: 188 分
注册时间: 2008-11-17
最后登录: 2011-04-07
8楼  发表于: 2010-07-22 15:57
可以了嘛?LZ
级别: 新手上路
UID: 29014
精华: 0
发帖: 3
金钱: 15 两
威望: 3 点
综合积分: 6 分
注册时间: 2010-09-21
最后登录: 2011-02-22
9楼  发表于: 2010-09-29 09:16
问题解决了么,搂住?俺也急切想知道怎么解决,谢谢
  • «
  • 1
  • 2
  • »
  • Pages: 1/2     Go