2440中断过程与2410中断过程有什么不同吗?

[复制链接]
2647|3
 楼主| xiaowu5016 发表于 2009-5-16 10:46 | 显示全部楼层 |阅读模式
我按照阿南给的按键中断例子改了下按键的中断口而已<br />然后下载到2440上运行,但是就是没有反应,经自己检查,好像没有错误了<br /><br />#include&nbsp;&quot;def.h&quot;<br />#include&nbsp;&quot;option.h&quot;<br />#include&nbsp;&quot;2440addr.h&quot;<br />#include&nbsp;&quot;2440lib.h&quot;&nbsp;<br />//#include&nbsp;&quot;uart.h&quot;&nbsp;<br /><br />#define&nbsp;KEY1&nbsp;(1&nbsp;&lt&lt&nbsp;0)//GPF0,EINT0<br />#define&nbsp;KEY2&nbsp;(1&nbsp;&lt&lt&nbsp;2)//GPF2,EINT2<br />#define&nbsp;KEY3&nbsp;(1&nbsp;&lt&lt&nbsp;3)//GPG3,EINT11<br />#define&nbsp;KEY4&nbsp;(1&nbsp;&lt&lt&nbsp;11)//GPG11,EINT19<br /><br /><br />#define&nbsp;LED1&nbsp;(1&nbsp;&lt&lt&nbsp;4)//GPF4<br />#define&nbsp;LED2&nbsp;(1&nbsp;&lt&lt&nbsp;5)//GPF5<br />#define&nbsp;LED3&nbsp;(1&nbsp;&lt&lt&nbsp;6)//GPF6<br />#define&nbsp;LED4&nbsp;(1&nbsp;&lt&lt&nbsp;7)//GPF7&nbsp;<br /><br /><br /><br />/*******************************************************************************************<br />函数原形:void&nbsp;__irq&nbsp;IRQ_KEY(void)<br />功能描述:键盘中断处理程序,当产生键盘中断后将读取键值,重新刷新LED显示<br />参&nbsp;&nbsp;&nbsp;&nbsp;数:无&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />*******************************************************************************************/<br />&nbsp;void&nbsp;__irq&nbsp;IRQ_KEY(void)<br />{<br />&nbsp;&nbsp;&nbsp;//&nbsp;unsigned&nbsp;int&nbsp;i;<br />&nbsp;&nbsp;&nbsp;&nbsp;ClearPending(BIT_EINT8_23);<br />&nbsp;&nbsp;&nbsp;&nbsp;rEINTPEND&nbsp;=&nbsp;0xffffff;<br />&nbsp;&nbsp;&nbsp;&nbsp;rGPGCON&nbsp;=&nbsp;rGPGCON&nbsp;&&nbsp;(~((3&nbsp;&lt&lt&nbsp;6)&nbsp;|&nbsp;(3&nbsp;&lt&lt&nbsp;22)));//设置为输入状态<br />&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(rGPGDAT&nbsp;&&nbsp;KEY3){<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;rGPFDAT&nbsp;|=&nbsp;LED3;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;else&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;rGPFDAT&nbsp;&=&nbsp;~LED3;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(rGPGDAT&nbsp;&&nbsp;KEY4){<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;rGPFDAT&nbsp;|=&nbsp;LED4;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;else&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;rGPFDAT&nbsp;&=&nbsp;~LED4;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;rGPGCON&nbsp;|=&nbsp;((2&nbsp;&lt&lt&nbsp;6)&nbsp;|&nbsp;(2&nbsp;&lt&lt&nbsp;22));//重新设置外部中断输入功能<br />}<br />&nbsp;<br />/*******************************************************************************************<br />函数原形:void&nbsp;__irq&nbsp;IRQ_KEY(void)<br />功能描述:键盘中断初始化,将按键输入管脚设置成外部中断输入功能,双边沿触发,IRQ中断模式<br />参&nbsp;&nbsp;&nbsp;&nbsp;数:无&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />*******************************************************************************************/<br />void&nbsp;EINT_Init(void)<br />{&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;//==============================设置IO口为中断输入模式=============================<br />&nbsp;&nbsp;&nbsp;&nbsp;rGPGCON&nbsp;&=&nbsp;(~((3&nbsp;&lt&lt&nbsp;6)&nbsp;|&nbsp;(3&nbsp;&lt&lt&nbsp;22)));//将相应位清零<br />&nbsp;&nbsp;&nbsp;&nbsp;rGPGCON&nbsp;|=&nbsp;((2&nbsp;&lt&lt&nbsp;6)&nbsp;|&nbsp;(2&nbsp;&lt&lt&nbsp;22));<br />&nbsp;&nbsp;&nbsp;&nbsp;//rGPGCON[23:22],[7:6]=10b,即GPG[11,9]为外部中断输入功能<br />&nbsp;&nbsp;&nbsp;&nbsp;//=================================================================================<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;//===============================设置外部中断控制寄存器=======================<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;rEXTINT1&nbsp;=&nbsp;rEXTINT1&nbsp;&&nbsp;(~(7&nbsp;&lt&lt&nbsp;12))&nbsp;|&nbsp;(6&nbsp;&lt&lt&nbsp;12);//EINT11下降沿触发中断<br />&nbsp;&nbsp;&nbsp;&nbsp;rEXTINT2&nbsp;=&nbsp;rEXTINT2&nbsp;&&nbsp;(~(7&nbsp;&lt&lt&nbsp;12))&nbsp;|&nbsp;(6&nbsp;&lt&lt&nbsp;12);//EINT19下降沿触发中断&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;//============================================================================<br />&nbsp;&nbsp;&nbsp;&nbsp;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;pISR_EINT8_23&nbsp;=&nbsp;(unsigned&nbsp;int)IRQ_KEY;//中断服务程序入口<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;rPRIORITY&nbsp;=&nbsp;0x00000000;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;使用默认的固定的优先级<br />&nbsp;&nbsp;&nbsp;&nbsp;ClearPending(BIT_EINT8_23);&nbsp;//&nbsp;清除中断标志位<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;rEINTPEND&nbsp;=&nbsp;0xffffff;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//清除外部中断未决寄存器的全部位<br />&nbsp;&nbsp;&nbsp;&nbsp;rINTMOD&nbsp;=&nbsp;0x00000000;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;所有中断均为IRQ中断<br />&nbsp;&nbsp;&nbsp;&nbsp;rINTMSK&nbsp;&=&nbsp;(~BIT_EINT8_23);&nbsp;//使能外部中断0,2,8_23&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;rEINTMASK&nbsp;&=&nbsp;(~((1&nbsp;&lt&lt&nbsp;11)&nbsp;|&nbsp;(1&nbsp;&lt&lt&nbsp;19)));&nbsp;&nbsp;//使能EINT11,EINT19<br />}<br /><br />void&nbsp;Main(void)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;<br /><br /><br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;rGPFCON&nbsp;=&nbsp;(rGPFCON&nbsp;&&nbsp;0x00ff)&nbsp;|&nbsp;0x5500;//设置GPF[7:4](LED[4:1])为输出功能<br />&nbsp;&nbsp;&nbsp;&nbsp;rGPFDAT&nbsp;|=&nbsp;LED1&nbsp;|&nbsp;LED2&nbsp;|&nbsp;LED3&nbsp;|&nbsp;LED4;<br />&nbsp;&nbsp;&nbsp;&nbsp;EINT_Init();<br />&nbsp;&nbsp;&nbsp;&nbsp;while&nbsp;(1);<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />}&nbsp;//&nbsp;end&nbsp;of&nbsp;main(...)&nbsp;
阿南 发表于 2009-5-16 16:47 | 显示全部楼层

基本相同,分析中断就要进入汇编代码,否则没有意义

调试时,最好是在IRQ的中断入口0x18处设置一个断点,然后单步的调试分析它是如何一步步执行到您最终的中断服务程序的
 楼主| xiaowu5016 发表于 2009-5-18 20:41 | 显示全部楼层

请问中断里面的INTPND寄存器怎么理解

S3C2440的数据手册里面说INTPND只有一位设置成1,这个怎么理解<br />如果我有中断0和中断2,那怎么设置呢?
myitlover 发表于 2009-5-24 14:59 | 显示全部楼层

你只是写了个中断8~23的服务程序

#define&nbsp;KEY1&nbsp;(1&nbsp;&lt&lt&nbsp;0)//GPF0,EINT0<br />#define&nbsp;KEY2&nbsp;(1&nbsp;&lt&lt&nbsp;2)//GPF2,EINT2<br /><br />这两个用的是外部中断0和2<br />程序里没有对应的中断服务程序,当然没反应了
您需要登录后才可以回帖 登录 | 注册

本版积分规则

18

主题

67

帖子

0

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