This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] TM4C1294NCPDT:TM4C129X 与 ADS1243 ADC 进行 SPI 通信

Guru**** 1796780 points
Other Parts Discussed in Thread: TM4C1294NCPDT, ADS1243
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/573997/tm4c1294ncpdt-tm4c129x-spi-communication-with-ads1243-adc

器件型号:TM4C1294NCPDT
主题中讨论的其他器件: ADS1243

你(们)好

我使用自己的 TM4C1294NCPDT 板并 将 Micro SD 卡、闪存 MX66L51235FZ2I 和 ADS1243连接 到 SSI3端口。

我将 SD 卡使用从器件选择引脚 PE1、 闪存使用 PQ1、 ADS1243使用 PK4。

SD 卡 闪存通信时获取时钟、但不与 ADS1243通信。

此外、还测试了 SD 卡读取 操作和闪存读取和写入操作、它们工作正常。

 在与 ADS1243通信时、无法在特定引脚上通信或生成时钟和 Tx 信号。

在这里、我要附加代码来读取 ADC 计数。 我使用 SSI0并使用相同的初始化和读取过程完成了与 LM3S9B96的 ADC 通信。

任何人都能帮助解决这个问题

///------------------------------ 初始化 ADC -------------------------------------------------------
uint32_t a_SSIRecByte[4];
uint32_t a_SSISendByte[4];


unsigned long uiCount;

空 init_adc()

ROM_GPIOPinWrite (GPIO_PORTK_base、ADS1243、ADS1243_enable);
DELAY_ms (5);

A_SSISendByte[0]= 0xFE;
ADC_SSI_WRITE (A_SSISendByte、1);
延迟(10);

A_SSISendByte[0]= 0xFC;
ADC_SSI_WRITE (A_SSISendByte、1);
延迟(10);

A_SSISendByte[0]= 0x50;
A_SSISendByte[1]= 0x00;
A_SSISendByte[2]= 0x00;
ADC_SSI_WRITE (A_SSISendByte、3);
延迟(10);

A_SSISendByte[0]= 0x52;
A_SSISendByte[1]= 0x00;
A_SSISendByte[2]= 0xC2;
ADC_SSI_WRITE (A_SSISendByte、3);
延迟(10);

A_SSISendByte[0]= 0xF0;
ADC_SSI_WRITE (A_SSISendByte、1);
延迟(10);

delay_ms (250);
延迟(2);

A_SSISendByte[0]= 0x51;
A_SSISendByte[1]= 0x00;
A_SSISendByte[2]= 0x05;
ADC_SSI_WRITE (A_SSISendByte、3);
DELAY_ms (5);

ROM_GPIOPinWrite (GPIO_PORTK_base、ADS1243、ADS1243_disable);

///------------------------------ 读取 ADC -------------------------------------------------------

unsigned int read_adc (unsigned char ucChannelNo)

unsigned long ulRead;
ROM_GPIOPinWrite (GPIO_PORTK_base、ADS1243、ADS1243_enable);
DELAY_ms (5);

操作

ulRead = ROM_GPIOPinRead (GPIO_PORTK_base、ADS1243_DRDY);
}while (ulRead!= 0x00000000);


A_SSISendByte[0]= 0x51;
A_SSISendByte[1]= 0x00;
A_SSISendByte[2]= ucChannelNo;
ADC_SSI_WRITE (A_SSISendByte、3);

延迟(10);
A_SSISendByte[0]= 0x01;
ADC_SSI_WRITE (A_SSISendByte、1);

ADC_SSI_Read (A_SSIRecByte、3);

uiCount = 0;
uiCount = A_SSIRecByte[0]* 256;
uiCount = uiCount + A_SSIRecByte[1];
DELAY_ms (5);

ROM_GPIOPinWrite (GPIO_PORTK_base、ADS1243、ADS1243_disable);

return (uiCount);

///------------------------------ 写入数据 SSI -----------------


void ADC_SSI_write (uint32_t *ucData、unsigned short usLen)

无符号超长整型 ulLoop = 0;;
uint32_t uldmummy;

SSIAdvModeSet (SSI3_base、SSI_ADV_MODE_WRITE);
SSIAdvFrameHoldEnable (SSI3_base);
if (usLen == 3)

