原创 S3C2440外部中断

2010-10-23 21:43 3108 9 9 分类: MCU/ 嵌入式


#include "2440addr.h"
#include "def.h"
#include "option.h"



/*
EINT8(GPG0),EINT11(GPG3),EINT13(GPG5),EINT14(GPG6),
EINT15(GPG7),EINT19(GPG11),为按键接口。


*/
static void __irq EINT8_23_ISR(void)
{
 ClearPending(BIT_EINT8_23);
  if(rEINTPEND&(1<<8))
 {
  
  rEINTPEND|=1<<5;
  rGPBDAT&=~((1<<5)|(1<<6)|(1<<7)|(1<<8));
  rGPBDAT|= ((0<<5)|(1<<6)|(1<<7)|(1<<8));
 }
  if(rEINTPEND&(1<<11))
 {
  
  rEINTPEND|=1<<11;
  rGPBDAT&=~((1<<5)|(1<<6)|(1<<7)|(1<<8));
  rGPBDAT|= ((1<<5)|(0<<6)|(1<<7)|(1<<8));
 }
   if(rEINTPEND&(1<<13))
 {
  
  rEINTPEND|=1<<13;
  rGPBDAT&=~((1<<5)|(1<<6)|(1<<7)|(1<<8));
  rGPBDAT|= ((1<<5)|(1<<6)|(0<<7)|(1<<8));
 }
   if(rEINTPEND&(1<<14))
 {
  
  rEINTPEND|=1<<14;
  rGPBDAT&=~((1<<5)|(1<<6)|(1<<7)|(1<<8));
  rGPBDAT|= ((1<<5)|(1<<6)|(1<<7)|(0<<8));
 }
   if(rEINTPEND&(1<<15))
 {
  
  rEINTPEND|=1<<11;
  rGPBDAT&=~((1<<5)|(1<<6)|(1<<7)|(1<<8));
  rGPBDAT|= ((1<<5)|(0<<6)|(0<<7)|(1<<8));
 }
   if(rEINTPEND&(1<<19))
 {
  
  rEINTPEND|=1<<11;
  rGPBDAT&=~((1<<5)|(1<<6)|(1<<7)|(1<<8));
  rGPBDAT|= ((0<<5)|(1<<6)|(1<<7)|(0<<8));
 }
 
 
}
void Interrupt_Init(void)
{
 rGPGUP&=~((1)|(1<<3)|(1<<5)|(1<<6)|(1<<7)|(1<<11));
 rGPGCON&=~((3)|(3<<6)|(3<<10)|(3<<12)|(3<<14)|(3<<22));
 rGPGCON|= ((2)|(2<<6)|(2<<10)|(2<<12)|(2<<14)|(2<<22));
// 设置GPG0.GPG3,GPG5,GPG6,GPG7,GPG11为中断口。
 rSRCPND|=BIT_EINT8_23;
 //写入BIT_EINT8_23到rSRCPND来清除EINT8_23中断请求。
 rINTPND|=BIT_EINT8_23;
 //写入BIT_EINT8_23到rINTPND来清除EINT8_23中断请求。
 rINTMOD&=~BIT_EINT8_23;
 //EINT8_23设置为IRQ中断模式。
 rINTMSK&=~BIT_EINT8_23;
 //是其可以服务EINT8_23中断。
 rPRIORITY=0x0;
 //中断优先级设置。
 rEXTINT1 &= ~((15<<0)); 
 rEXTINT1 |= ((2<<0)); //set eint8 falling edge int
 
 rEXTINT1 &= ~(15<<12);
 rEXTINT1 |= (2<<12); //set eint11 falling edge int
 
 rEXTINT1 &= ~(15<<20);
 rEXTINT1 |= (2<<20); //set eint13 falling edge int
 
 rEXTINT1 &= ~(15<<24);
 rEXTINT1 |= (2<<24); //set eint14 falling edge int
 
 rEXTINT1 &= ~(7<<28);
 rEXTINT1 |= (2<<28); //set eint15 falling edge int
 
 rEXTINT2&=~(15<<12);
 rEXTINT2|= (2<<12);
 //EINT8~23设置为有滤波器,下降沿触发。
 rEINTMASK&=~((1<<8)|(1<<11)|(1<<13)|(1<<14)|(1<<15)|(1<<19));
 rEINTPEND&=~((1<<8)|(1<<11)|(1<<13)|(1<<14)|(1<<15)|(1<<19));
 //EINT8~13中断使能。
 pISR_EINT8_23=(U32)EINT8_23_ISR;
 //注册中断
}

PARTNER CONTENT

文章评论0条评论)

登录后参与讨论
我要评论
0
9
关闭 站长推荐上一条 /3 下一条