大家好、
首先、我想说的是、我已经联系过数字转换器论坛、在那里我没有得到太多帮助、我的问题仍然在继续。 我已经呆了3天、所以我决定来这里寻求帮助。
正如标题所示、我正在连接 BOOSTXL-ADS7841-Q1。 这是 器件的数据表、方便您查阅。
其次、我的应用的当前行为可以通过时序图进行解释、如下所示。
根据图、一旦 CS 变为低电平、BUSY 和 DOUT 就会变为低电平。 我的 DOUT 和 BUSY 目前始终保持低电平。
这是控制字节= 0x97 以及随后两个字节 0x00和0x00生成 DOUT 发送数据时钟的示波器屏幕截图。
这是消息帧。
现在是相同的消息帧、但具有忙 线。
以下是我的代码
/*
src_ads8741.c
*
** 器件使用 TM4C1294的 SSI2引脚分配如下
:* SPI MOSI - PQ2 - SSI3XDATA0
* SPI MISO - PQ3 - SSI3XDATA1
* SPI SCL - PQ0 - SSI3SLCK
* SPI ~CS - PM7 -芯片选择
* ADS BUSY - PP3 - BUSY PIN
*/
#include "src_ads8741q1/src_ads8741q1.h"
#include "src_mk_led/mk led_control.h"
uint32_t pui32DataRx[16];
void init_ads7841q1 (uint32_t sysClock){
MAP_SysCtlPeripheralEnable (SYSCTL_Periph_SSI3);
MAP_SysCtlPeripheralEnable (SYSCTL_Periph_GPIOQ);
MAP_SysCtlPeripheralEnable (SYSCTL_Periph_GPIOM);
MAP_SysCtlPeripheralEnable (SYSCTL_Periph_GPIOP);
//配置 SSI3引脚
MAP_GPIOPinConfigure (GPIO_PQ0_SSI3CLK);
MAP_GPIOPinConfigure (GPIO_PQ2_SSI3XDAT0);//MISO
MAP_GPIOPinConfigure (GPIO_PQ3_SSI3XDAT1);//MOSI
MAP_GPIOPinTypeSSI (GPIO_PORTQ_BASE、GPIO_PIN_0 | GPIO_PIN_2 | GPIO_PIN_3);
//设置 SPI:2MHz、8位数据、模式0
MAP_SSIClockSourceSet (SSI3_base、SSI_CLOCK_SYSTEM);
MAP_SSIConfigSetExpClk (SSI3_base、sysClock、SSI_FRF_MOTO_MOTO_MODE_0、
SSI_MODE_MASTER、2000000、24);
// MAP_SSIAdvModeSet (SSI3_base、SSI_ADV_MODE_LEGACH);
MAP_SSIEnable (SSI3_base);
//空接收缓冲区
uint32_t dummy[1];
while (MAP_SSIDataGetNonBlocking (SSI3_base、&dummy[0]));
//配置芯片选择引脚
MAP_GPIOPinTypeGPIOOutput (GPIO_PORTM_BASE、GPIO_PIN_7);
ads7841q1_chip_select (取消选择);
//配置 BUSY 引脚
MAP_GPIOPinTypeGPIOInput (GPIO_PORTP_BASE、GPIO_PIN_3);
}
void ads7841q1_READ_DATA (){
uint32_t buffer_data[3]={0、0、0};
MAP_GPIOPinWrite (GPIO_PORTM_BASE、GPIO_PIN_7、0);
/*以控制字节发送*/
SSIDataPut (SSI3_base、0x97);
SSIDataGet (SSI3_base、&buffer_data[0]);
SSIDataPut (SSI3_base、0x00);
SSIDataGet (SSI3_base、&buffer_data[1]);
SSIDataPut (SSI3_base、0x00);
SSIDataGet (SSI3_base、&buffer_data[2]);
while (SSIBusy (SSI3_base)){}
MAP_GPIOPinWrite (GPIO_PORTM_BASE、GPIO_PIN_7、GPIO_PIN_7);
}
void ads7841q1_chip_select (chip_select 选项){
if (option == select){
MAP_GPIOPinWrite (GPIO_PORTM_BASE、GPIO_PIN_7、0);
SET_BOARD_LED (Board_LED_1、LED_ON);
} 否则、如果(选项=取消选择){
MAP_GPIOPinWrite (GPIO_PORTM_BASE、GPIO_PIN_7、GPIO_PIN_7);
SET_BOARD_LED (Board_LED_1、LED_OFF);
}
}
void ads7841q1_check_busy(){
if (GPIOPinRead (GPIO_PORTP_BASE、GPIO_PIN_3)= GPIO_PIN_3){
SET_BOARD_LED (Board_LED_2、LED_ON);
} 否则{
SET_BOARD_LED (Board_LED_2、LED_OFF);
}
}
我尝试了不同的模式、即 SSI_FRF_MOTO_MODE_0 至 SSI_FRF_MOTO_MODE_3
在 main.c 中 、我在 while 循环之前初始化函数 init_ads7841q1 ()、并将 ads7841q1_read_data ()放入 while 循环中以生成通信。
奇怪的是、当使用 GUI 应用程序时、应用程序会发现 Booster Pack 附带但不能与我的应用程序配合使用。 我不知道我错过了什么,我很绝望...
非常感谢你们的帮助。
如果您需要我提供更多信息、请告诉我。
谢谢、
Alex