SSIDataPut (SSI3_base、ucData[ulLoop);
SSIDataGet (SSI3_base、ulDummy);
ulLoop ++;
SSIDataPut (SSI3_base、ucData[ulLoop);
SSIDataGet (SSI3_base、ulDummy);
ulLoop ++;
SSIAdvDataPutFrameEnd (SSI3_base、ucData[ulLoop);
SSIDataGet (SSI3_base、ulDummy);

其他

SSIAdvDataPutFrameEnd (SSI3_base、ucData[ulLoop);
SSIDataGet (SSI3_base、ulDummy);

///------------------------------ 读取数据 SSI -------------------------------------------------------

void adc_sso_read (uint32_t *ucData、unsigned long ulLen)

uint32_t ulData;
无符号超长整型 ulLoop = 0;

SSIAdvModeSet (SSI3_base、SSI_ADV_MODE_READ_WRITE);

SSIDataPut (SSI3_base、0x00);
SSIDataGet (SSI3_base、&ulData);
ucData[ulLoop =(ulData);
ulLoop ++;

SSIDataPut (SSI3_base、0x00);
SSIDataGet (SSI3_base、&ulData);
ucData[ulLoop =(ulData);
ulLoop ++;

SSIAdvDataPutFrameEnd (SSI3_base、0x00);
SSIDataGet (SSI3_base、&ulData);
ucData[ulLoop =(ulData);

///------------------------------ 初始化 SSI-----------------

extern unsigned char a_asci[10];

uint8_t g_ui8InstrReadID[]={0x90、0x00、0x00、0x00};
uint32_t pui32DataTx[NUM_SSI_DATA];
uint32_t pui32DataRx[NUM_SSI_DATA];
uint32_t ui32DeviceID;

空 SSI_FLASH_init (uint32_t ui32SysClock)

SysCtlPeripheralEnable (SYSCTL_Periph_SSI3);

//
//为 SPI 主控模式配置和启用 SSI 端口。 使用 SSI3、
//系统时钟电源,空闲时钟低电平和低电平有效时钟输入
//飞思卡尔 SPI 模式、主控模式、1MHz SSI 频率和8位数据。
//对于 SPI 模式,可以设置 SSI 时钟的极性
//单元空闲。 您还可以配置所需的时钟边沿
//在上捕获数据。 有关的更多信息、请参阅数据表
//不同的 SPI 模式。
//
SSIConfigSetExpClk (SSI3_base、ui32SysClock、SSI_FRF_MOTO_MOTO_MODE_0、
SSI_MODE_MASTER、1000000、8);

//
//启用 SSI3模块。
//
SSIAdvModeSet (SSI3_base、SSI_ADV_MODE_WRITE);
SSIAdvFrameHoldEnable (SSI3_base);
SSIEnable (SSI3_base);

//
//首先读取设备 ID
//

ROM_GPIOPinWrite (GPIO_PORTQ_BASE、FLASH、FLASH_ENABLE);

ui32DeviceID = SSILibSendReadIDAdvMode (SSI3_base);
if (ui32DeviceID!= 0xC219) UARTSend ("无外部闪存\n"COM0);
否则 UARTSend ("检测到外部闪存\n"、COM0);

ROM_GPIOPinWrite (GPIO_PORTQ_BASE、FLASH、FLASH_DISABLE);

///------------------------------ 测试闪存-------------------------------------------------------
void test_flash()

unsigned char i、ucCount;
uint32_t pui32dmumy[1];
uint32_t ui32Index;

//
//永久循环,处理屏幕动画。 所有其他工作都是
//在中断处理程序中完成。
//
//
//从 SSI 端口读取任何残留数据。 这将确保接收
// FIFO 为空,因此我们不会读取任何不需要的垃圾。 这在这里完成
//因为 SPI SSI 模式为全双工模式,允许您发送和
//同时接收。 SSIDataGetNonBlocking 函数返回
//返回数据时为"true",未返回数据时为"false"。
//“非阻塞”函数检查接收中是否有数据
// FIFO、如果没有、则不会"挂起"。
//
while (SSIDataGetNonBlocking (SSI3_base、&pui32dmumy[0]))

//
//初始化发送缓冲区
//
ucCount = 1;
for (ui32Index=0;ui32Indexx <NUM_SSI_DATA;ui32Index++)

pui32DataTx[ui32Index]= ucCount;
pui32DataRx[ui32Index]= 0x0;
ucCount++;

UARTSend ("正在开始读取操作...\n"COM4);
SSILibSendReadDataAdvBi (SSI3_base、0x0、INS_READ_DATA);
for (ui32Index=0;ui32Indexx <NUM_SSI_DATA-1;ui32Index++)

SSIDataPut (SSI3_base、dummy_byte);
SSIDataGet (SSI3_base、&pui32DataRx[ui32Index]);

SSIAdvDataPutFrameEnd (SSI3_base、dummy_byte);
SSIDataGet (SSI3_base、&pui32DataRx[NUM_SSI_DATA-1]);
UARTSend ("读取已完成...\n"COM4);

//
//显示数据
//
for (ui32Index=0;ui32Indexx <NUM_SSI_DATA;ui32Index++)

十进制到 ASCII (pui32DataRx[ui32Index]、3);
for (i=0;i<3;i++)

UARTCharPut (UART0_BASE、A_ASCII[i]);

UARTCharPut (UART0_BASE、10);
UARTCharPut (UART0_BASE、13);

///---------------------- 引脚配置---

void init_pinconfig()

ROM_SysCtlPeripheralEnable (SYSCTL_Periph_GPIOA);
ROM_SysCtlPeripheralEnable (SYSCTL_Periph_GPIOB);
ROM_SysCtlPeripheralEnable (SYSCTL_Periph_GPIOC);
ROM_SysCtlPeripheralEnable (SYSCTL_Periph_GPIOD);
ROM_SysCtlPeripheralEnable (SYSCTL_Periph_GPIOE);
ROM_SysCtlPeripheralEnable (SYSCTL_Periph_GPIOF);
ROM_SysCtlPeripheralEnable (SYSCTL_Periph_GPIOG);
ROM_SysCtlPeripheralEnable (SYSCTL_Periph_GPIOH);
ROM_SysCtlPeripheralEnable (SYSCTL_Periph_GPIOJ);
ROM_SysCtlPeripheralEnable (SYSCTL_Periph_GPIOK);
ROM_SysCtlPeripheralEnable (SYSCTL_Periph_GPIOL);
ROM_SysCtlPeripheralEnable (SYSCTL_Periph_GPIOM);
ROM_SysCtlPeripheralEnable (SYSCTL_Periph_GPION);
ROM_SysCtlPeripheralEnable (SYSCTL_Periph_GPIOP);
ROM_SysCtlPeripheralEnable (SYSCTL_Periph_GPIOQ);

// GPIO_PORta_AHB_DIR_= 0xC8;//端口 A
// GPIO_PORta_AHB_DEN_R |= 0xFC;
/*
GPIO_PORTB_AHB_DIR_= 0x34;//端口 B
GPIO_PORTB_AHB_DEN_R |= 0x37;

GPIO_PORTC_AHB_DIR_R |= 0x30;//端口 C
GPIO_PORTC_AHB_DEN_R |= 0x30;

GPIO_PORTD_AHB_DIR_R |= 0x60;//端口 D
GPIO_PORTD_AHB_DEN_R |= 0xFF;

GPIO_Porte AHB_DIR_R |= 0x3C;//端口 E
GPIO_Porte AHB_DEN_R |= 0x3D;

GPIO_PORTF_AHB_DIR_= 0x0C;//端口 F
GPIO_PORTF_AHB_DEN_R |= 0x0D;

GPIO_PORTG_AHB_DIR_R |= 0x01;//端口 G
GPIO_PORTG_AHB_DEN_R |= 0x03;

GPIO_Porth_AHB_DIR_= 0x00;//端口 H
GPIO_Porth_AHB_DEN_R |= 0x0F;

GPIO_PORTJ_AHB_DIR_|= 0x02;//端口 J
GPIO_PORTJ_AHB_DEN_R |= 0x03;

GPIO_PORTK_DIR_R |= 0x9F;//端口 K
GPIO_PORTK_DEN_R |= 0xFF;

GPIO_PORTL_DIR_R |= 0x00;//端口 L
GPIO_PORTL_DEN_R |= 0xC0;

GPIO_PORTM_DIR_R = 0xFF;//端口 M
GPIO_PORTM_DEN_R = 0xFF;

GPIO_PORTN_DIR_R |= 0x3D;//端口 N
GPIO_PORTN_DEN_R |= 0x3F;

GPIO_PORTP_DIR_R |= 0x04;//端口 P
GPIO_PORTP_DEN_R |= 0x04;
*

// GPIO_PORTQ_DIR_|= 0x17;//端口 Q
// GPIO_PORTQ_DEN_R |= 0x1F;

/*
ROM_GPIOPinTypeGPIOInput (GPIO_PORTQ_BASE、GPIO_PIN_3);// DIN 1.

ROM_GPIOPinTypeGPIOOutput (GPIO_PORTQ_BASE、GPIO_PIN_4);// Wifi 电源启用
ROM_GPIOPinWrite (GPIO_PORTQ_BASE、GPIO_PIN_4、GPIO_PIN_4);// Wifi 电源启用

delay_ms (1);

ROM_GPIOPinWrite (GPIO_PORTB_BASE、GPS、GPS_ON);//GPS 电源启用

ROM_GPIOPinWrite (GPIO_PORTN_BASE、SDI12、SDI12_DISABLE);
*
ROM_GPIOPinTypeGPIOOutput (GPIO_PORTK_base、GPIO_PIN_7);
ROM_GPIOPinWrite (GPIO_PORTK_base、ADC_PWR、ADC_ON);// ADC 电源使能
ROM_GPIOPinTypeGPIOOutput (GPIO_PORTK_base、GPIO_PIN_4);
ROM_GPIOPinWrite (GPIO_PORTK_base、ADS1243、ADS1243_disable);// ADS1243禁用
ROM_GPIOPinTypeGPIOInput (GPIO_PORTK_base、GPIO_PIN_5);// DRDY
/*
ROM_GPIOPinWrite (GPIO_PORTQ_BASE、wifi、WIFI_ON);// Wifi 模块电源启用

ROM_GPIOPinWrite (GPIO_PORTB_BASE、ICDI、ICDI_ON);// ICDI 电源启用

ROM_GPIOPinWrite (GPIO_Porta_base、LCD、LCD_ON);// LCD 模块启用

ROM_GPIOPinWrite (GPIO_PORTP_BASE、RS485、RS485_ON);// 5V 电源使能
ROM_GPIOPinWrite (GPIO_PORTN_BASE、RS485、RS485_RX_ENABLE);// RS485 RX 启用
*
ROM_GPIOPinTypeGPIOOutput (GPIO_Porte _BASE、GPIO_PIN_5);
ROM_GPIOPinWrite (GPIO_Porte _BASE、FLASH_PWR、FLASH_ON);//启用闪存电源

ROM_GPIOPinTypeGPIOOutput (GPIO_PORTQ_BASE、GPIO_PIN_1);// SSI3-CEMX66L51235F
ROM_GPIOPinWrite (GPIO_PORTQ_BASE、FLASH、FLASH_DISABLE);// MX66禁用

ROM_GPIOPinTypeGPIOOutput (GPIO_Porte _BASE、GPIO_PIN_1);// SD 卡 CE
ROM_GPIOPinWrite (GPIO_Porte _BASE、SD_CARD、SD_CARD_DISABLE);// SD 卡 CE

ROM_GPIOPinTypeGPIOOutput (GPIO_Porte _BASE、GPIO_PIN_4);//
ROM_GPIOPinWrite (GPIO_Porte _BASE、LED、LED_OFF);//用户 LED

/*
*// USB
HWREG (GPIO_PORTD_BASE + GPIO_O_LOCK)= GPIO_LOCK_KEY;
HWREG (GPIO_PORTD_BASE + GPIO_O_CR)= 0xff;

ROM_GPIOPinConfigure (GPIO_PD6_USB0EPEN);
ROM_GPIOPinConfigure (GPIO_PD7_USB0PFLT);
ROM_GPIOPinTypeUSBAnalog (GPIO_PORTB_BASE、GPIO_PIN_0 | GPIO_PIN_1);
ROM_GPIOPinTypeUSBDigital (GPIO_PORTD_BASE、GPIO_PIN_6 | GPIO_PIN_7);
ROM_GPIOPinTypeUSBAnalog (GPIO_PORTL_BASE、GPIO_PIN_6 | GPIO_PIN_7);
*
//闪存和 SD 卡
HWREG (GPIO_PORTF_BASE_GPIO_O_LOCK)= GPIO_LOCK_KEY;
HWREG (GPIO_PORTF_BASE_GPIO_O_CR)|= GPIO_PIN_0;

ROM_GPIOPinConfigure (GPIO_PQ0_SSI3CLK);
ROM_GPIOPinConfigure (GPIO_PQ2_SSI3XDAT0);
ROM_GPIOPinConfigure (GPIO_PF0_SSI3XDAT1);

ROM_GPIOPinTypeSSI (GPIO_PORTF_BASE、GPIO_PIN_0);
ROM_GPIOPinTypeSSI (GPIO_PORTQ_BASE、GPIO_PIN_0 | GPIO_PIN_2);

///------------------ 主函数-------------------------------------------------------
int main (空)

INT nStatus;

FRESULT iFResult;
INT 结果;
//
//从 PLL 以120MHz 运行。
//
G_ui32SysClock = SysCtlClockFreqSet ((SYSCTL_XTAL_25MHz | SYSCTL_OSC_MAIN | SYSCTL_USE_PLL | SYSCTL_CFG_VCO_480)、120000000);


//
//配置器件引脚。
//
init_pinconfig();

delay_ms (10);
uart0_init (g_ui32SysClock);
delay_ms (100);

if ((CH1.Averaging <= 0)||(CH1.Averaging >50)) CH1.Averaging = 5;
if (((ch2.averating<= 0)||(ch2.averating>50)) ch2.averating=5;
if (((CH3.Averaging <= 0)||(CH3.Averaging >50)) CH3.Averaging = 5;
if (((Ch4.Averaging <= 0)||(Ch4.Averaging >50))) Ch4.Averaging = 5;

timer0_init (g_ui32SysClock);

/*
UARTSend ("mount\n",COM0);
iFResult = f_mount (0、&g_sFatfs);
if (iFResult!= FR_OK)

退货(1);

结果= Cmd_cat (argc1、argv1[1]);*/

///----------------------------------------------------------

UARTSend ("闪存初始化\n"COM0);
SSI_FLASH_init (g_ui32SysClock);
UARTSend ("闪存测试\n"COM0);
// test_flash1();
UARTSend ("ADC init\n"COM0);
init_adc();
UARTSend ("ADC Test\n"COM0);

/*
///------------------ USB 测试---
USB_init (g_ui32SysClock);
delay_ms (1);
///----------------------------------------------------------
*

while (1)


if (b 间隔)

b 间隔= 0;
ucChannelNo++;
if (ucChannelNo > 5) ucChannelNo = 1;

取平均值();

十进制转换为 ASCII (A_ADC[1]、5);
A_ASCII[5]= 0;
UARTSend (A_ascii、COM0);
UARTCharPut (UART0_BASE、');

十进制转换为 ASCII (A_ADC[2]、5);
A_ASCII[5]= 0;
UARTSend (A_ascii、COM0);
UARTCharPut (UART0_BASE、');

十进制转换为 ASCII (A_ADC[3]、5);
A_ASCII[5]= 0;
UARTSend (A_ascii、COM0);
UARTCharPut (UART0_BASE、');

十进制转换为 ASCII (A_ADC[4]、5);
A_ASCII[5]= 0;
UARTSend (A_ascii、COM0);
UARTCharPut (UART0_BASE、');

十进制转换为 ASCII (A_ADC[5]、5);
A_ASCII[5]= 0;
UARTSend (A_ascii、COM0);
UARTCharPut (UART0_BASE、'\n');
delay_ms (400);

//-------- 定时器0中断---


//第一个计时器中断的中断处理程序。

空 Timer0IntHandler (空)

//
//清除计时器中断。
//
ROM_TimerIntClear (TIMER0_BASE、TIMER_TINA_TIMEOUT);

//
//更新显示屏上的中断状态。
//
ROM_IntMasterDisable();

if (ucToggle0)

GPIO_Porte AHB_DATA_R |= 0x10;

其他

GPIO_Porte AHB_DATA_R &=~Ω(0x10);

ucToggle0 =~Ω ucToggle0;

ucScrollCounter++;
if (ucScrollCounter >= 6)

ucScrollCounter = 0;
ucMessageCounter++;
b 间隔= 1;
// bDisplayOnce = 0;
if (ucMessageCounter > total_messages)

ucMessageCounter = 1;
// bOneCyclDelay = 1;


ROM_IntMasterEnable();

 

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您似乎正在使用 SSI_FLASH_init()例程来初始化 SSI3、然后使用 GPIO PQ1和 PK1并手动选择闪存或 ADC。 我看不到例程 SSILibSendReadDataAdvBI()函数在做什么。 是否将 SSI3置于"读取2位宽"模式? 如果是、您是否将其恢复为 ADC 的传统模式?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Bob:

    在代码成功运行4天之后工作。 信号时序有问题

    但该代码适用于25KHz 及更低频率。 我想在1MHz 时执行的操作。

    ///----------------------------------------------------------
    uint32_t a_SSIRecByte[4];
    uint32_t a_SSISendByte[4];

    unsigned int uiCount;

    空 init_adc (uint32_t ui32SysClock、unsigned char ucChannel)

    SSIConfigSetExpClk (SSI3_base、ui32SysClock、SSI_FRF_MOTO_MOTO_MODE_0、
    SSI_MODE_MASTER、25000、8);

    SSIAdvModeSet (SSI3_base、SSI_ADV_MODE_LEGACY_LEGACY_);
    SSIEnable (SSI3_base);

    ucChannel = ucChannel - 1;
    ucChannel =(ucChannel << 4)+ 0x07;


    A_SSISendByte[0]=(0xFE);//复位
    ADC_SSI_WRITE (A_SSISendByte、1);
    delay_ms (50);

    A_SSISendByte[0]=(0xFC);//同步命令
    ADC_SSI_WRITE (A_SSISendByte、1);

    A_SSISendByte[0]=(0xF0);//自校准
    ADC_SSI_WRITE (A_SSISendByte、1);


    A_SSISendByte[0]=(0x50);//写入第0个地址
    A_SSISendByte[1]=(0x00);
    A_SSISendByte[2]=(0x00);//设置寄存器
    ADC_SSI_WRITE (A_SSISendByte、3);

    A_SSISendByte[0]=(0x52);//写入第二个地址
    A_SSISendByte[1]=(0x00);
    A_SSISendByte[2]=(0xC0);//ACR 0xC2
    ADC_SSI_WRITE (A_SSISendByte、3);

    A_SSISendByte[0]=(0x51);//写入第一个地址
    A_SSISendByte[1]=(0x00);
    A_SSISendByte[2]=(ucChannel);//0x05 //MUX 寄存器
    ADC_SSI_WRITE (A_SSISendByte、3);

    unsigned int read_adc (unsigned char ucChannel)

    unsigned long ulRead;

    SSIAdvModeSet (SSI3_base、SSI_ADV_MODE_LEGACY_LEGACY_);
    SSIEnable (SSI3_base);

    操作

    ulRead = ROM_GPIOPinRead (GPIO_PORTK_base、ADS1243_DRDY);
    }while (ulRead!= 0x00000000);

    A_SSISendByte[0]=(0x51);//写入第一个地址
    A_SSISendByte[1]=(0x00);
    A_SSISendByte[2]=(ucChannel);//MUX 寄存器07至47
    ADC_SSI_WRITE (A_SSISendByte、3);

    A_SSISendByte[0]=(0x01);//读取数据命令
    ADC_SSI_WRITE (A_SSISendByte、1);
    delay_ms (1);

    ADC_SSI_Read (A_SSIRecByte、3);

    uiCount = 0;
    uiCount = A_SSIRecByte[0]* 256;
    uiCount = uiCount + A_SSIRecByte[1];

    return (uiCount);


    void ADC_SSI_write (uint32_t *ucData、unsigned short usLen)

    无符号超长整型 ulLoop = 0;
    uint32_t uldmummy;

    ulLoop = 0;
    ROM_GPIOPinWrite (GPIO_PORTK_base、ADS1243、ADS1243_enable);
    SSIDataPut (SSI3_base、ucData[0]);
    SSIDataGet (SSI3_base、ulDummy);

    if (usLen == 3)

    SSIDataPut (SSI3_base、ucData[1]);
    SSIDataGet (SSI3_base、ulDummy);

    SSIDataPut (SSI3_base、ucData[2]);
    SSIDataGet (SSI3_base、ulDummy);
    ROM_GPIOPinWrite (GPIO_PORTK_base、ADS1243、ADS1243_disable);

    void adc_sso_read (uint32_t *ucData、unsigned long ulLen)

    ROM_GPIOPinWrite (GPIO_PORTK_base、ADS1243、ADS1243_enable);
    SSIDataPut (SSI3_base、0x55);
    SSIDataGet (SSI3_base、&ucData[0]);

    SSIDataPut (SSI3_base、0x55);
    SSIDataGet (SSI3_base、&ucData[1]);

    SSIDataPut (SSI3_base、0x55);
    SSIDataGet (SSI3_base、&ucData[2]);

    ROM_GPIOPinWrite (GPIO_PORTK_base、ADS1243、ADS1243_disable);

    此致、  

    Kiran

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    比较 ADS1243的 SSI 要求、  链路第6页的图1、我认为您需要在 SPO = 0和 SPH = 1的情况下使用 SSI。 请参阅 第1237页的链接图17-6。 这意味着您应该在 函数 SSIConfigSetExpClk 中使用 SSI_FRF_MOTO_MODE_1。 数据在时钟的上升沿输出、并在下降沿采样。

    SSIConfigSetExpClk (SSI3_base、ui32SysClock、SSI_FRF_MOTO_MOTO_1、SSI_MODE_MASTER、25000、8);