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/TMS320F28379D:在两个 CPU 上运行两个单独的 ADC 操作(CPU2上的 ADCA 和 CPU1上的 ADCC)

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/778371/ccs-tms320f28379d-running-two-individual-adc-operation-on-two-cpus-adca-on-cpu2-and-adcc-on-cpu1

器件型号:TMS320F28379D
主题中讨论的其他器件:C2000WARE

工具/软件:Code Composer Studio

您好!

我介绍了中的双编程示例 特别是 ADC_ePWM 项目。

在示例代码中、项目说明为 "此示例演示了如何利用 CPU2中的 ADC 和 ePWM 外设。 器件时钟(PLL)和 GPIO 设置使用 CPU1完成、而外设的所有其他配置使用 CPU2完成。" I 代码工作正常。

我编辑了上面的代码以运行两个不同的 ADC_Continuous 代码,即在 两个 CPU 上运行两个单独的 ADC 转换操作(CPU2上的 ADCA 和 CPU1上的 ADCC)

我已相应地编辑了 c 文件(adc_ePWM_CPU1.c 和 adc_ePWM_CPU2.c)、我将粘贴以下代码。

所以,我所面对的问题是:

目标:通过将 ADCC 所有权从 CPU1转移到 CPU2、在 CPU1和 CPU2中运行 ADCC (ADC_Continuous 项目)。


结果:当 CPU1在调试后运行时,ADC 程序在 ADCC 寄存器上运行,但当 CPU2运行时(两个 CPU 都运行),CPU1中的 ADC 操作暂停,ADCA 正在运行。 通过使用不同的方法更改 CPU1中的代码,我得出结论:一次只运行一个 ADC。
当 CPU1运行时、ADCC 工作
当 CPU1和 CPU2正在运行时,ADCA 正在工作,但 ADCC 被暂停。

ADC_ePWM_CPU1代码

#include "F28x_Project.h"

#define results_buffer_size 256

void ConfigureADC (void);
void SetupADCContinu模糊(uint16通道);

uint16 AdcResults[results_buffer_size];
uint16结果索引;

//
//主函
//
void main (void)

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

//
//步骤2. 初始化 GPIO:
//此示例函数位于 F2837xD_GPIO.c 文件和中
//说明了如何将 GPIO 设置为其默认状态。
//
InitGpio();

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

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

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

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

//
//启用全局中断和更高优先级的实时调试事件:
//
EINT;//启用全局中断 INTM
ERTM;//启用全局实时中断 DBGM

//
//将 ADCA 的所有权转移到 CPU02
//
EALLOW;
DevCfgRegs.CPUSEL11.bit.ADC_A = 1;
EDIS;

ConfigureADC();
设置-连续(3);


for (resultsIndex = 0;resultsIndex < results_buffer_size;resultsIndex++)

AdccResults[resultsIndex]=0;

resultsIndex = 0;


操作

//
//启用 ADCINT 标志
//
EALLOW;
AdccRegs.ADCINTSEL1N2.bit.INT1E = 1;
AdccRegs.ADCINTSEL1N2.bit.INT2E = 1;
AdccRegs.ADCINTSEL3N4.bit.INT3E = 1;
AdccRegs.ADCINTSEL3N4.bit.INT4E = 1;
AdccRegs.ADCINTFLGCLR.ALL = 0x000F;
EDIS;

//
//初始化结果索引
//
resultsIndex = 0;

//
//软件强制启动 SOC0到 SOC7
//
AdccRegs.ADCSOCFRC1.ALL = 0x0FFF;

//
//继续采样,直到结果缓冲区已满
//
while (resultsIndex < results_buffer_size)

//
//等待第一组8个转换完成
//
while (0 = AdcRegs.ADCINTFlG.bit.ADCINT3);

//
//清除前8个转换生成的两个 INT 标志
//
AdccRegs.ADCINTFLGCLR.bit.ADCINT1 = 1;
AdccRegs.ADCINTFLGCLR.bit.ADCINT3 = 1;

