상세보기

마이크로컴퓨터 주변 모듈의 사용법 마이크로컴퓨터 주변 모듈의 사용법 관리자 기자입력 2006-11-22 09:17:19

근래 산업용 기기, 통신용기기, 가전기기 등 많은 분야에 마이크로컴퓨터를 핵으로 한, 고기능화가 급속하게 진전되고 있다. 또 디지털가전, 휴대전화 등 대량의 디지털데이터를 처리하는 수요자 제품의 영역에서는 기기의 고기능화 및 콤팩트화 등 기기의 중핵을 구성하는 컴퓨터시스템은 마이컴을 핵으로, 복수의 기능분산 프로세서를 하나의 시스템 LSI에 탑재한 SoC(System on a Chip)의 사용이 많아졌다.
이와 같은 시스템은 최근 급속하게 진화되어 마이컴의 고성능화, 메모리의 대용량화 등 반도체기술의 고도화와 동시에 소프트웨어도 대규모로 한층 복잡하게 되고 있는 것으로, 소프트웨어의 개발력이 점차 중요하게 되었다.
한국과학기술정보연구원

전문연구위원 유철로
(2420@reseat.re.kr)

1. 서론

일본 동경(Tokyo)에 본부를 둔 다국적기업 Renesas Technology社 제품인 R8C/Tiny급 마이크로컴퓨터(이하 ‘마이컴’)의 대표적 품목이라 할 수 있는 R8C/15의 기본적인 동작확인과 제작 예와 내장된 모듈의 사용법을 고찰한다.

2. 입/출력 포트의 제어 방법

가. 입/출력 포트의 특징

R8C/15 그룹의 포트레지스터는 P1레지스터(P1-0~P1-7) PD1레지스터, P3레지스터(P3-3~P3-5, P3-7) PD3레지스터, P4레지스터(P4-5~P4-7) PD4레지스터 등으로 구성되어 있다.
대부분의 핀은 단순한 입/출력뿐만 아니라 다른 주변 모듈과 겸용하고 있다. 그러므로 어느 주변 모듈을 사용하느냐에 따라 입/출력의 사용에 제한이 있는 것으로, 설계시에는 충분히 고려할 필요가 있다.

나. 포트 방향 레지스터 PDX, 포트·레지스터 PX

입력이나 출력을 결정하는 것은 방향 레지스터로 PD1, PD3, PD4 등이다. 실제 데이터의 입/출력을 실행하는 것은, 포트·래치를 제어하는 포트·레지스터 P1, P3, P4다.
PDX레지스터에 ‘1’을 설정하면 그것에 대응하는 핀이 출력으로 되고, ‘0’을 설정하면 입력으로 된다. PX레지스터는 그대로 입/출력 핀에 대응하고 있는 것으로, 출력모드인 때에 ‘0’, ‘1’에 따라 대응하는 핀의 전압이 0V, 5V로 되고, 입력모드인 때에는 핀의 전압이 0V, 5V에 따라 대응하는 비트가 ‘0’, ‘1’로 된다.

다. 풀업 저항 레지스터 PUR0, PUR1

입/출력 포트에는 풀업 저항(저항의 역할 FET Q3)이 내장되어 있다. 내장 풀업 저항의 유무를 선택하는 것은, 풀업 제어 레지스터 PUR0(PU02, PU03, PU06, PU07), PUR1(PU11) 등이다. 풀업 제어 레지스터는 입출력 핀마다, 혹은 그룹마다 지정할 수가 있다.

라. 포트P1 구동능력 제어 레지스터 DRR

P1-0~P1-3핀은 LED 등을 구동하기 위하여, 전류 드라이브 능력을 높이기 위한 FET(Q4)가 추가되어 있다. 특히 P1-0~P1-3핀은 LED를 직접 구동할 수 있는 전류를 드라이브할 수가 있다. Q4의 제어는 포트P1 구동능력 레지스터 DRR(DRR0∼DRR7)로 행한다.
또 데이터·메모리와 같이 읽기와 쓰기가 가능한 SFR PDX, PX, PUR0, PUR1, DRR의 각 레지스터는 데이터·메모리상의 지정석에 배치되어 있으며, 이들을 특수기능 레지스터(SFR; Special Function Register)라 한다. SFR은 데이터·메모리와 같은 방법으로 읽고 쓸 수가 있다.

3. 입/출력 포트를 사용한 기본 제어 프로그램

