Tux Leon / mbed-dev

Fork of mbed-dev by mbed official

Revision:
178:79309dc6340a
Parent:
177:d650f5d4c87a
--- a/targets/TARGET_Realtek/TARGET_AMEBA/us_ticker.c	Wed Nov 08 13:50:44 2017 +0000
+++ b/targets/TARGET_Realtek/TARGET_AMEBA/us_ticker.c	Thu Nov 23 11:57:25 2017 +0000
@@ -19,7 +19,6 @@
 #include "us_ticker_api.h"
 #include "PeripheralNames.h"
 
-#define TICK_READ_FROM_CPU  0   // 1: read tick from CPU, 0: read tick from G-Timer
 #define SYS_TIM_ID          1   // the G-Timer ID for System
 #define APP_TIM_ID          2   // the G-Timer ID for Application
 
@@ -33,8 +32,6 @@
  *
  * Define the following macros to convert between TICK and US.
  */
-#define MS_TO_TICK(x)       (uint64_t)(((x)*327) / 10)
-#define US_TO_TICK(x)       (uint64_t)(((x)*32) / 1000)
 #define TICK_TO_US(x)       (uint64_t)(((x)/2) * 61 + ((x)%2) * TIMER_TICK_US)
 
 static int us_ticker_inited = 0;
@@ -73,49 +70,45 @@
     TimerAdapter.TimerMode = USER_DEFINED;
 
     HalTimerOp.HalTimerInit((void *) &TimerAdapter);
-
-    DBG_TIMER_INFO("%s: Timer_Id=%d\n", __FUNCTION__, APP_TIM_ID);
 }
 
 uint32_t us_ticker_read(void)
 {
     uint32_t tick_cnt;
-    uint64_t tick_us;
 
     if (!us_ticker_inited) {
         us_ticker_init();
     }
 
     tick_cnt = HalTimerOp.HalTimerReadCount(SYS_TIM_ID);
-    tick_us = TICK_TO_US(0xFFFFFFFFUL - tick_cnt);
-
-    return ((uint32_t)tick_us);  //return ticker value in micro-seconds (us)
+    return (uint32_t)TICK_TO_US(0xFFFFFFFFUL - tick_cnt);
 }
 
 void us_ticker_set_interrupt(timestamp_t timestamp)
 {
     uint32_t time_cur;
-    uint32_t time_cnt;
 
-    HalTimerOp.HalTimerDis((u32)TimerAdapter.TimerId);
     time_cur = us_ticker_read();
     if (timestamp > time_cur + TIMER_TICK_US) {
-        time_cnt = timestamp - time_cur;
+        TimerAdapter.TimerLoadValueUs = timestamp - time_cur;
     } else {
-        HalTimerOpExt.HalTimerReLoad((u32)TimerAdapter.TimerId, 0xffffffff);
-        HalTimerOp.HalTimerEn((u32)TimerAdapter.TimerId);
-        us_ticker_fire_interrupt();
-        return;
+        TimerAdapter.TimerLoadValueUs = TIMER_TICK_US;
     }
 
-    TimerAdapter.TimerLoadValueUs = MAX(MS_TO_TICK(time_cnt/1000) + US_TO_TICK(time_cnt%1000), 1);
+    HalTimerOp.HalTimerDis((u32)TimerAdapter.TimerId);
     HalTimerOpExt.HalTimerReLoad((u32)TimerAdapter.TimerId, TimerAdapter.TimerLoadValueUs);
+    HalTimerOpExt.HalTimerSync(SYS_TIM_ID);
     HalTimerOp.HalTimerEn((u32)TimerAdapter.TimerId);
 }
 
 void us_ticker_fire_interrupt(void)
 {
-    NVIC_SetPendingIRQ(TIMER2_7_IRQ);
+    TimerAdapter.TimerLoadValueUs = TIMER_TICK_US;
+
+    HalTimerOp.HalTimerDis((u32)TimerAdapter.TimerId);
+    HalTimerOpExt.HalTimerReLoad((u32)TimerAdapter.TimerId, TimerAdapter.TimerLoadValueUs);
+    HalTimerOpExt.HalTimerSync(SYS_TIM_ID);
+    HalTimerOp.HalTimerEn((u32)TimerAdapter.TimerId);
 }
 
 void us_ticker_disable_interrupt(void)
@@ -125,5 +118,4 @@
 
 void us_ticker_clear_interrupt(void)
 {
-    HalTimerOp.HalTimerIrqClear((u32)TimerAdapter.TimerId);
 }