본문 바로가기
코스웨어/14년 스마트컨트롤러

ARM PIT 이용한 LED - 허수웅

by 알 수 없는 사용자 2014. 10. 31.
728x90
반응형

LED.c

#include "LED.h"

static volatile unsigned int uiStatus;

void LED_INIT()
{
 *AT91C_PMC_PCER = AT91C_ID_PIOA;
 *AT91C_PIOA_PER = LED_PIN;
 *AT91C_PIOA_OER = LED_PIN;
 *AT91C_PIOA_PPUDR = LED_PIN;
 *AT91C_PIOA_SODR = LED_PIN;
 uiStatus = __OFF__;

}

void LED_ON()
{
 *AT91C_PIOA_CODR = LED_PIN; 
 uiStatus = __ON__;
}

void LED_OFF()
{
 *AT91C_PIOA_SODR = LED_PIN;
 uiStatus = __OFF__;
}

unsigned int LED_STATUS()
{
 return uiStatus;
}

void LED_TOGGLE()
{
 if(__OFF__ == uiStatus)
 {
  LED_ON();
 }
 else
 {
  LED_OFF();
 }
}

 

LED.h

#ifndef _LED_H_
#define _LED_H_

#include "AT91SAM7S256.h"


#define LED_PIN  AT91C_PIO_PA0

#define __ON__   1
#define __OFF__  0


void LED_INIT(void);
void LED_ON(void);
void LED_OFF(void);
unsigned int LED_STATUS(void);
void LED_TOGGLE(void);


#endif

 

main.c

#include "AT91SAM7S256.h"
#include "LED.h"

#define PICNT  20

void PIT_INIT(void);
void ISR_SYSTEM(void);

int main()
{
 //volatile unsigned int uiCnt = 0;

 LED_INIT();
 PIT_INIT();
 
 

 while (1)
 {  
  
  
 }
 return 0;
}


void PIT_INIT()

 AT91C_AIC_SVR[AT91C_ID_SYS] = ((volatile unsigned int)ISR_SYSTEM); // 함수 등록
 *AT91C_AIC_IECR = ( 1<< AT91C_ID_SYS); // 활성화
 // 100만이 최대  1/3초마다 인터럽트 호출
 *AT91C_PITC_PIMR = AT91C_PITC_PITIEN | AT91C_PITC_PITEN | 0xF4240; 
}

void ISR_SYSTEM()   // ISR 인터럽트 서비스
{
 static unsigned int i = 0;
 if(*AT91C_PITC_PISR != 0)
 {
  if(1 == (*AT91C_PITC_PIVR >> PICNT)) // 20bit 오른쪽으로 이동
  {
   ++i;
   if(0 == (i%3))
   {
    LED_TOGGLE();
   }
  }
 }
}

 

728x90