2011년9월8일_ARM_AT91SAM7S256 타이머/카운터설정(초음파가 1cm거리를 왕복하는데 걸리는 시간에 타이머인터럽트 발생주기를 맞춤)




CM샘의 사랑

★ 실력을 갖추자. 아니되면 쓸데없는 자존심을 버리자.
★ 열심히 공부하자. 예전보다 나아지도록 노력하자.
★ 자신감을 갖고 발언하자. (보류, 인간쓰레기에게는 발언권이 없다.)
★ 좀 더 타인에 대한 배려심을 키우고 자기중심적 사고를 줄여 이해관계를 갖자.
★ 한국사회가 점점 고령화가 되어가고 30대부터 시작해 70대까지 일을 해야 하니 변화하는 시대의 흐름에 맞춰 배우고 사용하자.
★ 관계개선의지: 선생님과의 약속을 지키자. (커뮤니케이션)







시간 으뉴







참조(Reference)





DSCN4119 DSCN4120 DSCN4121



   1: void Timer_INIT0(unsigned int uiRate, unsigned int uiRC, void (*handler)(void))
   2: {
   3:     PMC_PCER = (1 << TC0);        //타이머/카운터0에 전력공급. (clock)
   4:  
   5:     TC0_CCR = (1 << CLKDIS);        //TC0에 클록이 공급되지 않도록.
   6:     TC0_IDR = 0xFFFFFFFF;        //TC0인터럽트 금지.
   7:     TC0_SR;                        //TC0상태레지스터를 읽어 오기만 함. (임베디드에서 많이 사용) -> SR은 0으로 초기화됨.
   8:     AIC_IDCR = (1 << TC0);        //타이머/카운터장치 전체 인터럽트 비활성.
   9:  
  10:     AIC_SVR[TC0] = (unsigned int)handler;        //인터럽트 서비스 루틴의 주소값 저장. SVR[] (배열의 값)은 unsigned int형
  11:     AIC_SMR[TC0] = (2 << SRCTYPE) |(0 << PRIOR);    //High레벨 검출, 우선순위 최하
  12:     AIC_ICCR = (1 << TC0);        //엣지 검출기 클리어.
  13:  
  14:     TC0_CMR = (1 << CPCTRG) | (uiRate << TCCLKS);        //compare모드, 분주비 128 (MCK/128)
  15:     //today...분주비 설정에 의한 RC값과 인터럽트 허용.
  16:     TC0_RC = uiRC;        // 58.8us를 설정하기 위해 58.8us / (MCK/128)를 넣음.
  17:  
  18:     TC0_IER = (1 << CPCS);        //RC 비교 인터럽트 활성.
  19:     AIC_IECR = (1 << TC0);        //TC0 전체 인터럽트 활성.
  20:  
  21:     //today...타이머 동작.
  22:     //TC0_CCR = (1 << CLKEN);        //먼저 클록 공급 허용하고,
  23:     //TC0_CCR = (1 << SWTRG);        //소프트웨어적으로 트리거하여 카운터를 리셋시킨 후 클록 공급.
  24:     
  25:     return ;
  26: }
  27:  
  28: void MyCounter(void)        // 58.8us마다 호출되는 ISR
  29: {
  30:     TC0_SR;    
  31:  
  32:     //여기에 할 일을 코딩할 것. TO DO (MFC에서는 자동으로 생성.)
  33:     ++ICNT;
  34:  
  35:     return ;
  36: }