首页 AVR单片机 8051单片机 PIC单片机 msp430应用 motorola单片机 C166单片机 开关电源 电源设计 电源技术应用 电磁兼容
ARM芯片开发 DSP开发技术 PowerPC处理器 RABBIT单片机 嵌入式系统设计 工业控制 控制电路 PLC编程 机器人技术 电机原理
vhdl语言学习 asic芯片技术 fpga培训 cpld编程 verilog hdl Vxworks开发 wince开发教程 嵌入式linux uclinux开发 ucos入门
电路设计 数字电路设计 模拟电路设计 音频电路设计 模拟滤波器设计 电子技术基础 电子名词解析

首页->嵌入式系统开发->ARM芯片开发->正文

ARM外部中断笔记

作者:  来源:51mcu 

上篇:ARM的介绍和选择
下篇:ARM异常处理

 

#include <LPC21xx.H> // Philips Peripheral Registers
#include "LPC21xxDEF.H" //ARM菜鸟HotPower创建定义文件
/*
* software interrupt function accept parameters and run in
* supervisor mode (interrupt protected).
*/
int myfunc1 (int i1, long i2) __swi (8) {
return (i1 / i2);
}

int myfunc2 (int i1) __swi (9) {
return (i1<<4);
}

/*
* standard interrupt function saves only R0 - R12 and returns with
*/
void DefaultIRQ (void) __irq {
unsigned int temp;
temp = VICIRQStatus;
IOPIN1 ^= (1 << P1_15); //取反P1.15
}

void EINT0IRQ (void) __irq {
unsigned int temp;
temp = VICIRQStatus;
IOPIN1 ^= (1 << P1_16); //取反P1.16
EXTINT = (1 << EINT0); //清除INT0中断标志
VICVectAddr = 0;
}

void EINT1IRQ (void) __irq {
unsigned int temp;
temp = VICIRQStatus;
IOPIN1 ^= (1 << P1_14); //取反P1.14
EXTINT = (1 << EINT1); //清除INT1中断标志
VICVectAddr = 0;
}

/*
* fast interrupt function saves only R0 - R7 and returns with
*/
void FIQ_Handler (void) __fiq {
//IOSET1 = 0x00010000; // Set pin P1.16
// IOSET1 = (1 << P1_15); // Set pin P1.15
IOPIN1 ^= (1 << P1_15); //取反P1.15
//EXTINT = 0x00000002; // Clear the peripheral interrupt flag
EXTINT = (1 << EINT2); //清除INT2中断标志
}

/*
* task functions have no register save/restore and no return.
*/
void tsk (void) __task {
while (1);
}

/*
* Sample main function
*/
int res;

void main (void) {
// IODIR1 = 0x00FF0000; // Set the LED pins as outputs
IODIR1 = (1 << P1_23) | (1 << P1_22) | (1 << P1_21) | (1 << P1_20)
|(1 << P1_19) | (1 << P1_18) | (1 << P1_17) | (1 << P1_16);//设置LED输出方式
// PINSEL0 = 0x20000000; // Enable the EXTINT1 interrupt
PINSEL0 |= (P0_14_EINT1 << P0_14_PINSEL);//选择P0.14为INT1外部中断引脚
EXTMODE |= (1 << EXTMODE1);//设置INT1为边沿触发,低电平有效
PINSEL1 |= (P0_16_EINT0 << P0_16_PINSEL);//选择P0.16为INT0外部中断引脚
EXTMODE |= (1 << EXTMODE0);//设置INT1为边沿触发,低电平有效
PINSEL0 |= (P0_15_EINT2 << P0_15_PINSEL);//选择P0.15为INT2外部中断引脚
EXTMODE |= (1 << EXTMODE2);//设置INT2为边沿触发,低电平有效
// VICVectAddr15 = (unsigned long) DefaultIRQ;

// VICIntSelect = 0x00008000; // Enable a Vic Channel as FIQ
VICIntSelect = (1 << VICIntSel_EINT2); // Enable a Vic Channel as FIQ
// VICIntSelect = 0; // Enable a Vic Channel as FIQ

VICVectCntl0 = VICIntSel_Enable | VICIntSel_EINT0;
VICVectAddr0 = (unsigned long *) &EINT0IRQ;//取INT0中断服务地址


VICVectCntl1 = VICIntSel_Enable | VICIntSel_EINT1;
VICVectAddr1 = (unsigned long *) &EINT1IRQ;//取INT1中断服务地址


// VICIntEnable = 0x00008000; // Set Default interrupt vector
VICIntEnable = (1 << VICIntSel_EINT0)
| (1 << VICIntSel_EINT1)
| (1 << VICIntSel_EINT2);//使能中断

EXTINT = (1 << EINT0) | (1 << EINT1) | (1 << EINT2); //清除INT中断标志

// VICDefVectAddr = (unsigned long *) &DefaultIRQ;

// VICSoftInt = (1 << VICIntSel_EINT1);

res = myfunc1 (10, 2); // call SWI functions
res += myfunc2 (res);


while (1); // endless loop
}

相关资料:
ARM7在嵌入式应用中启动程序的实现FLASH地址线接线原理及设置小结
关于C语言的学习方法c语言编程的难点
嵌入式系统的实时性问题基于ARM的CAN总线智能节点的设计
英蓓特ARM双核嵌入式教学实验系统USB协议基础及S3C2410 USB控制器
串口通讯基础及S3C2410 UART控制器Flash ROM基础知识及其编程
S3c2410的触摸屏及模数转换ARM新技术助力大幅缩小存储器的占位空间
嵌入式系统中LCD驱动的实现原理LCD基础及S3C2410 LCD控制器
嵌入式开发板选型指南ARM开发调试教程-不错的ARM开发心得


网站地图 | 联系我们 | 免责声明 | 招聘信息 | 友情链接
Copyright © 2005 - 2006 单片机设计网