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();
}
}
}
}
'코스웨어 > 14년 스마트컨트롤러' 카테고리의 다른 글
인터벌 타이머 김재성 (0) | 2014.10.31 |
---|---|
ADS LED On/Off 양태영 (1) | 2014.10.31 |
ADS LED ON/OFF(PIT) 김화린 (0) | 2014.10.31 |
ADS LED ON/OFF(PIT) 문대영 (0) | 2014.10.31 |
ADS LED ON/OFF (0) | 2014.10.31 |
10.30 PIT 활용 LED On/Off [오두환] (0) | 2014.10.30 |
2014.10.29 ARM Source 구조체 -> 포인터 변경 소스코딩 - 오두환 (0) | 2014.10.30 |
2014.10.29 업무보고 18번 오영주 (5) | 2014.10.30 |