Lancaster University's (short term!) clone of mbed-src for micro:bit. This is a copy of the github branch https://github.com/lancaster-university/mbed-classic

Fork of mbed-src by mbed official

Files at this revision

API Documentation at this revision

Comitter:
mbed_official
Date:
Mon Jul 27 09:45:08 2015 +0100
Parent:
596:abfb2833c9f5
Child:
598:2d5fc5624619
Commit message:
Synchronized with git revision 9b9bab51e568581a2a896967a707d3b5aeda3f17

Full URL: https://github.com/mbedmicro/mbed/commit/9b9bab51e568581a2a896967a707d3b5aeda3f17/

Change us_ticker - one dual timer + one pwm timer

Changed in this revision

targets/cmsis/TARGET_WIZNET/TARGET_W7500x/TARGET_WIZwiki_W7500/W7500x.h Show annotated file Show diff for this revision Revisions of this file
targets/cmsis/TARGET_WIZNET/TARGET_W7500x/W7500x_conf.h Show annotated file Show diff for this revision Revisions of this file
targets/cmsis/TARGET_WIZNET/TARGET_W7500x/W7500x_dualtimer.c Show annotated file Show diff for this revision Revisions of this file
targets/cmsis/TARGET_WIZNET/TARGET_W7500x/W7500x_dualtimer.h Show annotated file Show diff for this revision Revisions of this file
targets/hal/TARGET_WIZNET/TARGET_W7500x/us_ticker.c Show annotated file Show diff for this revision Revisions of this file
--- a/targets/cmsis/TARGET_WIZNET/TARGET_W7500x/TARGET_WIZwiki_W7500/W7500x.h	Mon Jul 27 09:30:09 2015 +0100
+++ b/targets/cmsis/TARGET_WIZNET/TARGET_W7500x/TARGET_WIZwiki_W7500/W7500x.h	Mon Jul 27 09:45:08 2015 +0100
@@ -1010,19 +1010,30 @@
 /******************************************************************************/
 
 /*********************** Bit definition for dualtimer   ***********************/
-#define DUALTIMER_TimerControl_TimerDIsable (0x0ul << 7)
-#define DUALTIMER_TimerControl_TimerEnable  (0x1ul << 7)
-#define DUALTIMER_TimerControl_FreeRunning  (0x0ul << 6)
-#define DUALTIMER_TimerControl_Periodic     (0x1ul << 6)
-#define DUALTIMER_TimerControl_IntDisable   (0x0ul << 5)
-#define DUALTIMER_TimerControl_IntEnable    (0x1ul << 5)
-#define DUALTIMER_TimerControl_Pre_1        (0x0ul << 2)
-#define DUALTIMER_TimerControl_Pre_16       (0x1ul << 2)
-#define DUALTIMER_TimerControl_Pre_256      (0x2ul << 2)
-#define DUALTIMER_TimerControl_Size_16      (0x0ul << 1)
-#define DUALTIMER_TimerControl_Size_32      (0x1ul << 1)
-#define DUALTIMER_TimerControl_Wrapping     (0x0ul << 0)
-#define DUALTIMER_TimerControl_OneShot      (0x1ul << 0)
+#define DUALTIMER_TimerControl_TimerDIsable     0x0ul
+#define DUALTIMER_TimerControl_TimerEnable      0x1ul
+#define DUALTIMER_TimerControl_TimerEnable_Pos  7
+
+#define DUALTIMER_TimerControl_FreeRunning      0x0ul
+#define DUALTIMER_TimerControl_Periodic         0x1ul
+#define DUALTIMER_TimerControl_TimerMode_Pos    6
+
+#define DUALTIMER_TimerControl_IntDisable       0x0ul
+#define DUALTIMER_TimerControl_IntEnable        0x1ul
+#define DUALTIMER_TimerControl_IntEnable_Pos    5
+
+#define DUALTIMER_TimerControl_Pre_1            0x0ul
+#define DUALTIMER_TimerControl_Pre_16           0x1ul
+#define DUALTIMER_TimerControl_Pre_256          0x2ul
+#define DUALTIMER_TimerControl_Pre_Pos          2
+
+#define DUALTIMER_TimerControl_Size_16          0x0ul
+#define DUALTIMER_TimerControl_Size_32          0x1ul
+#define DUALTIMER_TimerControl_Size_Pos         1
+
+#define DUALTIMER_TimerControl_Wrapping         0x0ul
+#define DUALTIMER_TimerControl_OneShot          0x1ul
+#define DUALTIMER_TimerControl_OneShot_Pos      0
 
 /******************************************************************************/
 /*                                                                            */
