中断定时蜂鸣器实验
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
中断定时蜂鸣器实验
一.实验目的
1.掌握ARM2131开发环境ADS,熟悉开发环境的常用工具以及相应功能。
2.学习建立ADS的工程文件、编译连接设置、调试操作等。
3.学习对中断向量VTC、GPIO口的设置。
4.学习定时器中断的应用
二.实验设备
PC兼容机一台,操作系统WINDOWS 2000,安装ADS1.2(ARM Developer Suite 的成熟版本)
三.实验原理
随着信息技术技术的飞速发展,ARM技术方案架构作为一种具备低功耗、高性能、以及小体积等特性的32位嵌入式微处理器,得到了众多的知识产权授权用户,其中包括世界顶级的半导体和系统公司。目前已被广泛的用于各类电子产品,汽车、消费娱乐、影像、工业控制、海量存储、网络、安保和无线等领域。被业界人士认为,基于ARM的技术方案是最具市场前景和市场优势的解决方案。LPC2131
Philips LPC2131 是基于ARM7TDMI-S 的高性能32 位RISC 微控制器,它一方面具有ARM处理器的所有优点:低功耗、高性能;同时又具有较为丰富的片上资源,非常适合嵌入式产品的开发。其特点如下:
·集成了Thumb 扩展指令集。
·32KB可在系统中编程(ISP)的片内Flash和可在应用中编程(IAP)的8KB RAM,具有向量中断控制器。
·2个UART,2个I2C 串行接口,2 个SPI串行接口,2 个定时器(7 个捕获/ 比较通道),PWM单元可提供多达6个PWM输出,8通道10位ADC,实时时钟RTC,看门狗定时器WDT,48 个通用I/O引脚。
·CPU时钟高达60MHz,具有片内晶体振荡器和片内PLL。
GPIO:(General Purpose Input Output)
GPIO是用来进行输入输出的,那么肯定有寄存器进行控制。对于输入的话,可以通过读取寄存器来确定引脚的高电平还是低电平;对于输出的话,可以通过写某个寄存器来让这个引脚输出高低电平.GPxCON,GPACON每一位对应着一根引脚(23根)0:代表输出;1:相应的引脚为地址线或用于地址控制对于PORT B-PORT J的话,GPxCON中每两位控制一根引脚00:输入;01:输出;10:特殊功能;11:保留。GPxDA T用于读或者写。GPxUP,1:不使用内部的上拉电阻;0:使用内部上拉电阻。
向量控制寄存器VICVectCntl0-15记录了各个通道号及其使能位。
当中断发生时,VICVectAddr0-15中的一个值会被copy到VICVectAddr.
如果是非向量中断则VICdefaultAddr被copy到VICVectAddr.
程序跳转到VICVectorAddr指向的地址。
中断返回时,写0x00到VICVectAddr.
非向量中断是指那些虽然已经打开(允许),但是没有在相应的VICVectorCntl0~15
和VICVectorAddr0~15中设置的中断。
关于中断设置:
1、首先,硬复位后所有的Special Function Registor都有默认值。不必考虑设置的顺序问题。可以先设置好中断,再开通模块功能。
2、软中断(SWI)与非向量中断不同,它的入口是0x0000,0008。进入软中断后,系统变为管理模式。而非向量中断入口是0x0000,0018。它引导系统进入fiq/irq模式。
3、VIC设置实例:
VICIntSelect = 0x00000000; //所有中断都是IRQ
VICVectCntl0 = 0x20 | 15; //EINT1为向量中断,使用Slot0
VICVectAddr0 = (uint32)EINT1_Exception; //EINT1中断地址
VICDefVectAddr = (uint32)Default_Entry; //非向量中断地址
VICIntEnable = 0x00018000; //使能EINT1和EINT2
由于在管理向量中断的VICVectCntl0~15和VICVectAddr0~15中只设置了EINT1,故EINT2中断发生时,要进入非向量中断处理程序Default_Entry。
四.建立过程
1.ARM工程的流程:
(1)建立工程:编写工程名称,其后缀为,mcp如:BEEP.mcp
(2)建立文件:用来写入新程序,编写文件名。如:Test.s
(3)添加所需文件到工程中
(4)编译连接生成。如:Test.axf
(5)上载ELF格式的可执行文件如:Test.axf
2.运用工程模版编写自己的程序
选择相应的工程模板建立工程,使用ARM Executable Image for lpc2131 工程模板建立的一个工程。工程有三个生成目标(target system):DebugInRAM、DebugInFLASH和RelInFLASH。因为工程模板已经将相应的编译参数设置好了,直接使用即可。
3添加工程代码
工程建立好以后,利用完整的工程流程,只需要改变其程序,就可以实现自己所要求的实验目的。在工程中,双击user组中的main.c文件,可以在此文件中添加实验要求程序。4.程序流程图:
#include "config.h"
#define BEEP 1 << 7 // P0.7控制BEEP,低电平蜂鸣可以将“1<<7”改为“0x00000080”,它俩是一样的,1<<7是数值1左移7位
void __irq IRQ_Timer0 (void) //中断服务子程序
{
if ((IO0SET & BEEP) == 0)
IO0SET = BEEP; //BEEP停止蜂鸣;IO0SET =0x80置GPIO口输出值为1,停止蜂鸣
else
IO0CLR = BEEP; //BEEP 蜂鸣;IO0CLR = 0x80置GPIO口输出值为0,使Beep响
T0IR = 0x01; // 清除中断标志
VICVectAddr = 0x00; // 通知VIC中断处理结束
}
int main (void)
{
PINSEL1 = 0x00000000; // 设置管脚连接GPIO
IO0DIR = BEEP; // 设置BEEP控制口输出