PieCtrlRegs.PIEIER3.bit.INTx2 = 0; //Disable EPwm2_INT interrupt EPwm2Regs.ETSEL.bit.INTEN = TB_DISABLE; //Disable EPwm2_INT for( ;; ) { asm(" NOP"); if( GpioDataRegs.GPADAT.bit.GPIO13==1 ) { break; } }
时间: 2024-04-14 17:31:55 浏览: 193
这段代码是用于禁用EPwm2_INT中断并等待GPIO13引脚变为高电平后跳出循环。
首先,通过`PieCtrlRegs.PIEIER3.bit.INTx2 = 0;`将EPwm2_INT中断禁用。
接下来,通过`EPwm2Regs.ETSEL.bit.INTEN = TB_DISABLE;`将EPwm2_INT禁用。
然后,进入一个无限循环,循环体内使用`asm(" NOP");`空指令进行延迟,并通过`if( GpioDataRegs.GPADAT.bit.GPIO13==1 )`检测GPIO13引脚是否为高电平(1),如果是,则跳出循环。
这段代码的目的可能是等待某个条件满足后再继续执行后面的代码。
相关问题
使用TMS320F28377D开发板,写一个使用按键触发中断产生epwm的程序
好的,这里是一个使用TMS320F28377D开发板的按键中断产生EPWM的代码示例。假设你要使用GPIO0作为按键输入,EPWM1作为输出:
```C
// 引入 TMS320F28377D 头文件
#include "DSP2833x_Device.h"
// 定义中断服务函数
interrupt void epwm_isr(void);
// 定义 GPIO 按键输入引脚
#define GPIO_KEY GPIO_Number_0
void main(void)
{
// 初始化系统时钟和 GPIO
InitSysCtrl();
InitGpio();
// 配置 GPIO0 为输入
GPIO_SetupPinMux(GPIO_KEY, GPIO_MUX_CPU1, 0);
GPIO_SetupPinOptions(GPIO_KEY, GPIO_INPUT, GPIO_PUSHPULL);
// 配置 EPWM1
EPwm1Regs.TBCTL.bit.CTRMODE = TB_COUNT_UPDOWN; // 上下计数模式
EPwm1Regs.TBCTL.bit.PHSEN = TB_DISABLE; // 禁用相位调制
EPwm1Regs.TBCTL.bit.HSPCLKDIV = TB_DIV1; // 高速时钟分频为 1
EPwm1Regs.TBCTL.bit.CLKDIV = TB_DIV1; // 时钟分频为 1
EPwm1Regs.AQCTLA.bit.CAU = AQ_SET; // 当计数器等于 CMPA 时,设置 A 信号为高电平
EPwm1Regs.AQCTLA.bit.CAD = AQ_CLEAR; // 当计数器等于 CMPA 时,设置 A 信号为低电平
EPwm1Regs.CMPA.bit.CMPA = 0x7FFF; // 设置 CMPA 为最大值的一半
// 配置中断
EALLOW;
PieVectTable.EPWM1_INT = &epwm_isr; // 将中断服务函数指针赋给 EPWM1 中断向量
PieCtrlRegs.PIEIER3.bit.INTx1 = 1; // 使能 EPWM1 中断
PieCtrlRegs.PIEACK.all = PIEACK_GROUP3; // 确认中断
EPwm1Regs.ETSEL.bit.INTSEL = ET_CTR_ZERO; // 当计数器为 0 时产生中断
EPwm1Regs.ETSEL.bit.INTEN = 1; // 使能中断
EDIS;
// 启动 EPWM1
EPwm1Regs.TBCTL.bit.CTRMODE = TB_COUNT_UPDOWN;
EPwm1Regs.TBCTL.bit.SWFSYNC = 1; // 同步时间基准
// 无限循环等待中断
while(1);
}
interrupt void epwm_isr(void)
{
// 判断是否是按键触发中断
if(GPIO_ReadPin(GPIO_KEY) == 0)
{
// 产生一个 EPWM 脉冲
EPwm1Regs.TBCTR = 0; // 重置计数器
EPwm1Regs.TBCTL.bit.SWFSYNC = 1; // 同步时间基准
}
// 确认中断
PieCtrlRegs.PIEACK.all = PIEACK_GROUP3;
}
```
这段代码的实现方式是:在初始化后,配置中断服务函数,使能 EPWM1 中断。在 EPWM1 中断服务函数中,判断是否是按键触发中断,如果是,则产生一个 EPWM 脉冲。最后,在主函数中启动 EPWM1 并进入一个无限循环等待中断。
阅读全文