arm外中断实验
跳线LED1、Key1和Beep分别连接到P1.18、P0.16和P0.7管脚;使用KEY1模拟外中断;
启动ADS 1.2,使用ARM Executable Image for lpc2131工程模板建立一个工程TimeEINT_C。
在user 组中的main.c 中编写主程序代码;使用系统宏IRQEnable(),使能IRQ 中断。
装载并使能外中断;
选用DebugInExram 生成目标,然后编译连接工程。
选择【Project】->【Debug】,启动AXD 进行JTAG 仿真调试。
全速运行程序,LED闪烁;
每一次按键Key,蜂鸣器就会转换静音或鸣响状态。
### ARM外中断实验知识点
#### 实验背景与目的
本实验旨在通过具体操作,帮助学习者深入了解LPC2000系列ARM7微控制器的向量中断控制器(Vector Interrupt Controller, VIC)及其外中断(External Interrupt)的应用技术。通过本实验,学习者将能够掌握如何在ARM平台上配置和使用外中断,并实现简单的外设控制功能。
#### 实验设备与环境
- **硬件**:PC机用于编程与编译;LPC2131教学实验开发平台,包含微控制器核心板以及相关的外围电路。
- **软件**:Windows98/XP/2000操作系统作为开发环境;ADS1.2(Advanced Development System)作为集成开发环境(IDE),支持ARM微控制器的程序开发、编译和调试。
#### 实验内容概述
- **实验设计**:利用LPC2131的外中断特性来控制LED的闪烁,并通过按键改变蜂鸣器的状态。
- **硬件连接**:LED1、Key1和Beep分别连接到P1.18、P0.16和P0.7管脚。
- **功能实现**:主程序控制LED闪烁,当按下Key1时触发外中断,进而改变蜂鸣器的状态。
#### 实验步骤详解
1. **硬件连接**:根据实验要求,将LED1、Key1和Beep分别连接到P1.18、P0.16和P0.7管脚。这里P0.16用作外部中断输入,而P0.7用于控制蜂鸣器。
2. **工程创建**:启动ADS 1.2,使用ARM Executable Image for lpc2131工程模板建立一个新工程,命名为TimeEINT_C。这一步骤是项目的基础,确保了后续代码可以在正确的环境中运行。
3. **编写主程序**:在user组中的main.c文件中编写主程序代码。使用系统宏`IRQEnable()`使能IRQ中断,这是启动外部中断的前提条件之一。
4. **使能外中断**:通过编写相应的初始化代码使能外部中断。在本实验中,通过设置`IRQEnable();`和`VICDefVectAddr=(int)IRQ_Eint0;`等语句来完成外中断的使能和中断服务函数的绑定。
5. **编译连接与调试**:选用DebugInExram生成目标文件,然后编译连接整个工程。接下来选择【Project】->【Debug】,启动AXD进行JTAG仿真调试,确保程序正确无误地运行在LPC2131上。
6. **运行程序**:全速运行程序后,观察到LED以一定的频率闪烁。每当按下Key1时,蜂鸣器就会转换其状态(静音或鸣响)。
7. **程序代码分析**:
- `#define BEEPCON (1<<7)` 定义P0.7引脚控制蜂鸣器,低电平有效。
- `#define LED1 (1<<18)` 定义P1.18引脚控制LED1,低电平点亮LED。
- `void DelayNS(uint32 dly)` 实现了一个简单的延时函数,用于控制LED的闪烁周期。
- `void __irq IRQ_Eint0(void)` 是外中断服务程序,通过取反`BEEPCON`控制蜂鸣器的状态切换。
- `int main(void)` 主函数实现了LED的闪烁控制以及外部中断的使能与响应。
#### 实验心得与收获
通过本次实验,学习者可以更加深入地理解ARM微控制器的中断机制,并掌握了具体的实现方法。特别是对外部中断的配置与使用有了直观的认识。此外,还加深了对端口定义和控制的理解,为后续更复杂项目的开发奠定了坚实的基础。