请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
器件型号: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