Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[WB32 MCU] Fix some issue. #406

Merged
merged 3 commits into from
Aug 11, 2024
Merged
Show file tree
Hide file tree
Changes from 2 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions demos/WB32/RT-WB32F3G71-RTC/cfg/chconf.h
Original file line number Diff line number Diff line change
Expand Up @@ -63,7 +63,7 @@
* @note Allowed values are 16, 32 or 64 bits.
*/
#if !defined(CH_CFG_ST_RESOLUTION)
#define CH_CFG_ST_RESOLUTION 32
#define CH_CFG_ST_RESOLUTION 16
#endif

/**
Expand Down Expand Up @@ -100,7 +100,7 @@
* this value.
*/
#if !defined(CH_CFG_ST_TIMEDELTA)
#define CH_CFG_ST_TIMEDELTA 0
#define CH_CFG_ST_TIMEDELTA 2
#endif

/** @} */
Expand Down
6 changes: 3 additions & 3 deletions demos/WB32/RT-WB32F3G71-RTC/main.c
Original file line number Diff line number Diff line change
Expand Up @@ -121,9 +121,9 @@ int main(void) {
while (true){
chThdSleepSeconds(2);
rtcGetTime(&RTCD1, &timespec);
chprintf((BaseSequentialStream *)&SERIAL_DEBUG_DRIVER,
"lsi sleep %ds year = %d month = %d dstflag=%d dayofweek = %d day = %d millisecond = %d\r\n",
RTC_ALARMPERIOD, timespec.year, timespec.month, timespec.dstflag, timespec.dayofweek, timespec.day, timespec.millisecond);
// chprintf((BaseSequentialStream *)&SERIAL_DEBUG_DRIVER,
itarze marked this conversation as resolved.
Show resolved Hide resolved
// "lsi sleep %ds year = %d month = %d dstflag=%d dayofweek = %d day = %d millisecond = %d\r\n",
// RTC_ALARMPERIOD, timespec.year, timespec.month, timespec.dstflag, timespec.dayofweek, timespec.day, timespec.millisecond);
itarze marked this conversation as resolved.
Show resolved Hide resolved
chThdSleepSeconds(3);

chSysDisable();
Expand Down
4 changes: 2 additions & 2 deletions demos/WB32/RT-WB32FQ95-GENERIC/cfg/chconf.h
Original file line number Diff line number Diff line change
Expand Up @@ -63,7 +63,7 @@
* @note Allowed values are 16, 32 or 64 bits.
*/
#if !defined(CH_CFG_ST_RESOLUTION)
#define CH_CFG_ST_RESOLUTION 32
#define CH_CFG_ST_RESOLUTION 16
#endif

/**
Expand Down Expand Up @@ -100,7 +100,7 @@
* this value.
*/
#if !defined(CH_CFG_ST_TIMEDELTA)
#define CH_CFG_ST_TIMEDELTA 0
#define CH_CFG_ST_TIMEDELTA 2
#endif

/** @} */
Expand Down
10 changes: 5 additions & 5 deletions os/hal/ports/WB32/LLD/TIMv1/hal_st_lld.c
Original file line number Diff line number Diff line change
Expand Up @@ -243,22 +243,22 @@ void st_lld_serve_interrupt(void) {
#if OSAL_ST_MODE == OSAL_ST_MODE_FREERUNNING
#if ST_LLD_NUM_ALARMS > 1
if ((sr & TIM_SR_CC2IF) != 0U) {
if (st_callbacks[2] != NULL) {
st_callbacks[0](1U);
if (st_callbacks[1] != NULL) {
st_callbacks[1](1U);
}
}
#endif
#if ST_LLD_NUM_ALARMS > 2
if ((sr & TIM_SR_CC3IF) != 0U) {
if (st_callbacks[2] != NULL) {
st_callbacks[1](2U);
st_callbacks[2](2U);
}
}
#endif
#if ST_LLD_NUM_ALARMS > 3
if ((sr & TIM_SR_CC4IF) != 0U) {
if (st_callbacks[2] != NULL) {
st_callbacks[2](3U);
if (st_callbacks[3] != NULL) {
st_callbacks[3](3U);
}
}
#endif
Expand Down
8 changes: 7 additions & 1 deletion os/hal/ports/WB32/LLD/TIMv1/hal_st_lld.h
Original file line number Diff line number Diff line change
Expand Up @@ -154,7 +154,7 @@
#define ST_LLD_NUM_ALARMS WB32_ST_ENFORCE_ALARMS
#endif

#elif OSAL_ST_MODE == OSAL_ST_MODE_FREERUNNING
#elif OSAL_ST_MODE == OSAL_ST_MODE_PERIODIC

#define WB32_ST_USE_SYSTICK TRUE
#define WB32_ST_USE_TIM2 FALSE
Expand Down Expand Up @@ -225,8 +225,10 @@ static inline void st_lld_start_alarm(systime_t abstime) {
WB32_ST_TIM->SR = 0;
#if ST_LLD_NUM_ALARMS == 1
WB32_ST_TIM->DIER = WB32_TIM_DIER_CC1IE;
WB32_ST_TIM->CCER = WB32_TIM_CCER_CC1E;
#else
WB32_ST_TIM->DIER |= WB32_TIM_DIER_CC1IE;
WB32_ST_TIM->CCER |= WB32_TIM_CCER_CC1E;
#endif
}

Expand All @@ -239,8 +241,10 @@ static inline void st_lld_stop_alarm(void) {

#if ST_LLD_NUM_ALARMS == 1
WB32_ST_TIM->DIER = 0U;
WB32_ST_TIM->CCER = 0U;
#else
WB32_ST_TIM->DIER &= ~WB32_TIM_DIER_CC1IE;
WB32_ST_TIM->CCER &= ~WB32_TIM_CCER_CC1E;
#endif
}

Expand Down Expand Up @@ -300,6 +304,7 @@ static inline void st_lld_start_alarm_n(unsigned alarm, systime_t abstime) {
WB32_ST_TIM->CCR[alarm] = (uint32_t)abstime;
WB32_ST_TIM->SR = 0;
WB32_ST_TIM->DIER |= (WB32_TIM_DIER_CC1IE << alarm);
WB32_ST_TIM->CCER |= (WB32_TIM_CCER_CC1E << (alarm * 4));
}

/**
Expand All @@ -314,6 +319,7 @@ static inline void st_lld_start_alarm_n(unsigned alarm, systime_t abstime) {
static inline void st_lld_stop_alarm_n(unsigned alarm) {

WB32_ST_TIM->DIER &= ~(WB32_TIM_DIER_CC1IE << alarm);
WB32_ST_TIM->CCER &= ~(WB32_TIM_CCER_CC1E << (alarm * 4));
}

/**
Expand Down
23 changes: 16 additions & 7 deletions os/hal/ports/WB32/WB32F3G71xx/wb32_isr.c
Original file line number Diff line number Diff line change
Expand Up @@ -63,10 +63,11 @@ OSAL_IRQ_HANDLER(WB32_EXTI0_IRQ_VECTOR) {
OSAL_IRQ_PROLOGUE();

pr = EXTI->PR & EXTI_PR_PR0;
EXTI->PR = pr;

exti_serve_irq(pr, 0);

EXTI->PR = EXTI_PR_PR0;

OSAL_IRQ_EPILOGUE();
}
#endif
Expand All @@ -83,10 +84,11 @@ OSAL_IRQ_HANDLER(WB32_EXTI1_IRQ_VECTOR) {
OSAL_IRQ_PROLOGUE();

pr = EXTI->PR & EXTI_PR_PR1;
EXTI->PR = pr;

exti_serve_irq(pr, 1);

EXTI->PR = EXTI_PR_PR1;

OSAL_IRQ_EPILOGUE();
}
#endif
Expand All @@ -103,9 +105,10 @@ OSAL_IRQ_HANDLER(WB32_EXTI2_IRQ_VECTOR) {
OSAL_IRQ_PROLOGUE();

pr = EXTI->PR & EXTI_PR_PR2;
EXTI->PR = pr;

exti_serve_irq(pr, 2);

EXTI->PR = EXTI_PR_PR2;

OSAL_IRQ_EPILOGUE();
}
Expand All @@ -123,10 +126,11 @@ OSAL_IRQ_HANDLER(WB32_EXTI3_IRQ_VECTOR) {
OSAL_IRQ_PROLOGUE();

pr = EXTI->PR & EXTI_PR_PR3;
EXTI->PR = pr;

exti_serve_irq(pr, 3);

EXTI->PR = EXTI_PR_PR3;

OSAL_IRQ_EPILOGUE();
}
#endif
Expand All @@ -143,10 +147,11 @@ OSAL_IRQ_HANDLER(WB32_EXTI4_IRQ_VECTOR) {
OSAL_IRQ_PROLOGUE();

pr = EXTI->PR & EXTI_PR_PR4;
EXTI->PR = pr;

exti_serve_irq(pr, 4);

EXTI->PR = EXTI_PR_PR4;

OSAL_IRQ_EPILOGUE();
}
#endif
Expand All @@ -164,14 +169,16 @@ OSAL_IRQ_HANDLER(WB32_EXTI9_5_IRQ_VECTOR) {

pr = EXTI->PR & (EXTI_PR_PR5 | EXTI_PR_PR6 | EXTI_PR_PR7 |
EXTI_PR_PR8 | EXTI_PR_PR9);
EXTI->PR = pr;

exti_serve_irq(pr, 5);
exti_serve_irq(pr, 6);
exti_serve_irq(pr, 7);
exti_serve_irq(pr, 8);
exti_serve_irq(pr, 9);

EXTI->PR = EXTI_PR_PR5 | EXTI_PR_PR6 | EXTI_PR_PR7 |
EXTI_PR_PR8 | EXTI_PR_PR9;

OSAL_IRQ_EPILOGUE();
}
#endif
Expand All @@ -189,7 +196,6 @@ OSAL_IRQ_HANDLER(WB32_EXTI15_10_IRQ_VECTOR) {

pr = EXTI->PR & (EXTI_PR_PR10 | EXTI_PR_PR11 | EXTI_PR_PR12 |
EXTI_PR_PR13 | EXTI_PR_PR14 | EXTI_PR_PR15);
EXTI->PR = pr;

exti_serve_irq(pr, 10);
exti_serve_irq(pr, 11);
Expand All @@ -198,6 +204,9 @@ OSAL_IRQ_HANDLER(WB32_EXTI15_10_IRQ_VECTOR) {
exti_serve_irq(pr, 14);
exti_serve_irq(pr, 15);

EXTI->PR = EXTI_PR_PR10 | EXTI_PR_PR11 | EXTI_PR_PR12 |
EXTI_PR_PR13 | EXTI_PR_PR14 | EXTI_PR_PR15;

OSAL_IRQ_EPILOGUE();
}
#endif
Expand Down
8 changes: 4 additions & 4 deletions os/hal/ports/WB32/WB32F3G71xx/wb32_registry.h
Original file line number Diff line number Diff line change
Expand Up @@ -99,13 +99,13 @@
#define WB32_HAS_TIM3 TRUE
#define WB32_HAS_TIM4 TRUE

#define WB32_TIM1_IS_32BITS TRUE
#define WB32_TIM1_IS_32BITS FALSE
#define WB32_TIM1_CHANNELS 4
#define WB32_TIM2_IS_32BITS TRUE
#define WB32_TIM2_IS_32BITS FALSE
#define WB32_TIM2_CHANNELS 4
#define WB32_TIM3_IS_32BITS TRUE
#define WB32_TIM3_IS_32BITS FALSE
#define WB32_TIM3_CHANNELS 4
#define WB32_TIM4_IS_32BITS TRUE
#define WB32_TIM4_IS_32BITS FALSE
#define WB32_TIM4_CHANNELS 4

/* I2C attributes */
Expand Down
23 changes: 16 additions & 7 deletions os/hal/ports/WB32/WB32FQ95xx/wb32_isr.c
Original file line number Diff line number Diff line change
Expand Up @@ -63,10 +63,11 @@ OSAL_IRQ_HANDLER(WB32_EXTI0_IRQ_VECTOR) {
OSAL_IRQ_PROLOGUE();

pr = EXTI->PR & EXTI_PR_PR0;
EXTI->PR = pr;

exti_serve_irq(pr, 0);

EXTI->PR = EXTI_PR_PR0;

OSAL_IRQ_EPILOGUE();
}
#endif
Expand All @@ -83,10 +84,11 @@ OSAL_IRQ_HANDLER(WB32_EXTI1_IRQ_VECTOR) {
OSAL_IRQ_PROLOGUE();

pr = EXTI->PR & EXTI_PR_PR1;
EXTI->PR = pr;

exti_serve_irq(pr, 1);

EXTI->PR = EXTI_PR_PR1;

OSAL_IRQ_EPILOGUE();
}
#endif
Expand All @@ -103,9 +105,10 @@ OSAL_IRQ_HANDLER(WB32_EXTI2_IRQ_VECTOR) {
OSAL_IRQ_PROLOGUE();

pr = EXTI->PR & EXTI_PR_PR2;
EXTI->PR = pr;

exti_serve_irq(pr, 2);

EXTI->PR = EXTI_PR_PR2;

OSAL_IRQ_EPILOGUE();
}
Expand All @@ -123,10 +126,11 @@ OSAL_IRQ_HANDLER(WB32_EXTI3_IRQ_VECTOR) {
OSAL_IRQ_PROLOGUE();

pr = EXTI->PR & EXTI_PR_PR3;
EXTI->PR = pr;

exti_serve_irq(pr, 3);

EXTI->PR = EXTI_PR_PR3;

OSAL_IRQ_EPILOGUE();
}
#endif
Expand All @@ -143,10 +147,11 @@ OSAL_IRQ_HANDLER(WB32_EXTI4_IRQ_VECTOR) {
OSAL_IRQ_PROLOGUE();

pr = EXTI->PR & EXTI_PR_PR4;
EXTI->PR = pr;

exti_serve_irq(pr, 4);

EXTI->PR = EXTI_PR_PR4;

OSAL_IRQ_EPILOGUE();
}
#endif
Expand All @@ -164,14 +169,16 @@ OSAL_IRQ_HANDLER(WB32_EXTI9_5_IRQ_VECTOR) {

pr = EXTI->PR & (EXTI_PR_PR5 | EXTI_PR_PR6 | EXTI_PR_PR7 |
EXTI_PR_PR8 | EXTI_PR_PR9);
EXTI->PR = pr;

exti_serve_irq(pr, 5);
exti_serve_irq(pr, 6);
exti_serve_irq(pr, 7);
exti_serve_irq(pr, 8);
exti_serve_irq(pr, 9);

EXTI->PR = EXTI_PR_PR5 | EXTI_PR_PR6 | EXTI_PR_PR7 |
EXTI_PR_PR8 | EXTI_PR_PR9;

OSAL_IRQ_EPILOGUE();
}
#endif
Expand All @@ -189,7 +196,6 @@ OSAL_IRQ_HANDLER(WB32_EXTI15_10_IRQ_VECTOR) {

pr = EXTI->PR & (EXTI_PR_PR10 | EXTI_PR_PR11 | EXTI_PR_PR12 |
EXTI_PR_PR13 | EXTI_PR_PR14 | EXTI_PR_PR15);
EXTI->PR = pr;

exti_serve_irq(pr, 10);
exti_serve_irq(pr, 11);
Expand All @@ -198,6 +204,9 @@ OSAL_IRQ_HANDLER(WB32_EXTI15_10_IRQ_VECTOR) {
exti_serve_irq(pr, 14);
exti_serve_irq(pr, 15);

EXTI->PR = EXTI_PR_PR10 | EXTI_PR_PR11 | EXTI_PR_PR12 |
EXTI_PR_PR13 | EXTI_PR_PR14 | EXTI_PR_PR15;

OSAL_IRQ_EPILOGUE();
}
#endif
Expand Down
8 changes: 4 additions & 4 deletions os/hal/ports/WB32/WB32FQ95xx/wb32_registry.h
Original file line number Diff line number Diff line change
Expand Up @@ -99,13 +99,13 @@
#define WB32_HAS_TIM3 TRUE
#define WB32_HAS_TIM4 TRUE

#define WB32_TIM1_IS_32BITS TRUE
#define WB32_TIM1_IS_32BITS FALSE
#define WB32_TIM1_CHANNELS 4
#define WB32_TIM2_IS_32BITS TRUE
#define WB32_TIM2_IS_32BITS FALSE
#define WB32_TIM2_CHANNELS 4
#define WB32_TIM3_IS_32BITS TRUE
#define WB32_TIM3_IS_32BITS FALSE
#define WB32_TIM3_CHANNELS 4
#define WB32_TIM4_IS_32BITS TRUE
#define WB32_TIM4_IS_32BITS FALSE
#define WB32_TIM4_CHANNELS 4

/* I2C attributes */
Expand Down
Loading