From cf868024b25eb4ef30bc22f0765c786bcaa61fcb Mon Sep 17 00:00:00 2001 From: hjjeon0608 Date: Thu, 9 Jul 2015 09:23:43 +0900 Subject: [PATCH 1/5] Change ticker used by two PWM timer to used by one PWM timer and one dualtimer. So I added dualtimer driver and header and I bug fix define in W7500x.h. --- .../TARGET_WIZwiki_W7500/W7500x.h | 37 ++-- .../TARGET_WIZNET/TARGET_W7500x/W7500x_conf.h | 1 + .../TARGET_W7500x/W7500x_dualtimer.c | 205 ++++++++++++++++++ .../TARGET_W7500x/W7500x_dualtimer.h | 96 ++++++++ .../TARGET_WIZNET/TARGET_W7500x/us_ticker.c | 113 +++++++--- 5 files changed, 404 insertions(+), 48 deletions(-) create mode 100644 libraries/mbed/targets/cmsis/TARGET_WIZNET/TARGET_W7500x/W7500x_dualtimer.c create mode 100644 libraries/mbed/targets/cmsis/TARGET_WIZNET/TARGET_W7500x/W7500x_dualtimer.h diff --git a/libraries/mbed/targets/cmsis/TARGET_WIZNET/TARGET_W7500x/TARGET_WIZwiki_W7500/W7500x.h b/libraries/mbed/targets/cmsis/TARGET_WIZNET/TARGET_W7500x/TARGET_WIZwiki_W7500/W7500x.h index e710290575..4adb010f60 100644 --- a/libraries/mbed/targets/cmsis/TARGET_WIZNET/TARGET_W7500x/TARGET_WIZwiki_W7500/W7500x.h +++ b/libraries/mbed/targets/cmsis/TARGET_WIZNET/TARGET_W7500x/TARGET_WIZwiki_W7500/W7500x.h @@ -1010,19 +1010,30 @@ typedef struct /******************************************************************************/ /*********************** 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 /******************************************************************************/ /* */ diff --git a/libraries/mbed/targets/cmsis/TARGET_WIZNET/TARGET_W7500x/W7500x_conf.h b/libraries/mbed/targets/cmsis/TARGET_WIZNET/TARGET_W7500x/W7500x_conf.h index cbc6929c1a..871a6db3e6 100644 --- a/libraries/mbed/targets/cmsis/TARGET_WIZNET/TARGET_W7500x/W7500x_conf.h +++ b/libraries/mbed/targets/cmsis/TARGET_WIZNET/TARGET_W7500x/W7500x_conf.h @@ -4,6 +4,7 @@ #include "W7500x_uart.h" #include "W7500x_i2c.h" #include "W7500x_adc.h" +#include "W7500x_dualtimer.h" #include "system_W7500x.h" diff --git a/libraries/mbed/targets/cmsis/TARGET_WIZNET/TARGET_W7500x/W7500x_dualtimer.c b/libraries/mbed/targets/cmsis/TARGET_WIZNET/TARGET_W7500x/W7500x_dualtimer.c new file mode 100644 index 0000000000..620e2980de --- /dev/null +++ b/libraries/mbed/targets/cmsis/TARGET_WIZNET/TARGET_W7500x/W7500x_dualtimer.c @@ -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, DULATIMER_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; +} diff --git a/libraries/mbed/targets/cmsis/TARGET_WIZNET/TARGET_W7500x/W7500x_dualtimer.h b/libraries/mbed/targets/cmsis/TARGET_WIZNET/TARGET_W7500x/W7500x_dualtimer.h new file mode 100644 index 0000000000..6751e80122 --- /dev/null +++ b/libraries/mbed/targets/cmsis/TARGET_WIZNET/TARGET_W7500x/W7500x_dualtimer.h @@ -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; +}DULATIMER_InitTypDef; + + +#define IS_DULATIMER_TimerMode(MODE) (MODE <= 1) +#define IS_DULATIMER_TimerPre(PREE) (PRE <= 2) +#define IS_DULATIMER_TimerSize(SIZE) (SIZE <= 1) +#define IS_DULATIMER_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, DULATIMER_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 diff --git a/libraries/mbed/targets/hal/TARGET_WIZNET/TARGET_W7500x/us_ticker.c b/libraries/mbed/targets/hal/TARGET_WIZNET/TARGET_W7500x/us_ticker.c index 80911a4865..ceb121dc4b 100644 --- a/libraries/mbed/targets/hal/TARGET_WIZNET/TARGET_W7500x/us_ticker.c +++ b/libraries/mbed/targets/hal/TARGET_WIZNET/TARGET_W7500x/us_ticker.c @@ -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 DULATIMER_InitTypDef TimerHandler; static int us_ticker_inited = 0; @@ -43,20 +46,35 @@ static int us_ticker_inited = 0; #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(); } + + if(DUALTIMER_GetIntStatus(DUALTIMER0_1)) + { + DUALTIMER_IntClear(DUALTIMER0_1); + } } + +//void PWM2_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 ) +// { +// /* Clear overflow interrupt */ +// PWM_CH2_ClearOverflowInt(); +// us_ticker_irq_handler(); +// } +//} #ifdef __cplusplus } @@ -68,66 +86,91 @@ void us_ticker_init(void) 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() + 160)); + dev = dev * 1.27; + if(dev <= 0) { us_ticker_irq_handler(); return; } + + 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); + - PWM_CHn_Stop(PWM_CH2); +// PWM_CHn_Stop(PWM_CH2); - SystemCoreClockUpdate(); - TimMasterHandle_CH2.PWM_CHn_PR = (GetSystemClock() / 1000000) -1; - TimMasterHandle_CH2.PWM_CHn_LR = dev; +// SystemCoreClockUpdate(); +// TimMasterHandle_CH2.PWM_CHn_PR = (GetSystemClock() / 1000000) -1; +// TimMasterHandle_CH2.PWM_CHn_LR = dev; - TimMasterHandle_CH2.PWM_CHn_UDMR = 0; - TimMasterHandle_CH2.PWM_CHn_PDMR = 0; +// TimMasterHandle_CH2.PWM_CHn_UDMR = 0; +// TimMasterHandle_CH2.PWM_CHn_PDMR = 0; - NVIC_EnableIRQ(PWM2_IRQn); +// 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_IntConfig(PWM_CH2, PWM_CHn_IER_OIE, ENABLE); +// PWM_IntConfig(PWM_CH2, ENABLE); +// PWM_TimerModeInit(PWM_CH2, &TimMasterHandle_CH2); - PWM_CHn_Start(PWM_CH2); +// PWM_CHn_Start(PWM_CH2); } void us_ticker_disable_interrupt(void) { - NVIC_DisableIRQ(PWM2_IRQn); + NVIC_DisableIRQ(TIMER_IRQn); + + DUALTIMER_IntConfig(TIMER_0, DISABLE); + + //NVIC_DisableIRQ(PWM2_IRQn); - PWM_CHn_IntConfig(PWM_CH2, PWM_CHn_IER_OIE, DISABLE); - PWM_IntConfig(PWM_CH2, DISABLE); +// PWM_CHn_IntConfig(PWM_CH2, PWM_CHn_IER_OIE, DISABLE); +// PWM_IntConfig(PWM_CH2, DISABLE); } void us_ticker_clear_interrupt(void) { - PWM_CHn_ClearInt(PWM_CH2, PWM_CHn_IER_OIE); + DUALTIMER_IntClear(TIMER_0); + //PWM_CHn_ClearInt(PWM_CH2, PWM_CHn_IER_OIE); } From 28c307665f95154290d21cb03ade38466c6a789a Mon Sep 17 00:00:00 2001 From: hjjeon0608 Date: Tue, 14 Jul 2015 08:27:31 +0900 Subject: [PATCH 2/5] Deleted uncommented code. Deleted checking interrupt status code. --- .../TARGET_WIZNET/TARGET_W7500x/us_ticker.c | 46 +------------------ 1 file changed, 2 insertions(+), 44 deletions(-) diff --git a/libraries/mbed/targets/hal/TARGET_WIZNET/TARGET_W7500x/us_ticker.c b/libraries/mbed/targets/hal/TARGET_WIZNET/TARGET_W7500x/us_ticker.c index ceb121dc4b..0b2d292356 100644 --- a/libraries/mbed/targets/hal/TARGET_WIZNET/TARGET_W7500x/us_ticker.c +++ b/libraries/mbed/targets/hal/TARGET_WIZNET/TARGET_W7500x/us_ticker.c @@ -49,32 +49,12 @@ extern "C"{ void DUALTIMER0_Handler(void) { - if(DUALTIMER_GetIntStatus(DUALTIMER0_0)) + if(DUALTIMER_GetIntStatus(DUALTIMER0_0)) { DUALTIMER_IntClear(DUALTIMER0_0); us_ticker_irq_handler(); } - - if(DUALTIMER_GetIntStatus(DUALTIMER0_1)) - { - DUALTIMER_IntClear(DUALTIMER0_1); - } } - -//void PWM2_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 ) -// { -// /* Clear overflow interrupt */ -// PWM_CH2_ClearOverflowInt(); -// us_ticker_irq_handler(); -// } -//} #ifdef __cplusplus } @@ -117,7 +97,7 @@ void us_ticker_set_interrupt(timestamp_t timestamp) if(dev <= 0) { us_ticker_irq_handler(); - return; + return; } DUALTIMER_ClockEnable(TIMER_0); @@ -139,22 +119,6 @@ void us_ticker_set_interrupt(timestamp_t timestamp) DUALTIMER_Start(TIMER_0); -// PWM_CHn_Stop(PWM_CH2); - -// SystemCoreClockUpdate(); -// TimMasterHandle_CH2.PWM_CHn_PR = (GetSystemClock() / 1000000) -1; -// TimMasterHandle_CH2.PWM_CHn_LR = dev; - -// 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) @@ -162,15 +126,9 @@ void us_ticker_disable_interrupt(void) NVIC_DisableIRQ(TIMER_IRQn); DUALTIMER_IntConfig(TIMER_0, DISABLE); - - //NVIC_DisableIRQ(PWM2_IRQn); - -// PWM_CHn_IntConfig(PWM_CH2, PWM_CHn_IER_OIE, DISABLE); -// PWM_IntConfig(PWM_CH2, DISABLE); } void us_ticker_clear_interrupt(void) { DUALTIMER_IntClear(TIMER_0); - //PWM_CHn_ClearInt(PWM_CH2, PWM_CHn_IER_OIE); } From 1479d07a5c06ddecde6aa6e91bcf051e1992f93e Mon Sep 17 00:00:00 2001 From: hjjeon0608 Date: Fri, 17 Jul 2015 11:01:48 +0900 Subject: [PATCH 3/5] Change hardcoded prescale setting --- .../mbed/targets/hal/TARGET_WIZNET/TARGET_W7500x/us_ticker.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/libraries/mbed/targets/hal/TARGET_WIZNET/TARGET_W7500x/us_ticker.c b/libraries/mbed/targets/hal/TARGET_WIZNET/TARGET_W7500x/us_ticker.c index 0b2d292356..a11cf58074 100644 --- a/libraries/mbed/targets/hal/TARGET_WIZNET/TARGET_W7500x/us_ticker.c +++ b/libraries/mbed/targets/hal/TARGET_WIZNET/TARGET_W7500x/us_ticker.c @@ -92,8 +92,8 @@ void us_ticker_set_interrupt(timestamp_t timestamp) } dev = (int32_t)(timestamp - (us_ticker_read() + 160)); - dev = dev * 1.27; - + dev = dev * ((GetSystemClock() / 1000000) / 16); + if(dev <= 0) { us_ticker_irq_handler(); From 55dc1fd0776149becf820d85eefe832fbcbbaf03 Mon Sep 17 00:00:00 2001 From: hjjeon0608 Date: Mon, 20 Jul 2015 14:54:56 +0900 Subject: [PATCH 4/5] Deleted constant in calculate interrupt timing. --- .../mbed/targets/hal/TARGET_WIZNET/TARGET_W7500x/us_ticker.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libraries/mbed/targets/hal/TARGET_WIZNET/TARGET_W7500x/us_ticker.c b/libraries/mbed/targets/hal/TARGET_WIZNET/TARGET_W7500x/us_ticker.c index a11cf58074..e3ad72c675 100644 --- a/libraries/mbed/targets/hal/TARGET_WIZNET/TARGET_W7500x/us_ticker.c +++ b/libraries/mbed/targets/hal/TARGET_WIZNET/TARGET_W7500x/us_ticker.c @@ -91,7 +91,7 @@ void us_ticker_set_interrupt(timestamp_t timestamp) us_ticker_init(); } - dev = (int32_t)(timestamp - (us_ticker_read() + 160)); + dev = (int32_t)(timestamp - us_ticker_read()); dev = dev * ((GetSystemClock() / 1000000) / 16); if(dev <= 0) From 226d534d85d7361fb891844ff2ec6f86d773f30b Mon Sep 17 00:00:00 2001 From: hjjeon0608 Date: Fri, 24 Jul 2015 14:31:48 +0900 Subject: [PATCH 5/5] I have rectified typos DULA -> DUAL --- .../TARGET_WIZNET/TARGET_W7500x/W7500x_dualtimer.c | 2 +- .../TARGET_WIZNET/TARGET_W7500x/W7500x_dualtimer.h | 12 ++++++------ .../hal/TARGET_WIZNET/TARGET_W7500x/us_ticker.c | 2 +- 3 files changed, 8 insertions(+), 8 deletions(-) diff --git a/libraries/mbed/targets/cmsis/TARGET_WIZNET/TARGET_W7500x/W7500x_dualtimer.c b/libraries/mbed/targets/cmsis/TARGET_WIZNET/TARGET_W7500x/W7500x_dualtimer.c index 620e2980de..64eec8836b 100644 --- a/libraries/mbed/targets/cmsis/TARGET_WIZNET/TARGET_W7500x/W7500x_dualtimer.c +++ b/libraries/mbed/targets/cmsis/TARGET_WIZNET/TARGET_W7500x/W7500x_dualtimer.c @@ -56,7 +56,7 @@ void DUALTIMER_DeInit(DUALTIMER_TypeDef* DUALTIMERn) DUALTIMERn->TimerBGLoad = 0x0; } -void DUALTIMER_Init(DUALTIMER_TypeDef* DUALTIMERn, DULATIMER_InitTypDef* DUALTIMER_InitStruct) +void DUALTIMER_Init(DUALTIMER_TypeDef* DUALTIMERn, DUALTIMER_InitTypDef* DUALTIMER_InitStruct) { uint32_t tmp = 0; /* Check the parameters */ diff --git a/libraries/mbed/targets/cmsis/TARGET_WIZNET/TARGET_W7500x/W7500x_dualtimer.h b/libraries/mbed/targets/cmsis/TARGET_WIZNET/TARGET_W7500x/W7500x_dualtimer.h index 6751e80122..014f3fd635 100644 --- a/libraries/mbed/targets/cmsis/TARGET_WIZNET/TARGET_W7500x/W7500x_dualtimer.h +++ b/libraries/mbed/targets/cmsis/TARGET_WIZNET/TARGET_W7500x/W7500x_dualtimer.h @@ -35,13 +35,13 @@ typedef struct uint32_t TimerControl_Pre; uint32_t TimerControl_Size; uint32_t TimerControl_OneShot; -}DULATIMER_InitTypDef; +}DUALTIMER_InitTypDef; -#define IS_DULATIMER_TimerMode(MODE) (MODE <= 1) -#define IS_DULATIMER_TimerPre(PREE) (PRE <= 2) -#define IS_DULATIMER_TimerSize(SIZE) (SIZE <= 1) -#define IS_DULATIMER_OneShot(ONESHOT) (ONESHOT <= 1) +#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) @@ -64,7 +64,7 @@ typedef struct void DUALTIMER_ClockEnable(DUALTIMER_TypeDef* DUALTIMERn); void DUALTIMER_ClockDisable(DUALTIMER_TypeDef* DUALTIMERn); void DUALTIMER_DeInit(DUALTIMER_TypeDef* DUALTIMERn); -void DUALTIMER_Init(DUALTIMER_TypeDef* DUALTIMERn, DULATIMER_InitTypDef* DUALTIMER_InitStruct); +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); diff --git a/libraries/mbed/targets/hal/TARGET_WIZNET/TARGET_W7500x/us_ticker.c b/libraries/mbed/targets/hal/TARGET_WIZNET/TARGET_W7500x/us_ticker.c index e3ad72c675..e230963441 100644 --- a/libraries/mbed/targets/hal/TARGET_WIZNET/TARGET_W7500x/us_ticker.c +++ b/libraries/mbed/targets/hal/TARGET_WIZNET/TARGET_W7500x/us_ticker.c @@ -38,7 +38,7 @@ #define TIMER_IRQn DUALTIMER0_IRQn static PWM_TimerModeInitTypeDef TimerInitType; -static DULATIMER_InitTypDef TimerHandler; +static DUALTIMER_InitTypDef TimerHandler; static int us_ticker_inited = 0;