перенесла работу с регистрами для setclock, setmode в spi.в процессе оптимизация в begin
This commit is contained in:
1 parent
b528af8a90
commit
fec81e89e7
6 files changed
+144
-81
No files matched your search
@@ -419,6 +419,17 @@ static inline __attribute__((always_inline)) void HAL_GPIO_TogglePin(GPIO_TypeDe
|
||||
GPIO_x->OUTPUT_ ^= pin;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Возвращает направление вывода при работе в режиме вход/выход
|
||||
* @param GPIO_x порт GPIO_x, где x может быть (0, 1, 2).
|
||||
* @param pin маска вывода порта GPIO_x, направление которого необходимо узнать.
|
||||
* @return Возвращает направление вывода - input или output.
|
||||
*/
|
||||
static inline __attribute__((always_inline)) HAL_GPIO_ModeTypeDef HAL_GPIO_GetPinDirection(GPIO_TypeDef *GPIO_x, HAL_PinsTypeDef pin)
|
||||
{
|
||||
return (GPIO_x->DIRECTION_IN & pin) == 0 ? HAL_GPIO_MODE_GPIO_OUTPUT : HAL_GPIO_MODE_GPIO_INPUT;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Получить состояние линии прерывания.
|
||||
* @param irqLine номер линии прерывания.
|
||||
|
||||
@@ -253,7 +253,8 @@ void HAL_SPI_CS_Disable(SPI_HandleTypeDef *hspi);
|
||||
HAL_StatusTypeDef HAL_SPI_Exchange(SPI_HandleTypeDef *hspi, uint8_t TransmitBytes[], uint8_t ReceiveBytes[], uint32_t Size, uint32_t Timeout);
|
||||
HAL_StatusTypeDef HAL_SPI_ExchangeThreshold(SPI_HandleTypeDef *hspi, uint8_t TransmitBytes[], uint8_t ReceiveBytes[], uint32_t DataSize, uint32_t Timeout);
|
||||
HAL_StatusTypeDef HAL_SPI_Exchange_IT(SPI_HandleTypeDef *hspi, uint8_t TransmitBytes[], uint8_t ReceiveBytes[], uint32_t Size);
|
||||
|
||||
void HAL_SPI_Set_Clock_Divider(SPI_HandleTypeDef *hspi, uint8_t clockDiv);
|
||||
void HAL_SPI_Set_Clock_Mode(SPI_HandleTypeDef *hspi, uint8_t CLKPhase, uint8_t CLKPolarity);
|
||||
|
||||
/**
|
||||
* @brief Разрешить прерывания в соответствии с маской.
|
||||
|
||||
@@ -282,6 +282,49 @@ HAL_StatusTypeDef HAL_SPI_Init(SPI_HandleTypeDef *hspi)
|
||||
return error_code;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Установить новый делитель частоты
|
||||
*
|
||||
* @param hspi указатель на структуру SPI_HandleTypeDef, которая содержит
|
||||
* информацию о конфигурации для модуля SPI.
|
||||
* @param clockDiv делитель частоты в пределах от SPI_BAUDRATE_DIV4 до SPI_BAUDRATE_DIV256
|
||||
*/
|
||||
void HAL_SPI_Set_Clock_Divider(SPI_HandleTypeDef *hspi, uint8_t clockDiv)
|
||||
{
|
||||
uint32_t config = hspi->Instance->CONFIG;
|
||||
HAL_SPI_Disable(hspi);
|
||||
hspi->Init.BaudRateDiv = clockDiv;
|
||||
config &= ~(0b111 << SPI_CONFIG_BAUD_RATE_DIV_S); // очистить
|
||||
config |= (hspi->Init.BaudRateDiv << SPI_CONFIG_BAUD_RATE_DIV_S); // установить новое
|
||||
hspi->Instance->CONFIG = config; // сохранить конфигурацию
|
||||
HAL_SPI_Enable(hspi);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Установить новый режим работы
|
||||
*
|
||||
* @param hspi указатель на структуру SPI_HandleTypeDef, которая содержит
|
||||
* информацию о конфигурации для модуля SPI.
|
||||
* @param CLKPhase фаза тактирующего сигнала:
|
||||
* 1 - тактовая частота SPI неактивна вне слова,
|
||||
* 0 - тактовая частота SPI активна вне слова
|
||||
* @param CLKPolarity полярность тактирующего сигнала
|
||||
* 1 - тактовый сигнал удерживается на высоком уровне,
|
||||
* 0 - тактовый сигнал удерживается на низком уровне
|
||||
*/
|
||||
void HAL_SPI_Set_Clock_Mode(SPI_HandleTypeDef *hspi, uint8_t CLKPhase, uint8_t CLKPolarity)
|
||||
{
|
||||
uint32_t config = hspi->Instance->CONFIG;
|
||||
HAL_SPI_Disable(hspi);
|
||||
hspi->Init.CLKPhase = CLKPhase;
|
||||
hspi->Init.CLKPolarity = CLKPolarity;
|
||||
config &= ~((1 << SPI_CONFIG_CLK_PH_S) | (1 << SPI_CONFIG_CLK_POL_S)); // очистить
|
||||
config |= ((hspi->Init.CLKPhase << SPI_CONFIG_CLK_PH_S) |
|
||||
(hspi->Init.CLKPolarity << SPI_CONFIG_CLK_POL_S)); // установить новые значения
|
||||
hspi->Instance->CONFIG = config; // сохранить конфигурацию
|
||||
HAL_SPI_Enable(hspi);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Очистить буфер TX_FIFO.
|
||||
*
|
||||
|
||||
Reference in new issue
Block a user