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/ADS1274EVM-PDK:在双通道读取中绘制表达式时出现问题

Guru**** 2587365 points
Other Parts Discussed in Thread: ADS1274

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

https://e2e.ti.com/support/tools/code-composer-studio-group/ccs/f/code-composer-studio-forum/604694/ccs-ads1274evm-pdk-problem-with-graphing-expression-in-2-channel-reading

部件号:ADS1274EVM-PDK
在“线程:ADS1274”中讨论的其他部件

工具/软件:Code Composer Studio

您好! 我想介绍一下在1294XL Launchpad上从ADS1274EVM采集数据时遇到的两个问题。 作为背景,我想提供以下信息:

  • 我正在尝试使用1294XL ICDI读取ADS1274中的多个通道,而不使用MMB0
  • 模拟输入是正弦波,函数发生器连接到所有模拟输入,这正是我在CCS图中所寻找的
  • 为了简单地开始,我开始时只使用两个通道。 一个通道显示预期的正弦波,另一个通道显示半个正弦波,然后显示完全垃圾。 就像这样
    //此代码包含带有计时器和中断
    
    #define input_vector_size 100
    
    uINT32_t ui32SysClkFreq的SPI; //时钟频率(也可以由SysClockFreqNet()调用)
    UINT32_t ui32Period; //发送下一个中断前的时钟周期数
    uint16_t DummyData = 0x0000;
    UINT32_t计数器= 0;
    uint16_t pui16DataRx0[input_vector_size]={0x0000};//为通道1
    uint16_t pui16DataRX1[input_vector_size]创建空的输入向量={0x0000_intr月
    16 //为通道3
    创建空输入向量16_t pui16DataRx3[input_vector_size]={0x0000};//为通道4
    创建空输入向量UINT32_t pui32DataRxBuffer[7] ={0x0000};//接收缓冲区,将在DRDY ISR
    
    void GPIOPortFIntHandler (void);
    
    int main (void)
    {
    //配置时钟
    ui32SysClkFreq = SysCltlClockFreqSet (((sysctl_XTal_25MHz | sysctl_OSC主| sysctl_use_PLL | sysctl_CFG_VCO_480),1.2亿);
    
    
    //为SSI1启用关联的GPIO和SSI外设
    SysCtlPeripheralEnable(sysctl_Periph_SSI1);
    SysCtlPeripheralEnable(sysctl_Periph_GPIOB);
    SysCtlPeripheralEnable(sysctl_Periph_GPIOE);
    
    
    //为SSI配置和激活引脚(数据表的第743页,供参考)
    GPIOPinConfigure(GPIO_PB5_SSI1CLK);
    GPIOPinConfigure(GPIO_PE4_SSI1XDAT0);
    GPIOPinConfigure(GPIO_PE5_SSI1XDAT1);
    GPIOPinTypeSSI (GPIO_PORTB_BASE,GPIO PIN_5);
    GPIOPinTypeSSI (GPIO _PORT_BASE,GPIO PIN_4|GPIO PIN_5);
    
    //配置恒定GPIO引脚(同步,模式和格式引脚)
    SysCtlPeripheralEnable(sysctl_Periph_GPIOK);
    GPIOPinTypeGPIOOutput (GPIO _PORTK_BASE,GPIO PIN_5 | GPIO PIN_4 | GPIO PIN_3)
    | GPIO PIN_2 | GPIO PIN_1 | GPIO PIN_0 );
    GPIOPinWrite (GPIO _PORTK_BASE,0x3F,0x20); ///sync:1B'1;格式:3B'000;模式:2B'00
    
    //为DRDY-反转设置F4
    SysCtlPeripheralEnable(sysctl_Periph_GPIOF); //启用端口F
    GPIOPinTypeGPIOInput (GPIO_PORTF_BASE,GPIO PIN_0);//将PF0作为输入
    
    //中断设置
    GPIOIntDisable (GPIO_PORTF_BASE,GPIO PIN_0); //禁用PF0中断(如果已启用)
    GPIOIntTypeSet (GPIO _PORTF_BASE,GPIO PIN_0,GPIO下降边缘); //为下降边缘触发器配置PF0
    GPIOIntClear (GPIO _PORTF_BASE,GPIO PIN_0); //清除PF0的暂挂中断
    GPIOIntRegister (GPIO _PORTF_BASE,GPIOPortFIntHandler); //为端口F注册ISR
    GPIOIntEnable (GPIO_PORTF_BASE,GPIO PIN_0); //为PF0启用中断
    
    
    
    
    //配置SSI:DAC读取上升边缘(相位=1),空闲模式为高(极性=1)
    SSIConfigSetExpClk (SSI1_BASE,ui32SysClkFreq,SSI_FFR_MOTO_MOTO_MODE_0,SSI_MODE_MASTER,2000万, 16);
    SSIEnable(SSI1_base);
    //继续
    while (1){}
    }//
    
    
    中断服务例程(ISR)或中断处理程序
    void GPIOPortFIntHandler(void)
    {
    
    //清除GPIO中断
    GPIOIntClear (GPIO _PORTF_BASE,GPIO _INT_PIN_0);
    
    
    //逐个填充缓冲区元素;收集64位
    SSIDataPut(SSI1_base, DummyData);
    SSIDataGet (SSI1_BASE,&pui32DataRxBuffer[0]); //获取前16位[111:96]
    SSIDataPut(SSI1_base, DummyData);
    SSIDataGet (SSI1_BASE,&pui32DataRxBuffer[1]); //获取第二个16位[95:80]
    SSIDataPut(SSI1_base, DummyData);
    SSIDataGet (SSI1_BASE,&pui32DataRxBuffer[2]); //获取第三个16位[79:64]
    SSIDataPut(SSI1_base, DummyData);
    SSIDataGet (SSI1_BASE,&pui32DataRxBuffer[3]); //获取第四个16位[63:48]
    //SSIDataPut(SSI1_base, DummyData);
    //SSIDataGet (SSI1_BASE,&pui32DataRxBuffer[4]); //获取第五个16位[47:32]
    //SSIDataPut(SSI1_base, DummyData);
    //SSIDataGet (SSI1_BASE,&pui32DataRxBuffer[5]); //获取第六个16位[31:16]
    //SSIDataPut(SSI1_base, DummyData);
    //SSIDataGet (SSI1_BASE,&pui32DataRxBuffer[6]); //获取第七个16位[15:0]
    
    //整合并连接元素以获得通道1和通道2
    pui16DataRx0[counter]=((uint16_t)(pui32DataRxBuffer[0])<1)|((uint16_t)(pui32DataRxBuffer[1])>> 15);
    pui16DataRx1[counter]=((uint16_t)(pui32DataRxBuffer[1])<< 9)|((uint16_t)(pui32DataRxBuffer[2])>> 7);
    //pui16DataRX2[counter]=((uint16_t)(pui32DataRxBuffer[3])<< 1)|((uint16_t)(pui32DataRxBuffer[4])>> 15);
    //pui16DataRx3[counter]=((uint16_t)(pui32DataRxBuffer[4])<9)|((uint16_t)(pui32DataRxBuffer[5])>> 7);
    
    //计数器更新
    IF (counter < input_vector_size - 1){counter++;} //增量计数器,只要低于4999
    else{counter = 0;} //如果为4999,则将计数器重置为零
    while (SSIBusy (SSI1_BASE)){}
    
    }} 

    pui16DataRx0的输出:

    pui16DataRx1的输出:

    我还检查了pui16DataRx1元素的表达式值(从元素50到100),它看起来很好(像正弦波),不像我在图形上看到的那样。 如下所示。 有人能说这里可能会出什么问题吗?

我一直遇到的另一个问题是,当我打开所有4个通道并取消注释上面代码中的所有注释部分以容纳额外的数据时,我在输入缓冲区中获得垃圾值(看起来像图形功能上的噪声, 表达式查看器上的十六进制值看起来没有什么意义)。

如果有人能在上述问题上提供帮助,我将不胜感激。 如果需要更多信息,请告诉我,我会尽快提供。

此致,

Stefan

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

    很难精确确定第二个图形的作用方式的确切原因,但您是如何创建这些图形的? 我模糊地记得双图形功能存在一个无法正确绘制数据的问题。 在这种情况下,解决方法是使用多个单一统计图。

    此外,两个图形的设置如何? 它们是否指向正确的地址? 我这样问的原因是因为我经常犯这个错误。 通过右键单击变量名称并选择“图形”,您可以尝试直接从表达式视图绘制变量。 它在使用有意义的设置预先填充参数方面做得很好-很明显,Q值,采样率和其他内容不会被猜到,您需要手动输入。

    遗憾的是,我没有与您相同的硬件,但我使用图表已有一段时间,过去类似的问题也困扰着此功能。 这让我想起:您使用的是哪种版本的CCS? 多年来,我们增加了几个修复程序。

    此致,
    拉斐尔