//
//保存前8次转换的结果
//
//请注意,在此期间,第二个8次转换具有
//已被 EOC6->ADCIN1触发,将处于活动状态
//在保存前8个结果时转换
//
AdccResults[resultsIndex++]= AdccResultRegs.ADCRESULT0;
AdccResults[resultsIndex++]= AdccResultRegs.ADCRESULT1;
AdccResults[resultsIndex++]= AdccResultRegs.ADCRESULT2;
AdccResults[resultsIndex++]= AdccResultRegs.ADCRESULT3;
AdccResults[resultsIndex++]= AdccResultRegs.ADCRESULT4;
AdccResults[resultsIndex++]= AdccResultRegs.ADCRESULT5;
AdccResults[resultsIndex++]= AdccResultRegs.ADCRESULT6;
AdccResults[resultsIndex++]= AdccResultRegs.ADCRESULT7;

//
//等待第二组8个转换完成
//
while (0 = AdcRegs.ADCINTFlG.bit.ADCINT4);

//
//清除第二8次转换生成的两个 INT 标志
//
AdccRegs.ADCINTFLGCLR.bit.ADCINT2 = 1;
AdccRegs.ADCINTFLGCLR.bit.ADCINT4 = 1;

//
//保存第二个8次转换的结果
//
//请注意,在这段时间内,前8次转换具有
//已由 EOC14->ADCIN2触发,并且将处于活动状态
//在保存第二个8个结果时转换
//
AdccResults[resultsIndex++]= AdccResultRegs.ADCRESULT8;
AdccResults[resultsIndex++]= AdccResultRegs.ADCRESULT9;
AdccResults[resultsIndex++]= AdccResultRegs.ADCRESULT10;
AdccResults[resultsIndex++]= AdccResultRegs.ADCRESULT11;
AdccResults[resultsIndex++]= AdccResultRegs.ADCRESULT12;
AdccResults[resultsIndex++]= AdccResultRegs.ADCRESULT13;
AdccResults[resultsIndex++]= AdccResultRegs.ADCRESULT14;
AdccResults[resultsIndex++]= AdccResultRegs.ADCRESULT15;

//
//禁用所有 ADCINT 标志以停止采样
//
EALLOW;
AdccRegs.ADCINTSEL1N2.bit.INT1E = 0;
AdccRegs.ADCINTSEL1N2.bit.INT2E = 0;
AdccRegs.ADCINTSEL3N4.bit.INT3E = 0;
AdccRegs.ADCINTSEL3N4.bit.INT4E = 0;
EDIS;

//
//此时,AdcaResults[]包含一系列转换
//从所选通道
//

//
//软件断点,再次点击运行以获取更新的转换
//
// asm (" ESTOP0");
} while (1);

//
// ConfigureADC -写入 ADC 配置并为两者加电
// ADC A 和 ADC B
//+
空配置 ADC (空)

EALLOW;

//
//写入配置
//
AdccRegs.ADCCTL2.bit.prescale = 6;//将 ADCCLK 分频器设置为/4
AdcSetMode (ADC_ADCC、ADC_Resolution、12位、ADC_SIGNALMODE_SINGLE);

//
//将脉冲位置设置为晚期
//
AdccRegs.ADCCTL1.bit.INTPULSEPOS = 1;

//
//为 ADC 加电
//
AdccRegs.ADCCTL1.bit.ADCPWDNZ = 1;

//
//延迟1ms 以允许 ADC 加电时间
//
DELAY_US (1000);

EDIS;

//
// SetupADCContinuously -设置 ADC 在一个通道上持续转换
//
空设置 ADCContinuid (uint16通道)

uint16 acqps;

//
//根据分辨率确定最小采集窗口(在 SYSCLKS 中)
//
if (adc_resolution_12bit = AdcRegs.ADCCTL2.bit.resolution)

acqps = 14;//75ns

否则、//分辨率为16位

acqps = 63;//320ns

