主题 : mini2440 ce6.0 bsp   LEDdriver 复制链接 | 浏览器收藏 | 打印
级别: 新手上路
UID: 23677
精华: 0
发帖: 5
金钱: 25 两
威望: 5 点
综合积分: 10 分
注册时间: 2010-06-24
最后登录: 2010-12-15
楼主  发表于: 2010-07-16 09:57

 mini2440 ce6.0 bsp   LEDdriver

mini2440 ce6.0 bsp
LEDdriver
leddriver.cpp
以下2个函数调用了GPIO设置函数LEDGpioInit();现在在下面函数中注释掉LEDGpioInit();
也就是说没有对相应管脚初始化,管脚处于默认状态,查看数据手册,默认状态GPBCON为0x0,默认为输入状态,
修改后编译下载NK.nb0到内存中运行,然后用提供的LED测试程序发现依然可以点亮LED.这应该不正常。请问各位怎么回事啊?
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.
return TRUE;
}
/*初始化设备,在设备被加载时调用*/
DWORD LED_Init(DWORD dwContext)
{

RETAILMSG(1,(TEXT("LED_Init----\r\n")));
// 1. Virtual Alloc
Virtual_Alloc();

//LEDGpioInit();


mInitialized = TRUE;
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;*/
default:
  break;  
}
    
RETAILMSG(1,(TEXT("LED:Ioctl code = 0x%x\r\n"), dwCode));
return TRUE;
}
级别: 新手上路
UID: 23677
精华: 0
发帖: 5
金钱: 25 两
威望: 5 点
综合积分: 10 分
注册时间: 2010-06-24
最后登录: 2010-12-15
1楼  发表于: 2010-07-16 12:53

 Re:mini2440 ce6.0 bsp  LEDdriver

版主在哪儿,请您解释下你们的程序。