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.

[参考译文] PROCESSOR-SDK-AM62X:无法在 ECAP0-APWM 引脚 C14上生成 PWM。

Guru**** 2466550 points


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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1470531/processor-sdk-am62x-not-able-to-generate-pwm-on-ecap0-apwm-pin-c14

器件型号:PROCESSOR-SDK-AM62X

工具与软件:

团队成员、您好!

我正在开发 AM62x 单核处理器。

我们使用的是 VxWorks RTOS。

我想使用"裸机"方法在 ECAP0-APWM 引脚 C14上生成 PWM。

下面是我的问题:

1.我找不到"ECAP0-APWM"模块的"Source Control Register" 您能帮助我们查找 ECAP0-APWM 模块的时钟源吗?

下面是我们为在 ECAP0-APWM 引脚 C14上生成 PWM 而编写的示例代码。

  注意: 我们参考了 CCS。

         我们不需要中断、因此我将其禁用。

void ecap_apwm_mode_main (void * args)

  int32_t status = SystemP_Success;
  uint64_t periodVal、compareVal = 0;

  printf ("ECAP APWM 模式测试已启动...\r\n");

  /*获取 ECAP 地址*/
  gEcapBaseAddr =(uint32_t) AddrTranslateP_getLocalAddr (CONFIG_ECAP0_BASE_ADDR);
  numIsrCnt = APP_ECAP_RUN_TIME * APP_ECAP_APWM_OUT_FREQ;
  printf ("ecap address:%x\r\n"、gEcapBaseAddr);

  /*检查 PWM 输出 Hz 的条件为0或占空比> 100 */
  if (((APP_ECAP_APWM_OUT_FREQ = 0)||(APP_ECAP_APWM_OUT_DUTY_CYCLE > 100))
  {
    STATUS = SYSTEMP_FAILURE;
  }

  if (SYSTEMP_SUCCESS ==状态)
  {
    /*禁用 ECAP 中断和停止计数器*/
    ECAP_intrDisable (gEcapBaseAddr、ECAP_INT_ALL);
    ECAP_IntrStatusClear (gEcapBaseAddr、ECAP_INT_ALL);
    ECAP_captureLoadingDisable (gEcapBaseAddr);
    ECAP_counterControl (gEcapBaseAddr、ECAP_COUNTER_STOP);
    /*启用周期相等中断*/
    //ECAP_IntEnable (gEcapBaseAddr、ECAP_PRDEQ_INT);
    /*配置 ECAP 工作模式、输出脉冲初始状态、同步输入、输出*/
    ECAP_operatingModeSelect (gEcapBaseAddr、ECAP_APWM_MODE);
    ECAP_APWM_POLARityConfig (gEcapBaseAddr、APP_ECAP_APWM_OUT_POLARITY);
    ECAP_syncInOutSelect (gEcapBaseAddr、ECAP_SYNC_IN_DISABLE、ECAP_SYNC_OUT_DISABLE);


    periodVal = ECAP_INPUT_CLK_FREQ/APP_ECAP_APWM_OUT_FREQ;
    /*如果 periodVal > 32b 那么我们不能给出准确的计时*/
   // DebugP_assert (periodVal < 0xFFFFFFFFU);
    /*根据占空比计算捕获值*/
    compareVal =(periodVal * APP_ECAP_APWM_OUT_DUTY_CYCLE)/ 100;

    eCAP_APWM_captureConfig (gEcapBaseAddr、(uint32_t) compareVal、(uint32_t) periodVal);
    eCAP_APWM_shadowCaptureConfig (gEcapBaseAddr、(uint32_t) compareVal、(uint32_t) periodVal);
    /*启动计数器*/
    ECAP_counterControl (gEcapBaseAddr、ECAP_COUNTER_FREE_RUNNING);
    printf ("ECAP APWM 测试通过!\r\n");
    printf ("所有测试均已通过!\r\n ");
  }
  设计
  {
  printf ("某些测试失败!!\r\n");
  }

 // Board_driversClose ();
 // Drivers_close();
}

//===========

int main (void)

  ecap_apwm_mode_main (NULL);
  while (1)
  {
    睡眠(1);
  }
  返回0;
}

//=============

Dtsi 更改:
======
主 dtsi:
====
ecap0: PWM@23100000 {
Compatible ="ti、am3352-ECAP";
#pwm-cells =<3>;
REG =<0x00 0x23100000 0x00 0x100>;
电源域=<&K3_PDS 51 TI_SCI_PD_Exclusive>;
时钟=<&K3_CLKS 51 0>;
时钟名称="FCK";
};

通用 dtsi:
======

ecap0 (&E){
状态="正常";
pinctrl-names ="默认值";
pinctrl-0 =<&myecap1_pins_default>;
};

myecap1_pins_default:myecap1-default-pins{
PINCTL-SINGLE、PINS =<
AM62X_IOPAD (0x1f0、PIN_OUTPUT、8)/*(C14) EXT_REFCLK1.ECAP0_IN_APWM_OUT */
>;
};

//=================

注:我只怀疑我没有启用 APWM 的时钟。 您能说明如何为 ECAP0-APWM 时钟启用时钟吗?

请指导我们上面的天气源代码片段是正确的吗? 如果没有、请建议我们进行更正。

此致、

Kaushal Patel

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

    尊敬的 Kaushal Patel:

    我正在看你的查询,你可能会期待星期一回复.

    此致、

    Anil。

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

    尊敬的 Kaushal Patel:

    我的建议是、AM64X 器件已提供上述您的要求。

    AM64X 和 AM62X 器件中的 ECAP IP 相同。

    您可以将相同的驱动程序代码用于更改 AM62X 器件中的寄存器地址、这适用于您。

    因此、您可以参考 AM64X 器件并自行继续调试问题。

    在这之后,仍然面临问题,我可以帮助你。

    C:\ti\mcu_plus_sdk_am64x_10_01_00_32\examples\drivers\ecap

    此致、

    Anil。