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.
工具/软件: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;
我提供的代码用于 GPIO32、它将 GPIO 设置为高电平3us、然后设置为低电平。 单步执行代码、查看它在设置后是否变为高电平、在清零后是否变为低电平。