Добавлен ADC SEQ (заготовка пока)

И небольшой рефакторинг
This commit is contained in:
2025-12-26 18:44:38 +03:00
parent 8e350e6a91
commit c7fdf6776f
16 changed files with 1758 additions and 1933 deletions

View File

@@ -1,5 +1,5 @@
/*==============================================================================
* Инициализация тактирования с использованием бибилотеки PLIB035
* Инициализация Instance с использованием бибилотеки PLIB035
*------------------------------------------------------------------------------
* ЦНИИ СЭТ, Разваляев Алексей <wot890089@mail.ru>
*==============================================================================
@@ -35,7 +35,7 @@ void uart_init_first(void)
RCU_UARTClkCmd(UART0_Num, ENABLE);
UART_DeInit(UART0);
// Инициализируем UART0
huart0.UART = UART0;
huart0.Instance = UART0;
uart_init(&huart0, &uart0_config);
NVIC_EnableIRQ(UART0_TD_IRQn);
NVIC_EnableIRQ(UART0_RX_IRQn);
@@ -59,9 +59,8 @@ void uart_init_first(void)
NVIC_EnableIRQ(UART1_TX_IRQn);
NVIC_EnableIRQ(UART1_E_RT_IRQn);
huart1.UART = UART1;
uart_init(&huart1, &uart1_config);
huart1.Instance = UART1;
uart_init(&huart1, &uart1_config);
#endif
}
@@ -69,17 +68,16 @@ void uart_init_first(void)
/**
* @brief Инициализация UART
* @param htmr указатель на хендл UART
* @param NewConfig указатель на новую конфигурацию UART, иначе используется та, что в структуре
* @brief Инициализация Instance
* @param htmr указатель на хендл Instance
* @param NewConfig указатель на новую конфигурацию Instance, иначе используется та, что в структуре
* @retval OperationStatus OK - если всё хорошо, ERROR - если ошибка
*/
OperationStatus uart_init(UART_HandleTypeDef *huart, UART_ExtInitTypeDef *NewConfig)
OperationStatus uart_init(UART_HandleTypeDef *huart, UART_ExtInit_TypeDef *NewConfig)
{
if(huart->UART == NULL)
{
if(!huart || !huart->Instance)
return ERROR;
}
if(NewConfig != NULL)
{
huart->Config = NewConfig;
@@ -89,18 +87,18 @@ OperationStatus uart_init(UART_HandleTypeDef *huart, UART_ExtInitTypeDef *NewCon
return ERROR;
}
UART_Init(huart->UART, &huart->Config->UART_Init);
UART_Init(huart->Instance, &huart->Config->UART_Init);
return OK;
}
OperationStatus uart_start(UART_HandleTypeDef *huart, UART_FIFOLevel_TypeDef TxFifoLevel, UART_FIFOLevel_TypeDef RxFifoLevel)
{
if (huart == NULL)
if (!huart)
return ERROR;
UART_ITFIFOLevelRxConfig(huart->UART, RxFifoLevel);
UART_ITFIFOLevelTxConfig(huart->UART, TxFifoLevel);
UART_ITFIFOLevelRxConfig(huart->Instance, RxFifoLevel);
UART_ITFIFOLevelTxConfig(huart->Instance, TxFifoLevel);
huart->TxBufPtr = NULL;
@@ -113,7 +111,7 @@ OperationStatus uart_start(UART_HandleTypeDef *huart, UART_FIFOLevel_TypeDef TxF
huart->RxSize = 0;
huart->RxBusy = 0;
UART_Cmd(huart->UART, ENABLE);
UART_Cmd(huart->Instance, ENABLE);
return OK;
}
@@ -192,7 +190,7 @@ OperationStatus uart_transmit_it(UART_HandleTypeDef *huart,
huart->TxBusy = 1;
// Включаем прерывания по TX FIFO
UART_ITCmd(huart->UART, UART_ITSource_TxFIFOLevel, ENABLE);
UART_ITCmd(huart->Instance, UART_ITSource_TxFIFOLevel, ENABLE);
__uart_fifo_transmit(huart, 1);
@@ -218,7 +216,7 @@ OperationStatus uart_receive_it(UART_HandleTypeDef *huart,
huart->RxBusy = 1;
// Включаем только RX прерывания
UART_ITCmd(huart->UART,
UART_ITCmd(huart->Instance,
UART_ITSource_RxFIFOLevel |
UART_ITSource_RecieveTimeout |
UART_ITSource_ErrorFrame |
@@ -233,10 +231,10 @@ OperationStatus uart_receive_it(UART_HandleTypeDef *huart,
void uart_handler(UART_HandleTypeDef *huart)
{
if (!huart || !huart->UART || !huart->Config)
if (!huart || !huart->Instance || !huart->Config)
return;
UART_TypeDef *uart = huart->UART;
UART_TypeDef *uart = huart->Instance;
uint32_t mis = uart->MIS;
// Ошибки
@@ -304,18 +302,16 @@ void uart_handler(UART_HandleTypeDef *huart)
/**
* @brief Установка коллбека UART
* @param htmr указатель на хендл UART
* @brief Установка коллбека Instance
* @param htmr указатель на хендл Instance
* @param cb_type Тип коллбека
* @param Callback Функция коллбека
* @retval void
*/
OperationStatus uart_set_callback(UART_HandleTypeDef* huart, UART_CallbackTypeDef cb_type, void (*Callback)(void))
{
if((huart->UART == NULL) || (huart->Config == NULL))
{
if (!huart || !huart->Instance || !huart->Config)
return ERROR;
}
switch(cb_type)
{
@@ -449,10 +445,10 @@ void uart1_gpio_deinit(void)
static int __uart_fifo_receive(UART_HandleTypeDef *huart, uint8_t it_mode)
{
while (!UART_FlagStatus(huart->UART, UART_Flag_RxFIFOEmpty) &&
while (!UART_FlagStatus(huart->Instance, UART_Flag_RxFIFOEmpty) &&
huart->RxCount < huart->RxSize)
{
huart->RxBufPtr[huart->RxCount++] = UART_RecieveData(huart->UART);
huart->RxBufPtr[huart->RxCount++] = UART_RecieveData(huart->Instance);
if (huart->RxCount == huart->RxSize)
{
@@ -461,7 +457,7 @@ static int __uart_fifo_receive(UART_HandleTypeDef *huart, uint8_t it_mode)
if(it_mode)
{
// Выключаем RX прерывания
UART_ITCmd(huart->UART,
UART_ITCmd(huart->Instance,
UART_ITSource_RxFIFOLevel |
UART_ITSource_RecieveTimeout,
DISABLE);
@@ -476,10 +472,10 @@ static int __uart_fifo_receive(UART_HandleTypeDef *huart, uint8_t it_mode)
}
static int __uart_fifo_transmit(UART_HandleTypeDef *huart, uint8_t it_mode)
{
while (!UART_FlagStatus(huart->UART, UART_Flag_TxFIFOFull) &&
while (!UART_FlagStatus(huart->Instance, UART_Flag_TxFIFOFull) &&
huart->TxCount < huart->TxSize)
{
UART_SendData(huart->UART, huart->TxBufPtr[huart->TxCount++]);
UART_SendData(huart->Instance, huart->TxBufPtr[huart->TxCount++]);
}
if (huart->TxCount == huart->TxSize)
@@ -487,13 +483,13 @@ static int __uart_fifo_transmit(UART_HandleTypeDef *huart, uint8_t it_mode)
if(it_mode)
{
// Выключаем FIFO прерывание
UART_ITCmd(huart->UART, UART_ITSource_TxFIFOLevel, DISABLE);
UART_ITCmd(huart->Instance, UART_ITSource_TxFIFOLevel, DISABLE);
// Включаем TransmitDone прерывание, коллбек будет по нему
UART_ITCmd(huart->UART, UART_ITSource_TransmitDone, ENABLE);
UART_ITCmd(huart->Instance, UART_ITSource_TransmitDone, ENABLE);
}
else
{
while(!UART_FlagStatus(huart->UART, UART_Flag_TxFIFOEmpty)); // ждем пока не опустошится буфер
while(!UART_FlagStatus(huart->Instance, UART_Flag_TxFIFOEmpty)); // ждем пока не опустошится буфер
huart->TxBusy = 0;
if (huart->Config->TxCallback)