一、 测试环境
硬件:SemiDrive G9X Spider
软件:PTG5.0 Linux + FreeRTOS
图(1)
二、 配置与 Demo
1.测试原理:
G9X 有 8 个 PWM 模块,其中,PWM1 和 PWM2 属于 Safety Domain,PWM3 – PWM8 属于 AP
Domain,每个 PWM 有 4 个输出 Channel,本次测试采用 PWM3 Channel-1 作为测试通道。查找资料可知,GPIO-C9 的 mux6 为 PWM3 CH1 复用功能,如图(2)。
图(2)
2.资源分配
如上节所述,PWM3 属于 AP Domain 资源,因此在 safety domain 使用的时候,需要做资源调整,修改 buildsystem/rtos/lk_boot/chipcfg/generate/g9x/projects/default/safety路径下的 domain_res.h,增加需要测试的 PWM Unit,并在 domain_res_cnt.h 中修改 PWM 实际在 safety domain 使用的 PWM Unit个数。domain_res.h 的修改参考图(3),这里增加了PWM3,PWM6 两个 Unit。
图(3)
3.配置
Pinmux 的配置首先打开 SDConfigTool,选择 Chip G9X,然后 import binary,选择 SDK 中buildsystem/binary_G9X_Ref_Linux_1G_2133/system_config.img,修改 pinmux 后,Savebinary,将新生成的 system_config.img copy 到原有路径,重新打包生成 ospi.pac。操作步骤图(4)。
图(4)
PWM 的测试代码可以从以下链接获取。
链接:https://pan.baidu.com/s/18B1NXPuDHwfA17HT6aWv1A 提取码:u9z4
获取代码解压后, copy 到工程的 buildsystem/rtos/freertos_safetyos/application/test 路径,并修改buildsystem/rtos/freertos_safetyos/project/safety-g9x-ref.mk,按照图(5)增加测试代码的编译配置,并重新编译Safety 镜像并打包。
图(5)
图(6)是测试 demo 的配置部分代码片段,具体配置含义解释如下。
hal_cfg.freq = 20000; // pwm 输出频率
hal_cfg.grp_num = HAL_PWM_CHN_A_B_WORK; //输出通道配置,ABCD 对应 channel 0123
hal_cfg.single_mode = HAL_PWM_CONTINUE_CMP;//连续模式,PWM 连续输出,软件控制停止
hal_cfg.align_mode = HAL_PWM_EDGE_ALIGN_MODE;//比较模式,单/双 两种,详情见 TRM 文档
hal_cfg.cmp_cfg[HAL_PWM_CHN_B].phase = HAL_PWM_PHASE_POLARITY_POS;//初始相位
hal_cfg.cmp_cfg[HAL_PWM_CHN_B].duty = PWM_DUTY;//占空比
图(6)
三、测试操作
1.完成以上操作后,编译工程,然后用新生成的 safe.bin,system_config.img替换 SDFactoryTool 里面 safety 域的 bin 文件,见图(7)。或者重新打包 ospi.pac
图(7)
2.拨码开关设置为 0000,启动开发板。命令行执行 pwm_task,输出 log 显示 pwm 模块寄存器信息,占空比,周期等,见图(8),结合相关文档可以用于调试。
图(8)
3.最后使用逻辑分析仪捕捉 GPIO_C9 引脚的输出,如图(9)显示输出周期为 50us,即频率为20000 的 PWM 方波。
图(9)
如对此有更多需求,敬请联系世平集团 ATU 部门, atu.cn@wpi-group.com
四、 参考文献:
- SD_G9_SDK_Reference_Manual_Rev1.4.pdf
- SD_G9H_Quick_Start_Rev1.01.pdf
- G9_Processor_TRM_Rev01.00.pdf
欢迎在博文下方留言评论,我们会及时回复您的问题。如有更多需求,欢迎联系大联大世平集团 ATU 部门:atu.sh@wpi-group.com
作者:Sim Guo / 郭夕峰
更多资讯,请扫码关注我们!:
评论