본문 바로가기
코스웨어/10년 스마트폰BSP

[BSP]업무일지-전현수-20100702

by 알 수 없는 사용자 2010. 7. 2.
728x90
반응형

● 타이머/카운터

1. 개요
AT91SAM7S245 에는 동일한 구조와 기능의 16비트 타이머/카운터 채널 TC0~TC2를 가지고 있다.이들 3개의 채널은 서로 독립적으로 동작하며 이벤트 카운트,주파수 측정,시간 간격 측정,시간 지연,펄스 발생,PWM 출력 등의 기능을 수행할 수 있다.
각 채널은 3개의 외부 클록 입력,5개의 내부 클록 입력,2개의 다기능 I/O 신호 단자 등을 가지고 있으며 또 한 각 채널은 내부 인터럽트를 발생시킬수 있다.
사용자가 타이머/카운터 채널을 사용하려면 해당 채널의 기능을 제어하는 I/O 레지스터를 사용해야 하며 타이머/카운터 블록 제어 레지스터  TC_BCR과 타이머/카운터 블록 모드 레지스터 TC_BMR 등 2개의 I/O 제어 레지스터는 이들 3개 채널에 공통으로 사용된다.

- 16비트 타이머/카운터 채널 TC0~TC2 를 갖고있다.

- 사용하려면 PMC 에서 클록 공급 설정 해야함.

-TCLK0~TCLK2 : 각 채널에 입력되는 외부 클록 단자

-TIOA0~TIOA2 : 캡쳐 모드에서 타이머/카운터 트리거 입력 단자로 사용.
                      파형발생모드에서 타이머.카운터 입/출력 단자로 사용     
                      //사용하려면 PIO에서 Peripheral B로 설정



2. 구조와 동작

- 16비트 카운터를 1개씩 갖고있어, 선택된 클록 신호의 상승 에지에서 1씩 증가
   --> 카운터 값이 0xFFFF->0x0000 되면 오버 플로우 발생, TCx_SR 레지스터의 COVFS 비트가 세트됨.
- 현재의 카운터 값은 실시간으로 TCx_CV 레지스터에서 읽을 수 있음

  (1) 클록 소스 선택
     - 외부 클록 : TCx_BMR 레지스터 이용.
                      TCLKx or TIOAx (자신의 채널 제외)중 하나 선택      
                      내부에들어온 신호는 XC0 ~ XC2 라 부름.
                      주파수는 MCK 주파수의 1/2.5 미만 이어야함. 
    
     - 내부 클록 : TIMER_CLOCK0~TIMER_CLOCK5 사용.

                      TCx_CMR 레지스터의 BURST 필드 이용하면, XC0~XC2 가 H 일때만 카운터로 입력되게 할수있다.
  

  (2) 동작 모드

     - Capture mode : WAVE=0    //주로 신호 측정 시 사용. TIOAx, TIOBx 단자가 입력 신호로 동작.
     - Waveform mode : WAVE=1  //외부 단자에 파형 발생. TIOAx, TIOBx 출력신호로 동작
                                             (TIOBx 가 외부 트리거로 설정 아닐때만.)
  
  (3) Capture mode :

    - TIOAx 에 입력되는 이벤트에 의해 현재의 카운터 값 캡처하여 저장.
    - TCx_CMR 레지스터에서 LDRA 필드로 설정한 신호 에지에서 RA에 캡쳐 동작 수행.
       --> LDRB 필드로 설정한 신호 에지에서 RB에 캡쳐 동작 수행.
       --> RA가 캡쳐되지 않으면 RB 캡쳐는 수행되지 않음.
       --> RA, RB 데이터 읽기 전 캡쳐 수행되면, 오버런 에러가 되어 TCx_SR 레지스터에 LOVRS 비트가 세트.
   
   - 소프트웨어 트리거, SYNC, RC 비교 트리거 및 외부 트리거를 사용할 수 있다.

      --> TCx_CMR 레지스터에서 ABETRG 비트는 TIOAx, TIOBx 단자를 외부 트리거 신호로 설정하는데 사용. 
      --> ETRGEDG 비트는 외부 트리거 신호가 캡쳐 동작을 수행하느 에지를 설정하는데 사용.
      --> 0이면 외부 트리거 사용안함.

● 접근 제어
  
  - public : 모든 곳으로 부터의 접근을 허용한다. (그 밖의 경우에는 bublic 으로 지정)
  - protected : 자식 클래스의 멤버 함수로 부터의 접근만 허용한다. (외부로부터 숨겨야 하는 멤버는 protected 로 지정)
  - private : 자신의 멤버 함수 외에는 접근할 수 없다. (반드시 자식 클래스에 숨기고 싶다면 private 로 지정)

      자신의 멤버함수에서 접근 자식 클래스 멤버함수에서 접근             외부에서 접근
   private 멤버                   가능                불가능                  불 가능
   protected 멤버                   가 능                가능                  불 가능
   public 멤버                   가능                가능                  가능

- 포함과 접근 권한 : 포함이 관계를 가진 클래스들은 접근 권한에 있어서는 아무런 관련이 없는 클래스라고 볼 수 있다. 그래서 포함 관계 를 가진 두 클래스는 여전히 상대방 클래스의 public 멤버에만 접근할 수 있다.






● 다중 상속


 다중 상속은 두개 이상의 부모 클래스를 동시에 상속하는 경우를 말한다. 학생 정보를 관리하는 프로그램을 작성한다고 하면, 기본적으로 학부생과 대학원생의 정보를 관리하는 2개의 클래스를 생각해볼 수 있다. 그리고 기숙사생의 정보를 관리하는 클래스도 생각해볼 수 있다. 그렇다면 학부생 이면서 동시에 기숙사생인 학생의 정보는 어떤 클래스에 의해서 관리되어야 할까.
이런 경우에 다중 상속을 사용할수 있다.학부생 클래스와 기숙사생 클래스를 모두 상속해서 학부생이면서 기숙사생인 학생의 정보를 관리하는 클래스를 만들수 있다.







▶ 포함과 상속을 구분해서 사용하기


포함과 상속은 기존에 만들어진 클래스를 재사용한다는 공통점을 가지고 있다. 이미 만들어진 클래스를 사용해서 새로운 클래스를 만들고자 할 때 포함을 사용해야 하지 상속을 사용해야 할지 결정하기 힘든 경우에는 다음의 가이드라인을 생각하자.


- 포함은 Has - a 관계다. A가 B를 가지고 있다면(Has) 포함을 사용하라.
- 상속은 ls - a 관계다. A가 B라면(ls) 상속을 사용하라.

Has - a 관계의 대표적인 예는 자동차와 타이어다. 자동차는 타이어를 자기고 있다(Has). 하지만 자동차는 타이어가 아니다. 그렇기 때문에 자동차가 타이어를 포함하게 만드는 것이 옳다.

ls - a 관계의 대표적인 예는 사과와 과일이다. 사과는 과일이다(ls). 하지만 사과가 과일을 가지고 있는 것이 아니다. 그래서 사과는 과일을 상속 받게 만드는 것이 옳다.

공부했던 예제를 사용해서 보면. 사각형은 점을 가지고 있다(Has). 사각형은 점이 아니다. 그렇기 때문에 Rest 클래스가 Point 클래스를 포함하게 하는 것이 옳다.

반면에 HTML 저장 클래스는 문서 저장 클래스의 한 종류다(ls). 그러나 HTML 저장 클래스가 문서 저장 클래스를 가지고 있는 것은 아니다. 그러므로 HTMLWriter 클래스가 DocWriter 클래스를 상속 받게 하는 것이 옳다. 


728x90