EALLOW;
AdccRegs.ADCSOC0CTL.bit.CHSEL =通道;//SOC 将在通道上转换
AdccRegs.ADCSOC1CTL.bit.CHSEL =通道;//SOC 将在通道上转换
AdccRegs.ADCSOC2CTL.bit.CHSEL =通道;//SOC 将在通道上转换
AdccRegs.ADCSOC3CTL.bit.CHSEL =通道;//SOC 将在通道上转换
AdccRegs.ADCSOC4CTL.bit.CHSEL =通道;//SOC 将在通道上转换
AdccRegs.ADCSOC5CTL.bit.CHSEL =通道;//SOC 将在通道上转换
AdccRegs.ADCSOC6CTL.bit.CHSEL =通道;//SOC 将在通道上转换
AdccRegs.ADCSOC7CTL.bit.CHSEL =通道;//SOC 将在通道上转换
AdccRegs.ADCSOC8CTL.bit.CHSEL =通道;//SOC 将在通道上转换
AdccRegs.ADCSOC9CTL.bit.CHSEL =通道;//SOC 将在通道上转换
AdccRegs.ADCSOC10CTL.bit.CHSEL =通道;//SOC 将在通道上转换
AdccRegs.ADCSOC11CTL.bit.CHSEL =通道;//SOC 将在通道上转换
AdccRegs.ADCSOC12CTL.bit.CHSEL =通道;//SOC 将在通道上转换
AdccRegs.ADCSOC13CTL.bit.CHSEL =通道;//SOC 将在通道上转换
AdccRegs.ADCSOC14CTL.bit.CHSEL =通道;//SOC 将在通道上转换
AdccRegs.ADCSOC15CTL.bit.CHSEL =通道;//SOC 将在通道上转换

AdccRegs.ADCSOC0CTL.bit.ACQPS = acqps;//采样窗口为 acqps +
//1个 SYSCLK 周期
AdccRegs.ADCSOC1CTL.bit.ACQPS = acqps;//采样窗口为 acqps +
//1个 SYSCLK 周期
AdccRegs.ADCSOC2CTL.bit.ACQPS = acqps;//采样窗口为 acqps +
//1个 SYSCLK 周期
AdccRegs.ADCSOC3CTL.bit.ACQPS = acqps;//采样窗口为 acqps +
//1个 SYSCLK 周期
AdccRegs.ADCSOC4CTL.bit.ACQPS = acqps;//采样窗口为 acqps +
//1个 SYSCLK 周期
AdccRegs.ADCSOC5CTL.bit.ACQPS = acqps;//采样窗口为 acqps +
//1个 SYSCLK 周期
AdccRegs.ADCSOC6CTL.bit.ACQPS = acqps;//采样窗口为 acqps +
//1个 SYSCLK 周期
AdccRegs.ADCSOC7CTL.bit.ACQPS = acqps;//采样窗口为 acqps +
//1个 SYSCLK 周期
AdccRegs.ADCSOC8CTL.bit.ACQPS = acqps;//采样窗口为 acqps +
//1个 SYSCLK 周期
AdccRegs.ADCSOC9CTL.bit.ACQPS = acqps;//采样窗口为 acqps +
//1个 SYSCLK 周期
AdccRegs.ADCSOC10CTL.bit.ACQPS = acqps;//采样窗口为 acqps +
//1个 SYSCLK 周期
AdccRegs.ADCSOC11CTL.bit.ACQPS = acqps;//采样窗口为 acqps +
//1个 SYSCLK 周期
AdccRegs.ADCSOC12CTL.bit.ACQPS = acqps;//采样窗口为 acqps +
//1个 SYSCLK 周期
AdccRegs.ADCSOC13CTL.bit.ACQPS = acqps;//采样窗口为 acqps +
//1个 SYSCLK 周期
AdccRegs.ADCSOC14CTL.bit.ACQPS = acqps;//采样窗口为 acqps +
//1个 SYSCLK 周期
AdccRegs.ADCSOC15CTL.bit.ACQPS = acqps;//采样窗口为 acqps +
//1个 SYSCLK 周期

