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.

TMS320F28377D: ADC C 及 D怎样用CPU2的PWM4进行触发

Part Number: TMS320F28377D

TI的 FAE您好!

在使用时 PWM1 PWM2 PWM3 为CPU1 控制 PWM4 PWM5 PWM6为CPU2控制 ADC转换器 A B C D都使用

我把ADC C 和ADC D 配置为CPU1控制 使用PWM1 触发ADC采样;可以实现ADC A BC D都能转换

EALLOW;
//allocate PWM1, PWM2 and PWM3 to CPU1
DevCfgRegs.CPUSEL0.bit.EPWM1 = Peripheral_Con_CPU1;
DevCfgRegs.CPUSEL0.bit.EPWM2 = Peripheral_Con_CPU1;
DevCfgRegs.CPUSEL0.bit.EPWM3 = Peripheral_Con_CPU1;

DevCfgRegs.CPUSEL0.bit.EPWM4 = Peripheral_Con_CPU2;
DevCfgRegs.CPUSEL0.bit.EPWM5 = Peripheral_Con_CPU2;
DevCfgRegs.CPUSEL0.bit.EPWM6 = Peripheral_Con_CPU2;

DevCfgRegs.CPUSEL11.bit.ADC_A = Peripheral_Con_CPU1;
DevCfgRegs.CPUSEL11.bit.ADC_B = Peripheral_Con_CPU1;
DevCfgRegs.CPUSEL11.bit.ADC_C = Peripheral_Con_CPU1;
DevCfgRegs.CPUSEL11.bit.ADC_D = Peripheral_Con_CPU1;
EDIS;

void SetupADCCEpwm(uint16_t channel)
{
Uint16 acqps;

//determine minimum acquisition window (in SYSCLKS) based on resolution
if(ADC_RESOLUTION_12BIT == AdccRegs.ADCCTL2.bit.RESOLUTION)
{
acqps = 14; //75ns
}
else
{ //resolution is 16-bit
acqps = 63; //320ns
}

//Select the channels to convert and end of conversion flag
EALLOW;
AdccRegs.ADCSOC0CTL.bit.CHSEL = channel;
AdccRegs.ADCSOC0CTL.bit.ACQPS = acqps; 
AdccRegs.ADCSOC0CTL.bit.TRIGSEL = 0x05;
AdccRegs.ADCINTSEL1N2.bit.INT1SEL = 0; 
AdccRegs.ADCINTSEL1N2.bit.INT1E = 0;
AdccRegs.ADCINTFLGCLR.bit.ADCINT1 = 1; 
EDIS;
}

void SetupADCDEpwm(uint16_t channel)
{
Uint16 acqps;

//determine minimum acquisition window (in SYSCLKS) based on resolution
if(ADC_RESOLUTION_12BIT == AdcdRegs.ADCCTL2.bit.RESOLUTION)
{
acqps = 14; //75ns
}
else
{ //resolution is 16-bit
acqps = 63; //320ns
}

//Select the channels to convert and end of conversion flag
EALLOW;
AdcdRegs.ADCSOC0CTL.bit.CHSEL = channel;
AdcdRegs.ADCSOC0CTL.bit.ACQPS = acqps;
AdcdRegs.ADCSOC0CTL.bit.TRIGSEL = 0x05; 
AdcdRegs.ADCINTSEL1N2.bit.INT1SEL = 0;
AdcdRegs.ADCINTSEL1N2.bit.INT1E = 0; 
AdcdRegs.ADCINTFLGCLR.bit.ADCINT1 = 1;
EDIS;
}

但我把ADC C  和  ADC D配置为CPU2控制  用PWM4触发 就不成功了

EALLOW;
//allocate PWM1, PWM2 and PWM3 to CPU1
DevCfgRegs.CPUSEL0.bit.EPWM1 = Peripheral_Con_CPU1;
DevCfgRegs.CPUSEL0.bit.EPWM2 = Peripheral_Con_CPU1;
DevCfgRegs.CPUSEL0.bit.EPWM3 = Peripheral_Con_CPU1;

DevCfgRegs.CPUSEL0.bit.EPWM4 = Peripheral_Con_CPU2;
DevCfgRegs.CPUSEL0.bit.EPWM5 = Peripheral_Con_CPU2;
DevCfgRegs.CPUSEL0.bit.EPWM6 = Peripheral_Con_CPU2;

DevCfgRegs.CPUSEL11.bit.ADC_A = Peripheral_Con_CPU1;
DevCfgRegs.CPUSEL11.bit.ADC_B = Peripheral_Con_CPU1;
DevCfgRegs.CPUSEL11.bit.ADC_C = Peripheral_Con_CPU2;
DevCfgRegs.CPUSEL11.bit.ADC_D = Peripheral_Con_CPU2;
EDIS;

void SetupADCCEpwm(uint16_t channel)
{
Uint16 acqps;

//determine minimum acquisition window (in SYSCLKS) based on resolution
if(ADC_RESOLUTION_12BIT == AdccRegs.ADCCTL2.bit.RESOLUTION)
{
acqps = 14; //75ns
}
else
{ //resolution is 16-bit
acqps = 63; //320ns
}

//Select the channels to convert and end of conversion flag
EALLOW;
AdccRegs.ADCSOC0CTL.bit.CHSEL = channel;
AdccRegs.ADCSOC0CTL.bit.ACQPS = acqps; 
AdccRegs.ADCSOC0CTL.bit.TRIGSEL = 0x0b;
AdccRegs.ADCINTSEL1N2.bit.INT1SEL = 0; 
AdccRegs.ADCINTSEL1N2.bit.INT1E = 0;
AdccRegs.ADCINTFLGCLR.bit.ADCINT1 = 1; 
EDIS;
}

void SetupADCDEpwm(uint16_t channel)
{
Uint16 acqps;

//determine minimum acquisition window (in SYSCLKS) based on resolution
if(ADC_RESOLUTION_12BIT == AdcdRegs.ADCCTL2.bit.RESOLUTION)
{
acqps = 14; //75ns
}
else
{ //resolution is 16-bit
acqps = 63; //320ns
}

//Select the channels to convert and end of conversion flag
EALLOW;
AdcdRegs.ADCSOC0CTL.bit.CHSEL = channel;
AdcdRegs.ADCSOC0CTL.bit.ACQPS = acqps;
AdcdRegs.ADCSOC0CTL.bit.TRIGSEL = 0x0b; 
AdcdRegs.ADCINTSEL1N2.bit.INT1SEL = 0;
AdcdRegs.ADCINTSEL1N2.bit.INT1E = 0; 
AdcdRegs.ADCINTFLGCLR.bit.ADCINT1 = 1;
EDIS;
}

 我确定进入了PWM4的中断

  • 问题已经解决,如果需要CPU2控制ADC C D则ADC C D 的配置文件需要在CPU2进行配置