优化中断

This commit is contained in:
2026-05-28 21:55:51 +08:00
parent 9f38c6ea75
commit 0516210c95
8 changed files with 219 additions and 311 deletions
+157 -140
View File
@@ -1,151 +1,168 @@
#include "Bsp.h"
//
// #ifdef USE_DIGITAL_OUTPUT
// GPIO_ST DigiTalOutPut[DO_NUM] =
// {
// GPIOB,GPIO_Pin_8,RESET,
// };
// #endif
//
// #ifdef USE_DIGITAL_INPUT
// GPIO_ST DigiTalInPut[DI_NUM] =
// {
// GPIOF,GPIO_Pin_8,SET,
// GPIOE,GPIO_Pin_4,SET,
// GPIOE,GPIO_Pin_3,SET,
// };
// #endif
//
// //LED灯数组
// #ifdef USE_LED
// GPIO_ST DigiTalLed[LED_NUM] =
// {
// GPIOB,GPIO_Pin_5,SET,
// GPIOE,GPIO_Pin_5,SET,
// };
// #endif
//
// /**
// * @brief BSP的配置和初始化
// * @param void
// * @retval void
// * @note void
// * @example void
// */
// void BspInit(void)
// {
// //关闭所有系统中断
// INTERRUPT_DISABLE
//
// //System Delay
// SystemDelayConfig();
//
// //Interrupt
// SystemInterruptInit();
//
// //Gpio
// SystemGpioInit();
//
// {
// //DO
// #ifdef USE_DIGITAL_OUTPUT
// for (uint8_t i = 0; i < DO_NUM; i++) {
// GpioConfig(DigiTalOutPut[i].GpioPort,DigiTalOutPut[i].GpioPin,GPIO_Mode_Out_PP,GPIO_Speed_50MHz);
// GpioSetSts(DigiTalOutPut[i].GpioPort,DigiTalOutPut[i].GpioPin,DigiTalOutPut[i].DefaultStatus);
// }
// #endif
// //DI
// #ifdef USE_DIGITAL_INPUT
// for (uint8_t i = 0; i < DI_NUM; i++) {
// GpioConfig(DigiTalInPut[i].GpioPort,DigiTalInPut[i].GpioPin,GPIO_Mode_IPU,GPIO_Speed_50MHz);
// }
// #endif
// //LED
// #ifdef USE_LED
// for (uint8_t i = 0; i < LED_NUM; i++) {
// GpioConfig(DigiTalLed[i].GpioPort,DigiTalLed[i].GpioPin,GPIO_Mode_Out_PP,GPIO_Speed_50MHz);
// GpioSetSts(DigiTalLed[i].GpioPort,DigiTalLed[i].GpioPin,DigiTalLed[i].DefaultStatus);
// }
// #endif
// }
//
// //Usart
// SystemUsartInit();
//
// {
// //串口的TX引脚需要复用推挽模式,RX引脚需要浮空输入模式
// #ifdef USE_USART1
// GpioConfig(COM0_TX_PORT,COM0_TX_PIN,GPIO_Mode_AF_PP,GPIO_Speed_50MHz);
// GpioConfig(COM0_RX_PORT,COM0_RX_PIN,GPIO_Mode_IPU,GPIO_Speed_50MHz);
// #endif
// #ifdef USE_USART2
// GpioConfig(COM1_TX_PORT,COM1_TX_PIN,GPIO_Mode_AF_PP,GPIO_Speed_50MHz);
// GpioConfig(COM1_RX_PORT,COM1_RX_PIN,GPIO_Mode_IPU,GPIO_Speed_50MHz);
// #endif
// #ifdef USE_USART3
// GpioConfig(COM2_TX_PORT,COM2_TX_PIN,GPIO_Mode_AF_PP,GPIO_Speed_50MHz);
// GpioConfig(COM2_RX_PORT,COM2_RX_PIN,GPIO_Mode_AF_PP,GPIO_Speed_50MHz);
// #endif
// #ifdef USE_USART4
// GpioConfig(COM3_TX_PORT,COM3_TX_PIN,GPIO_Mode_AF_PP,GPIO_Speed_50MHz);
// GpioConfig(COM3_RX_PORT,COM3_RX_PIN,GPIO_Mode_AF_PP,GPIO_Speed_50MHz);
// #endif
// #ifdef USE_USART5
// GpioConfig(COM4_TX_PORT,COM4_TX_PIN,GPIO_Mode_AF_PP,GPIO_Speed_50MHz);
// GpioConfig(COM4_RX_PORT,COM4_RX_PIN,GPIO_Mode_AF_PP,GPIO_Speed_50MHz);
// #endif
// }
//
// #ifdef EXTRA_BSP
// BspExtraInit();
// #endif
// }
//
// void SystemStart(void)
// {
// //开启系统中断
// INTERRUPT_ENABLE
//
// #ifdef USE_RTOS
// #ifdef USE_FREERTOS
// #endif
// #ifdef USE_UCOS
// #endif
// #ifdef USE_THREADX
// #endif
// #endif
// }
//
// /**
// * @brief 扩展库初始化
// * @param void
// * @retval void
// * @note 理论上扩展库要在BSP的最后加载
// * @example void
// */
// void BspExtraInit(void)
// {
// //LetterShell初始化
// #ifdef USE_SHELL
// LetterShellInit(TTY_COM,TTY_BAUD);
// #endif
// }
//
// //用户层接口
// void BspSystemReboot(void)
// {
// INTERRUPT_DISABLE
// NVIC_SystemReset(); // 执行软件复位
// }
#ifdef TTY_COM
#include "LetterShell.h"
#endif
// LED灯数组
#if (LED_NUM != 0)
const GPIO_CONFIG LED_PERIPH[] = {
{.GpioX = GPIO21, .Mode = GPIO_Mode_Out_PP, .Speed = GPIO_Speed_10MHz},
{.GpioX = GPIO69, .Mode = GPIO_Mode_Out_PP, .Speed = GPIO_Speed_10MHz},
};
#endif
//数字输入数组
#if (DI_NUM != 0)
const GPIO_CONFIG DI_PERIPH[] = {
{},
};
#endif
//数字输出数组
#if (DO_NUM != 0)
const GPIO_CONFIG DO_PERIPH[] = {
{},
};
#endif
//串口配置表
const COM_CONFIG COM_PERIPH[] = {
{COM0,.TxPort = GPIO9, .RxPort =GPIO10, .Speed = GPIO_Speed_50MHz},
{COM1,.TxPort = GPIO2, .RxPort = GPIO3, .Speed = GPIO_Speed_50MHz},
};
void BspExtraInit(void);
/**
* @brief Voilet BSP的初始化函数
* @note void
* @param void
* @retval void
*/
void BspInit(void) {
unsigned char i = 0;
INTERRUPT_DISABLE
//初始化中断系统
IrqInit();
//初始化延时库
DelayConfig();
//LED灯配置
#if (LED_NUM != 0)
for (i = 0;i < ARRAY_LEN(LED_PERIPH);i++) {
//配置GPIO口
GpioConfig(&LED_PERIPH[i].GpioX, LED_PERIPH[i].Mode, LED_PERIPH[i].Speed);
}
#endif
//DI采集配置
#if (DI_NUM != 0)
// for (i = 0;i < DI_NUM;i++) {
// //打开外设时钟
// GpioClockEnable(&LED_PERIPH[i].GpioX);
// //配置GPIO口
// GpioConfig(&LED_PERIPH[i].GpioX, LED_PERIPH[i].Mode, LED_PERIPH[i].Speed);
// }
#endif
//DO输出配置
#if (DO_NUM != 0)
// for (i = 0;i < DO_NUM;i++) {
// //打开外设时钟
// GpioClockEnable(&LED_PERIPH[i].GpioX);
// //配置GPIO口
// GpioConfig(&LED_PERIPH[i].GpioX, LED_PERIPH[i].Mode, LED_PERIPH[i].Speed);
// }
#endif
//串口配置
for (i = 0;i < ARRAY_LEN(COM_PERIPH);i++) {
GpioConfig(&COM_PERIPH[i].TxPort, GPIO_Mode_AF_PP, COM_PERIPH[i].Speed);
GpioConfig(&COM_PERIPH[i].RxPort, GPIO_Mode_IPU, COM_PERIPH[i].Speed);
}
INTERRUPT_ENABLE
BspExtraInit();
}
/**
* @brief 扩展库初始化
* @note 理论上扩展库要在BSP的最后加载
* @param void
* @retval void
*/
void BspExtraInit(void)
{
//LetterShell初始化
#ifdef TTY_COM
LetterShellInit(TTY_COM,TTY_BAUD);
#endif
}
/**
* @brief 打开LED灯
* @note void
* @param Chnl 通道
* @retval void
*/
void LedOn(uint8_t Chnl)
{
if (Chnl >= LED_NUM)
return;
GpioSet(&LED_PERIPH[Chnl].GpioX, RESET);
}
/**
* @brief 关闭LED灯
* @note void
* @param Chnl 通道
* @retval void
*/
void LedOff(uint8_t Chnl)
{
if (Chnl >= LED_NUM)
return;
GpioSet(&LED_PERIPH[Chnl].GpioX, SET);
}
void LedSet(uint8_t Chnl,uint8_t Value)
{
if (Chnl >= LED_NUM)
return;
if (Value == LED_ON) {
GpioSet(&LED_PERIPH[Chnl].GpioX, RESET);
}
else {
GpioSet(&LED_PERIPH[Chnl].GpioX, SET);
}
}
/**
* @brief 切换LED灯状态
* @note void
* @param Chnl 通道 Status 状态
* @retval void
*/
void LedToggle(uint8_t Chnl)
{
if (Chnl >= LED_NUM)
return;
if (GpioGet(&LED_PERIPH[Chnl].GpioX) == LED_ON)
{
GpioSet(&LED_PERIPH[Chnl].GpioX,LED_OFF);
}
else
{
GpioSet(&LED_PERIPH[Chnl].GpioX,LED_ON);
}
}
/**
* @brief 重写Printf函数
* @note void
* @param void
* @retval void
*/
// ||
// #include <SysCall.c>
#if defined(__CC_ARM) || defined(__CLANG_ARM)
int fputc(int ch, FILE *f)
{