我使用的是uart1例程程序,在发送函数里向THR寄存器写值,发现THR寄存器的值并没有变化,感觉就是THR不可使用,希望专家帮我看下,谢谢。
这是初始化函数:
UART_Handle C6747_UART_open( Uint16 id, Uint32 baudrate )
{
UART_Handle uart_handle;
Uint32 divisor;
volatile Uint16 dummy;
/*
* UART clk / baudrate
* = 150,000,000 / (900 * 16)
*/
divisor = 150000000 / ( baudrate * 16);
switch ( id )
{
case 0:
uart_handle = ( UART_Handle )&UART_MODULE_0;
break;
case 1:
uart_handle = ( UART_Handle )&UART_MODULE_1;
break;
case 2:
uart_handle = ( UART_Handle )&UART_MODULE_2;
break;
default:
return ( UART_Handle )-1;
}
uart_handle->regs->PWREMU_MGMT = 0; // Reset UART TX & RX components
C6747_wait( 100 );
uart_handle->regs->DLL = (divisor & 0xff); // Set baud rate
uart_handle->regs->DLH = (divisor >> 8);
uart_handle->regs->FCR = 0x0007; // Clear UART TX & RX FIFOs
uart_handle->regs->FCR = 0x0000; // Non-FIFO mode
uart_handle->regs->IER = 0x0007; // Enable interrupts
uart_handle->regs->LCR = 0x0003; // 8-bit words,
// 1 STOP bit generated,
// No Parity, No Stick paritiy,
// No Break control
uart_handle->regs->MCR = 0x0000; // RTS & CTS disabled,
// Loopback mode disabled,
// Autoflow disabled
uart_handle->regs->PWREMU_MGMT = 0xE001; // Enable TX & RX componenets
// Clear any pre-existing characters
dummy = uart_handle->regs->THR;
return uart_handle;
}
发送函数:
Int16 C6747_UART_putChar( UART_Handle uart_handle, Uint8 data )
{
uart_handle->regs->THR = data;
return 0;
} data的值无法写入THR。
这是什么原因呢,为什么THR不可写入。
ju huang:
其他跟uart1相关的寄存器都可以写入。只有THR寄存器赋值没有变化。
ju huang:
回复 ju huang:
LCR寄存器DLAB位显示DISABLE这个正常吗?为什么会出现这种情况。