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.

[参考译文] RTOS/TM4C1294NCPDT:TM4C1294NCPDT、带 TIRTOS API 的 PWM。

Guru**** 2477145 points
Other Parts Discussed in Thread: TM4C1294NCPDT

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/687175/rtos-tm4c1294ncpdt-tm4c1294ncpdt-pwm-with-tirtos-api

器件型号:TM4C1294NCPDT

工具/软件:TI-RTOS

我使用 的是具有 CCS 6.1.2和 TIRTOS 2.16.0.08的 TM4C1294NCPDT。

在 TM4C1294NCPDT 上、我想在引脚 PF1上使用 PWM1、在引脚 PF2上使用 PWM2、在引脚 PF3上使用 PWM3。 我找到了一个名为 pwmled.c 的示例应用、在评估板上使用了该应用程序、一切都运行良好、但我对在项目中使用示例中使用的 API 有一些疑问。

示例应用 pwmled.c 使用了 PWM0和 API 调用:

PWM_PARAMS_INIT ()  PWM_OPEN ()  PWM_setDuty ()

 

我的问题

1) 1)    在哪里可以找到 API 调用 PWM_Params_init ()  PWM_open ()  PWM_setDuty ()的详细文档

2)    在示例应用 pwmled.c 中、使用以下参数 PWM_open (Board_PWM0、&params)调用 init;

在 board.h 中、我看到#define Board_PWM0                EK_TM4C1294XL_PWM0

在 EK_TM4C1294XL.h 中、我看到:

typedef 枚举 EK_TM4C1294XL_PWMName{

  EK_TM4C1294XL_PWM0 = 0、

  EK_TM4C1294XL_PWMCOUNT

}EK_TM4C1294XL_PWMName;

如上所示、EK_TM4C1294XL.h 中未定义 PWM 通道1-3、其中 PWM 通道0是。

将另一个 PWM1、PWM2和 PWM3添加到项目中的建议方法是什么、或者应该使用外设驱动程序库中描述的 Tiva API?

Tiva API 将使用函数 PWMGenConfigure()、PWMPeriodSet()、PWNPulseWidthSet()等。

谢谢、

道格

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

    您好 Doug、
    我认为您的问题可以在 TI-RTOS 用户指南中有关 PWM 驱动器的第5.9节中得到解答。 通常,您可以在中找到该文档 /docs/Users_Guide.pdf. 这里也是它的链接。 www.ti.com/.../spruhd4m.pdf
    另请访问 TI-RTOS wiki 页面以了解更多信息。 processors.wiki.ti.com/.../TI-RTOS

    如果要使用 TI-RTOS 管理 PWM 函数、则需要更新 typedef 枚举 EK_TM4C1294XL_PWMName 以包含要使用的其他 PWM 引脚。 同样、您也需要在 PWM 部分下更新 EK_TM4C1294XL.c。  

     您还可以使用 TivaWare PWM API 和 TI-RTOS 的 Hwi 来管理 PWM 中断。  

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

    我确实在 www.ti.com/.../spruhd4m.pdf 链接中分享了您共享的文档
    但我看不到它描述了参数和限制等或参数的位置。  文档参考
    链接、以了解更多信息 \products\tidrivers_、version>\docs\html\index.html。  
    我确实仔细研究了该路径或类似路径、但我没有找到我要查找的其他详细信息。
    最后、我想我可以参考 CPU 文档、了解有关参数的任何其他信息。

    我确实为 PWM 器件1、2和3向 EK_TM4C1294XL.c 和 EK_TM4C1294XL.h 添加了一些代码

    typedef 枚举 EK_TM4C1294XL_PWMName{
       EK_TM4C1294XL_PWM0 = 0、

       EK_TM4C1294XL_PWM1、//为 pwm1添加了
       EK_TM4C1294XL_PWM2、//针对 pwm2添加

       EK_TM4C1294XL_PWM3、//为 pwm3添加

       EK_TM4C1294XL_PWMCOUNT
    }EK_TM4C1294XL_PWMName;

    CONST PWMTiva_HWAttrs pwmTivaHWAttrs[EK_TM4C1294XL_PWMCOUNT]={
       {
           baseAddr = PWM0_BASE、
           pwmOutput = PWM_OUT_0、
           pwmGenOpts = PWM_GEN_MODE_DOWN | PWM_GEN_MODE_DBG_RUN、

           baseAddr = PWM1_base、
           .pwmOutput = PWM_OUT_1、
           pwmGenOpts = PWM_GEN_MODE_DOWN | PWM_GEN_MODE_DBG_8000RUN、

           baseAddr = PWM2_base、
           pwmOutput = PWM_OUT_2、
           pwmGenOpts = PWM_GEN_MODE_DOWN | PWM_GEN_MODE_DBG_RUN、

           baseAddr = PWM3_base、
           pwmOutput = PWM_OUT_3、
           pwmGenOpts = PWM_GEN_MODE_DOWN | PWM_GEN_MODE_DBG_RUN
       }
    };

    #define Board_PWM0                 EK_TM4C1294XL_PWM0
    #define Board_PWM1                 EK_TM4C1294XL_PWM1
    #define Board_PWM2                 EK_TM4C1294XL_PWM2
    #define Board_PWM3                 EK_TM4C1294XL_PWM3


    #define PWM0_BASE              0x40028000 //脉宽调制器(PWM)
    #define PWM1_BASE              0x40029000 //这是正确的吗??
    #define PWM2_base              0x4002A000 //这是正确的吗??
    #define PWM3_base              0x4002B000 //这是正确的吗??

    我想我唯一要问的问题是确认 PWM1-PWM3的基地址正确。  从中删除
    本文档 www.ti.com/.../tm4c1294ncpdt.pdf 我在第23.5节中看到 PWM0是
    定义为0x4002.800。 在第104页/该同一文档的表2-4存储器映射中、有一个包含地址的表
    器件、但我无法确认 PWM1-PWM3的基址、因为我没有看到基址
    列出了 PWM1-PWM3的设置。

    谢谢、

    道格

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好 Doug、
    我不是 TI-RTOS 专家。 但是、查看 PWMTiva.h 和 针对 Tiva 器件的 TI-RTOS 文档 software-dl.ti.com/.../_p_w_m_tiva_8h.html、我怀疑您所做的是正确的(即为不同的 PWM 发生器分配地址)。

    在我看来、您可能希望尝试在下面进行操作、其中所有这些操作的基地址都是 PWM0_BASE。 原因是器件中只有一个 PWM 模块。 单 PWM 模块包含四个 PWM 发生器、每个发生器支持两个 PWM 引脚。

    baseAddr = PWM0_BASE、
    .pwmOutput = PWM_OUT_1、
    pwmGenOpts = PWM_GEN_MODE_DOWN | PWM_GEN_MODE_DBG_8000RUN、

    baseAddr = PWM0_BASE、
    pwmOutput = PWM_OUT_2、
    pwmGenOpts = PWM_GEN_MODE_DOWN | PWM_GEN_MODE_DBG_RUN、

    baseAddr = PWM0_BASE、
    pwmOutput = PWM_OUT_3、
    pwmGenOpts = PWM_GEN_MODE_DOWN | PWM_GEN_MODE_DBG_RUN