×
单片机 > 单片机程序设计 > 详情

S3C2440开发板利用外部中断实现按钮切换不同功能

发布时间:2020-05-28 发布时间:
|


#include "def.h"

#include "option.h"

#include "2440addr.h"

#include "mmu.h" 

#include "stdio.h"


/*中断处理函数按下不同按钮进入该中断处理,并根据按下的不同按钮启动不同功能,实现功能控制面板的按钮功能*/

void __irq Eint_Isr(void)

{

  switch(rEINTPEND)

  {

    case 1<<13:  //功能1启动,同时关闭功能2

         rGPBDAT=0<<6|1<<7;

         rEINTPEND=1<<13;  //等待下一个自己的中断进入

         break;

    case 1<<14:  //功能2启动,同时关闭功能1

         rGPBDAT=1<<6|0<<7;

         rEINTPEND=1<<14;  //等待下一个自己的中断进入

         break;

    case 1<<8:  //关闭功能1和2

         rGPBDAT=1<<6|1<<7;

         rEINTPEND=1<<8;  //等待下一个自己的中断进入

         break;

    default:

         rGPBDAT=1<<6|1<<7;

         break;

  }

  ClearPending(BIT_EINT8_23);  //等待下一个该中断向量内的任意中断到来

}


/*设置启动后的默认功能*/

void Led_on()

{

     // 设置LED灯

   rGPBCON=0x155555;  //设置GPB为输出 

   rGPBDAT=(0x1<<6)|(0x1<<7);   //GPB7脚置位,led灭

}



/*设置按钮出发方式*/

void Eint_func()

{

   // 按键中断源设置

   rGPGCON=(rGPGCON&~((0x3<<0)|(0x3<<10)|(0x3<<12)))|(0x1<<1)|(0x1<<11)|(0x1<<13); //设置GPG0、5、6脚为EINT8、13、14

   rGPGUP|=(0x1<<0)|(0x1<<5)|(0x1<<6);   //引脚使用第二功能

   rEXTINT1=rEXTINT1&~(0x7<<0);//|(0x1<<2);    //按钮1设置为低电平沿触发

   rEXTINT1=rEXTINT1&~(0x7<<20);//|(0x1<<22);  //按钮2设置为低电平沿触发

   rEXTINT1=rEXTINT1&~(0x7<<24);//|(0x1<<26);  //按钮3设置为低电平沿触发

}

                             

/*中断初始化*/

void Eint_init()

{

   rEINTMASK=rEINTMASK&~((0x1<<8)|(0x1<<13)|(0x1<<14));  // 使能外部中断屏蔽,为0时不屏蔽中断

   /*设置中断控制器*/

   rINTMOD&=~BIT_EINT8_23;  //设置中断模式为IRQ

   rINTMSK&=~BIT_EINT8_23;  //启动中断使能

}



/*中断挂起,等中断*/

void Eint_wait()

{

   rSRCPND=rSRCPND; //中断挂起寄存器清除

   rINTPND=rINTPND; //中断源挂起寄存器清除

   rEINTPEND|=(0x1<<8)|(0x1<<13)|(0x1<<14); //外部中断挂起寄存器,Eint13挂起等待中断

   rSRCPND=BIT_EINT8_23; //中断源挂起寄存器相应位置1等待中断

   rINTPND=BIT_EINT8_23; //中断挂起寄存器相应位置1等待中断

}



/*设置中断指针*/

void Eint_p()

{

   pISR_EINT8_23 =(U32)Eint_Isr;  //设置中断为Eint11响应

}



/*主程序开始*/

void Main()

{

//   isr_asm();  //使能CPSR寄存器的I位

   Led_on();  //启动时将led熄灭

   Eint_init(); //中断初始化

   Eint_func();  //中断触发状态初始化

   Eint_wait();  //等待中断

   Eint_p();    //中断指针

}


关键字:S3C2440  外部中断  按钮切换

『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
基于ARM控制器和GPRS技术网络实现配变监控系统的设计