| 网站首页 | 新闻 | SOPC | FPGA | DSP | ARM | 嵌入式操作系统 | 下载 | 所有产品 | 留言 | 论坛 | 购买指南 | 网络协议 | 驱动设计 | 
您现在的位置: 21嵌入式控制研究室 >> ARM >> 其它 >> 文章正文 用户登录 新用户注册
ARM外部中断笔记            【字体:
ARM外部中断笔记
作者:佚名    文章来源:21control    点击数:    更新时间:2005-12-12
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
}
文章录入:flyongrass    责任编辑:flyongrass 
  • 上一篇文章:

  • 下一篇文章:
  • 发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
    最新热点 最新推荐 相关文章
  • ARM入门

  • 一个典型的嵌入式系统设计和…

  • 基于RTCORBA技术的嵌入式代理…

  • 基于ARM的海底大地电磁信号采…

  • 32位ARM嵌入式处理器的调试技…

  • ARM CPU S3C44B0X与C54X DSP…

  • 32位ARM嵌入式处理器的调试技…

  • ARM处理器及物理IP实现突破性…

  • 基于ARM的实时测控系统开发平…

  • 基于ARM核的AT75C220及其在指…

  •   网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!)