9200gpio口按键驱动问题

[复制链接]
1673|1
 楼主| zhangyanab 发表于 2008-7-4 09:22 | 显示全部楼层 |阅读模式
硬件:at91rm9200&nbsp;<br />软件:linux<br />目标:9200的6个gpio口接6个按键,编写了查询方式的驱动,驱动编译通过,加载也成功,但是用测试程序测试的时候没反应。我把源码附上,请各位高手给个建议。<br />typedef&nbsp;char&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;S8;<br />typedef&nbsp;unsigned&nbsp;char&nbsp;U8;<br />typedef&nbsp;int&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;S16;<br />typedef&nbsp;unsigned&nbsp;int&nbsp;&nbsp;U16;<br />typedef&nbsp;long&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;S32;<br />typedef&nbsp;unsigned&nbsp;long&nbsp;U32;<br /><br />U8&nbsp;&nbsp;&nbsp;set_cnt;<br /><br />#define&nbsp;TIME_KEY&nbsp;200<br /><br />#define&nbsp;KK0&nbsp;&nbsp;&nbsp;&nbsp;((unsigned&nbsp;int)0x1&nbsp;&lt&lt&nbsp;12)&nbsp;&nbsp;&nbsp;//pb12&nbsp;DOWN<br />#define&nbsp;KK1&nbsp;&nbsp;&nbsp;&nbsp;((unsigned&nbsp;int)0x1&nbsp;&lt&lt&nbsp;13)&nbsp;&nbsp;&nbsp;//pb13&nbsp;Confirm<br />#define&nbsp;KK2&nbsp;&nbsp;&nbsp;&nbsp;((unsigned&nbsp;int)0x1&nbsp;&lt&lt&nbsp;14)&nbsp;//pb14&nbsp;Right<br />#define&nbsp;KK3&nbsp;&nbsp;&nbsp;&nbsp;((unsigned&nbsp;int)0x1&nbsp;&lt&lt&nbsp;15)&nbsp;&nbsp;&nbsp;//pb15,left<br />#define&nbsp;KK4&nbsp;&nbsp;&nbsp;&nbsp;((unsigned&nbsp;int)0x1&nbsp;&lt&lt&nbsp;16)&nbsp;&nbsp;&nbsp;&nbsp;//pb16,cancle<br />#define&nbsp;KK5&nbsp;&nbsp;&nbsp;&nbsp;((unsigned&nbsp;int)0x1&nbsp;&lt&lt&nbsp;17)&nbsp;&nbsp;&nbsp;&nbsp;//pb17&nbsp;up<br /><br />U8&nbsp;&nbsp;&nbsp;KEY_FLAG&nbsp;=&nbsp;0x00;<br /><br />#define&nbsp;&nbsp;&nbsp;key_PageDown_**&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(0x1&lt&lt0)<br />#define&nbsp;&nbsp;&nbsp;&nbsp;confirm_press_**&nbsp;&nbsp;&nbsp;&nbsp;(0x1&lt&lt1)<br />#define&nbsp;&nbsp;&nbsp;&nbsp;key_NumAdd_**&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(0x1&lt&lt&nbsp;2)<br />#define&nbsp;&nbsp;&nbsp;&nbsp;key_NumSubb_**&nbsp;&nbsp;&nbsp;&nbsp;(0x1&lt&lt3)<br />#define&nbsp;&nbsp;&nbsp;&nbsp;cancel_press_**&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(0x1&lt&lt4)<br />#define&nbsp;&nbsp;&nbsp;key_PageUp_**&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(0x1&lt&lt5)<br /><br />void&nbsp;kdb_gpio_init(void);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//IO端口初始化<br />static&nbsp;int&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;major&nbsp;=&nbsp;0;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />static&nbsp;char&nbsp;&nbsp;&nbsp;&nbsp;dev_name[]&nbsp;=&nbsp;&quot;kdb_dev&quot;;<br /><br />U8&nbsp;ReadKey(&nbsp;void);<br /><br />void&nbsp;Delay(U16&nbsp;t)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;while(t--);<br />}<br /><br />//void&nbsp;&nbsp;&nbsp;&nbsp;Opreat_IO();<br /><br />/*************************************************************************<br />name&nbsp;:&nbsp;void&nbsp;key_close(struct&nbsp;inode&nbsp;*&nbsp;inode,&nbsp;struct&nbsp;file&nbsp;*&nbsp;file)<br />**************************************************************************/<br />static&nbsp;int&nbsp;&nbsp;kbd_close&nbsp;(struct&nbsp;inode&nbsp;*&nbsp;inode,&nbsp;struct&nbsp;file&nbsp;*&nbsp;file)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;printk(&quot;key&nbsp;is&nbsp;closed
&quot;);<br />&nbsp;&nbsp;&nbsp;&nbsp;MOD_DEC_USE_COUNT;<br />&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;0;<br />}<br /><br />/**************************************************************************<br />name&nbsp;:&nbsp;static&nbsp;int&nbsp;key_open(struct&nbsp;inode&nbsp;*&nbsp;inode,&nbsp;struct&nbsp;file&nbsp;*&nbsp;file)<br />****************************************************************************/<br />static&nbsp;int&nbsp;kbd_open(struct&nbsp;inode&nbsp;*&nbsp;inode,&nbsp;struct&nbsp;file&nbsp;*&nbsp;file)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;printk(&quot;key&nbsp;is&nbsp;open
&quot;);<br />&nbsp;&nbsp;&nbsp;&nbsp;MOD_INC_USE_COUNT;<br />&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;0;<br />}<br /><br />/***************************************************************************8<br /><br />*************************************************************************/<br /><br />static&nbsp;U8&nbsp;kbd_read(struct&nbsp;file&nbsp;*file,char&nbsp;*buffer,size_t&nbsp;count,loff_t&nbsp;*ppos)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;U8&nbsp;temp;<br />&nbsp;&nbsp;&nbsp;&nbsp;temp&nbsp;=&nbsp;ReadKey();<br />&nbsp;&nbsp;&nbsp;&nbsp;copy_to_user(buffer,&temp,sizeof(U8));<br />&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;(sizeof(U8));&nbsp;&nbsp;&nbsp;&nbsp;<br />}<br /><br /><br />/**********************************************************************************<br />name:&nbsp;atic&nbsp;int&nbsp;kdb_Ioctl(struct&nbsp;inode&nbsp;*inode,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;struct&nbsp;file&nbsp;*&nbsp;file,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;unsigned&nbsp;int&nbsp;cmd,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;unsigned&nbsp;long&nbsp;arg)<br />function:&nbsp;kdb&nbsp;io&nbsp;ioput&nbsp;control<br />***********************************************************************************/<br />static&nbsp;int&nbsp;&nbsp;kbd_Ioctl(struct&nbsp;inode&nbsp;*inode,struct&nbsp;file&nbsp;*&nbsp;file,unsigned&nbsp;long&nbsp;cmd,unsigned&nbsp;long&nbsp;&nbsp;arg)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;0;<br />}<br /><br />/********************************************************************<br />name&nbsp;:&nbsp;struct&nbsp;file_operations&nbsp;kdb_dev_fops<br />function:&nbsp;文件结构<br />********************************************************************/<br />static&nbsp;struct&nbsp;file_operations&nbsp;kdb_dev_fops&nbsp;=&nbsp;<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;owner:&nbsp;THIS_MODULE,<br />&nbsp;&nbsp;&nbsp;&nbsp;ioctl:&nbsp;&nbsp;&nbsp;&nbsp;kbd_Ioctl,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;open:&nbsp;&nbsp;&nbsp;&nbsp;kbd_open,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;release:&nbsp;&nbsp;&nbsp;kbd_close,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;read:&nbsp;&nbsp;&nbsp;&nbsp;kbd_read,<br />};<br /><br />/**********************************************************<br />name:int&nbsp;__int_module(void)<br />function:初始化模块<br />**********************************************************/<br />static&nbsp;devfs_handle_t&nbsp;devfs_handle;<br />static&nbsp;int&nbsp;__init&nbsp;kdb_init_module(void)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;ret;<br />&nbsp;&nbsp;&nbsp;&nbsp;ret&nbsp;=&nbsp;devfs_register_chrdev(major,dev_name,&kdb_dev_fops);<br />&nbsp;&nbsp;&nbsp;&nbsp;if(ret&nbsp;&lt&nbsp;0)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printk(&quot;embedder&nbsp;linux:init_module&nbsp;failed&nbsp;with&nbsp;%d
&quot;,ret);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;ret;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printk(&quot;KERN_INFO:Embedded&nbsp;linux&nbsp;chardevice&nbsp;register&nbsp;successful!
&quot;);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(major&nbsp;==&nbsp;0)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;major&nbsp;=&nbsp;ret;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;devfs_handle&nbsp;=&nbsp;devfs_register(NULL,dev_name,DEVFS_FL_DEFAULT,major,0,S_IFCHR|S_IWUSR,&kdb_dev_fops,NULL);<br />&nbsp;&nbsp;&nbsp;&nbsp;AT91_SYS-&gtPIOB_PER&nbsp;|=&nbsp;KK0&nbsp;|&nbsp;KK1&nbsp;|&nbsp;KK2&nbsp;|KK3&nbsp;|KK4&nbsp;|&nbsp;KK5;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;AT91_SYS-&gtPIOB_ODR&nbsp;|=&nbsp;KK0&nbsp;|&nbsp;KK1&nbsp;|&nbsp;KK2&nbsp;|KK3&nbsp;|KK4&nbsp;|&nbsp;KK5;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;AT91_SYS-&gtPMC_PCER&nbsp;|=&nbsp;(0x1&nbsp;&lt&lt&nbsp;AT91C_ID_PIOB);&nbsp;//enable&nbsp;the&nbsp;mck&nbsp;clock;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;0;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />}<br /><br />/*******************************************************<br />name:&nbsp;__exit&nbsp;s_cleanup_module(void)<br />function:注销gpio_lcd模块<br />********************************************************/<br />static&nbsp;void&nbsp;__exit&nbsp;kdb_cleanup_module(void)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;retv;<br />&nbsp;&nbsp;&nbsp;&nbsp;retv&nbsp;=&nbsp;devfs_unregister_chrdev(major,dev_name);<br />&nbsp;&nbsp;&nbsp;&nbsp;if(retv&nbsp;&lt&nbsp;0)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printk(&quot;gpio_kdb&nbsp;unregister&nbsp;failed
&quot;);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;AT91_SYS-&gtPIOB_PDR&nbsp;|=&nbsp;KK0&nbsp;|&nbsp;KK1&nbsp;|&nbsp;KK2&nbsp;|KK3&nbsp;|KK4&nbsp;|&nbsp;KK5;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;AT91_SYS-&gtPIOB_IFDR&nbsp;|=&nbsp;KK0&nbsp;|&nbsp;KK1&nbsp;|&nbsp;KK2&nbsp;|KK3&nbsp;|KK4&nbsp;|&nbsp;KK5;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;AT91_SYS-&gtPMC_PCDR&nbsp;=&nbsp;0x1&nbsp;&lt&lt&nbsp;AT91C_ID_PIOB;&nbsp;//enable&nbsp;the&nbsp;mck&nbsp;clock;<br />&nbsp;&nbsp;&nbsp;&nbsp;printk(&quot;kdb&nbsp;goodbye
&quot;);<br />}<br /><br />module_init(kdb_init_module);<br />module_exit(kdb_cleanup_module);<br />MODULE_AUTHOR(&quot;MZ&quot;);<br />MODULE_LICENSE(&quot;GPL&quot;);<br /><br />U8&nbsp;&nbsp;ReadKey(&nbsp;)<br />{<br />U8&nbsp;KK;<br />&nbsp;&nbsp;&nbsp;&nbsp;KEY_FLAG&nbsp;=&nbsp;0x00;<br />&nbsp;&nbsp;&nbsp;&nbsp;KK&nbsp;=&nbsp;(AT91_SYS-&gtPIOB_PDSR&nbsp;&&nbsp;0x3f000);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if((KK&nbsp;&&nbsp;KK0)&nbsp;==&nbsp;0&nbsp;)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Delay(TIME_KEY);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if((KK&nbsp;&&nbsp;KK0)&nbsp;==&nbsp;0&nbsp;)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;KEY_FLAG&nbsp;|=&nbsp;key_PageDown_**;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;if((KK&nbsp;&&nbsp;KK1)&nbsp;==&nbsp;0&nbsp;)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Delay(TIME_KEY);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if((KK&nbsp;&&nbsp;KK1)&nbsp;==&nbsp;0&nbsp;)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;KEY_FLAG&nbsp;|=&nbsp;confirm_press_**;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;if((KK&nbsp;&&nbsp;KK2)&nbsp;==&nbsp;0&nbsp;)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Delay(TIME_KEY);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if((KK&nbsp;&&nbsp;KK2)&nbsp;==&nbsp;0&nbsp;)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;KEY_FLAG&nbsp;|=&nbsp;key_NumAdd_**&nbsp;;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;if((KK&nbsp;&&nbsp;KK3)&nbsp;==&nbsp;0&nbsp;)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Delay(TIME_KEY);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if((KK&nbsp;&&nbsp;KK3)&nbsp;==&nbsp;0&nbsp;)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;KEY_FLAG&nbsp;|=&nbsp;key_NumSubb_**;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;if((KK&nbsp;&&nbsp;KK4)&nbsp;==&nbsp;0&nbsp;)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Delay(TIME_KEY);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if((KK&nbsp;&&nbsp;KK4)&nbsp;==&nbsp;0&nbsp;)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;KEY_FLAG&nbsp;|=&nbsp;cancel_press_**;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;if((KK&nbsp;&&nbsp;KK5)&nbsp;==&nbsp;0&nbsp;)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Delay(TIME_KEY);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if((KK&nbsp;&&nbsp;KK5)&nbsp;==&nbsp;0&nbsp;)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;KEY_FLAG&nbsp;|=&nbsp;key_PageUp_**;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;KEY_FLAG;<br />}<br /><br />测试程序:<br /><br /><br />U8&nbsp;&nbsp;&nbsp;KEY_FLAG&nbsp;=&nbsp;0x00;<br />#define&nbsp;&nbsp;&nbsp;key_PageDown_**&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;KEY_FLAG&nbsp;&&nbsp;(0x1&lt&lt0)<br />#define&nbsp;&nbsp;&nbsp;&nbsp;confirm_press_**&nbsp;&nbsp;&nbsp;&nbsp;KEY_FLAG&nbsp;&&nbsp;(0x1&lt&lt1)<br />#define&nbsp;&nbsp;&nbsp;&nbsp;key_NumAdd_**&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;KEY_FLAG&nbsp;&&nbsp;(0x1&lt&lt&nbsp;2)<br />#define&nbsp;&nbsp;&nbsp;&nbsp;key_NumSubb_**&nbsp;&nbsp;&nbsp;&nbsp;KEY_FLAG&nbsp;&&nbsp;(0x1&lt&lt3)<br />#define&nbsp;&nbsp;&nbsp;&nbsp;cancel_press_**&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;KEY_FLAG&nbsp;&&nbsp;(0x1&lt&lt4)<br />#define&nbsp;&nbsp;&nbsp;key_PageUp_**&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;KEY_FLAG&nbsp;&&nbsp;(0x1&lt&lt5)<br /><br />void&nbsp;Delayms(int&nbsp;t)<br />{<br />short&nbsp;ms=0x1147;<br />short&nbsp;i,j;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for(j=0;j&ltt;++j)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for(i=0;i&ltms;++i);<br />}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />void&nbsp;Delay(int&nbsp;t)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;while(--t);<br />}<br /><br />int&nbsp;main(void)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;fd;<br />&nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;count;<br />&nbsp;&nbsp;&nbsp;&nbsp;if((fd&nbsp;=&nbsp;open(&quot;/dev/kdb_dev&quot;,0))&nbsp;&lt&nbsp;0)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf(&quot;can&nbsp;not&nbsp;open&nbsp;/dev/kdb_dev
&quot;);<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;exit(0);<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf(&quot;kbd&nbsp;fd&nbsp;is&nbsp;%d
&quot;,fd);<br />&nbsp;&nbsp;&nbsp;&nbsp;count&nbsp;=&nbsp;read(fd,&KEY_FLAG,sizeof(U8));<br />&nbsp;&nbsp;&nbsp;&nbsp;printf(&quot;key_flag&nbsp;is&nbsp;%x
&quot;,KEY_FLAG);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(count&nbsp;!=&nbsp;sizeof(U8))<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf(&quot;read&nbsp;ts&nbsp;error!
&quot;);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;0;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;while(1)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(confirm_press_**)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf(&quot;confirm&nbsp;key&nbsp;
&quot;);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else&nbsp;if(cancel_press_**&nbsp;&nbsp;&nbsp;&nbsp;)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf(&quot;cancle&nbsp;key&nbsp;
&quot;);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else&nbsp;if(&nbsp;key_PageDown_**)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf(&quot;page&nbsp;down&nbsp;
&quot;);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else&nbsp;if(key_PageUp_**)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf(&quot;page&nbsp;up
&quot;);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else&nbsp;if(key_NumAdd_**)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf(&quot;confirm&nbsp;key&nbsp;
&quot;);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else&nbsp;if(key_NumSubb_**)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf(&quot;confirm&nbsp;key&nbsp;
&quot;);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else&nbsp;;<br />}<br /><br />测试程序只是执行一次,即是终端只显示confirm&nbsp;key&nbsp;,各位高手看下是什么原因。<br /><br />
 楼主| zhangyanab 发表于 2008-7-4 12:45 | 显示全部楼层

