PWM使用参考
1. 概述¶
公板支持4路PWM输出。
PWM驱动路径:rtk/proj/sc/driver/sysdriver/pwm
2. 配置¶
2.1. 公板支持的PWM padmux¶
提供4组PWM,每组都有10种选择。
注意:对于某一组,只能选择其中一种, 请注意PAD没有其他用途。
PWM Index | Mode | PAD |
---|---|---|
PWM0 | 1 | PAD_SR_IO00 |
2 | PAD_SR_IO04 | |
3 | PAD_SR_IO08 | |
4 | PAD_TTL4 | |
5 | PAD_TTL14 | |
6 | PAD_TTL18 | |
7 | PAD_KEY0 | |
8 | PAD_KEY10 | |
9 | PAD_SD_CMD | |
10 | PAD_GPIO1 | |
PWM1 | 1 | PAD_SR_IO01 |
2 | PAD_SR_IO05 | |
3 | PAD_SR_IO09 | |
4 | PAD_TTL5 | |
5 | PAD_TTL15 | |
6 | PAD_TTL19 | |
7 | PAD_KEY1 | |
8 | PAD_KEY11 | |
9 | PAD_SD_D3 | |
10 | PAD_GPIO2 | |
PWM2 | 1 | PAD_SR_IO02 |
2 | PAD_SR_IO06 | |
3 | PAD_SR_IO10 | |
4 | PAD_TTL6 | |
5 | PAD_TTL16 | |
6 | PAD_TTL20 | |
7 | PAD_KEY2 | |
8 | PAD_KEY12 | |
9 | PAD_SD_D2 | |
10 | PAD_GPIO3 | PWM3 | 1 | PAD_SR_IO03 |
2 | PAD_SR_IO07 | |
3 | PAD_SR_IO11 | |
4 | PAD_TTL7 | |
5 | PAD_TTL17 | |
6 | PAD_TTL21 | |
7 | PAD_KEY3 | |
8 | PAD_KEY13 | |
9 | PAD_SD_GPIO0 | |
10 | PAD_GPIO4 |
2.2. PWM API¶
API名称 | 说明 |
---|---|
Void DrvPWMPadSet (DrvPWMse ePWMIndex,DrvPadModese ePadMode ) | 配对PWM模組Mode |
Void DrvPWNOutputPulse (DrvPWMse ePWMIndex,DrvPadModese ePadMode ) | 设定输出频率 & 占空比 & Invert以及是否shift偏移 |
API详情见rtk/proj/sc/driver/sysdriver/pwm/drv/pub/drv_pwm.h
2.3. 范例¶
以下为设置PAD_GPIO1输出PWM波型, 波型参数为5000Hz, 占空比50%。
#include “drv_pwm.h” u32 PWMIndex = 0; //PWM0 u32 PadMode = PINMUX_FOR_PWM0_MODE_10; //Pad_GPIO1 PWMConfig_t sPWMConfig; DrvPWMPadSet(PWMIndex, PadMode); sPWMConfig.bInvert = 0; sPWMConfig.nDuty = 100000; sPWMConfig.nFrequency = 200000; sPWMConfig.nPulseShift = 0; DrvPWNOutputPulse(PWMIndex, sPWMConfig);
注:
nFrequency应该理解为周期,一个周期就是一个ns,所以设置5000HZ,nFrequency = 1000000000/5000,
nDuty = nFreqency*50% = 100000
2.4. 命令调试¶
预设未开启, 若需使用请将driver/sysdriver/pwm/drv/src/drv_pwm_test.c
的#if defined(__VER_PWM__)
移除。
这样可加入编译,RTOS下控制台可直接输入PWM控制。
PWM0 搭配PADGPIO1 freq=5000, duty=50, PADMODE为PINMUX_FOR_PWM0_MODE_10, 0x18d
# pwm 0 0x18d 200000 0 100000 0
代码上API使用方法亦可参考如上命令的实现方法。