2011년 6월 23일 목요일

RS-232C 카트리지 - 오실레이터 업데이트

작년에 CPLD인 EPM3064로 만들었던 232C 카트리지가 있었는데요,

만들다 보니, 로직셀의 부족으로 원래 계획했던 사양은 되지 못했었지용...


클럭 소스를 MSX의 3.58MHz 출력을 사용하느라,

31 분주해서 state machine 만드는데 로직의 낭비가 좀 있었습니다.

계산해보면 3579545 / 31 = 115469Hz 가 나옵니다. 115200에서 약간의 오차도 있었고요.


좀 늦었지만 ㅡ.ㅡ 마무리를 해야될 것 같아서,

쇼핑몰에서 1.8432MHz 오실레이터를 질렀습니다.

1450원짜리 가격이 ㄷㄷㄷ

EPM3064가 4200원인데, 걍 CPLD 하나 더 쓰고 기능을 늘리는게 좋았으려나요~ ㅋ


이거 하나만 택배로 받으려면 민망하니깐 하나를 더 질렀습니다.


ALTERA JTAG 다운로더인 USB-BLASTER입니다.

29,000원의 위용~ 두둥~~




그 동안, 노트북 윈7에서 LPT포트용 BYTE-BLASTER 쓰느라 무지 귀찮았었는데, USB로 바꾸니 좋군요.


참고로 LPT 포트없는 윈7깔린 노트북에서 BYTE-BLASTER 쓰려면,

PCMCIA용 LPT 어댑터랑 VMware에 윈2000에 Quartus 깔아서 쓰는 방법뿐이었습니다.


이제 VMware 없어도 되니 너무 좋네요. ㅋ


음... 이야기가 옆으로 좀 샜습니다만,

클럭을 외부 오실레이터로 바꾸니, CPLD에서 사용되는 로직이 좀 줄어드네요.

16분주 하면 딱 115200Hz가 나옵니다.


사실 내부적으로는 UART의 4배수 클럭을 쓰고 있어서, 실제로는 4분주만 해서 사용합니다.

57600bps용으로는 8분주하고요.


어쨋거나 로직 여유 생긴 걸로,

UART TX, RX LED 두개 컨트롤과 RX FULL 됐을 때 INT(인터럽트) 넣도록 추가했습니다.

이제 CPLD의 남은 I/O 핀이 0개가 됐습니다. ㅎ.ㅎ


아래 사진에서 추가된 오실레이터를 볼수 있습니다.

LED랑 인터럽트 라인도 연결했고요.





아래는 최종 HW 스펙입니다.


- RS-232C TX, RX, GND 3핀 사용

- TX, RX 동작 표시 LED

- Start 1BIT, Data 8BIT, No Parity, Stop 1BIT 전용

- 115200 및 57600 BPS 지원

- RX Full 시 interrupt 지원


아래는 사용된 I/O 포트입니다.


- 30H (Control 레지스터)

  BIT7 = RX Full (Read only)

  BIT6 = TX Full (Read only)

  BIT5,4,3,2 = 사용 안함

  BIT1 = RX Full 인터럽트 1: ON, 0: OFF (R/W)

  BIT0 = Baud rate 1: 57600, 0: 115200 (R/W)


- 31H (8BIT TX, RX 버퍼 레지스터)

  BIT7~0 = TX data (Write시), RX data (Read 시)



일단 RX 시 인터럽트가 되니까, 터미널 프로그램 코딩에 여유가 생겨서 좋네요.

코드 정리해서 돌려보니 안정적이네요.

기존엔 status 폴링하느라 코드가 좀 난잡하기도 하고,

 가끔 화면 스크롤 하다 보면 1바이트 깨지는 경우도 나왔었지요.


내친김에 기능하나 더 넣어봤습니다.


MSX-DOS에서는 AUX 디바이스를 지원하는데요.

예전엔 이걸 어떻게 구현하는지 몰라서 보류 중이었는데...

그냥 AUX IN/OUT 훅에 UART 1바이트 전송 루틴 추가하면 일단 동작이 되더군요. *_*


아래는 간단하게 DOS2에서 AUX로 출력 및 콘솔 리다이렉션을 해본 모습입니다.




아래는 윈도 쪽의 터미널에 출력된 모습입니다.




완전한건 아니지만, 이정도만으로도 꽤 쓸만한거 같네용.

그럼, 또 여유가 생기면 노닥거리는 걸로 하고, 여기서 마무리~ 합니다. ㅎ.ㅎ;


댓글 없음:

댓글 쓰기