관리 메뉴

드럼치는 프로그래머

[H/W] [MCU] 8bit CPU에서 16bit 데이터 입출력[1] 본문

★─Programing/☆─HardWare

[H/W] [MCU] 8bit CPU에서 16bit 데이터 입출력[1]

드럼치는한동이 2008. 5. 1. 21:04
 
사용자 삽입 이미지

 < 16비트 병렬 출력 인터페이스 회로 >

    8비트 마이크로프로세서에 16비트의 병렬 입출력장치를 접속하기 위한 16비트 병렬 입출력 인터페이스 회로를 설계할 경우에는 매우 세심한 주의가 필요하다. 왜냐하면, CPU는 한번에 8비트씩의 데이터를 입출력하므로 16비트 입출력장치와 데이터 전송에서는 반드시 2회의 입출력 동작을 수행해야 하며, 이들 입출력 동작 사이에 시차(time gap)가 발생하기 때문이다.
 

   이러한 것은 10비트, 12비트, 16비트의 A/D 또는 D/A 컨버터나 카운터에서 모두 마찬가지이다. D/A 컨버터와 같은 병렬 출력장치에서는 이와 같은 2번의 8비트 데이터 출력 사이의 시차 때문에 하위 바이트는 새로 갱신된 데이터가 적용되고 상위 바이트는 갱신되기 전의 데이터가 적용됨으로써 아날로그로 변환된 출력신호에 글리치(glitch)가 발생하여 심각한 문제를 야기할 수도 있다. 또한, 입력장치의 경우에는 2번의 8비트 데이터 입력 사이의 시차 때문에 하위 바이트는 갱신되기 전의 데이터가 적용되고 상위바이트는 새로 갱신된 데이터가 적용됨으로써 입력된 디지털 데이터가 실제와는 큰 오차를 가질 수 있다.


    (1) 16비트 병렬 출력 인터페이스
    8비트 CPU에서 16비트의 병렬 출력장치를 접속하기 위한 16비트 병렬 출력 인터페이스 회로에서는 2회의 8비트 출력 동작 사이의 시차 때문에 글리치가 발생할 수 있으므로, 실제로 출력장치로 출력되는 데이터가 동시에 16비트로 출력되도록 하는 것이 중요하다.


    예를 들어 지금 16비트의 D/A 컨버터를 위하여 하위 바이트에 래치1을 접속하고 상위바이트에 래치2를 접속하였으며, 8비트 마이크로프로세서는 하위 8비트 데이터를 먼저 출력하고 상위 8비트 데이터를 나중에 출력한다고 가정하자. 지금 만약 D/A 컨버터로 삼각파를 발생시키기 위하여 현재 00FFH가 출력되어 있는 상태라면 래치1에는 FFH, 래치2에는 00H가 저장되어 있다. 이때 이보다 1증가된 0100H를 출력하기 위하여 먼저 하위 바이트인 00H를 래치1에 출력하게 되면 이것이 래치2에 이미 저장되어 있던 00H와 함께 D/A 컨버터에 일시적으로 0000H를 공급하게 된다. 이것은 00FFH나 0100H와는 매우 다른 출력값이다. 이러한 바람직하지 않은 현상은 다음 명령으로 상위바이트인 01H를 래치2에 출력하여 전체적으로 0100H를 공급할 때까지 지속된다.


    이러한 과도적인 현상은 D/A 컨버터에 글리치라고 불리는 펄스로 나타난다. 마이크로프로세서의 처리속도가 매우 빠르다면 이러한 과도시간은 짧아지므로 D/A 컨버터의 다음단에 LFP(Low-Pass Filter) 정도를 달아서 해결할 수 있지만, 마이크로프로세서의 속도가 느려지면 글리치 펄스의 폭도 그만큼 길어지므로 이를 근본적으로 없애는 회로를 사용해야만 한다.
 

   이를 위해서는 위의 그림에 보인 것처럼 하위 바이트의 데이터는 2단계의 버퍼를 사용하여 먼저 출력하고, 2차로 상위 바이트의 데이터가 출력될 때 하위 바이트의 데이터와 상위 바이트의 데이터가 동시에 출력장치로 전송되도록 하면 된다. 즉, 1차에서는 8비트 출력명령으로 CPU의 데이터 버스 D0∼D7을 통하여 짝수번지(A0=0)에 하위 바이트를 출력한다. 그러면 이 데이터는 8비트 플립플롭인 U1에 저장되어 U2의 입력이 된다. 2차에서는 역시 8비트 출력명령으로 CPU의 데이터 버스 D0∼D7을 통하여 홀수번지(A0=1)에 상위 바이트를 출력한다. 그러면 이 상위 바이트의 데이터가 U3에 저장되어 출력장치로 전송됨과 동시에 U1에 이미 저장되어 있던 하위 바이트의 데이터가 U2에 기억되면서 출력장치로 전송되어 XD0∼XD15의 16비트 데이터가 된다.
 

   16비트뿐만 아니라 10비트, 12비트 등의 D/A 컨버터를 접속할 경우에도 이와 마찬가지로 사용한다.

Comments