new project

This commit is contained in:
2025-08-19 23:24:29 +08:00
parent 1247429882
commit c5eb3ab534
9 changed files with 365 additions and 28 deletions

View File

@@ -37,6 +37,9 @@ OF SUCH DAMAGE.
#include "uart.h"
#include "uart_ring_buffer.h"
#include "led.h"
#include "ultrasonic_analog.h"
extern uint16_t g_capture_value;
/*!
\brief this function handles NMI exception
@@ -101,9 +104,78 @@ void SysTick_Handler(void) {
delay_decrement();
}
// /**
// * @brief This function handles TIMER15 interrupt request.
// * @param[in] none
// * @param[out] none
// * @retval None
// */
// void TIMER15_IRQHandler(void) {
// if (timer_interrupt_flag_get(US_TX_DELAY_TIMER, TIMER_INT_FLAG_UP) == SET)
// {
// timer_interrupt_flag_clear(US_TX_DELAY_TIMER, TIMER_INT_FLAG_UP);
// exti_interrupt_enable(US_RX_GPIO_EXTI); // turn on hardware external input interrupt
// timer_counter_value_config(US_ECHO_TIMER, 0);
// timer_enable(US_ECHO_TIMER); // turn on timer to calculate the first ultrasonic echo time
// timer_disable(US_TX_DELAY_TIMER);
// }
// }
void TIMER15_IRQHandler(void) {
if (timer_interrupt_flag_get(TIMER15, TIMER_INT_FLAG_CH1)) {
timer_interrupt_flag_clear(TIMER15, TIMER_INT_FLAG_CH1);
// g_ultrasonic_measure_done = true; // TODO 测距命令发送回报标识位,最终不应在这里
gpio_bit_set(GPIOA, GPIO_PIN_0); // TODO waiting for delete
}
if (timer_interrupt_flag_get(TIMER15, TIMER_INT_FLAG_UP)) {
timer_interrupt_flag_clear(TIMER15, TIMER_INT_FLAG_UP);
timer_disable(TIMER15);
}
}
/**
* @brief This function handles external lines 0 to 1 interrupt request
* @param[in] none
* @param[out] none
* @retval None
*/
void EXTI0_1_IRQHandler(void) {
if (exti_interrupt_flag_get(US_RX_GPIO_EXTI) == SET)
{
exti_interrupt_flag_clear(US_RX_GPIO_EXTI);
g_capture_value = timer_channel_capture_value_register_read(US_ECHO_TIMER, US_ECHO_CH);
timer_disable(US_ECHO_TIMER);
exti_interrupt_disable(US_RX_GPIO_EXTI);
}
}
/* PWM周期计数器 - 使用ULTRASONIC_TX_CYCLES宏 */
volatile uint8_t pwm_cycle_count = 0;
void TIMER13_IRQHandler(void)
{
if(SET == timer_interrupt_flag_get(TIMER13, TIMER_INT_FLAG_UP)) {
timer_interrupt_flag_clear(TIMER13, TIMER_INT_FLAG_UP);
pwm_cycle_count++;
if(pwm_cycle_count >= (ULTRASONIC_TX_CYCLES)) {
timer_disable(TIMER13);
pwm_cycle_count = 0;
g_ultrasonic_measure_done = true; // TODO 测距命令发送回报标识位,最终不应在这里
}
}
}
void USART0_IRQHandler(void) {
if (RESET != usart_interrupt_flag_get(USART0, USART_INT_FLAG_RBNE)) {
uint8_t data = usart_data_receive(USART0);
(void)uart_ring_buffer_put(data); // 缓冲满时丢弃,返回值可用于统计
}
}
}