//---------- 인터럽트 제어기 IO설정
#define AIC_IECR (*(volatile unsigned int *) 0xFFFFF120) // 인터럽트 허용 레지스터
#define AIC_IDCR (*(volatile unsigned int *) 0xFFFFF124) // 인터럽트 금지 레지스터
#define AIC_ICCR (*(volatile unsigned int *) 0xFFFFF128) // 인터럽트 클리어 레지스터
#define AIC_ISCR (*(volatile unsigned int *) 0xFFFFF12C) // 인터럽트 세트 레지스터
#define AIC_SMR ((volatile unsigned int *) 0xFFFFF000) // AIC 소스 모드 레지스터
#define AIC_SVR ((volatile unsigned int *) 0xFFFFF080) // AIC 소스 벡터 레지스터
//---------- 입출력 IO설정
#define PIO_PUDR (*(volatile unsigned int *) 0xFFFFF460) // PIO Pull-Up Disable Register
#define PIO_PUER (*(volatile unsigned int *) 0xFFFFF464) // PIO Pull-Up Enable Register
#define PIO_IER (*(volatile unsigned int *) 0xFFFFF440) // PIO Interrupt Enable Register
#define PIO_IDR (*(volatile unsigned int *) 0xFFFFF444) // PIO Interrupt Disable Register
#define PIO_IMR (*(volatile unsigned int *) 0xFFFFF448) // PIO Interrupt Mask Register
#define PIO_ISR (*(volatile unsigned int *) 0xFFFFF44C) // PIO Interrupt Status Register
#define PIO_IFER (*(volatile unsigned int *) 0xFFFFF420) // PIO Glitch Input Filter Enable Register
#define PIO_IFDR (*(volatile unsigned int *) 0xFFFFF424) // PIO Glitch Input Filter Disable Register
#define PIO_SODR (*(volatile unsigned int *) 0xFFFFF430) //출력
#define PIO_CODR (*(volatile unsigned int *) 0xFFFFF434) //출력 하지 않음
#define PIO_OER (*(volatile unsigned int *) 0xFFFFF410) //출력 방향 설정
#define PIO_PER (*(volatile unsigned int *) 0xFFFFF400) //병렬 입출력 제어 레지스터 병렬 입출력 포트로 사용한다.
//---------- 전력 제어 설정
#define PMC_PCER (*(volatile unsigned int *) 0xFFFFFC10)
#define MASTERCLOCK 48000000
#define INTERR 0x00000100
#define LED 0x00000010
//--------- 전역 변수
void Delayms(unsigned int ms) //딜레이 함수..
{
volatile unsigned int count, countmax = (MASTERCLOCK / 10000) * ms;
for(count = 0; count < countmax; count++);
}
void ledToggle()
{
int clear;
PIO_SODR = 0x00000010;
Delayms(500);
PIO_CODR = 0x00000010;
Delayms(500);
clear = PIO_ISR;
}
int main(void)
{
// PMC setting
PMC_PCER = 0x00000004;
// PIO setting
PIO_PER = 0x00000110;
PIO_IER = 0x00000100;
PIO_IFER = 0x00000100;
PIO_PUER = 0x00000100;
PIO_OER = 0x00000010;
// PIO_SODR = 0x00000000;
// AIC setting
AIC_IECR = 0x00000004;
AIC_SMR[2] = 0x00000065;
AIC_SVR[2] = (unsigned int)ledToggle;
AIC_ICCR = 0x00000004;
while(1)
{
}
return 0;
} // End Main....
[100625]ARM 인터럽트 사용 실습
2010. 6. 28. 13:31