mirror of https://github.com/ARMmbed/mbed-os.git
[EFM32] Backport changes from mbed OS 3.
parent
da2a4ccbae
commit
a81fdc461d
|
|
@ -86,9 +86,15 @@ const PinMap PinMap_I2C_SDA[] = {
|
|||
|
||||
/************PWM***************/
|
||||
const PinMap PinMap_PWM[] = {
|
||||
{PA12, PWM_CH0, 0},
|
||||
{PA13, PWM_CH1, 0},
|
||||
{PA14, PWM_CH2, 0},
|
||||
{PA8, PWM_CH0, 0},
|
||||
{PA9, PWM_CH1, 0},
|
||||
{PA10, PWM_CH2, 0},
|
||||
{PA12, PWM_CH0, 1},
|
||||
{PA13, PWM_CH1, 1},
|
||||
{PA14, PWM_CH2, 1},
|
||||
{PC8, PWM_CH0, 2},
|
||||
{PC9, PWM_CH1, 2},
|
||||
{PC10, PWM_CH2, 2},
|
||||
{NC , NC , 0}
|
||||
};
|
||||
|
||||
|
|
|
|||
|
|
@ -62,6 +62,9 @@ const PinMap PinMap_PWM[] = {
|
|||
{PA0, PWM_CH0, 0},
|
||||
{PA1, PWM_CH1, 0},
|
||||
{PA2, PWM_CH2, 0},
|
||||
{PF0, PWM_CH0, 5},
|
||||
{PF1, PWM_CH1, 5},
|
||||
{PF2, PWM_CH2, 5},
|
||||
{NC , NC , NC}
|
||||
};
|
||||
|
||||
|
|
|
|||
|
|
@ -86,9 +86,15 @@ const PinMap PinMap_I2C_SDA[] = {
|
|||
|
||||
/************PWM***************/
|
||||
const PinMap PinMap_PWM[] = {
|
||||
{PA12, PWM_CH0, 0},
|
||||
{PA13, PWM_CH1, 0},
|
||||
{PA14, PWM_CH2, 0},
|
||||
{PA8, PWM_CH0, 0},
|
||||
{PA9, PWM_CH1, 0},
|
||||
{PA10, PWM_CH2, 0},
|
||||
{PA12, PWM_CH0, 1},
|
||||
{PA13, PWM_CH1, 1},
|
||||
{PA14, PWM_CH2, 1},
|
||||
{PC8, PWM_CH0, 2},
|
||||
{PC9, PWM_CH1, 2},
|
||||
{PC10, PWM_CH2, 2},
|
||||
{NC , NC , 0}
|
||||
};
|
||||
|
||||
|
|
|
|||
|
|
@ -86,9 +86,15 @@ const PinMap PinMap_I2C_SDA[] = {
|
|||
|
||||
/************PWM***************/
|
||||
const PinMap PinMap_PWM[] = {
|
||||
{PA12, PWM_CH0, 0},
|
||||
{PA13, PWM_CH1, 0},
|
||||
{PA14, PWM_CH2, 0},
|
||||
{PA8, PWM_CH0, 0},
|
||||
{PA9, PWM_CH1, 0},
|
||||
{PA10, PWM_CH2, 0},
|
||||
{PA12, PWM_CH0, 1},
|
||||
{PA13, PWM_CH1, 1},
|
||||
{PA14, PWM_CH2, 1},
|
||||
{PC8, PWM_CH0, 2},
|
||||
{PC9, PWM_CH1, 2},
|
||||
{PC10, PWM_CH2, 2},
|
||||
{NC , NC , 0}
|
||||
};
|
||||
|
||||
|
|
|
|||
|
|
@ -96,8 +96,10 @@ int gpio_irq_init(gpio_irq_t *obj, PinName pin, gpio_irq_handler handler, uint32
|
|||
// Init pins
|
||||
gpio_irq_preinit(obj, pin);
|
||||
// Initialize GPIO interrupt dispatcher
|
||||
NVIC_SetVector(GPIO_ODD_IRQn, (uint32_t)GPIO_ODD_IRQHandler);
|
||||
NVIC_ClearPendingIRQ(GPIO_ODD_IRQn);
|
||||
NVIC_EnableIRQ(GPIO_ODD_IRQn);
|
||||
NVIC_SetVector(GPIO_EVEN_IRQn, (uint32_t)GPIO_EVEN_IRQHandler);
|
||||
NVIC_ClearPendingIRQ(GPIO_EVEN_IRQn);
|
||||
NVIC_EnableIRQ(GPIO_EVEN_IRQn);
|
||||
|
||||
|
|
|
|||
|
|
@ -37,7 +37,7 @@
|
|||
#include "em_gpio.h"
|
||||
#include "em_timer.h"
|
||||
|
||||
static int pwm_prescaler_div;
|
||||
static uint32_t pwm_prescaler_div;
|
||||
|
||||
float pwmout_calculate_duty(uint32_t width_cycles, uint32_t period_cycles);
|
||||
void pwmout_write_channel(uint32_t channel, float value);
|
||||
|
|
@ -132,7 +132,7 @@ bool pwmout_all_inactive(void) {
|
|||
return true;
|
||||
}
|
||||
#else
|
||||
if(PWM_TIMER->ROUTE == PWM_ROUTE) {
|
||||
if(PWM_TIMER->ROUTE & (TIMER_ROUTE_CC0PEN | TIMER_ROUTE_CC1PEN | TIMER_ROUTE_CC2PEN)) {
|
||||
return true;
|
||||
}
|
||||
#endif
|
||||
|
|
@ -211,7 +211,11 @@ void pwmout_init(pwmout_t *obj, PinName pin)
|
|||
#else
|
||||
// On P1, the route location is statically defined for the entire timer.
|
||||
PWM_TIMER->ROUTE &= ~_TIMER_ROUTE_LOCATION_MASK;
|
||||
PWM_TIMER->ROUTE |= PWM_ROUTE;
|
||||
if(pwmout_all_inactive()) {
|
||||
PWM_TIMER->ROUTE |= pinmap_find_function(pin,PinMap_PWM) << _TIMER_ROUTE_LOCATION_SHIFT;
|
||||
} else {
|
||||
MBED_ASSERT((pinmap_find_function(pin,PinMap_PWM) << _TIMER_ROUTE_LOCATION_SHIFT) == (PWM_TIMER->ROUTE & _TIMER_ROUTE_LOCATION_MASK));
|
||||
}
|
||||
#endif
|
||||
|
||||
// Set default 20ms frequency and 0ms pulse width
|
||||
|
|
@ -281,7 +285,7 @@ void pwmout_period(pwmout_t *obj, float seconds)
|
|||
// This gives us max resolution for a given period
|
||||
|
||||
//The value of the top register if prescaler is set to 0
|
||||
int cycles = REFERENCE_FREQUENCY * seconds;
|
||||
uint32_t cycles = (uint32_t)REFERENCE_FREQUENCY * seconds;
|
||||
pwm_prescaler_div = 0;
|
||||
|
||||
//The top register is only 16 bits, so we keep dividing till we are below 0xFFFF
|
||||
|
|
|
|||
|
|
@ -71,7 +71,8 @@ void RTC_IRQHandler(void)
|
|||
|
||||
uint32_t rtc_get_32bit(void)
|
||||
{
|
||||
return (RTC_CounterGet() + (time_extend << RTC_NUM_BITS));
|
||||
uint32_t pending = (RTC_IntGet() & RTC_IF_OF) ? 1 : 0;
|
||||
return (RTC_CounterGet() + ((time_extend + pending) << RTC_NUM_BITS));
|
||||
}
|
||||
|
||||
uint64_t rtc_get_full(void)
|
||||
|
|
@ -104,8 +105,8 @@ void rtc_init_real(uint32_t flags)
|
|||
|
||||
/* Enable Interrupt from RTC */
|
||||
RTC_IntEnable(RTC_IEN_OF);
|
||||
NVIC_EnableIRQ(RTC_IRQn);
|
||||
NVIC_SetVector(RTC_IRQn, (uint32_t)RTC_IRQHandler);
|
||||
NVIC_EnableIRQ(RTC_IRQn);
|
||||
|
||||
/* Initialize */
|
||||
RTC_Init(&init);
|
||||
|
|
@ -198,8 +199,8 @@ void rtc_init_real(uint32_t flags)
|
|||
|
||||
/* Enable Interrupt from RTC */
|
||||
RTCC_IntEnable(RTCC_IEN_OF);
|
||||
NVIC_EnableIRQ(RTCC_IRQn);
|
||||
NVIC_SetVector(RTCC_IRQn, (uint32_t)RTCC_IRQHandler);
|
||||
NVIC_EnableIRQ(RTCC_IRQn);
|
||||
|
||||
/* Initialize */
|
||||
RTCC_Init(&init);
|
||||
|
|
|
|||
Loading…
Reference in New Issue