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.

[参考译文] LAUNCHXL-F28379D:F28379D ADC 模块(使用 Adca1和 Adcb1中断的 Lab6)

Guru**** 2535750 points


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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/966688/launchxl-f28379d-f28379d-adc-module-lab6-using-adca1-and-adcb1-interrupts

器件型号:LAUNCHXL-F28379D

我想测试 F28379D 的牵引 ADC、并在内存浏览器中观察它们的输出、同时进行采样。 我希望 e2e.ti.com/.../4130.code.docx 使用 ePWM2-ADCSOCA 触发器对 adca 的 ch0和 ADCB 的 CH2进行采样、然后我想将 ADCINA0 (引脚#30)和 ADCINB2 (引脚#28)连接到午餐板的 P18和 P19 、并在 AdcBuf 和 AdcBuF1寄存器中查看它们的数据、但我不断遇到这个错误:  

"../adc.c"、第92行:错误#29:需要表达式
1在编译"../adc.c"时检测到错误。

是否有人能  告诉我 我缺少了什么?

请注意、第92行是 :IER |= 0x0001;

 下面是我所做的;我使用 了实验课程的 Lab6并添加了以下项目:

1-在 Lab.h 中添加了以下变量:

全局变量引用
//
extern float32 xDelay[filter_LEN];
extern float32系数[filter_LEN];
extern UINT16 AdcBuf[ADC_BUF_LEN];
extern UINT16 AdcBuf1[ADC_BUF_LEN];//*** MZ
extern UINT16 AdcBufFiled[ADC_BUF_LEN];
extern UINT16 AdcBuf1Filed[ADC_BUF_LEN];//**mz
extern UINT16 AdcBufRaw[2*ADC_BUF_LEN];
extern UINT16 AdcBuf1Raw[2 * ADC_BUF_LEN];//*** mz
extern UINT16 ClaFilteredOutput;
extern UINT16 DacOffset;

2-in main 函数我添加了以下变量:

#include "Lab.h"//主 include 文件

//--全局变量
UINT16 DEBUG_TOGGLE = 1;//用于实时模式调查测试
uint16 sine_enable = 0;//用于 DAC 波形生成
uint16 AdcBuf[ADC_BUF_LEN];// ADC 缓冲区分配
uint16 AdcBuf1[ADC_BUF_LEN];// ADC buffer1分配四个月
uint16 DacOffset;// DAC offset
uint16 DacOutput;// DAC 输出

3 -在默认 ISR 中、我添加了以下详细信息:

中断空 ADCB1_ISR (空)// PIE1.1 @ 0x000D40 ADC-B4]中断#1

静态 uint16 * AdcBufPtr1 = AdcBuf1;//指向缓冲区的指针
//static UINT16 iQuadratureTable = 0;//正交表索引
静态易失性 UINT16 GPIO34_COUNT = 0;//引脚切换计数器

PieCtrlRegs.PIEACX.ALL = PIEACK_Group1;//必须确认 PIE 组

//--管理 ADC 寄存器
AdcbRegs.ADCINTFLGCLR.bit.ADCINT1 = 1;//清除 ADCINT1标志

//---读取 ADC 结果
*AdcBufPtr1++= AdcbResultRegs.ADCRESULT0;//读取结果

//--蛮力强制循环缓冲器
if (AdcBufPtr1 =>(AdcBuF1 + ADC_BUF_LEN))

AdcBufPtr1 = AdcBuF1;//将指针回卷到开头

//--示例:切换 GPIO18,以便我们可以使用 ADC 读取它***/
if (debug_toggle = 1)

GpioDataRegs.GPATOGGLE.bit.GPIO18 = 1;//切换引脚

4-在 adc.c 中、我添加了以下详细信息:

函数:InitAdca()
*
*说明:在 F28x7x 上初始化 ADC-A 和 B
(二 /
空 InitAdca (空)

asm (" EALLOW");//启用 EALLOW 受保护寄存器访问

//--复位 ADC。 这是一种良好的编程实践。
DevCfgRegs.SOFTPRES13.bit.ADC_A = 1;// ADC 复位
DevCfgRegs.SOFTPRES13.bit.ADC_A = 0;// ADC 从复位中释放

DevCfgRegs.SOFTPRES13.bit.ADC_B = 1;// ADC 复位
DevCfgRegs.SOFTPRES13.bit.ADC_B = 0;// ADC 从复位中释放

//---配置 ADC 基址寄存器
AdcaRegs.ADCCTL1.ALL = 0x0004;//主 ADC 配置
AdcbRegs.ADCCTL1.ALL = 0x0004;  
//位15-14 00:保留
//位13 0:ADCBSY、ADC 忙、只读
//位12 0:保留
//位11-8 0:ADCBSYCHN、ADC 忙通道、只读
//位7 0:ADCPWDNZ、ADC 断电、0 =断电、1 =上电
//位6-3 0000:保留
//位2 1:INTPULSEPOS、INT 脉冲生成、0=转换开始、1=转换结束
//位1-0 00:保留

AdcaRegs.ADCCTL2.all = 0x0006;// ADC 时钟配置
AdcbRegs.ADCCTL2.ALL = 0x0006;  
//位15-8 0:保留
//位7 0:SIGNALMODE,由下面的 AdcSetMode()配置以获得正确的校准
//位6 0:分辨率,由下面的 AdcSetMode()配置以获得正确的校准
//位5-4 00:保留
//位3-0 0110:预分频、ADC 时钟预分频器。 0110=CPUCLK/4

AdcaRegs.ADCBURSTCTL.ALL = 0x0000;
AdcbRegs.ADCBURSTCTL.ALL = 0x0000;  


//---调用 AdcSetMode()以配置分辨率和信号模式。
//这也会对配置的模式执行正确的 ADC 校准。
AdcSetMode (ADC_ADCA、ADC_resolution_12位、ADC_SIGNALMODE_SINGLE);
AdcSetMode (ADC_ADCB、ADC_Resolution、12位、ADC_SIGNALMODE_SINGLE);  

//-- SOC0配置
AdcaRegs.ADCSOC0CTL.bit.TRIGSEL = 7;//使用 ePWM2-ADCSOCA 触发
AdcaRegs.ADCSOC0CTL.bit.CHSEL = 0;//转换通道 ADCINA0 (通道0)
AdcaRegs.ADCSOC0CTL.bit.ACQPS = 19;//采集窗口设置为(19+1)=20个周期(200MHz SYSCLK 时为100ns)

AdcaRegs.ADCINTSOCSEL.bit.SOC0 = 0;//无 ADC 中断触发 SOC0 (TRIGSEL 域决定触发)

AdcaRegs.ADCSOCPRICTL.bit.SOCPRIORITY = 0;//所有 SOC 在循环模式下处理

//SOC0配置 ADCB
AdcbRegs.ADCSOC0CTL.bit.TRIGSEL = 7;
AdcbRegs.ADCSOC0CTL.bit.CHSEL = 2;  

//SOC0将转换 ADCINB2
AdcbRegs.ADCSOC0CTL.bit.ACQPS = 19;

AdcbRegs.ADCINTSOCSEL1.bit.SOC0 = 0;

AdcbRegs.ADCSOCPRICTL.bit.SOCPRIORITY = 0;


//-- ADCA1中断配置
AdcaRegs.ADCINTSEL1N2.bit.INT1CONT = 1;//中断脉冲、与标志状态无关
AdcaRegs.ADCINTSEL1N2.bit.INT1E = 1;//启用 ADC 中的中断
AdcaRegs.ADCINTSEL1N2.bit.INT1SEL = 0;// EOC0触发中断

 //ADCB1中断配置
AdcbRegs.ADCINTSEL1N2.bit.INT1CONT = 1;
AdcbRegs.ADCINTSEL1N2.bit.INT1E = 1;
AdcbRegs.ADCINTSEL1N2.bit.INT1SEL = 0;

//--为 ADCa 启用 ADC 中断
PieCtrlRegs.PIEIER1.bit.INTx1 = 1;//在 PIE 组1中启用 ADCA1中断
PieCtrlRegs.PIEIER1.bit.INTx2 = 1;
IER |= 0x0001;//在 IER 中启用 INT1以启用 PIE 组1

//--完成
AdcaRegs.ADCCTL1.bit.ADCPWDNZ = 1;//为 ADC 加电
DelayU (1000);//加电后等待1ms、然后再使用 ADC
asm (" EDIS");//禁用 EALLOW 受保护寄存器访问

//-完成 ADCB
AdcbRegs.ADCCTL1.bit.ADCPWDNZ = 1;
DelayU(1000);
asm (" EDIS");

}//结束 InitAdc()


//----文件结尾------------------------------------------

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

    马赫迪

    我刚刚在我的项目上添加了您的更改、并且编译良好、没有任何错误。

    您可以尝试为我发送 CCS 项目吗?

    请注意、大多数员工因美国假期而外出、并在1月5日或6日之前返回办公室、因此回复将延迟。

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

    e2e.ti.com/.../2553.Xbar.c

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

    Santosh、

    我尝试 使用上面的附件图标连接完整的 CCS、但它不起作用。 如何向您发送完整的 CCS 项目?

    谢谢

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

    马赫迪

    您可以压缩项目并在此处附加文件。

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

    Santosh、

    这是 Zip 文件和 thankyoue2e.ti.com/.../ADC_2D00_new_2E00_.zip

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

    马赫迪

    您的代码中有两个问题:

    1)。 在文件 adc.c 中、

        您有-> IER |= 0x0001;

       应为-> IER |= 0x0001;//删除额外空间

    2) 2)在 Lab.h 中、您需要为添加的新缓冲区声明 extern。

    extern float32 xDelay[filter_LEN];

    extern float32系数[filter_LEN];

    extern UINT16 AdcBuf[ADC_BUF_LEN];

    extern UINT16 AdcBuf1[ADC_BUF_LEN];       // ADC buffer1分配        四分制

    extern UINT16 AdcBufFiled[ADC_BUF_LEN];

    extern UINT16 AdcBufRaw[2*ADC_BUF_LEN];

    请进行这两个更改、然后代码编译正常。

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

    马赫迪

    是否有关于此问题的任何更新? 您是否能够解决此问题?

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

    谢谢 Santosh、是的、现在我能够构建和编译项目了。

    但是 、当我打开存储器浏览器窗口并使用连接到 Launchpad 的 ADCINA0或 ADCINAB2引脚的 GPIO 18检查 AdcBuf 和 AdcBuF1内容时、缓冲区的内容不会交替显示。

    根据实验练习6的注释#12、结果缓冲区内容应交替显示~0x0000和~0x0FFF values.e2e.ti.com/.../ADC_5F00_buffer-cont.zip

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

    马赫迪

    我很高兴您现在能够编译和构建它。

    您是否能够正确运行未修改的 Lab6示例? 您是否看到 ADCBuffer 随 Lab6变化的示例?

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

    Santosh、

    是的、未修改的实验6版本工作正常。 我能够在 内存浏览器窗口中查看 AdcBuf 值。 当 ADCINA0连接到 GND、 引脚18和引脚19时、这些值与实验6实验课程中的值相同。

    谢谢

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

    您好、Santosh、

    我找到了这个问题。 当我创建 ADCB1_ISR (void)函数时、我不应复制 GPIO18和 GPIO34的切换

    谢谢、感谢您的帮助

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

    马赫迪

    将线程分配给 ADC 专家。 请期待明天的回复。