tag 标签: 专注于松江大学城的嵌入式linux培训

相关博文
  • 热度 23
    2012-8-13 21:30
    1743 次阅读|
    0 个评论
    2.非向量IRQ实例程序   作者:下家山(上海索漫培训教材 http://www.xiajiashan.com) #include "config.h" volatile uint8 FLAG=0; #define LED1 119 // P1/**************************************************************************** * 名 称:IRQ_Eint3() * 功 能:外部中断EINT3服务函数* 入口参数:无 * 出口参数:无 ****************************************************************************/ void __irq IRQ_Eint3(void) { FLAG=1; /* 等待外部中断信号恢复为高电平(若信号保持为低电平,中断标志会一直置位) */ while( (EXTINT(13))!=0 ); EXTINT = 13; // 清除EINT3中断标志,3 等价于0x08 VICVectAddr = 0; // 向量中断结束 } /**************************************************************************** 【By 下家山 Q群 75303301        上海松江文汇路928号258室    松江大学城 上海索漫科技  http://www.xiajiashan.com  专注嵌入式(ARM7,Cortex-M0,Cortex-M3,ARM9,linux)培训】 ****************************************************************************/ int main(void) { PINSEL1 = 38; // 设置管脚连接,P0.20设置为EINT3 IO1DIR = LED1; // EXTMODE = 0x00; // 设置EINT3中断为电平触发模式 /* 打开EINT3中断(使用非向量IRQ) */ VICIntSelect = 0x00000000; // 设置所有中断分配为IRQ中断 VICDefVectAddr = (int)IRQ_Eint3; // 设置中断服务程序地址 EXTINT = 13; // 清除EINT3中断标志 VICIntEnable = 117; // 使能EINT3中断,EINT3在Bit17上 while(1){// 等待定时器中断或定时器匹配    if(FLAG==1){        if( (IO1SETLED1) == 0 )           {             IO1SET = LED1;          }else{             IO1CLR = LED1;          }      FLAG=0;   } ] return(0); } 未完待续: IRQ中断实例分析(一):向量IRQ实例程序 IRQ中断实例分析(二):非向量IRQ实例程序 IRQ中断实例分析(三):向量非向量IRQ实例程序  
  • 热度 18
    2012-8-13 21:24
    2431 次阅读|
    1 个评论
    作者:下家山(上海索漫培训教材 http://www.xiajiashan.com)1. 向量IRQ实例程序 我们再来分析之前的定时器中断程序 #include "config.h" volatile uint8 FLAG=0; #define LED1 119 // P1.19引脚控LED1/**************************************************************************** * 名 称:IRQ_Time0() * 功 能:定时器中断服务程序****************************************************************************/ void __irq IRQ_Time0(void) { FLAG= 1; T0IR = 0x01; // 清除中断标志 VICVectAddr = 0x00; // 通知VIC中断处理结束 } /**************************************************************************** * 名 称:Time0Init() * 功 能:初始化定时器,定时时间为S,并使能中断。 * 入口参数:无 * 出口参数:无 ****************************************************************************/ void Time0Init(void) { T0PR = 99; // 设置定时器分频为分频,得Hz T0MCR = 0x03; // 匹配通道匹配中断并复位T0TC T0MR0 = 110592; // 比较值(1S定时值) T0TCR = 0x03; // 启动并复位T0TC T0TCR = 0x01; /* 设置定时器中断IRQ */ VICIntSelect = 0x00; // 所有中断通道设置为IRQ中断 VICVectCntl0 = 0x24; // 定时器中断通道分配最高优先级(向量控制器) VICVectAddr0 = (uint32)IRQ_Time0; // 设置中断服务程序地址向量 VICIntEnable = 0x00000010; // 使能定时器中断 } /**************************************************************************** 【By 下家山 Q群 75303301        上海松江文汇路928号258室    松江大学城 上海索漫科技  http://www.xiajiashan.com  专注嵌入式(ARM7,Cortex-M0,Cortex-M3,ARM9,linux)培训】 ****************************************************************************/ int main(void) { IO1DIR = LED1; // 设置I/O为输出 Time0Init(); // 初始化定时器及使能中断 while(1){// 等待定时器中断或定时器匹配    if(FLAG==1){        if( (IO1SETLED1) == 0 )           {             IO1SET = LED1;          }else{             IO1CLR = LED1;          }      FLAG=0;   } ] return(0); } 未完待续: IRQ中断实例分析(一):向量IRQ实例程序 IRQ中断实例分析(二):非向量IRQ实例程序 IRQ中断实例分析(三):向量非向量IRQ实例程序  
  • 热度 24
    2012-8-13 21:17
    2327 次阅读|
    0 个评论
    3. 向量非向量IRQ实例程序 /**************************************************************************** * 文件名:main.c * 功 能:有四个中断,UART0,UART1,I2C,SPI0,其中 * UART0,SPI0分配为向量IRQ * UART1,I2C分配为非向量IRQ * 说 明: ****************************************************************************/ #include "config.h" #define UART1_IRQ 1 7 #define I2C_IRQ 1 9 /**************************************************************************** * 功 能:中断服务程序。 ****************************************************************************/ void __irq IRQ_SPI0(void) { 代码略 } void __irq IRQ_UART0(void) { 代码略 } void __irq NoVector_ISR(void) { volatile uint32 tmp; tmp = VICIRQStatus; if( tmp UART1_IRQ) { UART1中断处理代码略 } if( tmp I2C_IRQ) { I2C中断处理代码略 } VICVectAddr = 0; // 向量中断结束 } /**************************************************************************** 【By 下家山 Q群 75303301        上海松江文汇路928号258室    松江大学城 上海索漫科技  http://www.xiajiashan.com  专注嵌入式(ARM7,Cortex-M0,Cortex-M3,ARM9,linux)培训】 ****************************************************************************/ int main(void) { PINSEL0 = 0x55555555; // 配置管脚功能 /*I2C,SPI0,UART0,UART1相关初始化代码部分略 */ /* 中断部分设置*/ VICIntSelect = 0x00000000; // 所有中断通道设置为IRQ中断 VICDefVectAddr = (uint32)NoVector_ISR; // 设置非向量中断服务程序地址向量 VICVectAddr0 = (uint32)IRQ_UART0; // 设置uart0中断服务程序地址向量 VICVectAddr1 = (uint32)IRQ_SPI0; // 设置spi0中断服务程序地址向量 VICVectCntl0 = 0x00000026; // 6号中断源使能为向量IRQ并设置为最高优先级 VICVectCntl1 = 0x0000002A; // 10号中断源使能为向量IRQ并设置为次高优先级 VICIntEnable = 0x000006C0; /* 使能UART0,UART1,I2C,SPI0=bit10,bit9,bit7和bit6=1*/ while(1) // 等待中断发生 { 代码略 } return(0); }  本文的一些截图来自philips lpc2136英文datasheet. 写于上海松江                    下家山   有什么问题可与我联系:1209050967 上海索漫提供 http://www.xiajiashan.com IRQ中断实例分析(一):向量IRQ实例程序 IRQ中断实例分析(二):非向量IRQ实例程序 IRQ中断实例分析(三):向量非向量IRQ实例程序