Skip to content

Commit bf3d68e

Browse files
committed
Update HAL code to resolve ticker lockup issue
1 parent 07646db commit bf3d68e

File tree

5 files changed

+12
-7
lines changed

5 files changed

+12
-7
lines changed

targets/TARGET_Realtek/TARGET_AMEBA/TARGET_RTL8195A/device/rtl8195a_timer.h

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -94,6 +94,11 @@ HalTimerReadCountRtl8195a_Patch(
9494
IN u32 TimerId
9595
);
9696

97+
VOID
98+
HalTimerSync(
99+
IN u32 TimerId
100+
);
101+
97102
VOID
98103
HalTimerIrqEnRtl8195a(
99104
IN u32 TimerId

targets/TARGET_Realtek/TARGET_AMEBA/sdk/soc/realtek/8195a/fwlib/hal_timer.h

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -53,9 +53,10 @@ typedef struct _HAL_TIMER_OP_ {
5353
}HAL_TIMER_OP, *PHAL_TIMER_OP;
5454

5555
typedef struct _HAL_TIMER_OP_EXT_ {
56-
PHAL_TIMER_OP phal_timer_op_rom;
57-
VOID (*HalTimerIrqEn)(u32 TimerId);
58-
VOID (*HalTimerReLoad)(u32 TimerId, u32 LoadUs);
56+
PHAL_TIMER_OP phal_timer_op_rom;
57+
VOID (*HalTimerIrqEn)(u32 TimerId);
58+
VOID (*HalTimerReLoad)(u32 TimerId, u32 LoadUs);
59+
VOID (*HalTimerSync)(u32 TimerId);
5960
}HAL_TIMER_OP_EXT, *PHAL_TIMER_OP_EXT;
6061

6162
#ifdef CONFIG_TIMER_MODULE

targets/TARGET_Realtek/TARGET_AMEBA/us_ticker.c

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -75,16 +75,13 @@ void us_ticker_init(void)
7575
uint32_t us_ticker_read(void)
7676
{
7777
uint32_t tick_cnt;
78-
uint64_t tick_us;
7978

8079
if (!us_ticker_inited) {
8180
us_ticker_init();
8281
}
8382

8483
tick_cnt = HalTimerOp.HalTimerReadCount(SYS_TIM_ID);
85-
tick_us = TICK_TO_US(0xFFFFFFFFUL - tick_cnt);
86-
87-
return ((uint32_t)tick_us); //return ticker value in micro-seconds (us)
84+
return (uint32_t)TICK_TO_US(0xFFFFFFFFUL - tick_cnt);
8885
}
8986

9087
void us_ticker_set_interrupt(timestamp_t timestamp)
@@ -100,6 +97,7 @@ void us_ticker_set_interrupt(timestamp_t timestamp)
10097

10198
HalTimerOp.HalTimerDis((u32)TimerAdapter.TimerId);
10299
HalTimerOpExt.HalTimerReLoad((u32)TimerAdapter.TimerId, TimerAdapter.TimerLoadValueUs);
100+
HalTimerOpExt.HalTimerSync(SYS_TIM_ID);
103101
HalTimerOp.HalTimerEn((u32)TimerAdapter.TimerId);
104102
}
105103

@@ -109,6 +107,7 @@ void us_ticker_fire_interrupt(void)
109107

110108
HalTimerOp.HalTimerDis((u32)TimerAdapter.TimerId);
111109
HalTimerOpExt.HalTimerReLoad((u32)TimerAdapter.TimerId, TimerAdapter.TimerLoadValueUs);
110+
HalTimerOpExt.HalTimerSync(SYS_TIM_ID);
112111
HalTimerOp.HalTimerEn((u32)TimerAdapter.TimerId);
113112
}
114113

0 commit comments

Comments
 (0)