1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677 |
- #ifndef __OPENLOONGSON_PWM_H
- #define __OPENLOONGSON_PWM_H
- // pwm引脚定义
- #define LS1C_PWM0_GPIO06 (6) // gpio06用作pwm0
- #define LS1C_PWM0_GPIO04 (4) // gpio04复用为pwm0
- #define LS1C_PWM1_GPIO92 (92) // gpio92用作pwm1
- #define LS1C_PWM1_GPIO05 (5) // gpio05复用为pwm1
- #define LS1C_PWM2_GPIO52 (52) // gpio52复用为pwm2
- #define LS1C_PWM2_GPIO46 (46) // gpio46复用为pwm2
- #define LS1C_PWM3_GPIO47 (47) // gpio47复用为pwm3
- #define LS1C_PWM3_GPIO53 (53) // gpio53复用为pwm3
- // ...还有一些gpio可以复用为gpio的,有需要可以自己添加
- // pwm控制寄存器的每个bit
- #define LS1C_PWM_INT_LRC_EN (11) // 低脉冲计数器中断使能
- #define LS1C_PWM_INT_HRC_EN (10) // 高脉冲计数器中断使能
- #define LS1C_PWM_CNTR_RST (7) // 使能CNTR计数器清零
- #define LS1C_PWM_INT_SR (6) // 中断状态位
- #define LS1C_PWM_INTEN (5) // 中断使能位
- #define LS1C_PWM_SINGLE (4) // 单脉冲控制位
- #define LS1C_PWM_OE (3) // 脉冲输出使能
- #define LS1C_PWM_CNT_EN (0) // 主计数器使能
- // 硬件pwm工作模式
- enum
- {
- // 正常模式--连续输出pwm波形
- PWM_MODE_NORMAL = 0,
-
- // 单脉冲模式,每次调用只发送一个脉冲,调用间隔必须大于pwm周期
- PWM_MODE_PULSE
- };
- // 硬件pwm信息
- typedef struct
- {
- unsigned int gpio; // PWMn所在的gpio
- unsigned int mode; // 工作模式(单脉冲、连续脉冲)
- float duty; // pwm的占空比
- unsigned long period_ns; // pwm周期(单位ns)
- }pwm_info_t;
- /*
- * 初始化PWMn
- * @pwm_info PWMn的详细信息
- */
- void pwm_init(pwm_info_t *pwm_info);
- /*
- * 禁止pwm
- * @pwm_info PWMn的详细信息
- */
- void pwm_disable(pwm_info_t *pwm_info);
- /*
- * 使能PWM
- * @pwm_info PWMn的详细信息
- */
- void pwm_enable(pwm_info_t *pwm_info);
- #endif
|