您好!
该程序不会在中断时停止。
*****
#include "F28x_Project.h"
//
//函数原型
//
void ConfigureADCB (void);
void SetupADCBEpwm (uint16通道);
中断空 ADCB_ISR (空);
void ePWM_initEpwm (void);
UINT16 TBPRD = 5000;
void main (void)
{
InitSysCtrl();
Dint;
InitPieCtrl();
IER = 0x0000;
IFR = 0x0000;
InitPieVectTable();
EALLOW;
PieVectTable.ADCB1_INT =&ADCB_ISR;// ADCB 中断1的函数
EDIS;
ePWM_initEpwm();
SetupADCBEpwm (0);
ConfigureADCB();
IER |= M_INT1;//启用组1中断
EINT;//启用全局中断 INTM
ERTM;//启用全局实时中断 DBGM
//
//启用 PIE 中断
//
组中的 PieCtrlRegs.PIEIER1.bit.INTx2 = 1;// ADCB INT
EALLOW;
CpuSysRegs.PCLKCR0.bit.TBCLKSYNC=1;
EPwm1Regs.TBCTL.bit.CTRMODE = 0;//取消冻结、并进入递增计数模式
EDIS;
//
//循环无限地进行转换
//
操作
{}
while (1);
}
中断空 ADCB_ISR (空)
{
AdcbRegs.ADCINTFLGCLR.bit.ADCINT1 = 1;//清除 INT1标志
PieCtrlRegs.PIEACX.ALL = PIEACK_Group1;
}
空配置 ADCB (空)
{
EALLOW;
//
//写入配置
//
AdcbRegs.ADCCTL2.bit.prescale = 6;//将 ADCCLK 分频器设置为/4
AdcSetMode (ADC_ADCB、ADC_Resolution、12位、ADC_SIGNALMODE_SINGLE);
//
//将脉冲位置设置为晚期
//
AdcbRegs.ADCCTL1.bit.INTPULSEPOS = 1;
//
//为 ADC 加电
//
AdcbRegs.ADCCTL1.bit.ADCPWDNZ = 1;
//
//延迟1ms 以允许 ADC 加电时间
//
DELAY_US (1000);
EDIS;
}
void SetupADCBEpwm (uint16通道)
{
uint16 acqps;
//
//根据分辨率确定最小采集窗口(在 SYSCLKS 中)
//
if (adc_resolution_12bit = AdcbRegs.ADCCTL2.bit.resolution)
{
acqps = 14;//75ns
}
否则、//分辨率为16位
{
acqps = 63;//320ns
}
//
//选择要转换的通道和转换结束标志
//
EALLOW;
AdcbRegs.ADCSOC0CTL.bit.CHSEL =通道;//SOC0将转换引脚 A0
AdcbRegs.ADCSOC0CTL.bit.ACQPS = acqps;//采样窗口为100个 SYSCLK 周期
AdcbRegs.ADCSOC0CTL.bit.TRIGSEL = 0x5;// ePWM1 SOCA 上的触发
AdcbRegs.ADCINTSEL1N2.bit.INT1SEL = 0x0;// SOC0结束将设置 INT1标志
AdcbRegs.ADCINTSEL1N2.bit.INT1E = 1;//启用 INT1标志
AdcbRegs.ADCINTFLGCLR.bit.ADCINT1 = 1;//确保 INT1标志被清除
EDIS;
}
//
// ConfigureEPWM -配置 ePWM SOC 并比较值
//
void ePWM_initEpwm (void)
{
EALLOW;
CpuSysRegs.PCLKCR0.bit.TBCLKSYNC=0;//关闭 ePWM 时钟
EPwm1Regs.ETSEL.bit.SOCASEL = 4;//在递增计数时选择 SOC
EPwm1Regs.ETPS.bit.SOCAPRD = 1;//在发生第一个事件时生成脉冲
EPwm1Regs.TBPRD = TBPRD;//将周期设置为 TBPRD 计数
EPwm1Regs.TBCTL.bit.CTRMODE = 3;//冻结计数器
EPwm1Regs.ETSEL.bit.SOCAEN = 1;//启用 SOCA
EPwm1Regs.AQCTLA.bit.CAU = AQ_SET;//清零 PWM1A
EPwm1Regs.AQCTLA.bit.PRD = AQ_CLEAR;
EDIS;
}
//
//文件结束
//
小图标
谢谢 Vadim