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

ADS LED ON/OFF

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

Main 소스

#include "AT91SAM7S256.h"

#include "LED.h"


#define PICNT 20


void PIT_Init(void);

void ISR_System(void);

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;

*AT91C_AIC_IECR = (1<<AT91C_ID_SYS);

*AT91C_PITC_PIMR= AT91C_PITC_PITEN | AT91C_PITC_PITIEN | 0xF4240;

}


void ISR_System(void)

{


if( 0 != *AT91C_PITC_PISR  )

{

if(1 ==((*AT91C_PITC_PIVR >> PICNT)))

{

++iCnt;

if(0 == iCnt%3)

{

LED_Toggle();

}

}

}

}


 


LED.c 소스



#include "LED.h"

static volatile unsigned int uiState;


void LED_Init(void)

{

*AT91C_PMC_PCER = (1<<AT91C_ID_PIOA);

*AT91C_PIOA_PER = LED_PIN;

*AT91C_PIOA_OER = LED_PIN;

*AT91C_PIOA_PPUDR = LED_PIN; //풀업저항 OFF

*AT91C_PIOA_SODR = LED_PIN;

uiState = __OFF__;

}


void LED_ON(void)

{

*AT91C_PIOA_CODR=LED_PIN;

uiState = __ON__;

}


void LED_OFF(void)

{

*AT91C_PIOA_SODR=LED_PIN;

uiState = __OFF__;

}


unsigned int LED_State(void)

{

return uiState;

}


void LED_Toggle(void)

{

if( __OFF__ == uiState)

{

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_ON(void);

void LED_OFF(void);

void LED_Init(void);

unsigned int LED_State(void);

void LED_Toggle(void);


#endif


728x90