AdccRegs.ADCINTSEL1N2.bit.INT1E = 0;//禁用 INT1标志
AdccRegs.ADCINTSEL1N2.bit.INT2E = 0;//禁用 INT2标志
AdccRegs.ADCINTSEL3N4.bit.INT3E = 0;//禁用 INT3标志
AdccRegs.ADCINTSEL3N4.bit.INT4E = 0;//禁用 INT4标志

AdccRegs.ADCINTSEL1N2.bit.INT1CONT = 0;
AdccRegs.ADCINTSEL1N2.bit.INT2CONT = 0;
AdccRegs.ADCINTSEL3N4.bit.INT3CONT = 0;
AdccRegs.ADCINTSEL3N4.bit.INT4CONT = 0;

AdccRegs.ADCINTSEL1N2.bit.INT1SEL = 6;// SOC6的末尾将设置 INT1标志
AdccRegs.ADCINTSEL1N2.bit.INT2SEL = 14;// SOC14结束将设置 INT2标志
AdccRegs.ADCINTSEL3N4.bit.INT3SEL = 7;// SOC7结束将设置 INT3标志
AdccRegs.ADCINTSEL3N4.bit.INT4SEL = 15;// SOC15结束将设置 INT4标志

//
//ADCINT2将触发前8个 SOC
//
AdccRegs.ADCINTSOCSEL.bit.SOC0 = 2;
AdccRegs.ADCINTSOCSEL1.bit.SOC1 = 2;
AdccRegs.ADCINTSOCSEL1.bit.SOC2 = 2;
AdccRegs.ADCINTSOCSEL1.bit.SOC3 = 2;
AdccRegs.ADCINTSOCSEL1.bit.SOC4 = 2;
AdccRegs.ADCINTSOCSEL1.bit.SOC5 = 2;
AdccRegs.ADCINTSOCSEL1.bit.SOC6 = 2;
AdccRegs.ADCINTSOCSEL1.bit.SOC7 = 2;

//
//ADCINT1将触发第二个8个 SOC
//
AdccRegs.ADCINTSOCSEL2.bit.SOC8 = 1;
AdccRegs.ADCINTSOCSEL2.bit.SOC9 = 1;
AdccRegs.ADCINTSOCSEL2.bit.SOC10 = 1;
AdccRegs.ADCINTSOCSEL2.bit.SOC11 = 1;
AdccRegs.ADCINTSOCSEL2.bit.SOC12 = 1;
AdccRegs.ADCINTSOCSEL2.bit.SOC13 = 1;
AdccRegs.ADCINTSOCSEL2.bit.SOC14 = 1;
AdccRegs.ADCINTSOCSEL2.bit.SOC15 = 1;
EDIS;

ADC_ePWM_CPU2代码

#include "F28x_Project.h"

//
//定义
//
#define results_buffer_size 256 //缓冲区、用于存储转换结果
//(大小必须是16的倍数)
//
//全局
//
uint16 AdcaResults[results_buffer_size];
uint16结果索引;

//
//函数原型
//
void ConfigureADC (void);
void SetupADCContinu模糊(uint16通道);
//
//主函
//
void main (void)

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

//
//步骤2. 初始化 GPIO:
//此示例函数位于 F2837xD_GPIO.c 文件和中
//说明了如何将 GPIO 设置为其默认状态。
//
// InitGpio();//针对此示例跳过

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

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

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

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

//
//为 ADC 加电
//
EALLOW;
CpuSysRegs.PCLKCR13.bit.ADC_A = 1;

//
//配置 ADC 并为其加电
//
ConfigureADC();

//
//在通道0上设置用于连续转换的 ADC
//
SetupADCContinu模糊(0);

//
//启用全局中断和更高优先级的实时调试事件:
//
EINT;//启用全局中断 INTM
ERTM;//启用全局实时中断 DBGM

//
//初始化结果缓冲区
//
for (resultsIndex = 0;resultsIndex < results_buffer_size;resultsIndex++)

AdcaResults[resultsIndex]=0;

resultsIndex = 0;

EALLOW;

//
//循环无限地进行转换
//
操作

