Fix DR16 cache invalidation and UART IRQ hooking
This commit is contained in:
parent
dd7994b0b0
commit
acecad0555
@ -304,7 +304,8 @@ void EXTI15_10_IRQHandler(void)
|
||||
void UART5_IRQHandler(void)
|
||||
{
|
||||
/* USER CODE BEGIN UART5_IRQn 0 */
|
||||
|
||||
#include "bsp/uart.h"
|
||||
BSP_UART_IRQHandler(&huart5);
|
||||
/* USER CODE END UART5_IRQn 0 */
|
||||
HAL_UART_IRQHandler(&huart5);
|
||||
/* USER CODE BEGIN UART5_IRQn 1 */
|
||||
@ -360,7 +361,8 @@ void DMA2_Stream5_IRQHandler(void)
|
||||
void USART10_IRQHandler(void)
|
||||
{
|
||||
/* USER CODE BEGIN USART10_IRQn 0 */
|
||||
|
||||
#include "bsp/uart.h"
|
||||
BSP_UART_IRQHandler(&huart10);
|
||||
/* USER CODE END USART10_IRQn 0 */
|
||||
HAL_UART_IRQHandler(&huart10);
|
||||
/* USER CODE BEGIN USART10_IRQn 1 */
|
||||
|
||||
@ -155,6 +155,16 @@ bool DR16_WaitDmaCplt(uint32_t timeout) {
|
||||
int8_t DR16_ParseData(DR16_t *dr16){
|
||||
if (dr16 == NULL) return DEVICE_ERR_NULL;
|
||||
|
||||
// STM32H7 D-Cache一致性处理:使DMA接收的数据对CPU可见
|
||||
// D-Cache按32字节对齐,需要对齐处理
|
||||
uint32_t addr = (uint32_t)&(dr16->raw_data);
|
||||
uint32_t size = sizeof(dr16->raw_data);
|
||||
// 向下对齐到32字节边界
|
||||
uint32_t aligned_addr = addr & ~0x1FU;
|
||||
// 计算对齐后的大小
|
||||
uint32_t aligned_size = ((size + (addr - aligned_addr) + 31) & ~0x1FU);
|
||||
SCB_InvalidateDCache_by_Addr((uint32_t *)aligned_addr, aligned_size);
|
||||
|
||||
if (DR16_DataCorrupted(dr16)) {
|
||||
/* 数据损坏说明帧错位了,重启串口并重新同步 */
|
||||
DR16_Restart();
|
||||
|
||||
@ -25,7 +25,7 @@ extern "C" {
|
||||
#define REFEREE_FREQ (500.0)
|
||||
/* 任务初始化延时ms */
|
||||
#define TASK_INIT_DELAY (100u)
|
||||
#define RC_INIT_DELAY (0)
|
||||
#define RC_INIT_DELAY (500)
|
||||
#define ATTI_ESTI_INIT_DELAY (0)
|
||||
#define BLINK_INIT_DELAY (0)
|
||||
#define CTRL_CHASSIS_INIT_DELAY (0)
|
||||
|
||||
Loading…
Reference in New Issue
Block a user