본문 바로가기

디지털회로/AT91SAM7S256

오늘 바꾼 TIMER / main 외 ULTRA


main.c에
 
Timer_init0(TIMER_CLOCK5, 49, Mycounter); 추가 
 
TIMER_CLOCK5 -> 4
 
 
TIMER.c에

void Timer_init0(unsigned int uiRate, unsigned int uiRc, void(*Handler)(void)) //TIMER_CLOCK5, 49, Mycounter
 
volatile unsigned int ICNT;
 
void Timer_init0(unsigned int uiRate, unsigned int uiRc, void(*Handler)(void)) //TIMER_CLOCK5, 49, Mycounter
{
 PMC_PCER = (1<<TC0);     //클록 허용 레지스터 (12번핀)
 
 TC0_CCR =  (1<<CLKDIS);     //클록이 공급되지 않도록 금지한다
 TC0_IDR = 0xFF;       //인터럽트 금지 해제
 TC0_SR;         //상태 레지스터를 읽기만 한다.(CPU가 읽기만 함)
 
 AIC_IDCR = (1<<TC0);     //12번핀 인터럽트 off
 AIC_SVR[TC0] = (unsigned int) Handler; // AIC_SVR[외부 인터럽트 번호 ]=인터럽트 신호 들어온 장치 ID
 AIC_SMR[TC0] = (2<<SRCTYPE | 0<<PRIOR); //10(내부 외부high)
 AIC_ICCR = (1<<TC0);     //클리어 레지스터를 사용해 다 제거
 
 TC0_CMR = (uiRate<<TCCLKS) |(1<<CPCTRG); //클럭선택에는 MCK/1024 = 48kHz, RC비교가 카운터를 리셋하고 클록 공급
 TC0_IER = (1<<CPCS);     //인터럽트 허용
 TC0_RC = uiRc;       // 4*1024
 
 AIC_IECR = (1<<TC0);      //12번핀 인터럽트 on 
 //타이머카운터를 호출
// TC0_CCR = (1<<CLKEN);  //클록금지를 공급되도록 허용한다,
// TC0_CCR = (1<<SWTRG);  //이후 채널을 소프트웨어적으로 트리거하여 카운터가 리셋되고 클록이 공급되기 시작
 
 return;
}
 
 
ULTRA.h
 
#ifndef __ULTRA_H__
#define __ULTRA_H__
 
#include "TIMER.h"
#include "PIOA.h"
 
#define Trg_PIN  7 //트리거
#define Echo_PIN  8 //에코
 
/* 함수 선언 */
void Ultra_init();
void Ultra_irq();
 
#endif
 
ULTRA.c
 
#include "ULTRA.h"
 
void Ultra_init()
{
 PIOA_OER = 1<<Trg_PIN; //트리거핀 활성화
 PIOA_PER = 1<<Trg_PIN;
 PIOA_PPUDR = 1<<Trg_PIN;
 PIOA_CODR = 1<<Trg_PIN;
 
 Timer_init0(TIMER_CLOCK4, 23, Mycounter);
 
 PIOA_ODR = 1<<Echo_PIN; //에코핀에 들어
 PIOA_PER = 1<<Echo_PIN; //8번 입력을 활성화
 PIOA_IDR = 1<<Echo_PIN; //8번 입력변화 인터럽트 금지
 AIC_IDCR = 1<<PIOA;  //인터럽트 관리(all off)
 AIC_SVR[PIOA] = (unsigned int) Ultra_irq;  // AIC_SVR[외부 인터럽트 번호 ]=인터럽트 신호 들어온 장치 ID
 AIC_SMR[PIOA] = (2<<SRCTYPE | 0<<PRIOR); //10(내부 외부high)
 AIC_ICCR = 1<<PIOA;  //클리어 레지스터를 사용해 다 제거
 PIOA_IFER = 1<<Echo_PIN; //8번 Glich filter  (신호 입력시 잡음 최소화 위한 필터 )
 AIC_ISCR = 1<<PIOA;  //에지 검출기 사용.
 PIOA_IER = 1<<Echo_PIN; //해당 비트의 입력 변화 인터럽터를 허용한다.(8번 핀, PIO 인터럽트 허용)
 AIC_IECR = 1<<PIOA;  //대응하는 인터럽트를 허용한다.
 
 return;
}
 
void Ultra_irq()
{
 return;
}
초음파는 선연결만 한상태이고 메인함수에는 추가 되있지 않다.
 
일단 오늘 바꾼 함수는 어제한 타이머카운터와 같이 1초에 LED가 ON/OFF를 반복한다.
 
 
우리가 쓸 초음파 구조(SRF05)


'디지털회로 > AT91SAM7S256' 카테고리의 다른 글

A/C 컨버터(ADC)  (1) 2011.09.19
초음파 SRF-05 실행시키기  (0) 2011.09.16
타이머카운터  (0) 2011.09.08
AT91SAM7S256 <-> 하이퍼터미널 통신  (0) 2011.09.07
한글입력하기  (0) 2011.09.06