[bsp][driver][Infineon]Fix timer interrupt callback conflict

This commit is contained in:
Rbb666 2024-03-21 12:03:43 +08:00 committed by Meco Man
parent 3f26998f9c
commit f3cbb8d58e
2 changed files with 30 additions and 40 deletions

View File

@ -16,6 +16,7 @@
//#define DRV_DEBUG //#define DRV_DEBUG
#define LOG_TAG "drv.hwtimer" #define LOG_TAG "drv.hwtimer"
#include <drv_log.h> #include <drv_log.h>
static void isr_timer(void *callback_arg, cyhal_timer_event_t event); static void isr_timer(void *callback_arg, cyhal_timer_event_t event);
#ifdef RT_USING_HWTIMER #ifdef RT_USING_HWTIMER
@ -58,14 +59,14 @@ static void timer_init(rt_hwtimer_t *timer, rt_uint32_t state)
tim = (cyhal_timer_t *)timer->parent.user_data; tim = (cyhal_timer_t *)timer->parent.user_data;
const cyhal_timer_cfg_t init_timer_cfg = const cyhal_timer_cfg_t init_timer_cfg =
{ {
.compare_value = 0, /* Timer compare value, not used */ .compare_value = 0, /* Timer compare value, not used */
.period = 9999, /* Defines the timer period */ .period = 9999, /* Defines the timer period */
.direction = CYHAL_TIMER_DIR_UP, /* Timer counts up */ .direction = CYHAL_TIMER_DIR_UP, /* Timer counts up */
.is_compare = false, /* Don't use compare mode */ .is_compare = false, /* Don't use compare mode */
.is_continuous = true, /* Run timer indefinitely */ .is_continuous = true, /* Run timer indefinitely */
.value = 0 /* Initial value of counter */ .value = 0 /* Initial value of counter */
}; };
if (state) if (state)
{ {
@ -109,16 +110,16 @@ static rt_err_t timer_start(rt_hwtimer_t *timer, rt_uint32_t t, rt_hwtimer_mode_
tim = (cyhal_timer_t *)timer->parent.user_data; tim = (cyhal_timer_t *)timer->parent.user_data;
const cyhal_timer_cfg_t init_timer_cfg = const cyhal_timer_cfg_t init_timer_cfg =
{ {
.compare_value = 0, /* Timer compare value, not used */ .compare_value = 0, /* Timer compare value, not used */
.period = t - 1, /* Defines the timer period */ .period = t - 1, /* Defines the timer period */
.direction = CYHAL_TIMER_DIR_UP, /* Timer counts up */ .direction = CYHAL_TIMER_DIR_UP, /* Timer counts up */
.is_compare = false, /* Don't use compare mode */ .is_compare = false, /* Don't use compare mode */
.is_continuous = true, /* Run timer indefinitely */ .is_continuous = true, /* Run timer indefinitely */
.value = 0 /* Initial value of counter */ .value = 0 /* Initial value of counter */
}; };
/* Configure timer period and operation mode such as count direction, /* Configure timer period and operation mode such as count direction,
duration */ duration */
cyhal_timer_configure(tim, &init_timer_cfg); cyhal_timer_configure(tim, &init_timer_cfg);
if (opmode == HWTIMER_MODE_ONESHOT) if (opmode == HWTIMER_MODE_ONESHOT)
@ -140,6 +141,7 @@ static rt_err_t timer_start(rt_hwtimer_t *timer, rt_uint32_t t, rt_hwtimer_mode_
/* Assign the ISR to execute on timer interrupt */ /* Assign the ISR to execute on timer interrupt */
cyhal_timer_register_callback(tim, isr_timer, NULL); cyhal_timer_register_callback(tim, isr_timer, NULL);
/* Set the event on which timer interrupt occurs and enable it */ /* Set the event on which timer interrupt occurs and enable it */
cyhal_timer_enable_event(tim, CYHAL_TIMER_IRQ_TERMINAL_COUNT, 1, true); cyhal_timer_enable_event(tim, CYHAL_TIMER_IRQ_TERMINAL_COUNT, 1, true);
@ -214,15 +216,14 @@ static rt_err_t timer_ctrl(rt_hwtimer_t *timer, rt_uint32_t cmd, void *arg)
static const struct rt_hwtimer_info _info = TIM_DEV_INFO_CONFIG; static const struct rt_hwtimer_info _info = TIM_DEV_INFO_CONFIG;
static const struct rt_hwtimer_ops _ops = static const struct rt_hwtimer_ops _ops =
{ {
.init = timer_init, .init = timer_init,
.start = timer_start, .start = timer_start,
.stop = timer_stop, .stop = timer_stop,
.count_get = timer_counter_get, .count_get = timer_counter_get,
.control = timer_ctrl, .control = timer_ctrl,
}; };
#ifdef BSP_USING_TIM1
static void isr_timer(void *callback_arg, cyhal_timer_event_t event) static void isr_timer(void *callback_arg, cyhal_timer_event_t event)
{ {
/* enter interrupt */ /* enter interrupt */
@ -230,28 +231,15 @@ static void isr_timer(void *callback_arg, cyhal_timer_event_t event)
(void)callback_arg; (void)callback_arg;
(void)event; (void)event;
#ifdef BSP_USING_TIM1
rt_device_hwtimer_isr(&cyp_hwtimer_obj[TIM1_INDEX].time_device); rt_device_hwtimer_isr(&cyp_hwtimer_obj[TIM1_INDEX].time_device);
/* leave interrupt */
rt_interrupt_leave();
}
#endif #endif
#ifdef BSP_USING_TIM2 #ifdef BSP_USING_TIM2
static void isr_timer(void *callback_arg, cyhal_timer_event_t event)
{
/* enter interrupt */
rt_interrupt_enter();
(void)callback_arg;
(void)event;
rt_device_hwtimer_isr(&cyp_hwtimer_obj[TIM2_INDEX].time_device); rt_device_hwtimer_isr(&cyp_hwtimer_obj[TIM2_INDEX].time_device);
#endif
/* leave interrupt */ /* leave interrupt */
rt_interrupt_leave(); rt_interrupt_leave();
} }
#endif
int cyp_hwtimer_init(void) int cyp_hwtimer_init(void)
{ {

View File

@ -143,7 +143,9 @@ if GetDepend(['RT_USING_DAC']):
if GetDepend(['RT_USING_HWTIMER']): if GetDepend(['RT_USING_HWTIMER']):
src += ['mtb-hal-cat1/source/cyhal_timer.c'] src += ['mtb-hal-cat1/source/cyhal_timer.c']
src += ['mtb-hal-cat1/source/cyhal_tcpwm_common.c']
src += ['mtb-pdl-cat1/drivers/source/cy_tcpwm_counter.c']
path = [cwd + '/retarget-io', path = [cwd + '/retarget-io',
cwd + '/core-lib/include', cwd + '/core-lib/include',
cwd + '/mtb_shared/usbdev', cwd + '/mtb_shared/usbdev',