I don't know

Dependents:   MX106-finaltest

Fork of mbed-src by mbed official

Revision:
597:47bdd20c4d41
Parent:
576:99a3d3d9c43f
Child:
619:034e698bc035
--- a/targets/hal/TARGET_WIZNET/TARGET_W7500x/us_ticker.c	Mon Jul 27 09:30:09 2015 +0100
+++ b/targets/hal/TARGET_WIZNET/TARGET_W7500x/us_ticker.c	Mon Jul 27 09:45:08 2015 +0100
@@ -33,9 +33,12 @@
 #include "PeripheralNames.h"
 #include "system_W7500x.h"
 
+#define TIMER_0         DUALTIMER0_0
+#define TIMER_1         PWM_CH1
+#define TIMER_IRQn      DUALTIMER0_IRQn
 
-static PWM_TimerModeInitTypeDef TimMasterHandle_CH3;
-static PWM_TimerModeInitTypeDef TimMasterHandle_CH2;
+static PWM_TimerModeInitTypeDef TimerInitType;
+static DUALTIMER_InitTypDef TimerHandler;
 
 static int us_ticker_inited = 0;
 
@@ -43,17 +46,12 @@
 #ifdef __cplusplus
 extern "C"{
 #endif
-void PWM2_Handler(void)
+
+void DUALTIMER0_Handler(void)
 {
-    uint32_t IntFlag = 0;
-
-    IntFlag = PWM_CHn_GetIntFlagStatus(PWM_CH2);
-
-    /* If overflow interrupt is occurred */
-    if( (IntFlag & PWM_CHn_IER_OI_Msk) != 0 )
+   if(DUALTIMER_GetIntStatus(DUALTIMER0_0))
     {
-        /* Clear overflow interrupt */
-        PWM_CH2_ClearOverflowInt();
+        DUALTIMER_IntClear(DUALTIMER0_0);
         us_ticker_irq_handler();
     }
 }
@@ -68,66 +66,69 @@
     us_ticker_inited = 1;
 
     SystemCoreClockUpdate();
-    TimMasterHandle_CH3.PWM_CHn_PR = (GetSystemClock() / 1000000) -1;
-    TimMasterHandle_CH3.PWM_CHn_LR = 0xFFFFFFFF;
-    TimMasterHandle_CH3.PWM_CHn_PDMR = 1;
+    TimerInitType.PWM_CHn_PR = (GetSystemClock() / 1000000) -1;
+    TimerInitType.PWM_CHn_LR = 0xFFFFFFFF;
+    TimerInitType.PWM_CHn_PDMR = 1;
 
-    PWM_TimerModeInit(PWM_CH3, &TimMasterHandle_CH3);
-    PWM_CHn_Start(PWM_CH3);
+    PWM_TimerModeInit(TIMER_1, &TimerInitType);
+    PWM_CHn_Start(TIMER_1);
 }
 
 
 uint32_t us_ticker_read()
 {
     if (!us_ticker_inited) us_ticker_init();
-
-    return (PWM_CH3->TCR);
+    return (TIMER_1->TCR);
 }
 
 
 void us_ticker_set_interrupt(timestamp_t timestamp)
 {
     int32_t dev = 0;
+    
     if (!us_ticker_inited)
     {
         us_ticker_init();
     }
     
-    dev = (int32_t)(timestamp - (us_ticker_read() + 150));
+    dev = (int32_t)(timestamp - us_ticker_read());
+    dev = dev * ((GetSystemClock() / 1000000) / 16);     
 
     if(dev <= 0)
     {
         us_ticker_irq_handler();
-    	return;
+        return;
     }
-
-    PWM_CHn_Stop(PWM_CH2);
-
-    SystemCoreClockUpdate();
-    TimMasterHandle_CH2.PWM_CHn_PR = (GetSystemClock() / 1000000) -1;
-    TimMasterHandle_CH2.PWM_CHn_LR = dev;
+    
+    DUALTIMER_ClockEnable(TIMER_0);
+    DUALTIMER_Stop(TIMER_0);
+    
+    TimerHandler.TimerControl_Mode       = DUALTIMER_TimerControl_Periodic;
+    TimerHandler.TimerControl_OneShot    = DUALTIMER_TimerControl_OneShot;
+    TimerHandler.TimerControl_Pre        = DUALTIMER_TimerControl_Pre_16;
+    TimerHandler.TimerControl_Size       = DUALTIMER_TimerControl_Size_32;
+    
+    TimerHandler.TimerLoad      = (uint32_t)dev;
+    
+    DUALTIMER_Init(TIMER_0, &TimerHandler);
+    
+    DUALTIMER_IntConfig(TIMER_0, ENABLE);
+    
+    NVIC_EnableIRQ(TIMER_IRQn);
+    
+    DUALTIMER_Start(TIMER_0);
+    
 
-    TimMasterHandle_CH2.PWM_CHn_UDMR = 0;
-    TimMasterHandle_CH2.PWM_CHn_PDMR = 0;
-
-    NVIC_EnableIRQ(PWM2_IRQn);
-
-    PWM_CHn_IntConfig(PWM_CH2, PWM_CHn_IER_OIE, ENABLE);
-    PWM_IntConfig(PWM_CH2, ENABLE);
-    PWM_TimerModeInit(PWM_CH2, &TimMasterHandle_CH2);
-
-    PWM_CHn_Start(PWM_CH2);
 }
 
 void us_ticker_disable_interrupt(void)
 {
-    NVIC_DisableIRQ(PWM2_IRQn);
-
-    PWM_CHn_IntConfig(PWM_CH2, PWM_CHn_IER_OIE, DISABLE);
-    PWM_IntConfig(PWM_CH2, DISABLE);
+    NVIC_DisableIRQ(TIMER_IRQn);
+    
+    DUALTIMER_IntConfig(TIMER_0, DISABLE);
 }
 
 void us_ticker_clear_interrupt(void)
 {
-    PWM_CHn_ClearInt(PWM_CH2, PWM_CHn_IER_OIE);
+    DUALTIMER_IntClear(TIMER_0);
 }