본문 바로가기

[ARM] 카운터

반응형

아트메가의 타이머카운터는 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
-->