인터럽트를 읽었다고 확인을 하지 않았기 때문에 계속 깜빡인다.
//---------- 인터럽트 제어기 IO설정
#define AIC_IECR (*(volatile unsigned int *) 0xFFFFF120) // 인터럽트 허용 레지스터
#define AIC_IDCR (*(volatile unsigned int *) 0xFFFFF124) // 인터럽트 금지 레지스터
#define AIC_ICCR (*(volatile unsigned int *) 0xFFFFF128) // 인터럽트 클리어 레지스터
#define AIC_SMR ((volatile unsigned int *) 0xFFFFF000) // AIC 소스 모드 레지스터
#define AIC_SVR ((volatile unsigned int *) 0xFFFFF080) // AIC 소스 벡터 레지스터
//---------- 입출력 IO설정
#define PIO_ODR (*(volatile unsigned int *) 0xFFFFF414)
#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_ISR (*(volatile unsigned int *) 0xFFFFF44C)
#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_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()
{
//unsigned int status; //읽었다고 상태확인.
//status = PIO_ISR; //확인을 하지 않으면 계속 불이 들어옴.
PIO_SODR = 0x000000FF;
Delayms(500);
PIO_CODR = 0x000000FF;
Delayms(500);
}
int main(void)
{
PMC_PCER = (unsigned int)1<<2;
PIO_PER = 0x00000FFF; // 병령 I/O포트로 사용설정 디폴트로 I/O 포트로사용하도록 되어있다
PIO_PUER = 1<<8;
PIO_ODR = 0x0100; //출력 버퍼 금지 레지스터 설정
Delayms(50);
PIO_OER = 0x000000FF;
PIO_IFER = 0x00000100; //글리치 필터 사용
AIC_IDCR = (unsigned int)1<<2; //마스크 설정
PIO_IER = 0x00000100; //인터럽트 인애이블 레지스터
AIC_SVR[2] = (unsigned int)ledToggle; // 인터럽트 함수 설정
AIC_SMR[2] = 5; //
AIC_IECR = (unsigned int)1<<2; //AIC는 인터럽트 제어기
while(1)// 무한반복.
{
}
return 0;
} // End Main....
'About 프로그래밍!!! > ARM' 카테고리의 다른 글
[ARM]인터럽트(두 개 거는 것) (0) | 2010.06.28 |
---|---|
[ARM]인터럽트 확인.(초기화) (0) | 2010.06.28 |
[ARM]풀업저항, 풀다운저항. (0) | 2010.06.28 |
[ARM]인터럽터2 (0) | 2010.06.25 |
[ARM]인터럽터 (0) | 2010.06.24 |