본문 바로가기

[ARM]인터럽트(두 개 거는 것)

반응형

void PIO_Ext02(void);

   

void Delayms(unsigned int ms) //딜레이 함수..

{ 

  volatile unsigned int count, countmax = (MASTERCLOCK / 10000) * ms;

   

  for(count = 0; count < countmax; count++);

}

   

void PIO_Ext01(void)

{

 static unsigned int i=0;

 unsigned int status;

   

 status=PIO_ISR;

   

 if(status == (unsigned int)0x00000100)

  {

   if(i==0)

   i =1;

   else if(i&0x80)

   return;

   else

   i|=i<<1;

     

   PIO_SODR=i; 

  }

 else if(status ==(unsigned int)0x00000200)

  {

    if(i==0)

    return;

    else

    i =i>>1;

    PIO_CODR=0xFF;

    PIO_SODR=i;

  }

}

    

void PIO_Ext02(void)

{ 

    unsigned int i;

    for(i=1; i<=3; i++)

    {

     PIO_SODR=0x000000ff;

     Delayms(300);

     PIO_CODR=0x000000ff;

     Delayms(300);

    }

}

   

int main(void){

   

 PMC_PCER = (unsigned int)1<<2;

 PIO_PER = 0x00000FFF;   //병렬 I/O포트로 사용 설정 디폴트로 I/O포트로 사용 하도록 되어 있다.

 PIO_PUER=0x300;

 PIO_ODR = 0x300;     //출력 버퍼 금지 레지스터 설정

 Delayms(50);

   

 PIO_OER = 0x00000FFF;  

   

   

 PIO_IFER=0x00000700;  //글리치 필터 사용

 PIO_IER=0x00000700;   //인터럽트 인애이블 레지스터

   

 AIC_IDCR=(unsigned int)1<<2;    //마스크 설정

 AIC_SVR[2]=(unsigned int)PIO_Ext01;      //인터럼트 함수 설정

 AIC_SMR[2]=5;           //

 AIC_ICCR=(unsigned int)1<<2;    //

 AIC_IECR=(unsigned int)1<<2;    //마스크 해지

   

   

   

 while(1);

   

 return 0;

   

} // End Main....

   

   

   

   

   

반응형

'About 프로그래밍!!! > ARM' 카테고리의 다른 글

[ARM]통신 인터럽트  (0) 2010.07.01
[ARM]통신  (0) 2010.06.29
[ARM]인터럽트 확인.(초기화)  (0) 2010.06.28
[ARM]인터럽트(그냥)  (0) 2010.06.28
[ARM]풀업저항, 풀다운저항.  (0) 2010.06.28
-->