mirror of https://github.com/ARMmbed/mbed-os.git
Merge pull request #2790 from mtkrtk/master
[Renesas RZ/A1H] Allow using PWM and MTU in the same timepull/2915/merge
commit
f9001e23e9
|
@ -207,17 +207,11 @@ static int MAX_PERIOD[] = {
|
||||||
2000000,
|
2000000,
|
||||||
};
|
};
|
||||||
|
|
||||||
typedef enum {
|
|
||||||
MODE_PWM = 0,
|
|
||||||
MODE_MTU2
|
|
||||||
} PWMmode;
|
|
||||||
|
|
||||||
typedef enum {
|
typedef enum {
|
||||||
MTU2_PULSE = 0,
|
MTU2_PULSE = 0,
|
||||||
MTU2_PERIOD
|
MTU2_PERIOD
|
||||||
} MTU2Signal;
|
} MTU2Signal;
|
||||||
|
|
||||||
static int pwm_mode = MODE_PWM;
|
|
||||||
static uint16_t init_period_ch1 = 0;
|
static uint16_t init_period_ch1 = 0;
|
||||||
static uint16_t init_period_ch2 = 0;
|
static uint16_t init_period_ch2 = 0;
|
||||||
static uint16_t init_mtu2_period_ch[5] = {0};
|
static uint16_t init_mtu2_period_ch[5] = {0};
|
||||||
|
@ -234,7 +228,6 @@ void pwmout_init(pwmout_t* obj, PinName pin) {
|
||||||
/* PWM by MTU2 */
|
/* PWM by MTU2 */
|
||||||
int tmp_pwm;
|
int tmp_pwm;
|
||||||
|
|
||||||
pwm_mode = MODE_MTU2;
|
|
||||||
// power on
|
// power on
|
||||||
CPGSTBCR3 &= ~(CPG_STBCR3_BIT_MSTP33);
|
CPGSTBCR3 &= ~(CPG_STBCR3_BIT_MSTP33);
|
||||||
|
|
||||||
|
@ -269,7 +262,6 @@ void pwmout_init(pwmout_t* obj, PinName pin) {
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
/* PWM */
|
/* PWM */
|
||||||
pwm_mode = MODE_PWM;
|
|
||||||
// power on
|
// power on
|
||||||
CPGSTBCR3 &= ~(CPG_STBCR3_BIT_MSTP30);
|
CPGSTBCR3 &= ~(CPG_STBCR3_BIT_MSTP30);
|
||||||
|
|
||||||
|
@ -306,7 +298,7 @@ void pwmout_write(pwmout_t* obj, float value) {
|
||||||
uint32_t wk_cycle;
|
uint32_t wk_cycle;
|
||||||
uint16_t v;
|
uint16_t v;
|
||||||
|
|
||||||
if (pwm_mode == MODE_MTU2) {
|
if (obj->pwm >= MTU2_PWM_OFFSET) {
|
||||||
/* PWM by MTU2 */
|
/* PWM by MTU2 */
|
||||||
int tmp_pwm;
|
int tmp_pwm;
|
||||||
|
|
||||||
|
@ -347,7 +339,7 @@ float pwmout_read(pwmout_t* obj) {
|
||||||
uint32_t wk_cycle;
|
uint32_t wk_cycle;
|
||||||
float value;
|
float value;
|
||||||
|
|
||||||
if (pwm_mode == MODE_MTU2) {
|
if (obj->pwm >= MTU2_PWM_OFFSET) {
|
||||||
/* PWM by MTU2 */
|
/* PWM by MTU2 */
|
||||||
uint32_t wk_pulse;
|
uint32_t wk_pulse;
|
||||||
int tmp_pwm;
|
int tmp_pwm;
|
||||||
|
@ -406,7 +398,7 @@ void pwmout_period_us(pwmout_t* obj, int us) {
|
||||||
uint16_t wk_last_cycle;
|
uint16_t wk_last_cycle;
|
||||||
int max_us = 0;
|
int max_us = 0;
|
||||||
|
|
||||||
if (pwm_mode == MODE_MTU2) {
|
if (obj->pwm >= MTU2_PWM_OFFSET) {
|
||||||
/* PWM by MTU2 */
|
/* PWM by MTU2 */
|
||||||
int tmp_pwm;
|
int tmp_pwm;
|
||||||
uint16_t tmp_tgra;
|
uint16_t tmp_tgra;
|
||||||
|
@ -550,7 +542,7 @@ void pwmout_pulsewidth_ms(pwmout_t* obj, int ms) {
|
||||||
void pwmout_pulsewidth_us(pwmout_t* obj, int us) {
|
void pwmout_pulsewidth_us(pwmout_t* obj, int us) {
|
||||||
float value = 0;
|
float value = 0;
|
||||||
|
|
||||||
if (pwm_mode == MODE_MTU2) {
|
if (obj->pwm >= MTU2_PWM_OFFSET) {
|
||||||
/* PWM by MTU2 */
|
/* PWM by MTU2 */
|
||||||
if (mtu2_period_ch[obj->ch] != 0) {
|
if (mtu2_period_ch[obj->ch] != 0) {
|
||||||
value = (float)us / (float)mtu2_period_ch[obj->ch];
|
value = (float)us / (float)mtu2_period_ch[obj->ch];
|
||||||
|
|
Loading…
Reference in New Issue