В общем никак не получается настроить несколько Уартов в МК LPC2368. Работает только UART0. Код привожу ниже. (прерывания по приему символа не испольую так как данные по уарту только отправляю)
Код
#include "LPC23xx.h" /* LPC23xx definitions */
#include "target.h"
#include <string.h>
#include "comm.h"
//#define UART0
#define BPS 115200
// KEIL MCP2300
// UART0 TX P0.2 RX P0.3 MAIN diagnostic
#define U0_TX_PINSEL_REG PINSEL0
#define U0_TX_PINSEL (1UL<<4) /* PINSEL0 Value for UART0 TX */
#define U0_TX_PINMASK (3UL<<4) /* PINSEL0 Mask for UART0 RX */
#define U0_RX_PINSEL_REG PINSEL0
#define U0_RX_PINSEL (1UL<<6) /* PINSEL0 Value for UART0 TX */
#define U0_RX_PINMASK (3UL<<6) /* PINSEL0 Mask for UART0 RX */
// UART1 TX P0.15 RX P0.16 1)RS485
#define U1_TX_PINSEL_REG PINSEL0
#define U1_TX_PINSEL (1UL<<30) /* PINSEL0 Value for UART1 TX */
#define U1_TX_PINMASK (3UL<<30) /* PINSEL0 Mask for UART1 RX */
#define U1_RX_PINSEL_REG PINSEL1
#define U1_RX_PINSEL (1UL<<0) /* PINSEL0 Value for UART1 TX */
#define U1_RX_PINMASK (3UL<<0) /* PINSEL0 Mask for UART1 RX */
// UART2 TX P0.10 RX P0.11 2)RS485
#define U2_TX_PINSEL_REG PINSEL0
#define U2_TX_PINSEL (1UL<<20) /* PINSEL0 Value for UART2 TX */
#define U2_TX_PINMASK (3UL<<20) /* PINSEL0 Mask for UART2 RX */
#define U2_RX_PINSEL_REG PINSEL0
#define U2_RX_PINSEL (1UL<<22) /* PINSEL0 Value for UART2 TX */
#define U2_RX_PINMASK (3UL<<22) /* PINSEL0 Mask for UART2 RX */
BYTE uart_get(void)
{
while ( !uart_test() ) {; }
return U0RBR;
}
BYTE uart_get_ex(BYTE nUart)
{
while ( !uart_test_ex(nUart) ) {; }
if(nUart==1)
return U1RBR;
if(nUart==2)
return U2RBR;
}
static void uart_xmit( BYTE d )
{
while ( !( U0LSR & 0x20 ) ) {
// wait for send possible
;
}
U0THR = d;
}
static void uart_xmit_ex( BYTE d, BYTE nUart )
{
if(nUart==1)
{
while ( !( U1LSR & 0x20 ) ) {
// wait for send possible
;
}
U1THR = d;
}
if(nUart==2)
{
while ( !( U2LSR & 0x20 ) ) {
// wait for send possible
;
}
U2THR = d;
}
}
void uart_init (void)
{
U0_TX_PINSEL_REG = ( U0_TX_PINSEL_REG & ~U0_TX_PINMASK ) | U0_TX_PINSEL;
U0_RX_PINSEL_REG = ( U0_RX_PINSEL_REG & ~U0_RX_PINMASK ) | U0_RX_PINSEL;
//
U1_TX_PINSEL_REG = ( U1_TX_PINSEL_REG & ~U1_TX_PINMASK ) | U1_TX_PINSEL;
U1_RX_PINSEL_REG = ( U1_RX_PINSEL_REG & ~U1_RX_PINMASK ) | U1_RX_PINSEL;
//
U2_TX_PINSEL_REG = ( U2_TX_PINSEL_REG & ~U2_TX_PINMASK ) | U2_TX_PINSEL;
U2_RX_PINSEL_REG = ( U2_RX_PINSEL_REG & ~U2_RX_PINMASK ) | U2_RX_PINSEL;
//
U0FDR = 0;
U0LCR = 0x83; // 8,n,1
U0DLL = ( Fpclk / 16 ) / BPS; // divider
U0DLM = 0;
U0LCR = 0x03;
//
U1FDR = 0;
U1LCR = 0x03; // 8,n,1
U1DLL = ( Fpclk / 16 ) / BPS; // divider
U1LCR = 0;
U1IER = 0x03;
//
U2FDR = 0;
U2LCR = 0x83; // 8,n,1
U2DLL = ( Fpclk / 16 ) / BPS; // divider
U2DLM = 0;
U2LCR = 0x03;
}