中断-按键控制LED灯
2017-07-25 15:56
811 查看
三个按键分别控制三个LED灯
完整项目请去我的资源下载页xjp的资源初始化函数:
/* * init.c: 进行一些初始化 */ #include "s3c24xx.h" /* * LED1,LED2,LED4对应GPF4、GPF5、GPF6 */ #define GPF4_out (1<<(4*2)) //定义为01 输出 #define GPF5_out (1<<(5*2)) #define GPF6_out (1<<(6*2)) #define GPF4_msk (3<<(4*2)) //定义为11 #define GPF5_msk (3<<(5*2)) #define GPF6_msk (3<<(6*2)) /* * S2,S3,S4对应GPF0、GPF2、GPG3 EINT0 EINT2 EINT11 */ #define GPF0_eint (0x2<<(0*2)) //10 #define GPF2_eint (0x2<<(2*2)) #define GPG3_eint (0x2<<(3*2)) //3*2: 2 代表一个节点站两位 #define GPF0_msk (3<<(0*2)) //11 #define GPF2_msk (3<<(2*2)) #define GPG3_msk (3<<(3*2)) /* * 关闭WATCHDOG,否则CPU会不断重启 *操作WTCON寄存器 */ void disable_watch_dog(void) { WTCON = 0; // 关闭WATCHDOG很简单,往这个寄存器写0即可 } void init_led(void) { // LED1,LED2,LED4对应的3根引脚设为输出 GPFCON &= ~(GPF0_msk|GPF2_msk|GPG3_msk);//先清零 GPFCON |=(GPF4_out|GPF5_out|GPF6_out);//后置位 } /* * 初始化GPIO引脚为外部中断 * GPIO引脚用作外部中断时,默认为低电平触发、IRQ方式(不用设置INTMOD) */ void init_irq( ) { // S2,S3对应的2根引脚设为中断引脚 EINT0,ENT2 GPFCON &= ~(GPF0_msk|GPF2_msk);// GPFCON |= (GPF0_eint|GPF2_eint); // S4对应的引脚设为中断引脚EINT11 GPGCON &= ~GPG3_msk; GPGCON |= GPG3_eint; // 对于EINT11,需要在EINTMASK寄存器中使能它 EINTMASK &= ~(1<<11);//【11】位清零 EINTMASK |= (0<<11);//【11】位写零 //EINTMASK[11]中写零,等价于 //EINTMASK &= ~(1<<11); /* * 设定优先级: * ARB_SEL0 = 00b, ARB_MODE0 = 0: REQ1 > REQ3,即EINT0 > EINT2 * 仲裁器1、6无需设置 * 最终: * EINT0 > EINT2 > EINT11即K2 > K3 > K4 * 在PRIORITY中设置 */ //PRIORITY 复位值为0x7f 0111 1111 // ARB_SEL0 = 00b,[8:7]=00 ARB_MODE0 = 0 [0]=0 PRIORITY &= ~((3<<7)|(1<<0)); // EINT0、EINT2、EINT8_23使能,在INTMSK中设置 INTMSK &= (~(1<<0)) & (~(1<<2)) & (~(1<<5)); }中断函数
#include "s3c24xx.h" void EINT_Handle() { unsigned long oft = INTOFFSET;//读取中断偏移量 unsigned long val; switch( oft ) { // S2被按下,LED1点亮,再次按下,LED1熄灭 case 0: //EINT0 { GPFDAT |= (0x7<<4); // 所有LED熄灭 GPFDAT &= ~(1<<4); // LED1点亮 break; } // S3被按下,LED2点亮,再次按下,LED2熄灭 case 2://EINT2 { GPFDAT |= (0x7<<4); // 所有LED熄灭 GPFDAT &= ~(1<<5); // LED2点亮 break; } // K4被按下,LED3点亮,再次按下,LED3熄灭 case 5://EINT11 { GPFDAT |= (0x7<<4); // 所有LED熄灭 GPFDAT &= ~(1<<6); // LED4点亮 break; } default: break; } //清中断 if( oft == 5 ) EINTPEND = (1<<11); // EINT8_23合用IRQ5 SRCPND = 1<<oft; INTPND = 1<<oft; }
相关文章推荐
- Linux button按键驱动 多次中断控制相应LED灯亮灭闪
- OK6410利用矢量中断通过按键控制LED灯
- 从ARM裸机看驱动之按键中断方式控制LED(二)
- stm32 按键(中断)控制LED的亮灭,按一次亮,再按一次灭;
- 树莓派 Learning 003 — GPIO 003 中断模式 — 按键控制LED
- STM32_外部中断之按键控制点亮LED灯
- 第三个实验 通过中断方式让按键控股按键控制LED
- 中断——按键控制LED状态
- S3C2410 按键控制LED(中断)
- wince6.0 +S3C6410 中断处理例子(按键控制LED灯)
- ARM裸机——FS2410按键控制LED(中断方式)
- 基于mini2440的按键中断控制LED(裸机代码)
- 2013-10-07 实验之按键中断控制Led
- CC2530学习笔记の外部中断——按键控制LED
- 3.STM32中对EXTI_PE5_Config()函数的理解(自定义)之中断控制按键LED
- wince6.0 +S3C6410 中断处理例子(按键控制LED灯)+应用程序控制LED流水灯
- 外部按键 控制 LED 中断 (参考 http://www.oschina.net/question/565065_115196?sort=time )
- 木其工作室(专业程序代写服务)[原]ok6410学习笔记(16.按键中断控制led驱动)
- .net micro framework的入门例程-点灯神话-3.按键中断控制LED
- ZYNQ+Vivado2015.2系列(十四)按键中断控制LED亮灭