입/출력 포트를 사용하여 2개의 LED(D1, D2)를 일정간격으로, 점멸시키는 간단한 프로그램을 작성한다. 여기서의 포인트는 입/출력 포트에의 입/출력 방법과 헤드·파일의 작용, 클록의 교체방법이다. 메인 함수부에서는 처음에 클록의 교체 제어를 하고, 다음에 입출력 핀의 포트 방향 레지스터를 설정하여 루프로 들어간다. 루프 중에서는 실제의 입/출력 핀에서의 출력으로, LED의 점멸을 제어하고 있다. 일정시간 간격으로 하기 위한 대기시간은 루프타이머로 작성하고 있다.
또한 메인·클록에의 교체방법으로 리셋 직후의 클록은, 저속 온 칩 오실레이터로 되어 있다. 이것을 메인·클록으로 교체하는 순서는 PRCR 레지스터의 PRC0 비트로, 레지스터 보호용의 프로텍터를 해제하여 CM0, CM1 레지스터로 메인·클록의 발진을 지정한다. 그러나 메인·클록의 발진이 안정되기까지는 시간이 걸린다. 그러므로 발진이 안정되는 것을 대기하기위하여, 어셈블러의 NOP 명령을 4개 삽입한다. 그 후에는, OCD 레지스터의 OCD2 비트를 ‘0’으로 하여 메인·클록으로 바꾸어 프로텍터를 재차 온(ON)으로 하여 보호한다. 이상의 조작으로 메인·클록에서 R8C/15가 동작하게 된다. 그 순서의 결정은 패턴으로 결정된다.

4. 타이머X의 제어방법

가. 타이머X의 특징

R8C/15 그룹에는 타이머X, 타이머Z, 타이머C라고 하는 3개의 타이머 모듈이 내장되어 있다. 이들 중 기본 타이머인 타이머X의 내부구성은 8비트 다운카운터(타이머X레지스터 TX)와 그 전단에 8비트의 자유배수기(X레지스터 PREX)가 접속되어 있어, 양방에서 16비트의 카운터로써 동작한다.
카운터 입력에는 내부 클록과 외부 펄스(CNTR0핀), 외부 신호로 게이트 된 내부 클록의 3종류가 선택된다. 또 내부 클록에는 4종류의 클록에서 선택할 수 있도록 되어있다.

나. 타이머X의 타이머·모드의 동작

타이머X에는 5종류의 모드가 있으나, 여기서는 내부 클록을 카운터하는 타이머·모드를 사용한다. 타이머·모드에서는 처음에 동작 모드를 내부 클록 입력으로 설정하고, 다음에 카운터 값을 TX레지스터와 PREX레지스터에 설정한다.
이때 대응하는 각각의 리로드·레지스터에도 자동적으로 같은 값이 설정된다. 이들의 동작 모드를 결정하기 위하여 타이머X용 SFR을 이용한다.

다. 타이머X를 타이머·모드로 설정하는 방법

타이머X를 타이머·모드로 설정하는 데는 타이머X용 SFR을 설정한다. 먼저 타이머X 모드·레지스터 TXMR의 TXMOD2, TXMOD1, TXMOD0 비트로, 타이머X를 타이머·모드로 설정한다. 다음에 타이머·카운터소스 설정 레지스터 TCSS의 동작모드 선택비트 TXCK1, TXCK0 비트로, 입력 클록의 종별 지정을 한다.
다음에 필요한 카운터 값을 TX레지스터와 PREX레지스터에 설정한다. 이때 각 레지스터에 설정하는 값과 인터벌 시간 t의 관계는, t=T(n+1)(m+1), 단 T는 입력 클록의 주기, n은 PREX레지스터 설정치, m은 TX레지스터 설정치로 표시된다. 타이머 모드의 준비가 완료되면, TXMR레지스터의 타이머X 카운터 개시플래그 TXS비트를 ‘1’로 하여 타이머를 스타트시킨다.

라. 타이머X를 사용한 기본 제어 프로그램의 작성