回复9200按键

测试程序的主函数,我又改了。还是不行,读回来的KEY_FLAG&nbsp;=&nbsp;0x3f。即是六个io口都是按下状态。可是我什么都没有操作。。<br />int&nbsp;main(void)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;fd;<br />&nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;count;<br />&nbsp;&nbsp;&nbsp;&nbsp;if((fd&nbsp;=&nbsp;open(&quot;/dev/kdb_dev&quot;,0))&nbsp;&lt&nbsp;0)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf(&quot;can&nbsp;not&nbsp;open&nbsp;/dev/kdb_dev
&quot;);<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;exit(0);<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf(&quot;kbd&nbsp;fd&nbsp;is&nbsp;%d
&quot;,fd);<br />&nbsp;&nbsp;&nbsp;&nbsp;count&nbsp;=&nbsp;read(fd,&KEY_FLAG,sizeof(U8));<br />&nbsp;&nbsp;&nbsp;&nbsp;printf(&quot;key_flag&nbsp;is&nbsp;%x
&quot;,KEY_FLAG);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(count&nbsp;!=&nbsp;sizeof(U8))<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf(&quot;read&nbsp;ts&nbsp;error!
&quot;);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;0;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;while(1)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(confirm_press_**)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;printf(&quot;confirm&nbsp;key&nbsp;
&quot;);<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;else&nbsp;if(cancel_press_**&nbsp;&nbsp;&nbsp;&nbsp;)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;printf(&quot;cancle&nbsp;key&nbsp;
&quot;);<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;else&nbsp;if(&nbsp;key_PageDown_**)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;printf(&quot;page&nbsp;down&nbsp;
&quot;);<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;else&nbsp;if(key_PageUp_**)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;printf(&quot;page&nbsp;up
&quot;);<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;else&nbsp;if(key_NumAdd_**)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;printf(&quot;confirm&nbsp;key&nbsp;
&quot;);<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;else&nbsp;if(key_NumSubb_**)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;printf(&quot;confirm&nbsp;key&nbsp;
&quot;);<br />&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;0;<br />}<br />
您需要登录后才可以回帖 登录 | 注册

本版积分规则

4

主题

6

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部