主题中讨论的其他器件: ADS7842
大家好、
我正在通过 TM4C1242的 SPI 接口使用 BOOSTXL-ADS7841-Q1。
我遇到了使 ADC 生成输出数据的问题。 我检查了时序要求、并确定我已将所有内容与数据表相匹配。
请看一下我的示波器代码段以及我用于生成输出的代码。
这是我的设置
我使用的 Vref 为4.5V
无论我做什么、MISO 线路和繁忙线路始终保持低电平
以下是为方便起见的时序要求图
这里是我的代码-我初始化 SPI 接口,然后将函数 ads7842_read_data()放入无限循环,以便使用示波器进行调试。
我要发送的控制字节是
[1][1][0][1][0][1][1][1][1]= 0xD7
void init_ads7842 (uint32_t sysClock){ uint8_t flush_buffer[10]; /*用于 SSI 的使能引脚*/ SysCtlPeripheralEnable (SYSCTL_Periph_GPIOQ); SysCtlPeripheralEnable (SYSCTL_Periph_GPIOM); SysCtlPeripheralEnable (SYSCTL_Periph_GPIOP); /*启用 SPI 接口*/ SysCtlPeripheralEnable (SYSCTL_Periph_SSI3); GPIOPinTypeGPIOInput (GPIO_PORTQ_BASE、GPIO_PIN_3);// MISO -将其配置为 GPIO 输入 GPIOPinTypeGPIOOutput (GPIO_PORTQ_BASE、GPIO_PIN_2);// MOSI -将其配置为 GPIO 输出 GPIOPinTypeGPIOOutput (GPIO_PORTQ_BASE、GPIO_PIN_0);// SCLK -将其配置为 GPIO 输出 GPIOPinTypeGPIOOutput (GPIO_PORTM_BASE、GPIO_PIN_7);//~CS -将其配置为 GPIO 输出 GPIOPinTypeGPIOInput (GPIO_PORTP_BASE、GPIO_PIN_3);//忙-将其配置为 GPIO 输入 /*将芯片选择设置为逻辑高电平*/ ads7842_chip_select (取消选择); //为 SSI3配置时钟、MISO 和 MOSI 输入*/ GPIOPinConfigure (GPIO_PQ0_SSI3CLK); GPIOPinConfigure (GPIO_PQ2_SSI3XDAT0); GPIOPinConfigure (GPIO_PQ3_SSI3XDAT1); /*配置 SSI 引脚的 GPIO 设置。 此函数 还将这些引脚的控制提供给 SSI 硬件。*/ GPIOPinTypeSSI (GPIO_PORTQ_BASE、GPIO_PIN_0); GPIOPinTypeSSI (GPIO_PORTQ_BASE、GPIO_PIN_2); GPIOPinTypeSSI (GPIO_PORTQ_BASE、GPIO_PIN_3); /*禁用 SS3以配置它*/ SSIDisable (SSI3_base); /*配置速度为8MHz 的 SPI 接口设置-发送8位需要1us */ SSIConfigSetExpClk (SSI3_base、sysClock、SSI_FRF_MOTO_MOTO_1、SSI_MODE_MASTER、2500000、 8); /* SSI_ADV_MODE_LEGACe. 0x00000000 SSI_ADV_MODE_READ_WRITE 0x000001c0 SSI_ADV_MODE_WRITE 0x000000c0 SSI_ADV_MODE_BI_READ 0x00000140 SSI_ADV_MODE_BI_WRITE 0x00000040 SSI_ADV_MODE_Quad_Read 0x00000180 SSI_ADV_MODE_Quad_WRITE 0x00000080 * SSIAdvModeSet (SSI3_base、SSI_ADV_MODE_LEGACY_LEGACY_); /*启用 SSI3 */ SSIEnable (SSI3_base); /*刷新 FIFO 中的重管理数据*/ while (SSIDataGetNonBlocking (SSI3_base、(uint32_t*)&flush_buffer[0])) { } } void ads7842_read_data(){ uint32_t buffer[16]; ads7842_chip_select (select); SSIDataPut (SSI3_base、0xD7); ads7842_check_busy(); 延迟(500); SSIDataGet (SSI3_base、buffer); ads7842_chip_select (取消选择); delay (100); } void ads7842_chip_select (chip_select 选项){ if (option == select){ GPIOPinWrite (GPIO_PORTM_BASE、GPIO_PIN_7、0); SET_BOARD_LED (Board_LED_2、LED_ON); } 否则、如果(选项=取消选择){ GPIOPinWrite (GPIO_PORTM_BASE、GPIO_PIN_7、GPIO_PIN_7); SET_BOARD_LED (Board_LED_2、LED_OFF); } } void ads7842_check_busy(){ if (GPIOPinRead (GPIO_PORTP_BASE、GPIO_PIN_3)= GPIO_PIN_3){ SET_BOARD_LED (Board_LED_1、LED_ON); } 否则{ SET_BOARD_LED (Board_LED_1、LED_OFF); } }
请告诉我可以采取什么方法来解决问题。
谢谢、
Alex