hpw422移植新的sdk

This commit is contained in:
xushaoxiang
2026-07-03 18:08:25 +08:00
commit 945a5a5b0b
2583 changed files with 713209 additions and 0 deletions
+117
View File
@@ -0,0 +1,117 @@
#include "Includes.h"
#define ENABLE_PWMS() *PWMx_EN(0)|=(0x40) //enable all select pwm
#define DISABLE_PWMS() *PWMx_EN(0)&=(~0x40)
void init_pwm(uint32_t ch,uint32_t ocpy,uint32_t period)
{
//config pwm clk
*CPR_CTLAPBCLKEN_GRCTL=0x10001000; //enable pwm pclk
*CPR_PWM_CLK_CTL=0x80000009; //pwm_clk=mclk_in(24M)/(2*(9+1))=1.2M
//config regs
/*PWMx_EN(0)
6 pwm_en_all
............*/
/*PWMx_EN(ch)
5 sleep_en
4 sleep_incr
3 pwm_en_sel[0select pwm_en、1select pwm_en_all]
2:1 pwm_mode[0:100、1:1000、2:4000、3:occupy_ratio_config+1]
0 pwm_en */
*PWMx_EN(ch)&=(~0x01); //disable pwm
#if 1
*PWMx_P(ch)=period; //freq(HZ)=pwm_clk/((period + 1)*100))
*PWMx_OCPY(ch)=ocpy; //set pwm ocpy
*PWMx_EN(ch)=(*PWMx_EN(ch)&(~0x06))|(0<<1);//bit2:1 pwm_mode[0:100、1:1000、2:4000、3:occupy_ratio_config+1]
#else
*PWMx_P(ch)=2; //freq(HZ)=pwm_clk/((period + 1)*100))
*PWMx_OCPY(ch)=(199<<16)|ocpy; //set pwm ocpy
*PWMx_EN(ch)=(*PWMx_EN(ch)&(~0x06))|(3<<1);//bit2:1 pwm_mode[0:100、1:1000、2:4000、3:occupy_ratio_config+1]
#endif
*PWMx_UP(ch)=0x1; //update ocpy period
// *PWMx_EN(ch)=(*PWMx_EN(ch)&(~0x30))|(2<<4);
*PWMx_EN(ch)=(*PWMx_EN(ch)&(~0x08))|(1<<3); //bit3 pwm_en_sel[0select pwm_en、1select pwm_en_all]
// *PWMx_EN(ch)|=(0x1);//enable pwm(ch)
#if 1 //enable pwm0_inv/pwm1_inv/pwm2_inv/pwm3_inv
if(ch<4)
{
*PWMCOMPEN(ch)=0x01; //enable PWM 0 1 2 3 complementary signal output
*PWMCOMPTIME(ch)=0x01; //[bit2:0]
}
#endif
#if 1
/*PWM_BREAK_CTL
19:17 pwm_brk_enable RW 使能pwm的刹车功能, 1使能
16 pwm_brk_sync R 内部硬件刹车信号的值,用于软件判断硬件刹车状态1:硬件刹车信号有效,0:硬件刹车信号无效
14:12 pwm_brk_mask RW PWM_BRK信号屏蔽,每位分别屏蔽一路,0:不屏蔽1:屏蔽
11:9 pwm_brk_inv RW PWM_BRK信号反向,每位分别反向一路,0:不反向1:反向
8 brk_mode RW 硬件恢复模式和软件恢复模式选择:
7 brk_dbc_en RW PWM_BRK信号的滤毛刺使能
6:1 brk_dbc_step RW PWM_BRK信号的滤毛刺步长。步长为1个pwm_clk时钟周期
0 brk_clear RC1 软件恢复模式退出刹车模式:1:退出刹车模式 0:无效*/
*PWM_BREAK_CTL=0; //clear regs
*PWM_BREAK_CTL=(2<<1)|(1<<7)|(0<<8)|(0<<9)|(6<<12)|(7<<17);
#endif
}
void test_pwm(void)
{
gpio_mux_ctl(0,2);//pwm2
gpio_mux_ctl(1,2);//pwm3
gpio_mux_ctl(2,0);gpio_fun_inter(2,0);gpio_fun_sel(2,PWM0);//pwm0
gpio_mux_ctl(8,0);gpio_fun_inter(8,0);gpio_fun_sel(8,PWM1);//PWM1
gpio_mux_ctl(3,0);gpio_fun_inter(3,0);gpio_fun_sel(3,PWM0_INV);//pwm0_INV
// gpio_mux_ctl(4,0);gpio_fun_inter(4,0);gpio_fun_sel(4,PWM2_INV);//PWM2_INV gpio_mux_ctl(4,1);//
gpio_mux_ctl(9,0);gpio_fun_inter(9,0);gpio_fun_sel(9,PWM1_INV);//PWM1_INV
//三路刹车单独使用
gpio_mux_ctl(4,1);//pwm_brk[0]
// gpio_mux_ctl(5,1);//pwm_brk[1]
// gpio_mux_ctl(6,1);//pwm_brk[2]
init_pwm(0,22,119);//100HZ
init_pwm(1,33,119);//100HZ
init_pwm(2,44,119);//100HZ
init_pwm(3,55,119);//100HZ
ENABLE_PWMS(); //enable all select pwm
while(1);
{
// ENABLE_PWMS(); //enable all select pwm
for(int i=0;i<0xA550;i++);
// DISABLE_PWMS();
for(int i=0;i<0xA550;i++);
__NOP();
__NOP();
__NOP();
__NOP();
__NOP();
__WFI();
__NOP();
__NOP();
__NOP();
__NOP();
__NOP();
printf("sleep...\n");
__NOP();
__NOP();
__NOP();
__NOP();
__NOP();
}
}