10.30 PIT 활용 LED On/Off [오두환]
#include "LED.h"
#include "AT91SAM7S256.h"
#define PICNT 20
void ISR_System(void);
void PIT_INIT(void);
volatile unsigned int uiCnt;
int main(void)
{
LED_INIT();
PIT_INIT();
while (1);
return 0;
}
void PIT_INIT(void)
{
AT91C_AIC_SVR[AT91C_ID_SYS] = ((volatile unsigned int)ISR_System); // 함수 등록
*AT91C_AIC_IECR = (1 << AT91C_ID_SYS); // Interrupt Enable
*AT91C_PITC_PIMR = AT91C_PITC_PITEN|AT91C_PITC_PITIEN|0xF4240;
// PIMR -> PITEN, PITIEN, 활성화, 0xF4240 마다 IRQ 발생 //
}
void ISR_System(void) // PIT 말고도 다른 sys 쪽도 발생할수 있다
{ // Interrupt Service Routine
if( *AT91C_PITC_PISR != 0 )
{
if( (*AT91C_PITC_PIVR >> PICNT) == 1) // PICNT 는 Set, Clear 를 반복, Set 이 될 때 마다 0.3 초 마다 uiCnt 상승
{
++uiCnt;
}
if( uiCnt%3 == 0)
{
LED_Toggle();
}
}
}
main.c