主题中讨论的其他器件: 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
