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번핀)
{
PMC_PCER = (1<<TC0); //클록 허용 레지스터 (12번핀)
TC0_CCR = (1<<CLKDIS); //클록이 공급되지 않도록 금지한다
TC0_IDR = 0xFF; //인터럽트 금지 해제
TC0_SR; //상태 레지스터를 읽기만 한다.(CPU가 읽기만 함)
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); //클리어 레지스터를 사용해 다 제거
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
TC0_IER = (1<<CPCS); //인터럽트 허용
TC0_RC = uiRc; // 4*1024
AIC_IECR = (1<<TC0); //12번핀 인터럽트 on
//타이머카운터를 호출
// TC0_CCR = (1<<CLKEN); //클록금지를 공급되도록 허용한다,
// TC0_CCR = (1<<SWTRG); //이후 채널을 소프트웨어적으로 트리거하여 카운터가 리셋되고 클록이 공급되기 시작
//타이머카운터를 호출
// TC0_CCR = (1<<CLKEN); //클록금지를 공급되도록 허용한다,
// TC0_CCR = (1<<SWTRG); //이후 채널을 소프트웨어적으로 트리거하여 카운터가 리셋되고 클록이 공급되기 시작
return;
}
}
ULTRA.h
#ifndef __ULTRA_H__
#define __ULTRA_H__
#define __ULTRA_H__
#include "TIMER.h"
#include "PIOA.h"
#include "PIOA.h"
#define Trg_PIN 7 //트리거
#define Echo_PIN 8 //에코
#define Echo_PIN 8 //에코
/* 함수 선언 */
void Ultra_init();
void Ultra_irq();
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;
{
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; //대응하는 인터럽트를 허용한다.
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;
}
{
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 |