아트메가의 타이머카운터는 ARM에서는 PIT다.
초기값을 올리는 경우는 계속 설정을 해줘야 하기 때문에 잘 사용하지 않는다.
기울기를 올리는 방식으로 사용 되야 한다.
어떤 레지스터에 값을 대입
파형이나 시간을 만들어 내는 것.
BAR을 레지스터에서 찾으면 된다.
PWM, 파형 발생의 원리
그림에 맞는 레지스터를 찾아서 입력.
기울기 , 정점
타이머는 루틴을 불러줌...
p181
Ra, Rb, Rc의 용도는 모드에 따라 달라진다.
아~ 186 쪽의 레지스터를 보면서 Ra, Rb, Rc를 셋팅하기
p188
WAVSEL -00을 셋팅했을 떄
TIOA핀 ,TIOB가 있을 떄.
TIOA가 Ra일 떄 클락을 발생. Rc일 떄 내려옴.
0xFFFA00?4 - ARM 시리즈에 따라 달라짐.
병렬로 안쓴다고 설정해야 됨.
B로 쓰니까….
p61
12,13 - 0번 하고 1번 설정.
p34
PA0 , 1 ,15, 16
p186
ccr - 0
188 rd
wavesel
189 cv
ra rb rc
34
PA0~PA3 대전류 드라이브 (모터용)
트리거 - 신호를 주는 것.
암에서는 트리거를 줘야지 초기화 된다.
CCR에 초기화하는 레지스터 SWTRG 01 - 리셋시킴.
리셋을 시키지 않으면 멈춰 있음.
//---------- 입출력 IO설정
#define PIO_SODR (*(volatile unsigned int *) 0xFFFFF430) //출력
#define PIO_CODR (*(volatile unsigned int *) 0xFFFFF434) //출력 하지 않음
#define PIO_OER (*(volatile unsigned int *) 0xFFFFF410) //출력 방향 설정
#define PIO_PER (*(volatile unsigned int *) 0xFFFFF400) //병렬 입출력 제어 레지스터 병렬 입출력 포트로 사용한다.
#define PIO_BSR (*(volatile unsigned int *) 0xFFFFF474) //주변장치 B 선택 레지스터
#define PIO_PDR (*(volatile unsigned int *) 0xFFFFF404) //PIO병렬 입출력 금지 레지스터
//---------- 전력 제어 설정
#define PMC_PCER (*(volatile unsigned int *) 0xFFFFFC10) //11111111 //11111111 11111100 00010000
//PMC Peripheral Clock Enable Register
#define MASTERCLOCK 48000000
//----------- 타이머 카운터 설정.
#define TC0_CCR (*(volatile unsigned int *) 0xFFFA0000)
#define TC0_CMR (*(volatile unsigned int *) 0xFFFA0004)
#define TC0_CV (*(volatile unsigned int *) 0xFFFA0010)
#define TC0_RA (*(volatile unsigned int *) 0xFFFA0014)
#define TC0_RB (*(volatile unsigned int *) 0xFFFA0018)
#define TC0_RC (*(volatile unsigned int *) 0xFFFA001C)
#define TC0_SR (*(volatile unsigned int *) 0xFFFA0020)
//--------- 전역 변수
void Delayms(unsigned int ms) //딜레이 함수..
{
volatile unsigned int count, countmax = (MASTERCLOCK / 10000) * ms;
for(count = 0; count < countmax; count++);
}
int main(void)
{ //병렬이 기본설정.
PMC_PCER = 1 << 12; //PID12을 쓰는 이유는 TC0을 쓸려고 하기 때문
PIO_BSR = 1<<0 |1 <<1 ; //주변장치 B를 전부 사용하겠다.
PIO_PDR = 1<<0 |1 <<1 ; //주변장치 B 입출력 금지.
TC0_RA = 0x1111;
TC0_RC = 0x9999;
TC0_CMR = 1<<19 | 1<<16 | 1<<15 | 1<<1 | 1<<0;
TC0_CCR = 5; //SWTRG설정(리셋 트리거) & CLKEN.
while(1)
{
}
return 0;
} // End Main....
'About 프로그래밍!!! > C++' 카테고리의 다른 글
포함 상속 구분하기 (0) | 2010.07.02 |
---|---|
다중상속 (0) | 2010.07.02 |
[C++]접근제어 (0) | 2010.07.02 |
[C++]포인터간의 형변환 (0) | 2010.07.02 |
[C++]객체간의 형변환 (0) | 2010.07.02 |