Здравствуйте!
Мне нужно инициализировать COM-порт, в режиме работы без прерываний, для вывода отладочной информации.
Вроде бы все делаю в соответсвии с мануалом, но отчего-то не работает
Пробовал ставить задержки в разных местах, играться с флагами — ничего не помогает.
UART — 16550.
Подскажите, что здесь не так?
#define UART_RX 0 /* In: Receive buffer (DLAB=0) */
#define UART_TX 0 /* Out: Transmit buffer (DLAB=0) */
#define UART_DLL 0 /* Out: Divisor Latch Low (DLAB=1) */
#define UART_TRG 0 /* (LCR=BF) FCTR bit 7 selects Rx or Tx
* In: Fifo count
* Out: Fifo custom trigger levels
* XR16C85x only */
#define UART_LSR_THRE 0x20 /* Transmit-hold-register empty */
#define UART_TRG 0 /* (LCR=BF) FCTR bit 7 selects Rx or Tx
#define UART_DLL 0 /* Out: Divisor Latch Low (DLAB=1) */
#define UART_DLM 1 /* Out: Divisor Latch High (DLAB=1) */
#define UART_IER 1 /* Out: Interrupt Enable Register */
#define UART_FCTR 1 /* (LCR=BF) Feature Control Register
* XR16C85x only */
#define UART_IIR 2 /* In: Interrupt ID Register */
#define UART_FCR 2 /* Out: FIFO Control Register */
#define UART_EFR 2 /* I/O: Extended Features Register */
/* (DLAB=1, 16C660 only) */
#define UART_LCR 3 /* Out: Line Control Register */
#define UART_MCR 4 /* Out: Modem Control Register */
#define UART_LSR 5 /* In: Line Status Register */
#define UART_MSR 6 /* In: Modem Status Register */
#define UART_SCR 7 /* I/O: Scratch Register */
portAddr = 0x3f8; // Адрес COM1
// Инициализация
__outbyte(portAddr + UART_IER , 0); /* Turn off interrupts */
__outbyte(portAddr + UART_LCR , 0x80); // SET DLAB ON
// baud rate = 9600 (divisor 0x0c)
__outbyte(portAddr + UART_DLL , 0x0C); // Set Baud rate - Divisor Latch Low Byte
__outbyte(portAddr + UART_DLM , 0x00); // Set Baud rate - Divisor Latch High Byte
__outbyte(portAddr + UART_LCR , 0x03); // 8 Bits, No Parity, 1 Stop Bit
__outbyte(portAddr + UART_FCR , 0xC7); // FIFO enabled, 14 bytes in FIFO
__outbyte(portAddr + UART_MCR , 0x0B); // Turn on DTR, RTS, and OUT2
// Проверяем статус
DbgPrint("LSR=0x%02X\r\n", __inbyte(portAddr + UART_LSR)); // Здесь выводится 0xFF
// Пытаемся что-нибудь вывести
while (!(__inbyte(portAddr+UART_LSR) & UART_LSR_THRE)) {}
__outbyte(portAddr+UART_TX, 0x40); // ничего не выводится