This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] Starterware/AM4378:PWM 示例代码

Guru**** 2555630 points


请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/610695/starterware-am4378-pwm-example-code

器件型号:AM4378

工具/软件:Starterware

现在、我需要在 uboot 中添加 PWM、但我没有找到 PWM 寄存器配置示例。 我必须引用内核的 PWM 驱动程序、但它很大、我已经从内核驱动程序中拆分了一些代码。 那么、我想知道、在 uboot 中是否有任何简单的代码来启用 PWM。  

下面是我的代码、我指的是 kenrel 驱动程序 PWM。 它无法工作、有人能帮我吗? 非常感谢!!!

/*为外部看门狗启用 PWM */
#define PWMSS1_base0x48302000
#define PWMSS1_ePWM0x48302200
#define PWMSS1_CM_OFFSET0x440
#define CTRL_PWMSS_OFFSET0x664
#define kHz_PERIOD50000
#define kHz_DUTY25000
static void WDT_PWM_ENABLE (void)
{
U16 Uptr u_wmst =
32;/upsrgt = wms_rgt = wms_vrgt;
* wms_rgt = wms_ut = wmsps = wmsps
struct pwmss_ePWM_regs * pwmss_ePWM_ptr =(struct pwmss_ePWM_regs *) PWMSS1_ePWM;

printf ("步入 WDT_PWM_ENABLE\n");

//模块使能*/
u32_value = readl (CM_PER + PWM1+ PWM32_offset
~);(<16)/<MSS32_offset +/<16)|/<16)/<MODE_offset<16 (|/<16)|/<MODE_0)|<16)/<PM_0 (<PM_0)|/<PM_0)/<PM_0 (<PM_0)/<PM_0)/<PM_0 (<PM_0)/<PM_0 (<PM_0)

<

/* pwmss */
/*时钟和电源*/
printf ("Line:%d\n"、__line___);
u32_value = readl (&pwms_ptc->clkconfig);
u32_value |=(1<<8);/* ePWMCLK_EN */
writel (&pwmspx)/<16





~)/<pwthn_clwptr (
7)/<pwn_clwn_clus_trl (<tps_clus_7&n_clus_clus_clus&trl);/<tps&n_clus_clus_clus_clus_clus_clus&tramp_clus_clus_clus&n<tps&n_clus&n_clus&n_clus&n<tps&n_clus&n_clus&tramp_clus&n_clus&tramp_clus&tr
writew (u16_value、&pwmss_ePWM_PTR->TBCTL);
printf ("Finish clock prescale\n");

/* period-shadow */
u16_value = readw (&pwms_ePWM_PTR->TBCTL);
U16_Value 和=~ Uptr (1<tw_0_pru_n+










~)
;/<tw_trpw_n<tpw_0_trpw_cludp (&trb&n+);/<tpw_trbn_pru&trpw_time-pw_cludp (&trpw_cludp);/<t&n_cludp (&n+);
writew (u16_value、&pwmss_ePWM_PTR->TBCTL);
printf ("Finish Up counter \n");

/* Duty *
writew (kHz_Duty、&pwmss_ePWM_PTR->CMPB);
printf ("Finish Duty\n");

/*&AQrc */trl writew (k_e16_ePWM_ptr
);/<pwptr = e16_u&rcr (umpw16
)<pw_r = uw_r (umpw_r)<pwr = e16_r = uwmspw_r;/u16)<pwr (uwr ~
= uwr = uwr = uwmr = uwmr = uwr


/* AQCSFRC */
U16_Value = readw (&pwmss_ePWM_PTR->AQCSFRC);
U16_Value &=~(3<2);
U16_Value |=(0<2);
writew (U16_Value、&pwmss_ePWM_AQFRC);

/* enable */
u32_value = readl (CTRL_base + CTRL_PWMSS_offset);
u32_value |=(1<1);/* CTRL_PWMSS */
writel (u32_value、CTRL_base + CTRL_PWMSS_offset);
printf ("Finish enable\n");

/* freerun */ writeptr
(u32_value、CTRL_tbw)<16
~)<tbw (<tbpw_r = u16)<tbw (<tbw)<16)<tbw (<tpw_r 16)<tpw_r (<tbw)<tpw_r 16)<16)<tbw (<tbw <tbw <tpw_r <16)<t