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.

[参考译文] CCS/TMS320F28335:GPIO 启用禁用

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/702973/ccs-tms320f28335-gpio-enable-disable

器件型号:TMS320F28335

工具/软件:Code Composer Studio

您好!
我已经配置了4个 ePWM 模块来生成正在工作的正弦 PWM。 我需要了解程序执行时间。 为此、我希望在程序开始时将 GPIO31设置为高电平、并在程序结束时将其移至低电平。
我曾尝试按如下方式配置它、但它不起作用
请指出我出错的地方。

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

    void main (void)


    //步骤1. 初始化系统控制:
    // PLL、安全装置、启用外设时钟
    //此示例函数位于 DSP2833x_SYSCTRL.c 文件中。
      InitSysCtrl();



      //我的正弦表代码//


    //步骤2. 初始化 GPIO:
    //此示例函数位于 DSP2833x_GPIO.c 文件和中
    //说明了如何将 GPIO 设置为其默认状态。
    //InitGpio(); //针对此示例跳过
    EALLOW;
        //GpioCtrlRegs.GPAPUD.bit.GPIO31 = 0;  //启用 GPIO6上的上拉
          //负载输出锁存
        GpioCtrlRegs.GPAMUX2.bit.GPIO31 = 0; // GPIO6 = GPIO6
        GpioCtrlRegs.GPADIR.bit.GPIO31 = 1;  // GPIO6 =输出
        GpioDataRegs.GPASET.bit.GPIO31 = 1;
    EDIS;

    //在这种情况下、只需初始化 ePWM1、ePWM2、ePWM3的 GPIO 引脚
    //这些函数位于 DSP2833x_ePWM.c 文件中
      InitEPwm1Gpio(); //T1载波//
      InitEPwm2Gpio(); //T1载波//
      InitEPwm3Gpio(); //T2载波//
      InitEPwm4Gpio(); //T2载波//

    //步骤3. 清除所有中断并初始化 PIE 矢量表:
    //禁用 CPU 中断
      Dint;

    //将 PIE 控制寄存器初始化为默认状态。
    //默认状态为禁用所有 PIE 中断和标志
    //被清除。
    //此函数位于 DSP2833x_PIECTRL.c 文件中。
      InitPieCtrl();

    //禁用 CPU 中断并清除所有 CPU 中断标志:
      IER = 0x0000;
      IFR = 0x0000;

    //使用指向 shell 中断的指针初始化 PIE 矢量表
    //服务例程(ISR)。
    //这将填充整个表,即使是中断也是如此
    //在本例中未使用。  这对于调试很有用。
    //可以在 DSP2833x_DefaultIsr.c 中找到 shell ISR 例程
    //此函数可在 DSP2833x_PieVect.c 中找到
      InitPieVectTable();

    //此示例中使用的中断被重新映射到
    //此文件中的 ISR 函数。
      EALLOW; //这是写入 EALLOW 受保护寄存器所必需的
       //写入 EALLOW 受保护的寄存器需要此操作



      PieVectTable.EPWM1_INT =&ePWM_ISR;
      PieVectTable.EPWM2_INT =&ePWM_ISR;
      PieVectTable.EPWM3_INT =&ePWM_ISR;
      PieVectTable.EPWM4_INT =&ePWM_ISR;
      EDIS;   //这是禁止写入 EALLOW 受保护寄存器所必需的

    //步骤4. 初始化所有器件外设:
    //此函数位于 DSP2833x_InitPeripherals.c 中
    // InitPeripherals (); //此示例不需要

    //对于此示例,只初始化 ePWM

      EALLOW;
      SysCtrlRegs.PCLKCR0.bit.TBCLKSYNC=0;
      EDIS;

      InitEPwm1Examples();
      InitEPwm2Examples();
      InitEPwm3Examples();
      InitEPwm4Examples();

      EALLOW;
      SysCtrlRegs.PCLKCR0.bit.TBCLKSYNC=1;
      EDIS;


    //步骤5. 特定于用户的代码、启用中断:

    //启用连接到 EPWM1-3 INT 的 CPU INT3:
      IER |= M_INT3;

    //在 PIE 中启用 ePWM INTn:组3中断1-3
      PieCtrlRegs.PIEIER3.bit.INTx1 = 1;
      PieCtrlRegs.PIEIER3.bit.INTx2 = 1;
      PieCtrlRegs.PIEIER3.bit.INTx3=1;
      PieCtrlRegs.PIEIER3.bit.INTx4 = 1;
    //启用全局中断和更高优先级的实时调试事件:
      EINT;  //启用全局中断 INTM
      ERTM;  //启用全局实时中断 DBGM

      //GpioDataRegs.GPACLEAR.bit.GPIO31 = 1;

    //步骤6. 空闲循环。 只需坐下来循环(可选):
      for (;;)
      {
          _asm ("         NOP");
      }

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

    代码"GpioDataRegs.GPACLEAR.bit.GPIO31 = 1;"行被注释掉。

    此外、我还按照相同的步骤在我的其中一项测试中使 GPIO32切换。 您能否单步执行 GPIO 数据寄存器清除和设置指令以确保它不是实际设置/清除?

    下面是我使 GPIO32切换的操作。

    EALLOW;
    GpioCtrlRegs.GPBPUD.bit.GPIO32 = 1;//禁用 GPIO32上的上拉电阻
    GpioCtrlRegs.GPBMUX1.bit.GPIO32 = 0;//配置 GPIO
    GpioCtrlRegs.GPBGMUX1.bit.GPIO32 = 0;//配置 GPIO
    GpioCtrlRegs.GPBDIR.bit.GPIO32 = 1;//输出
    EDIS;
    GpioDataRegs.GPBSET.BIO32 = 1;
    DELAY_US (3);
    GpioDataRegs.GPBCLEAR.bit.GPIO32=1; 

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    错误... 这在代码中被注释掉、因为我在没有 GPIO 切换的情况下运行它。 我想在程序开始时将 GPIO 引脚设置为高电平、并在程序执行结束时将其设置为低电平。 在上面的代码中、DELAY_US (3)的作用是什么
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    我提供的代码用于 GPIO32、它将 GPIO 设置为高电平3us、然后设置为低电平。 单步执行代码、查看它在设置后是否变为高电平、在清零后是否变为低电平。

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