hpw422移植新的sdk
This commit is contained in:
@@ -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[0:select pwm_en、1:select 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[0:select pwm_en、1:select 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();
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user