请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
部件号: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