--- a/targets/cmsis/TARGET_WIZNET/TARGET_W7500x/W7500x_conf.h	Mon Jul 27 09:30:09 2015 +0100
+++ b/targets/cmsis/TARGET_WIZNET/TARGET_W7500x/W7500x_conf.h	Mon Jul 27 09:45:08 2015 +0100
@@ -4,6 +4,7 @@
 #include "W7500x_uart.h"
 #include "W7500x_i2c.h"
 #include "W7500x_adc.h"
+#include "W7500x_dualtimer.h"
 #include "system_W7500x.h"
 
 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/targets/cmsis/TARGET_WIZNET/TARGET_W7500x/W7500x_dualtimer.c	Mon Jul 27 09:45:08 2015 +0100
@@ -0,0 +1,205 @@
+/**
+  ******************************************************************************
+  * @file    W7500x_stdPeriph_Driver/src/W7500x_dualtimer.c    
+  * @author  IOP Team
+  * @version v1.0.0
+  * @date    01-May-2015
+  * @brief   This file contains all the functions prototypes for the dualtimer 
+  *          firmware library.
+  ******************************************************************************
+  *
+  ******************************************************************************
+  */
+
+/* Includes -------------------------------------------*/
+#include "W7500x.h"
+
+void DUALTIMER_ClockEnable(DUALTIMER_TypeDef* DUALTIMERn)
+{
+    /* Check the parameters */
+    assert_param(IS_DUALTIMER_ALL_CH(DUALTIMERn));
+
+    if(DUALTIMERn == DUALTIMER0_0)
+        TIMCLKEN0_0 = DUALTIMER_Clock_Enable;
+    else if(DUALTIMERn == DUALTIMER0_1)
+        TIMCLKEN0_1 = DUALTIMER_Clock_Enable;
+    else if(DUALTIMERn == DUALTIMER1_0)
+        TIMCLKEN1_0 = DUALTIMER_Clock_Enable;
+    else if(DUALTIMERn == DUALTIMER1_1)
+        TIMCLKEN1_1 = DUALTIMER_Clock_Enable;
+}
+
+void DUALTIMER_ClockDisable(DUALTIMER_TypeDef* DUALTIMERn)
+{
+    /* Check the parameters */
+    assert_param(IS_DUALTIMER_ALL_CH(DUALTIMERn));
+
+    if(DUALTIMERn == DUALTIMER0_0)
+        TIMCLKEN0_0 = DUALTIMER_Clock_Disable;
+    else if(DUALTIMERn == DUALTIMER0_1)
+        TIMCLKEN0_1 = DUALTIMER_Clock_Disable;
+    else if(DUALTIMERn == DUALTIMER1_0)
+        TIMCLKEN1_0 = DUALTIMER_Clock_Disable;
+    else if(DUALTIMERn == DUALTIMER1_1)
+        TIMCLKEN1_1 = DUALTIMER_Clock_Disable;
+}
+
+void DUALTIMER_DeInit(DUALTIMER_TypeDef* DUALTIMERn)
+{
+    /* Check the parameters */
+    assert_param(IS_DUALTIMER_ALL_CH(DUALTIMERn));
+
+    DUALTIMER_Stop(DUALTIMERn);
+
+    DUALTIMERn->TimerLoad = 0x0;
+    DUALTIMERn->TimerControl = 0x20;
+    DUALTIMERn->TimerBGLoad = 0x0;
+}
+
+void DUALTIMER_Init(DUALTIMER_TypeDef* DUALTIMERn, DUALTIMER_InitTypDef* DUALTIMER_InitStruct)
+{
+    uint32_t tmp = 0;
+    /* Check the parameters */
+    assert_param(IS_DUALTIMER_ALL_CH(DUALTIMERn));
+    assert_param(IS_DUALTIMER_TimerMode(DUALTIMER_InitStruct->TimerControl_Mode));
+    assert_param(IS_DUALTIMER_TimerPre(DUALTIMER_InitStruct->TimerControl_Pre));
+    assert_param(IS_DUALTIMER_TimerSize(DUALTIMER_InitStruct->TimerControl_Size));
+    assert_param(IS_DUALTIMER_OneShot(DUALTIMER_InitStruct->TimerControl_OneShot));
+    
+    DUALTIMER_Stop(DUALTIMERn);
+
+    DUALTIMERn->TimerLoad = DUALTIMER_InitStruct->TimerLoad;
+
+    tmp = DUALTIMERn->TimerControl;
+    tmp |= (DUALTIMER_InitStruct->TimerControl_Mode << DUALTIMER_TimerControl_TimerMode_Pos);
+    tmp |= (DUALTIMER_InitStruct->TimerControl_Pre << DUALTIMER_TimerControl_Pre_Pos); 
+    tmp |= (DUALTIMER_InitStruct->TimerControl_Size << DUALTIMER_TimerControl_Size_Pos);
+    tmp |= (DUALTIMER_InitStruct->TimerControl_OneShot << DUALTIMER_TimerControl_OneShot_Pos);
+    //Reset values not used
+    tmp &= 0xEF;
+
+    DUALTIMERn->TimerControl = tmp;
+}
+
+void DUALTIMER_IntConfig(DUALTIMER_TypeDef* DUALTIMERn, FunctionalState state)
+{
+    /* Check the parameters */
+    assert_param(IS_DUALTIMER_ALL_CH(DUALTIMERn));
+
+    if(state == ENABLE)
+        DUALTIMERn->TimerControl |= (DUALTIMER_TimerControl_IntEnable << DUALTIMER_TimerControl_IntEnable_Pos);
+    else 
+        DUALTIMERn->TimerControl &= ~(DUALTIMER_TimerControl_IntEnable << DUALTIMER_TimerControl_IntEnable_Pos);
+}
+
+void DUALTIMER_IntClear(DUALTIMER_TypeDef* DUALTIMERn)
+{
+    /* Check the parameters */
+    assert_param(IS_DUALTIMER_ALL_CH(DUALTIMERn));
+
+    DUALTIMERn->TimerIntClr = DUALTIMER_Int_Clear;
+}
+
+ITStatus DUALTIMER_GetIntStatus(DUALTIMER_TypeDef* DUALTIMERn)
+{
+    /* Check the parameters */
+    assert_param(IS_DUALTIMER_ALL_CH(DUALTIMERn));
+
+    return (ITStatus)DUALTIMERn->TimerMIS;
+}
+
+FlagStatus DUALTIMER_GetIntEnableStatus(DUALTIMER_TypeDef* DUALTIMERn)
+{
+    /* Check the parameters */
+    assert_param(IS_DUALTIMER_ALL_CH(DUALTIMERn));
+
+    return (FlagStatus)((DUALTIMERn->TimerControl >> DUALTIMER_TimerControl_IntEnable_Pos) & 0x1);
+}
+
+void DUALTIMER_Start(DUALTIMER_TypeDef* DUALTIMERn)
+{
+    /* Check the parameters */
+    assert_param(IS_DUALTIMER_ALL_CH(DUALTIMERn));
+
+    DUALTIMERn->TimerControl |= (DUALTIMER_TimerControl_TimerEnable << DUALTIMER_TimerControl_TimerEnable_Pos);
+}
+
+void DUALTIMER_Stop(DUALTIMER_TypeDef* DUALTIMERn)
+{
+    /* Check the parameters */
+    assert_param(IS_DUALTIMER_ALL_CH(DUALTIMERn));
+
+    DUALTIMERn->TimerControl &= ~(DUALTIMER_TimerControl_TimerEnable << DUALTIMER_TimerControl_TimerEnable_Pos);
+}
+
+uint32_t DUALTIMER_GetTimerLoad(DUALTIMER_TypeDef* DUALTIMERn)
+{
+    /* Check the parameters */
+    assert_param(IS_DUALTIMER_ALL_CH(DUALTIMERn));
+
+    return DUALTIMERn->TimerLoad;
+}
+
+void DUALTIMER_SetTimerLoad(DUALTIMER_TypeDef* DUALTIMERn, uint32_t TimerLoad)
+{
+    /* Check the parameters */
+    assert_param(IS_DUALTIMER_ALL_CH(DUALTIMERn));
+
+    DUALTIMERn->TimerLoad = TimerLoad;
+}
+
+uint32_t DUALTIMER_GetTimerValue(DUALTIMER_TypeDef* DUALTIMERn)
+{
+    /* Check the parameters */
+    assert_param(IS_DUALTIMER_ALL_CH(DUALTIMERn));
+
+    return DUALTIMERn->TimerValue;
+}
+
+uint32_t DUALTIMER_GetTimerControl(DUALTIMER_TypeDef* DUALTIMERn)
+{
+    /* Check the parameters */
+    assert_param(IS_DUALTIMER_ALL_CH(DUALTIMERn));
+
+    return DUALTIMERn->TimerControl;
+}
+
+void DUALTIMER_SetTimerControl(DUALTIMER_TypeDef* DUALTIMERn, uint32_t TimerControl)
+{
+    /* Check the parameters */
+    assert_param(IS_DUALTIMER_ALL_CH(DUALTIMERn));
+
+    DUALTIMERn->TimerControl = TimerControl;
+}
+
+uint32_t DUALTIMER_GetTimerRIS(DUALTIMER_TypeDef* DUALTIMERn)
+{
+    /* Check the parameters */
+    assert_param(IS_DUALTIMER_ALL_CH(DUALTIMERn));
+
+    return DUALTIMERn->TimerRIS;
+}
+
+uint32_t DUALTIMER_GetTimerMIS(DUALTIMER_TypeDef* DUALTIMERn)
+{
+    /* Check the parameters */
+    assert_param(IS_DUALTIMER_ALL_CH(DUALTIMERn));
+
+    return DUALTIMERn->TimerMIS;
+}
+
+uint32_t DUALTIMER_GetTimerBGLoad(DUALTIMER_TypeDef* DUALTIMERn)
+{
+    /* Check the parameters */
+    assert_param(IS_DUALTIMER_ALL_CH(DUALTIMERn));
+
+    return DUALTIMERn->TimerBGLoad;
+}
+
+void DUALTIMER_SetTimerBGLoad(DUALTIMER_TypeDef* DUALTIMERn, uint32_t TimerBGLoad)
+{
+    /* Check the parameters */
+    assert_param(IS_DUALTIMER_ALL_CH(DUALTIMERn));
+
+    DUALTIMERn->TimerBGLoad = TimerBGLoad;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/targets/cmsis/TARGET_WIZNET/TARGET_W7500x/W7500x_dualtimer.h	Mon Jul 27 09:45:08 2015 +0100
@@ -0,0 +1,96 @@
+/**
+  ******************************************************************************
+  * @file    W7500x_stdPeriph_Driver/inc/W7500x_dualtimer.h
+  * @author  IOP Team
+  * @version V1.0.0
+  * @date    01-May-2015
+  * @brief   This file contains all the functions prototypes for the dualtimer 
+  *          firmware library.
+  ******************************************************************************
+  *
+  ******************************************************************************
+  */
+
+/* Define to prevent recursive inclusion -------------------------------------*/
+#ifndef __W7500X_DUALTIMER_H
+#define __W7500X_DUALTIMER_H
+
+#ifdef __cplusplus
+ extern "C" {
+#endif
+
+/* Includes ------------------------------------------------------------------*/
+#include "W7500x.h"
+
+/**********************************************************************************************/
+/**********************************************************************************************/
+//                This structure and define must be in W7500x.h
+/**********************************************************************************************/
+/**********************************************************************************************/
+
+typedef struct
+{
+    uint32_t TimerLoad;
+    uint32_t TimerControl_Mode;
+    uint32_t TimerControl_Pre;
+    uint32_t TimerControl_Size;
+    uint32_t TimerControl_OneShot;    
+}DUALTIMER_InitTypDef;
+
+
+#define IS_DUALTIMER_TimerMode(MODE)        (MODE <= 1) 
+#define IS_DUALTIMER_TimerPre(PREE)         (PRE <= 2) 
+#define IS_DUALTIMER_TimerSize(SIZE)        (SIZE <= 1) 
+#define IS_DUALTIMER_OneShot(ONESHOT)       (ONESHOT <= 1)
+
+
+
+
+
+
+#define DUALTIMER_Int_Clear                 0x1ul
+
+#define DUALTIMER_Clock_Enable              0x1ul
+#define DUALTIMER_Clock_Disable             ~DUALTIMER_Clock_Enable
+
+
+#define IS_DUALTIMER_ALL_CH(CH)            ((CH == DUALTIMER0_0) || \
+                                            (CH == DUALTIMER0_1) || \
+                                            (CH == DUALTIMER1_0) || \
+                                            (CH == DUALTIMER1_1)) 
+
+
+
+void DUALTIMER_ClockEnable(DUALTIMER_TypeDef* DUALTIMERn);
+void DUALTIMER_ClockDisable(DUALTIMER_TypeDef* DUALTIMERn);
+void DUALTIMER_DeInit(DUALTIMER_TypeDef* DUALTIMERn);
+void DUALTIMER_Init(DUALTIMER_TypeDef* DUALTIMERn, DUALTIMER_InitTypDef* DUALTIMER_InitStruct);
+void DUALTIMER_IntConfig(DUALTIMER_TypeDef* DUALTIMERn, FunctionalState state);
+void DUALTIMER_IntClear(DUALTIMER_TypeDef* DUALTIMERn);
+ITStatus DUALTIMER_GetIntStatus(DUALTIMER_TypeDef* DUALTIMERn);
+FlagStatus DUALTIMER_GetIntEnableStatus(DUALTIMER_TypeDef* DUALTIMERn);
+void DUALTIMER_Start(DUALTIMER_TypeDef* DUALTIMERn);
+void DUALTIMER_Stop(DUALTIMER_TypeDef* DUALTIMERn);
+uint32_t DUALTIMER_GetTimerLoad(DUALTIMER_TypeDef* DUALTIMERn);
+void DUALTIMER_SetTimerLoad(DUALTIMER_TypeDef* DUALTIMERn, uint32_t TimerLoad);
+uint32_t DUALTIMER_GetTimerValue(DUALTIMER_TypeDef* DUALTIMERn);
+uint32_t DUALTIMER_GetTimerControl(DUALTIMER_TypeDef* DUALTIMERn);
+void DUALTIMER_SetTimerControl(DUALTIMER_TypeDef* DUALTIMERn, uint32_t TimerControl);
+uint32_t DUALTIMER_GetTimerRIS(DUALTIMER_TypeDef* DUALTIMERn);
+uint32_t DUALTIMER_GetTimerMIS(DUALTIMER_TypeDef* DUALTIMERn);
+uint32_t DUALTIMER_GetTimerBGLoad(DUALTIMER_TypeDef* DUALTIMERn);
+void DUALTIMER_SetTimerBGLoad(DUALTIMER_TypeDef* DUALTIMERn, uint32_t TimerBGLoad);
+
+
+
+//======================= Interrupt handler ==============================
+//void DUALTIMER0_Handler();
+//void DUALTIMER1_Handler();
+
+
+#ifdef __cplusplus
+ }
+#endif
+
+
+#endif //__W7500X_DUALTIMER_H
--- 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);
 }