전술한 입/출력 포트를 사용한 LED의 점멸을, 타이머X를 타이머·모드로 동작시켜, 그 간격으로 제어하는 프로그램을 작성한다. LED의 점멸주기는 200㎳로 한다. 타이머X를 200㎳ 주기의 타이머·모드로 사용하는 것으로, TXMR레지스터와 TCSS레지스터를 각각 설정하고, 그 후 PREX레지스터와 TX레지스터에 카운터 값을 설정한다.
타이머X의 언더플로우의 검출은 타이머X의 인터럽트플래그를 검사하여 행한다. TXIC레지스터에 있는 인터럽트 플래그 IR비트가 언더플로우의 발생으로 ‘1’로 되는 것으로, 그것을 대기시간으로 한다. 그리고 ‘1’을 검지하면 ‘0’으로 클리어 되어 다음의 언더플로우로 대비된다.
이상으로 200ms 간격이라는 시간을 만들 수가 있는 것으로, 그때마다 LED의 표시를 반전시키고 있다. 루프타이머 함수에서는 정확한 시간간격을 만들기 위하여 명령 스텝수를 정확하게 계산해야 하나 타이머를 사용하면 정확하게 시간간격을 얻을 수가 있다.

마. 타이머X를 사용한 인터럽트 처리 프로그램의 작성

R8C/15의 인터럽트 기능은 소프트웨어인터럽트, 하드웨어인터럽트로 나누어지며, 하드웨어인터럽트에는 발진, 정지, 검출 등의 특수 인터럽트, 주변기능 인터럽트가 있다. 여기서는 주변기능을 사용한 인터럽트처리의 예로써 타이머X를 사용한 인터럽트 처리를 해설한다.
인터럽트의 허가는 작성하는 프로그램은, 평상시는 루프·타이머의 약 1초 간격으로 LED(D1)를 점멸시켜, 타이머X의 300ms 주기의 인터럽트로 LED(D2)를 점멸시킨다. 이것으로 2개의 LED가 독립적으로 점멸하는 것을 확인한다. 타이머X를 사용한 인터럽트 처리 프로그램의 프로젝트명은 timerx02로 한다.
타이머X의 언더플로우마다 인터럽트플래그 IR비트가 ‘1’로 되어있어, 그것으로 인터럽트 요인이 만들어진다. 따라서 인터럽트를 허가하면 인터럽트를 사용할 수 있게 된다.

5. 시리얼·인터페이스의 제어방법

가. 시리얼·인터페이스의 특징

R8C/15의 시리얼·인터페이스의 특징은, 비동기식전이중통신(非同期式全二重通信)이나 동기식전이중통신이 가능하고, 패리티생성, 패리티 검사가 자동으로 가능하며, 데이터의 길이는 7, 8, 9비트의 지정이 가능하고 또 스톱·비트 길이는 1, 2비트의 지정이 가능하다는 것이다.

나. 시리얼·인터페이스의 설정방법

통신속도는 비트율 레지스터 UOBRG에 값을 설정할 필요가 있으나, 이 설정치 UOBRG는, UOBRG=(f/16v)-1, 단 f는 선택 클록 주파수, v는 통신속도. 실제로 송/수신하는 데이터는 UOTB레지스터와 UORB레지스터로 취급하고 있으나, UORB레지스터에는 수신 데이터뿐만 아니라 수신오류상태도 동시에 저장되어 있다. 수신한 때에는 이 오류상태도 검사할 필요가 있다.

다. 시리얼·인터페이스를 사용한 문자 송신 프로그램의 작성

여기서 작성하는 프로그램은 스페이스에서 시작하는 ASCⅡ문자 64문자와 복귀개행(復歸改行)의 송신을 일정간격으로 반복하는 프로그램이다. 프로젝트명은 uart01이다. 시리얼·인터페이스의 초기설정을 메인함수의 최초에 행하고 있으나, 가장 표준적인 설정으로 PC와 통신할 수 있는 설정으로 한다.
PC측에서 Windows의 하이퍼터미널을 기동하여, COM 포트의 프로퍼티 설정을 상술한 설정으로 일치시키면 정상으로 통신할 수 있다.
송신은 1문자 송신함수 Uart-TX로 작성한다. 여기서는 송신하는 데이터를 UOTB레지스터에 세트한 후, 인터럽트 플래그가 ‘1’로 되는 것을 대기하여 송신 완료를 판정하고 있다. 그리고 인터럽트플래그를 클리어 하여 다음의 송신에 대비한다.

6. 결론

R8C/15의 기본 모듈의 사용법을 실제의 프로그램을 작성하면서 시도하였다. C언어를 사용한 프로그램 작성이면, 의외로 용이하게 여러 가지 모듈을 사용할 수 있을 것으로 생각한다.

관리자 기자
로봇시대의 글로벌 리더를 만드는 로봇기술 뉴스레터 받기
전문보기
관련 뉴스
의견나누기 회원로그인
  • 자동등록방지