LM3S9B92配置ADS1248

Other Parts Discussed in Thread: ADS1248

用LM3S9B92的SPI通信,配置ADS1248,一直读不出数据

void
Ads1248Init(void)
{
    GPIOPinTypeGPIOOutput(GPIO_PORTC_BASE,GPIO_PIN_4|GPIO_PIN_5|GPIO_PIN_6);//配置C4,C5,C6为输出
    GPIOPinWrite(GPIO_PORTC_BASE,GPIO_PIN_6|GPIO_PIN_5,0x00);//对ADS1248复位
    SysCtlDelay(4);//延时
    GPIOPinWrite(GPIO_PORTC_BASE,GPIO_PIN_6,GPIO_PIN_6);

    while(SSIDataGetNonBlocking(SSI0_BASE, &UART_RX[0]))
    {
    }//如果SSI0正在接收数据等待
    //对ADS1248进行配置
    GPIOPinWrite(GPIO_PORTC_BASE,GPIO_PIN_5,GPIO_PIN_5); //START置1
    SysCtlDelay(4);//延时
    for(ulindex = 0; ulindex < 3; ulindex++)
    {
        //
        // 通过串口1显示打印发送的数据
        //
     //while(UARTBusy(UART1_BASE));
        //UARTCharPut(UART1_BASE,SSI_TX02[ulindex]);

        //while(SSIBusy(SSI0_BASE));//SSI0发送忙,等待
        SSIDataPut(SSI0_BASE, SSI_TX02[ulindex]);//spi配置ADS1248 02寄存器 选择REF0脚输入的外部参考电压
    }

    while(SSIBusy(SSI0_BASE));//SSI0发送忙,等待

    for(ulindex = 0; ulindex < 3; ulindex++)
    {
        //
        // 通过串口1显示打印发送的数据
        //
     //while(UARTBusy(UART1_BASE));
        //UARTCharPut(UART1_BASE,SSI_TX03[ulindex]);

        //while(SSIBusy(SSI0_BASE));//SSI0发送忙,等待
        SSIDataPut(SSI0_BASE, SSI_TX03[ulindex]);//spi配置ADS1248 03寄存器 PGA放大倍数为128 AD采样率为20HZ
    }
    while(SSIBusy(SSI0_BASE));//SSI0发送忙,等待

    for(ulindex = 0; ulindex < 3; ulindex++)
    {
        //
        // 通过串口1显示打印发送的数据
        //
     //while(UARTBusy(UART1_BASE));
        //UARTCharPut(UART1_BASE,SSI_TX0A[ulindex]);

        //while(SSIBusy(SSI0_BASE));//SSI0发送忙,等待
        SSIDataPut(SSI0_BASE, SSI_TX0A[ulindex]);//spi配置ADS1248 0A寄存器 电流源选择100UA
    }

    while(SSIBusy(SSI0_BASE));//SSI0发送忙,等待
     for(ulindex = 0; ulindex < 3; ulindex++)
    {
        //
        // 通过串口1显示打印发送的数据
        //
     //while(UARTBusy(UART1_BASE));
        //UARTCharPut(UART1_BASE,SSI_TX0B[ulindex]);

        //while(SSIBusy(SSI0_BASE));//SSI0发送忙,等待
        SSIDataPut(SSI0_BASE, SSI_TX0B[ulindex]);//spi配置ADS1248 0B寄存器 电流源1流过AIN0 ,电流源2流过AIN1
    }

     while(SSIBusy(SSI0_BASE));//SSI0发送忙,等待

 

}

//读取环境温度
double
PV_H(void)
{
 double PVT1,PVT2,PVT3,PVT4,PVT5;
 double PVTD;
    int PVTC;
    while(SSIBusy(SSI0_BASE));//SSI0发送忙,等待
    for(ulindex = 0; ulindex < 3; ulindex++)
    {
        //
        // 通过串口1显示打印发送的数据
        //
     //while(UARTBusy(UART1_BASE));
        //UARTCharPut(UART1_BASE,SSI_TX000[ulindex]);

        //while(SSIBusy(SSI0_BASE));//SSI0发送忙,等待
        SSIDataPut(SSI0_BASE, SSI_TX000[ulindex]);//spi配置ADS1248 00寄存器 正端选择AIN4 负端选择AIN5
    }

    while(SSIBusy(SSI0_BASE));//SSI0发送忙,等待
    for(ulindex = 0; ulindex < 3; ulindex++)
    {
        //
        // 通过串口1显示打印发送的数据
        //
     while(UARTBusy(UART1_BASE));
        //UARTCharPut(UART1_BASE,SSI_TX00B[ulindex]);

       // while(SSIBusy(SSI0_BASE));//SSI0发送忙,等待
        SSIDataPut(SSI0_BASE, SSI_TX00B[ulindex]);//spi配置ADS1248 0B寄存器 电流源1流过AIN4 ,电流源2流过AIN5
    }

    while(SSIBusy(SSI0_BASE));//SSI0发送忙,等待
    SSIDataPut(SSI0_BASE,RDATA);//spi读数据指令,每发送一个读一组数据

    for(ulindex = 0; ulindex <3; ulindex++)
    {
        //
        // Receive the data using the "blocking" Get function. This function
        // will wait until there is data in the receive FIFO before returning.
        //
        SSIDataGet(SSI0_BASE, &UART_RX[ulindex]);

        //
        // Since we are using 8-bit data, mask off the MSB.
        //
        UART_RX[ulindex] &= 0x00FF;

        //
        // 通过串口显示SSI0接收到的数据
        //
        while(UARTBusy(UART1_BASE));
        UARTCharPut(UART1_BASE,UART_RX[ulindex]);


    }

系统时钟为50MHZ

  • Zhetao,

     你好, 能否详细描述一下你遇到的问题和实验的现象。

    读不出数据是指数据不正确?还是没有数据返回?如果数据不正确,读到的数据是怎样的?如果没有数据返回,程序停留在何处?

    Wellin