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.

MSP430x2xx关于驱动ADS1220的SPI接口的测试程序请教啊

Other Parts Discussed in Thread: ADS1220, MSP430G2001

MSP430x2xx关于驱动ADS1220的SPI接口的测试程序请教啊 

  • 可以下载官网例程 MSP430G2x01, MSP430G2x11, MSP430G2x21, MSP430G2x31 Code Examples 里面包含了SPI的例程

    可在http://www.ti.com.cn/product/cn/msp430g2001 软件条目下下载

  • 楼主,

     调试MSP430和ADS1220之间关于SPI的通信,首先我们针对MSP430有各种工作模式的例程,你可以仔细参考,

    其次你需要弄清楚ADS1220支持的SPI的工作模式,具体的通信报文格式之类的,这样才方便调试。

    谢谢

  • 你好,

    关于ADS的驱动,你可以到数模转换器版面咨询。

    附件是一篇帖子,应该有你想要的东西以及你设计需要注意的问题。

    希望对你有帮助。

  •     你好,我最近一个项目也在用ADS1220做RTS检测,发现配置寄存器读出来不对。

    来发现数据手册对时序要求很严格尤其是时钟下降沿边沿时间不得超过50ns。硬件模拟SPI不行,后来我用的是STM32硬件SPI。内核是STM32F051C8T6读出来的数据还是不对。

    }
    /****************************************************************/
    void ADS1220_RegisterConfigue(void)
    {
    	unsigned char i;
      unsigned char dat[5]={0x43,0x04,0x05,0x55,0x70};//数组包含写寄存器配置字,以及寄存器值。
    	CS_L;
      for(i=0;i<5;i++)
    	{
    	SPI_SendData8( SPI1, dat[i]);
    	}
    	CS_H;
    }
    /************************************************************/
    void Read_Register(void)
    {
     unsigned char i,n;
     unsigned char dat[4]={0x00,0x00,0x00,0x00};
     CS_L;
     SPI_SendData8( SPI1,0x23);//发送读寄存器指令;
     for(i=0;i<3;i++)
     {
      dat[i] =  SPI_ReceiveData8(SPI1);
     }
     CS_H;
     for(i=0;i<4;i++)
     { 
    	 n=dat[i];
    	 printf("\n\r val = %d\n", n);打印输出。
     }
    }
    

    我就用这两个函数配置寄存器和读出寄存器。但是不对。自然没办法往下做了。求解!

  • 你有核对过单片机的相位和极性和AD芯片要求的是否一样,不一样肯定不行的。

  • 你好,论坛提问输入不了问题。只能在这请教你一个问题了。

    MSP430的硬件SPI是只能发送固定8位或者8的倍数的数据吗?比如8位,16位等。

    对于12位的这种数据格式,能使用MSP430的硬件SPI吗?还是说只能使用IO进行SPI模拟通信。

    希望得到你的解答,谢谢

  • 你好!

    问题1:对于MSP430的硬件SPI是只能发送固定8位或者8的倍数的数据吗?

    解答:是的,硬件是8位或16位移位寄存器。所以你要发的数据也是8位或16位

    问题2:对于12位的这种数据格式,能使用MSP430的硬件SPI吗?

    解答:你还是不理解SPI.spi只是传输数据的一种方式,收到数据后你需要对数据进行处理。

    比如ADS1220芯片读取的有效数据是24bit,实际就是三个字节是有效数据。

    你完全可以用片上SPI读取任何长度数据。读完后要处理,每个字节一个单位。留下有用的数据。12位也是,你就读两个字节把第一个字节的高4位清除再和低字节的8位组合在一起。形成一个U16类型的数去运算。

    例子:

    以ADS1220为例,他是24bit的补码数据形式传出来的。

    假设数据已经读取在u8Data缓冲区

    //处理数据
    l32Value = u8Data[0];
    l32Value <<= 8;
    l32Value |= u8Data[1];
    l32Value <<= 8;
    l32Value |= u8Data[2];

    if((u8Data[0]&0x80) == 0)
    {
    l32Value &= 0X00FFFFFF;
    }
    else if(u8Data[0]&0x80)//如果是负数
    {
    l32Value |= 0XFF000000;
    }

    return l32Value;

  • 我想问的是从机的控制指令是12位的,我能采用430的硬件SPI发送吗?从下面的时序图看,如果发送的话,发的应该是16位,第14个时钟就接收到数据了,

    数据应该会出现错误的吧。我发送完指令再接收到的数据应该就产生了移位吧,数据就错误了,这种情况是不是不能采用硬件SPI?

  • 谢谢,去看看         

  • 请问,问题解决了吗 ?分享下 经验哦 

  • 你好,没看到 附件呀 ?