//
//启用 ADCINT 标志
//
AdcaRegs.ADCINTSEL1N2.bit.INT1E = 1;
AdcaRegs.ADCINTSEL1N2.bit.INT2E = 1;
AdcaRegs.ADCINTSEL3N4.bit.INT3E = 1;
AdcaRegs.ADCINTSEL3N4.bit.INT4E = 1;
AdcaRegs.ADCINTFLGCLR.ALL = 0x000F;

//
//初始化结果索引
//
resultsIndex = 0;

//
//软件强制启动 SOC0到 SOC7
//
AdcaRegs.ADCSOCFRC1.ALL = 0x00FF;

//
//继续采样,直到结果缓冲区已满
//
while (resultsIndex < results_buffer_size)

//
//等待第一组8个转换完成
//
while (0 = AdcaRegs.ADCINTFlG.bit.ADCINT3);

//
//清除前8个转换生成的两个 INT 标志
//
AdcaRegs.ADCINTFLGCLR.bit.ADCINT1 = 1;
AdcaRegs.ADCINTFLGCLR.bit.ADCINT3 = 1;

//
//保存前8次转换的结果
//
//请注意,在此期间,第二个8次转换具有
//已被 EOC6->ADCIN1触发,将处于活动状态
//在保存前8个结果时转换
//
AdcaResults[resultsIndex++]= AdcaResultRegs.ADCRESULT0;
AdcaResults[resultsIndex++]= AdcaResultRegs.ADCRESULT1;
AdcaResults[resultsIndex++]= AdcaResultRegs.ADCRESULT2;
AdcaResults[resultsIndex++]= AdcaResultRegs.ADCRESULT3;
AdcaResults[resultsIndex++]= AdcaResultRegs.ADCRESULT4;
AdcaResults[resultsIndex++]= AdcaResultRegs.ADCRESULT5;
AdcaResults[resultsIndex++]= AdcaResultRegs.ADCRESULT6;
AdcaResults[resultsIndex++]= AdcaResultRegs.ADCRESULT7;

//
//等待第二组8个转换完成
//
while (0 = AdcaRegs.ADCINTFlG.bit.ADCINT4);

//
//清除第二8次转换生成的两个 INT 标志
//
AdcaRegs.ADCINTFLGCLR.bit.ADCINT2 = 1;
AdcaRegs.ADCINTFLGCLR.bit.ADCINT4 = 1;

//
//保存第二个8次转换的结果
//
//请注意,在这段时间内,前8次转换具有
//已由 EOC14->ADCIN2触发,并且将处于活动状态
//在保存第二个8个结果时转换
//
AdcaResults[resultsIndex++]= AdcaResultRegs.ADCRESULT8;
AdcaResults[resultsIndex++]= AdcaResultRegs.ADCRESULT9;
AdcaResults[resultsIndex++]= AdcaResultRegs.ADCRESULT10;
AdcaResults[resultsIndex++]= AdcaResultRegs.ADCRESULT11;
AdcaResults[resultsIndex++]= AdcaResultRegs.ADCRESULT12;
AdcaResults[resultsIndex++]= AdcaResultRegs.ADCRESULT13;
AdcaResults[resultsIndex++]= AdcaResultRegs.ADCRESULT14;
AdcaResults[resultsIndex++]= AdcaResultRegs.ADCRESULT15;

//
//禁用所有 ADCINT 标志以停止采样
//
AdcaRegs.ADCINTSEL1N2.bit.INT1E = 0;
AdcaRegs.ADCINTSEL1N2.bit.INT2E = 0;
AdcaRegs.ADCINTSEL3N4.bit.INT3E = 0;
AdcaRegs.ADCINTSEL3N4.bit.INT4E = 0;

//
//此时,AdcaResults[]包含一系列转换
//从所选通道
//

//
//软件断点,再次点击运行以获取更新的转换
//
// asm (" ESTOP0");
DELAY_US (1000);
} while (1);


//
// ConfigureADC -写入 ADC 配置并为 ADC 加电
// ADC A 和 ADC B
//
空配置 ADC (空)

EALLOW;

