31 #define UART_RB_SIZE 256 // Размер кольцевого буфера 33 #pragma data_alignment = 0x400 34 #pragma location=".noinit" 51 CMN_REG->DMA_INTR_FLAGS &=(~(1<<6));
52 CMN_REG->DMA_INTR_FLAGS |=(1<<6);
68 GPIO_E->ALTFUNCSET = (1 << 2);
69 GPIO_E->ALTFUNCSET = (1 << 1);
93 volatile uint16_t i,j;
110 test_tx_buffer[i] = i;
111 test_rx_buffer[i] = 0xAA;
114 PRINT(
"Тестирование UART");
115 PRINT(
" Ряд скоростей для тестирования:")
116 for (k = 0; k <= 12; k+=3)
119 PRINT(
" %iбит/с, %iбит/с, %iбит/с, ", baudrates[k], baudrates[k+1], baudrates[k+2]);
127 for (k = 0; k <= 11; k++)
147 if (memcmp(test_tx_buffer, test_rx_buffer, (
UART_RB_SIZE)))
149 PRINT(
" Режим опроса завершен на скорости %i неуспешно",
158 PRINT(
" Режим опроса завершен успешно");
165 PRINT(
" Тест UART в режиме c прерываниями");
168 for (k = 0; k < 11; k++)
190 test_tx_buffer[i] = i;
191 test_rx_buffer[i] = 0xAA;
206 if (memcmp(test_tx_buffer, test_rx_buffer, (
UART_RB_SIZE)))
210 PRINT(
" Ошибка в работе теста UART в режиме c прерываниями на скорости %i", baudrates[k]);
217 PRINT(
"УСПЕШНО Тест UART в режиме c прерываниями на скорости %i", baudrates[k]);
228 PRINT(
"Ошибка в работе теста UART в режиме c прерываниями");
232 PRINT(
"Теста UART в режиме c прерываниями прошел успешно! ");
243 PRINT(
" Тест UART в режиме c DMA");
245 for (k = 0; k < 11; k++)
267 test_tx_buffer[p] = p;
268 test_rx_buffer[p] = 0xAA;
272 DMA->CTRL_BASE_PTR = (uint32_t) &DMA_UART_CTRL;
273 DMA->CHNL_ENABLE_SET = (1<<6);
282 CMN_REG->DMA_INTR_FLAGS &=(~(1<<6));
299 if (memcmp(test_tx_buffer, test_rx_buffer,
UART_RB_SIZE))
302 PRINT(
" Ошибка в работе теста UART в режиме c DMA завершен на скорости %i", baudrates[k]);
310 PRINT(
"УСПЕШНО Тест UART в режиме c DMA на скорости %i", baudrates[k]);
321 PRINT(
"Ошибка в работе теста UART в режиме c DMA");
325 if ((!result_dma)&&(!result))
327 PRINT(
"Тест UART завершен успешно");
331 PRINT(
"Ошибка в работе теста UART");
char dbg_buffer[256]
Отладочный буфер
#define DMA_DST_PROT_BUFFER_DIS
#define DMA
Указатель на структуру DMA.
#define PRINT(...)
Макросы для использования отладочного выхода
Структура для доступа к управлющим данным всех каналов
static uint8_t rxbuff[UART_RB_SIZE]
Буфер RX.
uint32_t src_data_end_ptr
uint8_t UART_Test(void)
Основная программа тестирования UART.
void UART_Enable(UART_T *pUART)
Разрешение работы UART.
void UART_RXEnable(UART_T *pUART)
Разрешение работы приемника
void NVIC_EnableIRQ(IRQn_T IRQn, uint32_t vec)
Разрешение прерывания
void UART_Init(UART_T *pUART)
Инициализация UART.
int RingBuffer_GetCount(RINGBUFF_T *RingBuff)
Получения количества элементов, записанных в кольцевой буфер.
void UART_IntEnable(UART_T *pUART, UART_INTMASK_T IntMask)
Разрешение прерываний по UART'у
void UART_DeInit(UART_T *pUART)
Деинициализация UART.
#define DMA_SRC_ADDR_INC_BYTE
#define DMA_DST_PROT_PRIVILEGE_DIS
#define UART_LCR_H_EPS_ODD
uint32_t UART_SendRB(UART_T *pUART, RINGBUFF_T *pRB, const void *data, uint32_t bytes)
Запись данных в кольцевой буфер и начало передачи
#define UART_LCR_H_SPS_DIS
Этот файл содержит структуры, макросы и функции необходимые необходимые для тестовой программы для ап...
Status RingBuffer_Insert(RINGBUFF_T *RingBuff, const void *data)
Запись одного элемента в кольцевой буфер.
FlagStatus UART_GetStatus(UART_T *pUART, UART_STATUS_T Stat)
Получение текущего статуса UART контроллера
uint32_t UART_SetBaud(UART_T *pUART, uint32_t baud, const uint32_t sys_freq)
Установка целой и дробной частей делителя для получения заданной скорости последовательного обмена ...
static uint8_t txbuff[UART_RB_SIZE]
Буфер TX.
#define DMA_NEXT_USEBURST_DIS
void RingBuffer_Init(RINGBUFF_T *RingBuff, void *buffer, int itemSize, int count)
Инициализация кольцевого буфера.
uint8_t UART_ReadByte(UART_T *pUART)
Прием одного байта по UART'у
Структура кольцевого буфера
void UART_IRQRBHandler(UART_T *pUART, RINGBUFF_T *pRXRB, RINGBUFF_T *pTXRB)
Обработчик прерывания UART по приему/передаче данных для кольцевых буферов
void UART_SetupFIFOS(UART_T *pUART, UART_IFLS rxfifolimit, UART_IFLS txfifolimit)
Установка порогов прерываний по заполнению буфера приемника/передатчика
void NVIC_DisableIRQ(uint32_t vec)
Запрещение прерывания
#define DMA_SRC_PROT_BUFFER_DIS
#define UART2
Указатель на структуру UART2.
#define DMA_DST_ADDR_INC_NULL
#define DMA_SRC_PROT_PRIVILEGE_DIS
void UART_IntDisable(UART_T *pUART, UART_INTMASK_T IntMask)
Запрещение прерываний по UART'у
uint32_t dst_data_end_ptr
void UART_TXEnable(UART_T *pUART)
Разрешение работы передатчика
const uint32_t sys_freq
Системная частота
static uint8_t dma_tx_done
DMA_CHNL_CTRL_T prim_chan[32]
void UART_2_IRQ(void)
Обработчик прерывания для UART2.
void UART_SendByte(UART_T *pUART, uint8_t data)
Передача одного байта по UART'у
#define GPIO_E
Указатель на структуру GPIO_E.
#define CMN_REG
Указатель на структуру CMN_REG.
void DBG_TX_Flush(void)
Вывод всех данных, накопленных в кольцевом буфере, в отладочный UART.
uint32_t UART_ReadRB(UART_T *pUART, RINGBUFF_T *pRB, void *data, uint32_t bytes)
Чтение данных из кольцевого буфера после приема
void DMA_DONE_UART_2_IRQ(void)
Обработчик прерывания для DMA UART2.
void gpioInit_UART2()
Инициализация GPIO для UART2.
void UART_Config(UART_T *pUART, uint32_t config)
Установка длины слова данных, числа стоповых бит и контроля четности