|
윈도우즈 98 환경에서 볼란드C++3.1 을 이용하고 있습니다.(꼭 이 환경에서 해야만 된답니다.)
COM1, COM2, COM3은 이미 사용하고 있구요. 전 COM4 를 사용해야만 합니다.
컴퓨터에서 기본적으로 COM포트를 2개만 지원해서, COM3,COM4를 사용하기 위해서
PCI방식의 시리얼 카드를 장착했습니다.
근데 문제가 생겼습니다.
COM1, COM2같은 경우에는 주소가 0x3f8, 0x3f8 ,IRQ는 IRQ4(0x0C), IRQ3(0x0B)으로 지정되어 있는데,
시리얼카드를 사용할 경우에는 가변적이 더군요.
시리얼카드를 어느 슬롯에 설치하느냐에 따라서 IRQ5, IRQ10, IRQ11 등등..
자기 마음데로 사용하는 것이였습니다.
더군다나 기존의 다른 장비들과 같은 IRQ를 사용하는 경우도 있더군요.
(예를 들어, 11번 IRQ를 그래픽 카드가 사용하는데 시리얼카드도 11번 IRQ를 사용하더군요.)
인터럽트를 사용하지 않고 코딩을 했더니 수신된 데이터를 놓치는 경우가 생기더군요.
이런경우 어떻게 해야 되나요?
COM3를 사용하는 회사의 경우에는
static short DATA[] = {0x3f8, 0x2f8, 0x1000, 0x2e8};
static short IER [] = {0x3f9, 0x2f9, 0x1001, 0x2e9};
static short IIR [] = {0x3fa, 0x2fa, 0x1002, 0x2ea};
static short LCR [] = {0x3fb, 0x2fb, 0x1003, 0x2eb};
static short MCR [] = {0x3fc, 0x2fc, 0x1004, 0x2ec};
static short LSR [] = {0x3fd, 0x2fd, 0x1005, 0x2ed};
static short MSR [] = {0x3fe, 0x2fe, 0x1006, 0x2ee};
static short INTNO[] = {0x0c, 0x0b, 0x72, 0x0b};
식으로 코딩을 해놨던데요...
저런식으로 사용한다는 것은 따로 자신들이 시리얼카드를 제어할 수 있는 디바이스 드라이버를 만들어서
설치한 건가요?
시리얼 카드 제조사는 외국회사라서 문의를 못해봤구요, 구매시 들어있던 CD나 회사홈페이지에는 다른
지원 사항이 없었습니다.
제가 유닉스 프로그래머라서 이쪽에는 거의 문외한 입니다.
시간이 너무 촉박한 프로젝트라서 걱정입니다.
관련사항에 대해서 아시느 분들은 꼭 좋은 말씀 부탁드립니다.
그럼 감사합니다.
|