//
//写入配置
//
AdcaRegs.ADCCTL2.bit.prescale = 6;//将 ADCCLK 分频器设置为/4
AdcSetMode (ADC_ADCA、ADC_resolution_12位、ADC_SIGNALMODE_SINGLE);

//
//将脉冲位置设置为晚期
//
AdcaRegs.ADCCTL1.bit.INTPULSEPOS=1;

//
//为 ADC 加电
//
AdcaRegs.ADCCTL1.bit.ADCPWDNZ = 1;

//
//延迟1ms 以允许 ADC 加电时间
//
DELAY_US (1000);

EDIS;

//
// SetupADCContinuously -设置 ADC 在一个通道上连续转换
//
空设置 ADCContinuid (uint16通道)

uint16 acqps;

//
//根据分辨率确定最小采集窗口(在 SYSCLKS 中)
//
if (adc_resolution_12bit = AdcaRegs.ADCCTL2.bit.resolution)

acqps = 14;//75ns

否则//分辨率为16位

acqps = 63;//320ns

EALLOW;
AdcaRegs.ADCSOC0CTL.bit.CHSEL =通道;//SOC 将在通道上转换
AdcaRegs.ADCSOC1CTL.bit.CHSEL =通道;//SOC 将在通道上转换
AdcaRegs.ADCSOC2CTL.bit.CHSEL =通道;//SOC 将在通道上转换
AdcaRegs.ADCSOC3CTL.bit.CHSEL =通道;//SOC 将在通道上转换
AdcaRegs.ADCSOC4CTL.bit.CHSEL =通道;//SOC 将在通道上转换
AdcaRegs.ADCSOC5CTL.bit.CHSEL =通道;//SOC 将在通道上转换
AdcaRegs.ADCSOC6CTL.bit.CHSEL =通道;//SOC 将在通道上转换
AdcaRegs.ADCSOC7CTL.bit.CHSEL =通道;//SOC 将在通道上转换
AdcaRegs.ADCSOC8CTL.bit.CHSEL =通道;//SOC 将在通道上转换
AdcaRegs.ADCSOC9CTL.bit.CHSEL =通道;//SOC 将在通道上转换
AdcaRegs.ADCSOC10CTL.bit.CHSEL =通道;//SOC 将在通道上转换
AdcaRegs.ADCSOC11CTL.bit.CHSEL =通道;//SOC 将在通道上转换
AdcaRegs.ADCSOC12CTL.bit.CHSEL =通道;//SOC 将在通道上转换
AdcaRegs.ADCSOC13CTL.bit.CHSEL =通道;//SOC 将在通道上转换
AdcaRegs.ADCSOC14CTL.bit.CHSEL =通道;//SOC 将在通道上转换
AdcaRegs.ADCSOC15CTL.bit.CHSEL =通道;//SOC 将在通道上转换

AdcaRegs.ADCSOC0CTL.bit.ACQPS = acqps;//采样为 acqps + 1个 SYSCLK 周期
AdcaRegs.ADCSOC1CTL.bit.ACQPS = acqps;//采样为 acqps + 1个 SYSCLK 周期
AdcaRegs.ADCSOC2CTL.bit.ACQPS = acqps;//采样为 acqps + 1个 SYSCLK 周期
AdcaRegs.ADCSOC3CTL.bit.ACQPS = acqps;//采样为 acqps + 1个 SYSCLK 周期
AdcaRegs.ADCSOC4CTL.bit.ACQPS = acqps;//采样为 acqps + 1个 SYSCLK 周期
AdcaRegs.ADCSOC5CTL.bit.ACQPS = acqps;//采样为 acqps + 1个 SYSCLK 周期
AdcaRegs.ADCSOC6CTL.bit.ACQPS = acqps;//采样为 acqps + 1个 SYSCLK 周期
AdcaRegs.ADCSOC7CTL.bit.ACQPS = acqps;//采样为 acqps + 1个 SYSCLK 周期
AdcaRegs.ADCSOC9CTL.bit.ACQPS = acqps;//采样为 acqps + 1个 SYSCLK 周期
AdcaRegs.ADCSOC10CTL.bit.ACQPS = acqps;//采样为 acqps + 1个 SYSCLK 周期
AdcaRegs.ADCSOC11CTL.bit.ACQPS = acqps;//采样为 acqps + 1个 SYSCLK 周期
AdcaRegs.ADCSOC12CTL.bit.ACQPS = acqps;//采样为 acqps + 1个 SYSCLK 周期
AdcaRegs.ADCSOC13CTL.bit.ACQPS = acqps;//采样为 acqps + 1个 SYSCLK 周期
AdcaRegs.ADCSOC14CTL.bit.ACQPS = acqps;//采样为 acqps + 1个 SYSCLK 周期
AdcaRegs.ADCSOC15CTL.bit.ACQPS = acqps;//采样为 acqps + 1个 SYSCLK 周期

