主题中讨论的其他器件:TM4C123
工具/软件:TI C/C++编译器
您好!
我将 TM4C123与 LTC2442外部 ADC 相连。 我在使用延迟读取 ADC 值时遇到问题。 我将使用2种方法读取 ADC。
SSI 配置
void LTC2442_SPI_CONFIG (void) { ROM_SysCtlPeripheralEnable (SYSCTL_Periph_SSI0); while (!SysCtlPeripheralReady (SYSCTL_Periph_SSI0)); /配置 SSI0ePeripheral 位于端口 A 上、引脚2、4和5。*/ SYSCL_ROM_GPIO4*/ 引脚 配置 GPIO_PIN_ROM_GPIO4*/ GPIO4*/输出引脚;配置 GPIO_PIN_ROM_GPIO4*/ GPIO4*/ GPIO4*/ GPIO4_ROM_GPIO4*/ GPIO4*/ GPIO_RESPON_ROM_OUTP_ROM_OUTPSI_ROM_OUTPSI_ROM_IN_ROM_OUTPSION_ROM_IN_IN_ROM_TOP_IN_ROM_TOP_ROM_TOP_CONTROM_TOPON_ROM_IN_ROM_TOP_CONTROM_TOP_IN_IN_IN_IN_IN_CONTROM_TOPON_IN_IN_ LTC2442_SPI_CS_HI; ROM_GPIOPinTypeGPIOInput (GPIO_Porta_base、GPIO_PIN_7);//忙状态引脚 //为 SSI*/ ROM_GPIOPinTypeSSI (GPIO_Porta_base、LTC2442_SPI_PIN | LTC2442_SPI_SPI_PIN)配置引脚;针对 SSI0和 SSIClock_R0* (SS_SSIP_SS_SS0*)、CLUST_SSIP_C24_C24_CK_SSIP_CLK_CL_CLK_SIMP_CL_C24*( SSIP_CL_CK_SIMP_CL_CK_CL_CL_CL_CK_SIMP_CL_CLK_SIMP_CK_CL_CL_CK_SIMP_CK_SIMP_CK_CL_CL SSI_MODE_MASTER、2000000、16); ROM_SSIEnable (SSI0_BASE); }
第一种方法
int LTC2442_ADC_OutputRead (unsigned int Channelnumber) { uint32_t TX[2]={0}; uint32_t data =0; int i=0; float sum =0; float ADC_Conv = 0.2980232416405; //unsigned int channel_number = 0xB0000000;//unsigned TIFPT_42_while 、GPIO32_datored GPIO_portale_pin;// t_gpin + while /*在读取 ADC 数据之后将 CS 引脚设为低电平*/ LTC2442_SPI_CS_LO; while (GPIOPinRead (GPIO_Porta_base、LTC2442_SPI_BUSY_PIN)); /*读取 ADC 数据后将 CS 引脚设为低电平*/ LTC2442_SPI_CS_LO; //ADC_SPI_Rqst_pkt= LTC2442_ADC_SPIPktGen (ADC_Channel_No);//为 ADC 通道数据请求生成数据包。 //ADC_SPI_READ_Pkt= LTC2442_ADC_Communication (ADC_SPI_Rqst_pkt); //虚拟读取以设置下一个输出通道 开关(通道号) { 案例0: { for (i =0;i<2;i++) { for (ulindex = 0;ulindex < NUM_SSI_data;ulindex++) { ROM_SSIDataPut (SSI0_BASE、ch0[ulindex]); while (ROM_SSIBusy (SSI0_BASE)){} ROM_SSIDataGet (SSI0_BASE、&ulDataRx[ulindex]); while (ROM_SSIBusy (SSI0_BASE)){} 延迟(100);//5毫秒延迟 } } 中断; } LTC2442_SPI_CS_HI;
方法2.
unsigned int RTC2442_ADC_Communication (unsigned int ADC_SPI_Rqst_pkt) { volatile unsigned int Temp_Pkt= 0、ADC_SPI_Read_Pkt=0、Tx_Temp_buff = 0; while (GPIOPinRead (GPIO_Porta_base、LTC2442_SPI_Busy_PIN)); /*读取 ADC 数据后使 cs 引脚变为低电平*/ LTC2442_SPI_CS_LO; while (ROM_SSIBusy (SSI0_BASE){} Tx_Temp_buff =((ADC_SPI_Rqst_pkt>16)和0x0000Temp &;ROM_SSIFFFF (SSI0_BASE )=(ADC_SSIFFFF); 发送到 DAC 的//第二个16位数据包。 while (SSIBusy (SSI0_BASE)){} ROM_SSIDataGet (SSI0_BASE、&Temp_Pktt); while (SSIBusy (SSI0_BASE)){} LTC2442_SPI_CS_HI; ADC_SPI_READ_Pkt|= Temp_Pktt; return ADC_SPI_PCT_Read ;}
在第一种方法中、我将延迟并能够读取数据。 如果我不进行延迟、则表示它无法读取数据、 并且在方法2 中无延迟地读取数据。
为何延迟会影响数据读取。
我想读取 ADC 输出端的恒定电压。 当我尝试读取电压 时、电 压会在微伏范围内波动。 我在 ADC 的输入端连接了一个恒压源、并读取 ADC 输出、但电压在微伏范围内波动、取平均值时、这些值也仅发生波动。 是否有任何方法可以减少这种波动。
谢谢、
Alphy