728x90
반응형
led.h 파일
#ifndef _LED_H_
#define _LED_H_
#include "AT91SAM7S256.h"
#define LED_PIN AT91C_PIO_PA0 //LED_PIN을 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
#define _LED_H_
#include "AT91SAM7S256.h"
#define LED_PIN AT91C_PIO_PA0 //LED_PIN을 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
led.c 파일
#include "led.h"
static volatile unsigned int uiStatus; //전역에서 static사용함으로써 접근 제한
void LED_Init(void)
{
*AT91C_PMC_PCER = AT91C_ID_PIOA; // PIN 전원 활성화
*AT91C_PIOA_PER = LED_PIN; //LED_PIN활성화
*AT91C_PIOA_OER = LED_PIN; //LED_PIN 출력 활성화
*AT91C_PIOA_PPUDR = LED_PIN; //Pull-up 비활성화
*AT91C_PIOA_SODR = LED_PIN; //LED_PIN 종료
uiStatus = __OFF__;
}
void LED_On(void)
{
*AT91C_PIOA_CODR = LED_PIN; //LED_PIN ON
uiStatus = __ON__;
}
void LED_Off(void)
{
*AT91C_PIOA_SODR = LED_PIN; //LED_PIN OFF
uiStatus = __OFF__;
}
unsigned int LED_Status(void)
{
return uiStatus;
}
void LED_Toggle(void)
{
volatile unsigned int i;
if(__OFF__ == uiStatus)
{
LED_On();
for(i=0;i<60000;i++);
for(i=0;i<60000;i++);
for(i=0;i<60000;i++);
}
else
{
LED_Off();
for(i=0;i<60000;i++);
for(i=0;i<60000;i++);
for(i=0;i<60000;i++);
}
}
static volatile unsigned int uiStatus; //전역에서 static사용함으로써 접근 제한
void LED_Init(void)
{
*AT91C_PMC_PCER = AT91C_ID_PIOA; // PIN 전원 활성화
*AT91C_PIOA_PER = LED_PIN; //LED_PIN활성화
*AT91C_PIOA_OER = LED_PIN; //LED_PIN 출력 활성화
*AT91C_PIOA_PPUDR = LED_PIN; //Pull-up 비활성화
*AT91C_PIOA_SODR = LED_PIN; //LED_PIN 종료
uiStatus = __OFF__;
}
void LED_On(void)
{
*AT91C_PIOA_CODR = LED_PIN; //LED_PIN ON
uiStatus = __ON__;
}
void LED_Off(void)
{
*AT91C_PIOA_SODR = LED_PIN; //LED_PIN OFF
uiStatus = __OFF__;
}
unsigned int LED_Status(void)
{
return uiStatus;
}
void LED_Toggle(void)
{
volatile unsigned int i;
if(__OFF__ == uiStatus)
{
LED_On();
for(i=0;i<60000;i++);
for(i=0;i<60000;i++);
for(i=0;i<60000;i++);
}
else
{
LED_Off();
for(i=0;i<60000;i++);
for(i=0;i<60000;i++);
for(i=0;i<60000;i++);
}
}
main.c 파일
#include "AT91SAM7S256.h"
#include "LED.h"
#define PICNT 20 //PIT_PIVR 레지스터 20bit 위치에 있음
void PIT_Init(void);
void ISR_System(void);
#include "LED.h"
#define PICNT 20 //PIT_PIVR 레지스터 20bit 위치에 있음
void PIT_Init(void);
void ISR_System(void);
void ISR_System1(void);
volatile unsigned int iCnt;
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);
volatile unsigned int iCnt;
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);
//SYS 인터럽트 설정
*AT91C_AIC_IECR = (1<<AT91C_ID_SYS); //인터럽터 활성화 *AT91C_PITC_PIMR = AT91C_PITC_PITIEN |AT91C_PITC_PITEN | 0xF4240;
//PIT 활성화 | PIT 인터럽트 활성화 | CPIV 1/3초 = 1000000 설정
}
void ISR_System(void) //PIT인터럽트 함수
{
if(0 != *AT91C_PITC_PISR )
{
if(1==(*AT91C_PITC_PIVR >>PICNT)) //PICNT값 == 1 ?
{
++iCnt;
}
if(0==(iCnt%3)) // 3/3초 => 즉 1초를 나타냄
{
LED_Toggle();
}
}
}
}
void ISR_System(void) //PIT인터럽트 함수
{
if(0 != *AT91C_PITC_PISR )
{
if(1==(*AT91C_PITC_PIVR >>PICNT)) //PICNT값 == 1 ?
{
++iCnt;
}
if(0==(iCnt%3)) // 3/3초 => 즉 1초를 나타냄
{
LED_Toggle();
}
}
}
void ISR_System1(void) //폴링
{
LED_Toggle();
while(1==((*AT91C_PITC_PIVR >>PICNT)%3));
}
728x90
'코스웨어 > 14년 스마트컨트롤러' 카테고리의 다른 글
2014.11.04. 업무일지 22번 허수웅 (8) | 2014.11.05 |
---|---|
STM32F103ZE (3) | 2014.11.04 |
2014.11.03 업무일지 출석번호21 이재우 (9) | 2014.11.04 |
10.31 이경진 (9) | 2014.11.03 |
ARM Interval Timer LED on, off 김해성 (1) | 2014.10.31 |
ADS LED ON/OFF(PIT) 김진철 (0) | 2014.10.31 |
일일보고서 손병규 - 20141030 (6) | 2014.10.31 |
10.30 이경진 led (0) | 2014.10.31 |