AdcaRegs.ADCINTSEL1N2.bit.INT1E = 0;//禁用 INT1标志
AdcaRegs.ADCINTSEL1N2.bit.INT2E = 0;//禁用 INT2标志
AdcaRegs.ADCINTSEL3N4.bit.INT3E = 0;//禁用 INT3标志
AdcaRegs.ADCINTSEL3N4.bit.INT4E = 0;//禁用 INT4标志

AdcaRegs.ADCINTSEL1N2.bit.INT1CONT = 0;
AdcaRegs.ADCINTSEL1N2.bit.INT2CONT = 0;
AdcaRegs.ADCINTSEL3N4.bit.INT3CONT = 0;
AdcaRegs.ADCINTSEL3N4.bit.INT4CONT = 0;

AdcaRegs.ADCINTSEL1N2.bit.INT1SEL = 6;// SOC6的末尾将设置 INT1标志
AdcaRegs.ADCINTSEL1N2.bit.INT2SEL = 14;// SOC14结束将设置 INT2标志
AdcaRegs.ADCINTSEL3N4.bit.INT3SEL = 7;// SOC7结束将设置 INT3标志
AdcaRegs.ADCINTSEL3N4.bit.INT4SEL = 15;// SOC15结束将设置 INT4标志

//
//ADCINT2将触发前8个 SOC
//
AdcaRegs.ADCINTSOCSEL1.bit.SOC0 = 2;
AdcaRegs.ADCINTSOCSEL1.bit.SOC1 = 2;
AdcaRegs.ADCINTSOCSEL1.bit.SOC2 = 2;
AdcaRegs.ADCINTSOCSEL1.bit.SOC3 = 2;
AdcaRegs.ADCINTSOCSEL1.bit.SOC4 = 2;
AdcaRegs.ADCINTSOCSEL1.bit.SOC5 = 2;
AdcaRegs.ADCINTSOCSEL1.bit.SOC6 = 2;
AdcaRegs.ADCINTSOCSEL1.bit.SOC7 = 2;

//
//ADCINT1将触发第二个8个 SOC
//
AdcaRegs.ADCINTSOCSEL2.bit.SOC8 = 1;
AdcaRegs.ADCINTSOCSEL2.bit.SOC9 = 1;
AdcaRegs.ADCINTSOCSEL2.bit.SOC10 = 1;
AdcaRegs.ADCINTSOCSEL2.bit.SOC11 = 1;
AdcaRegs.ADCINTSOCSEL2.bit.SOC12 = 1;
AdcaRegs.ADCINTSOCSEL2.bit.SOC13 = 1;
AdcaRegs.ADCINTSOCSEL2.bit.SOC14 = 1;
AdcaRegs.ADCINTSOCSEL2.bit.SOC15 = 1;

我已在 case2 (两个运行的 CPU)中附加了屏幕截图。

如上所示、当 CPU2与 CPU1并行运行时、Adccresult 缓冲区未被识别。 很抱歉我的英语。

此致、

Ashwin

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

    我认为您需要选择 CPU1实例以在调试窗口中查看"AdcResults"。

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


    感谢您的快速回答,我将按照您的说明尝试。

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

    正如你所说的那样,它的工作正常。

    此致、
    Ashwin