2440有60个中断源(有的中断源还有几个子中断源),中断原理如下图:
中断源使中断源请求寄存器(SRCPND)的相应位置一,中断模式寄存器(INTMOD)选择是IRQ还是FIQ模式,如果是IRQ,在中断屏蔽寄存器(INTMSK)不屏蔽的情况下,会产生中断,同时中断请求寄存器(INTPND)的相应位被置一。
2440 外部中断 编程步骤:
外部中断初始化()
{
引脚初始化: 设置相应引脚为外部中断功能 GPxCON
选择相应触发模式 EXTINT
中断初始化: 清除SRCPNF、INTPND中的相应中断标志位
中断例程地址 -> 中断向量表 pISR_EINTx
使能相应中断 rINTMSK
}
中断例程() __irq
{
……中断程序……
清除SRCPNF(先)、INTPND(后)中的相应中断标志位
}
这是一个外部中断0的实验程序(GPF0作外部中断源):
//********************************************************************
void Main(void)
{
int i;
……硬件初始化……
Eint0_init();
while(1);
}
void Eint0_init(void) //EINT0初始化
{
Uart_Printf("n外部中断实验:Eint0n");
rGPFCON = rGPFCON & ~7 | 2 ; //设置GPF0 为 外部中断模式
rEXTINT0 = rEXTINT0 & ~7 | 2 ;//设置EINT0 为 下降沿触发
rSRCPND = 1; //SRCPND写1清0
rINTPND = 1; //INTPND写1清0
pISR_EINT0 = (U32)Eint0_ISR; //向向量表申请中断向量
rINTMSK = rINTMSK & ~(1); //禁止EINT0的屏蔽
}
void Eint0_ISR(void) __irq //EINT0中断例程
{
Uart_Printf("你按了一次Eint0引脚的按键n");
rSRCPND = 1; //清楚EINT0中断标志
rINTPND = 1;
}
//*******************************************************************
运行结果如图:
注意中断标志的清除顺序:SUBSRCPND(如果有)->SRCPND->INTPND ,如果不这样做,中断例程结束后,还会再次引起额外的中断
注意 pISR_EINT0 = (U32)Eint0_ISR;每一个中断例程运行之前,都要把它的地址交给中断向量表(此指60个中断源的eboot中断向量表,非地址0处的异常中断向量表,IRQ发生时,PC先指向异常中断向量表的IRQ位置,再跳转到eboot中断向量表),以在中断发生时,正确进入相应的中断例程,其实是把INTOFFSET中的中断号转换成(在eboot中断向量表的)偏移地址。
外部中断又24个,但不都是一致的,如下图:
EINT0、EINT1、EINT2、EINT3是四个独立的中断源,而EINT4~7组成一个中断源,EINT8~23组成一个中断源。
那么EINT4~7的中断程序如何写,显然不能用EINT0的方式,不然EINT4~EINT7的四个源相互之间无法被区分开,EINT8~23也同理。
所以为了区分它们,要用到EINTMASK和EINTPEND,EINTMASK每一位对应EINT4~EINT23的屏蔽,其他位保留;EINTPEND每一位对应EINT4~EINT23的中断请求,其他位保留;这样就可以顺利区分EINT4~EINT23了。
下面是Eint2和Eint11的中断程序
//********************************************************************
void Main(void)
{
int i;
……硬件初始化……
Uart_Printf("n外部中断实验:Eint2 和 Eint8_23n");
Eint2_init();
Eint8_23_init(); //EINT11初始化
while(1);
}
void Eint2_init(void) //EINT2初始化
{
rGPFCON = rGPFCON & ~3<<4 | 2<<4 ; //设置GPF2 为 外部中断模式
rEXTINT0 = rEXTINT0 & ~7<<8 | 4<<8 ;//设置EINT2 为 上升沿触发
rSRCPND = 1<<2; //SRCPND写1清0
rINTPND = 1<<2; //INTPND写1清0
pISR_EINT2 = (U32)Eint2_ISR; //填入Eint2的中断向量
rINTMSK = rINTMSK & ~(1<<2); //禁止EINT2的屏蔽
}
void Eint2_ISR(void) __irq //EINT2中断例程
{
Uart_Printf("你按了一次Eint2引脚的按键n");
rSRCPND = 1<<2; //清楚EINT2中断标志
rINTPND = 1<<2;
}
void Eint8_23_init(void) //Eint8_23初始化
{
rGPGCON = rGPGCON & ~3<<6 | 2<<6 ; //设置GPG3 为 外部中断模式
rEXTINT1 = rEXTINT1 & ~7<<12 | 2<<12 ;//设置EINT11 为 下降沿触发
rEINTPEND = 1<<11; //***EINTPEND中的 EINT11位 清0
rSRCPND = 1<<5; //SRCPND中的 Eint8_23位 清0
rINTPND = 1<<5; //INTPND中的 Eint8_23位 清0
pISR_EINT8_23 = (U32)Eint8_23_ISR; //填入Eint8_23的中断向量
rEINTMASK = rEINTMASK & ~(1<<11); //***禁止EINT11的屏蔽
rINTMSK = rINTMSK & ~(1<<5); //禁止Eint8_23的屏蔽
}
void Eint8_23_ISR(void) __irq //EINT2中断例程
{
Uart_Printf("你按了一次Eint8_23引脚的按键n");
rEINTPEND = 1<<11; //***EINTPEND中的 EINT11位 清0
rSRCPND = 1<<5; //SRCPND中的 Eint8_23位 清0
rINTPND = 1<<5; //INTPND中的 Eint8_23位 清0
}
//*******************************************************************
结果如下:
上一篇:S3C2410启动代码从ADSv1.2移植到KEIL For ARM uV4的方法
下一篇:2440裸机编程之三 通用I/O口
推荐阅读
史海拾趣
Anderson Power Products(APP)是一家专注于电源连接器和配件的制造商,以下是该公司发展的相关故事:
公司成立与初期阶段:Anderson Power Products成立于1936年,总部位于美国华盛顿州斯特林。最初,公司主要从事电源连接器的制造和销售。创始人是William M. Anderson和Harold J. McKenzie,他们致力于提供高质量、可靠的连接器产品,以满足不断增长的市场需求。
技术创新与产品发展:随着市场的不断变化和技术的进步,Anderson Power Products不断进行技术创新和产品开发。公司推出了一系列新型的电源连接器和配件产品,包括Powerpole®连接器、SB®连接器等,这些产品具有高功率密度、高可靠性和易用性的特点,得到了广大客户的青睐。
客户合作与市场拓展:Anderson Power Products与全球各个行业的客户建立了长期稳定的合作关系。公司的客户群涵盖了汽车、航空航天、工业、能源等多个领域。通过与客户的紧密合作,Anderson Power Products不断拓展市场份额,提升品牌知名度,成为电源连接器领域的领先供应商之一。
全球布局与生产基地:为了更好地服务全球客户,Anderson Power Products在全球建立了多个生产基地和销售办事处。除了在美国的总部外,公司还在欧洲、亚洲等地区设立了生产工厂和销售办事处,以满足不同地区客户的需求。这些生产基地拥有先进的设备和技术,能够为客户提供高质量的连接器产品。
持续创新与未来展望:作为一家专注于电源连接器的公司,Anderson Power Products将继续致力于技术创新和产品发展。公司将不断推出适应市场需求的新产品,提升生产效率和产品质量,以满足客户不断变化的需求。同时,Anderson Power Products也将继续关注行业的发展趋势和技术变革,不断调整战略,保持在行业内的竞争优势。
作为一家有社会责任感的企业,ECI始终关注环境保护和社会公益。公司积极参与各种环保活动,如节能减排、废物回收等。此外,ECI还设立了公益基金,资助贫困地区的教育事业和医疗事业。这些举措不仅提升了ECI的社会形象,也为公司赢得了更多客户的信任和支持。
ELM Technology Corporation一直将产品质量视为企业的生命线。公司建立了严格的质量管理体系,从原材料采购到产品生产的每一个环节都进行严格把控。这种对品质的坚持不仅赢得了客户的信任,还为ELM赢得了良好的口碑。在激烈的市场竞争中,ELM凭借卓越的产品品质赢得了市场份额。
面对电子行业快速发展的挑战,长园维安积极应对,进行转型升级。公司加大研发投入,开发更加智能化、集成化的产品,满足市场需求。同时,长园维安还注重人才培养和引进,建立了一支高素质的技术和管理团队。这些努力使长园维安在激烈的市场竞争中保持领先地位。
为了进一步扩大市场份额,达晶微积极拓展国际市场。公司在深圳、上海、苏州、台湾、青岛、长沙、韩国、北美等地设立了销售办事处,与当地企业建立了紧密的合作关系。同时,达晶微还积极寻求与国际知名企业的合作机会,通过引进先进技术和管理经验,不断提升自身实力。
目前,市场上的血压计大部分仍是水银血压计,电子血压计在国外已经大量普及,而我国才开始应用。水银血压计每次测量必须由医生戴上听诊器进行测量, 测量过程复杂,而且不同的医生,测量结果可能不同。而电子血压计弥补了水银血压计的不足。本文使用低功 ...… 查看全部问答∨ |
数据库的类型不是 database么? 还有打开数据库的API: HANDLE CeOpenDatabaseEx( PCEGUID pceguid, PCEOID poid, LPWSTR lpszName, CEPROPID propid, DWORD dwFlags, ...… 查看全部问答∨ |
请教PID控制温度的三个经验性参数? 还有开关量PID的问题 1)在公式△u=Kp * [e(n) - e(n-1)] + Ki * e(n) + Kd * [e(n) - 2e(n-1) + e(n-2)] 中,Kp,Ki,Kd三个参数我目前用的是4, 0.33, 4, 感 ...… 查看全部问答∨ |
我在代码中写 mr = waveOutOpen(&hWave, WAVE_MAPPER, pwfx, (DWORD)(UINT)hevDone, NULL, CALLBACK_EVENT);返回11,查了下MMSYSTEM是INVALID PARAMETER 改写成 mr = waveOutOpen(&hWave, -1, pwfx,0,0,0);试了下,仍然报同样的错 请问到底哪 ...… 查看全部问答∨ |
Data Abort: Thread=82927640 Proc=8044c300 \'OffLine.exe\' (注:offline.exe为本人写的程序) 详细解释说明一下,那些都是什么东西啊? 还有这些 Data Abort: Thread=82a57bfc Proc=8044c3f0 \'OffLine.exe\' AKY=00080001 PC=03f81354( ...… 查看全部问答∨ |
|
设计资源 培训 开发板 精华推荐
- 英飞凌家用暖通空调解决方案邀你拆盲盒
- 福禄克有奖直播|数据采集器的基础知识及其应用和校准
- 你晒单我送礼,晒TI样片订单即可赢好礼!
- 【唤新】微信寄语2018年STM32峰会,赢取ST精美板卡
- 直播:TI及安富利带你快速通过新能源汽车安全系统认证 预报名、看直播赢好礼!
- 有奖直播|相约Keysight World 2019“汽车电子及新能源汽车测试”论坛
- 答题赢礼! | 如何利用PI Expert 电源设计工具快速搭建PD充电器
- Maxim 利用nanoPower创新技术,致力于降低系统的静态功耗 看视频答题赢好礼! 还有免费开发板等你拿
- 瑞萨电子边缘AI 技术研讨会——深圳站, 火热报名中,参会有好礼!