Нет. Его использование обязательно?
Вот функция настройки UART:
/**
* Настройка модуля UART контроллера
* @param baudRate - желаемая скорость обмена;
* @param wordLength - количество битов данных: 5 - 8;
* @param nStopBits - количество стоп битов: 1, 2;
* @param parity - тип паритета:
* 0 - отключен;
* 1 - нечетность;
* 2 - четность;
* @param frequency - системная частота контроллера;
*/
void UART_Init(unsigned long baudRate, unsigned char wordLength, unsigned char nStopBits, unsigned char parity, unsigned long frequency){
unsigned long Fdiv;
unsigned long regVal;
NVIC_DisableIRQ(UART_IRQn);
// Настройка выводов используемых аппаратным модулем USART
LPC_IOCON->PIO1_6 &= ~0x07; // Очищаем биты отвечающие за выбор функции вывода
LPC_IOCON->PIO1_6 |= 0x01; // Устанавливаем для вывода функцию RXD - вход приемника UART
LPC_IOCON->PIO1_7 &= ~0x07; // Очищаем биты отвечающие за выбор функции вывода
LPC_IOCON->PIO1_7 |= 0x01; // Устанавливаем для вывода функцию RXD - вход приемника UART
LPC_SYSCON->SYSAHBCLKCTRL |= (1<<12); // Включаем тактирование модуля UART
LPC_SYSCON->UARTCLKDIV = 0x01; // Устанавливаем делитель частоты в 1
LPC_UART->LCR = 0x80; // Разрешаем доступ к Divisor Latches - настройка скорости работы UART
// Вычисляем значения регистров настройки скорости
regVal = LPC_SYSCON->UARTCLKDIV;
Fdiv = ((frequency/regVal)/16)/baudRate;
// Устанавливаем значения регистров настройки скорсти
LPC_UART->DLM = Fdiv / 256;
LPC_UART->DLL = Fdiv % 256;
UART_setWordLength(wordLength); // Устанавливаем длину слова
UART_setNStopBits(nStopBits); // Устанавливаем количество стоп битов
UART_setParity(parity); // Установка паритета
RESETBIT(LPC_UART->LCR, 7); // Запрещаем доступ к Divisor Latches
regVal = LPC_UART->LSR;
// Настройка FIFO
LPC_UART->FCR = 0;
SETBIT(LPC_UART->FCR,0); // Разрешаем работу приемного буффера
SETBIT(LPC_UART->FCR,1); // Очищаем RX буффер
SETBIT(LPC_UART->FCR,2); // Очищаем TX буффер
SETBIT(LPC_UART->FCR,6);
SETBIT(LPC_UART->FCR,7);
while ( LPC_UART->LSR & (LSR_THRE|LSR_TEMT) != (LSR_THRE|LSR_TEMT) );
while ( LPC_UART->LSR & LSR_RDR ){
regVal = LPC_UART->RBR;
}
UART_Init_IRQ(); // Настройка прерываний
}
Прерывания пока вообще запрещаю. Заполняю буфер и получается наложение байтов.
Вот код заполнения буфера:
void UART_send(unsigned char *buffer, unsigned char number){
unsigned char count = 0;
Uart.ptrTXBuffer = buffer;
Uart.numberTX = number;
while ((Uart.numberTX > 0) && (count < 14)){
LPC_UART->THR = *Uart.ptrTXBuffer;
Uart.ptrTXBuffer ++;
Uart.numberTX --;
count ++;
}
}