MATSU-bed(LPC1549)でPWMを4つ以上出すプログラム
Dependents: servo_controller_1549
Diff: pwm_all_api.h
- Revision:
- 4:49ee58dc8e4d
- Parent:
- 2:322ad3eef278
- Child:
- 5:88243d59b4df
--- a/pwm_all_api.h Fri Feb 16 09:06:32 2018 +0000 +++ b/pwm_all_api.h Sat Feb 17 07:23:48 2018 +0000 @@ -19,25 +19,100 @@ #include "device.h" + #ifdef __cplusplus extern "C" { #endif -typedef struct pwmout_s pwmout_t; +struct pwmout_sct { + LPC_SCT0_Type* pwm; + uint32_t pwm_ch; + uint32_t out_ch; + uint32_t pin; + uint32_t match; +}; + +/** Pwmout hal structure. pwmout_s is declared in the target's hal + */ +typedef struct pwmout_sct pwmout_all_t; + +/** + * \defgroup hal_pwmout Pwmout hal functions + * @{ + */ -void pwmout_init (pwmout_t* obj, PinName pin); -void pwmout_free (pwmout_t* obj); +/** Initialize the pwm out peripheral and configure the pin + * + * @param obj The pwmout object to initialize + * @param pin The pwmout pin to initialize + */ +void pwmout_all_init(pwmout_all_t *obj, PinName pin); + +/** Deinitialize the pwmout object + * + * @param obj The pwmout object + */ +void pwmout_all_free(pwmout_all_t *obj); -void pwmout_write (pwmout_t* obj, float percent); -float pwmout_read (pwmout_t* obj); +/** Set the output duty-cycle in range <0.0f, 1.0f> + * + * Value 0.0f represents 0 percentage, 1.0f represents 100 percent. + * @param obj The pwmout object + * @param percent The floating-point percentage number + */ +void pwmout_all_write(pwmout_all_t *obj, float percent); + +/** Read the current float-point output duty-cycle + * + * @param obj The pwmout object + * @return A floating-point output duty-cycle + */ +float pwmout_all_read(pwmout_all_t *obj); -void pwmout_period (pwmout_t* obj, float seconds); -void pwmout_period_ms (pwmout_t* obj, int ms); -void pwmout_period_us (pwmout_t* obj, int us); +/** Set the PWM period specified in seconds, keeping the duty cycle the same + * + * Periods smaller than microseconds (the lowest resolution) are set to zero. + * @param obj The pwmout object + * @param seconds The floating-point seconds period + */ +void pwmout_all_period(pwmout_all_t *obj, float seconds); + +/** Set the PWM period specified in miliseconds, keeping the duty cycle the same + * + * @param obj The pwmout object + * @param ms The milisecond period + */ +void pwmout_all_period_ms(pwmout_all_t *obj, int ms); + +/** Set the PWM period specified in microseconds, keeping the duty cycle the same + * + * @param obj The pwmout object + * @param us The microsecond period + */ +void pwmout_all_period_us(pwmout_all_t *obj, int us); -void pwmout_pulsewidth (pwmout_t* obj, float seconds); -void pwmout_pulsewidth_ms(pwmout_t* obj, int ms); -void pwmout_pulsewidth_us(pwmout_t* obj, int us); +/** Set the PWM pulsewidth specified in seconds, keeping the period the same. + * + * @param obj The pwmout object + * @param seconds The floating-point pulsewidth in seconds + */ +void pwmout_all_pulsewidth(pwmout_all_t *obj, float seconds); + +/** Set the PWM pulsewidth specified in miliseconds, keeping the period the same. + * + * @param obj The pwmout object + * @param ms The floating-point pulsewidth in miliseconds + */ +void pwmout_all_pulsewidth_ms(pwmout_all_t *obj, int ms); + +/** Set the PWM pulsewidth specified in microseconds, keeping the period the same. + * + * @param obj The pwmout object + * @param us The floating-point pulsewidth in microseconds + */ +void pwmout_all_pulsewidth_us(pwmout_all_t *obj, int us); + +/**@}*/ #ifdef __cplusplus }