文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>并口当GPIO用注意事项

并口当GPIO用注意事项

时间:2009-06-22  来源:neilengineer

 

概述

       在一个X86开发板上,要把并口当作GPIO来使用。

其硬件连接是:南桥芯片(ICH7)àsuperio芯片(smsc lpc47m997)à并口。其中,南桥芯片(ICH7)通过LPC总线和superio芯片相接。

LPC总线连接的superio芯片物理地址为:0x2e开始。0x2e是config port,0x2f是data port。

由ICH7芯片手册中的下表,知道并口地址为0x378-0x37F

500)this.width=500;" border=0>

 

       由superio芯片(smsc lpc47m997)手册,知道0x378为Data Port,0x379为Status port:

500)this.width=500;" border=0>

 

现象

       运行测试程序,发现其它功能如eth link led无法正常工作。

 

调试

       分析和调试的过程中,主要使用了下面方法:

0)先上电,用万用表测量相关电压,确认硬件是否正常;

1)用硬件部提供的测试程序进行调试;

2)用自己的测试程序进行调试;

3)在驱动源码的合适地方加printk(主要打印并口状态)。

在整个调试过程中,都使用万用表测量并口相关针脚的电压,来确认驱动是否正常。

       对于加printk方法,我在看门狗驱动中加入一定时间打印一下并口状态,如下:

int i=100;

void wd_feed(void)

{

       //for debug

#if 1

       i--;

       if(i<0){

              printk("%s###Debug: inb(PARALLEL_DATA_PORT)=0x%x \n", __FUNCTION__,inb(PARALLEL_DATA_PORT));

              i=100;

       }

#endif

。。。。。。

}

 

调试结果

1)内核启动完,直接测量相关电压,不正常;如在驱动中使能的使能位没有正常使能。

2)用硬件部提供的测试程序测试,一切正常;说明硬件没问题。

3)用自己的测试程序进行测试,也正常。

4)在内核启动的不同位置,打印并口的状态;发现GPIO和BCSR初始化时并口状态正常,但后来又不正常了。

 

分析

       首先,硬件上没有问题。内核启动完时,相关电压不正常;但运行测试程序时相关电压正常。GPIO和BCSR模块初始化时并口状态正常,但后来又不正常了,说明:

1)GPIO相关驱动工作正常;

2)有东西把并口状态改变了。

       经过分析,想起来开发板使用的内核是从官方网站下载的linux-2.6.28.9,在内核make menuconfig配置时,大部分使用默认设置,所以并口驱动以模块方式编译了。

 

解决

1)删除/lib/modules/2.6.28.9/kernel/driver/中编译好的模块(paraport目录中所有模块);

2)去掉内核配置中的并口驱动模块编译。

 

/*

*By Neil Chiao (neilchiao at gmail.com)

*转载请注明出处:neilengineer.cublog.cn

*欢迎访问:新星湾(www.xinxingwan.com)

*/

     
相关阅读 更多 +
排行榜 更多 +
空中跑酷汉化版

空中跑酷汉化版

赛车竞速 下载
修仙传说

修仙传说

角色扮演 下载
魔界零之迷宫

魔界零之迷宫

冒险解谜 下载