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

ARM_PIT_LED 손병규

by 알 수 없는 사용자 2014. 10. 31.
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 


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++);
     }
}


main.c 파일


#include "AT91SAM7S256.h"
#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); 
     //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_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