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.

[参考译文] ADS127L01:示例SPI代码

Guru**** 2562120 points
Other Parts Discussed in Thread: ADS127L01

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

https://e2e.ti.com/support/data-converters-group/data-converters/f/data-converters-forum/586376/ads127l01-sample-spi-code

部件号:ADS127L01

您能否提供此零件的工作示例SPI代码?

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

    感谢您对我们ADS127L01的关注。 很遗憾,我们没有可以发送给您的固件源代码。 如果您有关于使用界面的具体问题,请告诉我,我可以帮您解决。

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

    我正在运行下面的代码,但总是返回所有0x0,即使我正在写入多个寄存器。  你看到我遗漏的东西了吗?

    #include <MSP4S.h>

    无符号字符MST_Data1,MST_Data2,SLV_Data;
    无符号char temp,A2D_data1,A2D_data2,A2D_data3,A2D_data4,A2D_data5,A2D_data6,A2D_data7,A2D_data8;

    内部主(无效)

     易失性无符号int I;

     WDTCTL = WDTPW+WDTHOLD;                  //停止看门狗计时器

                                               //设置为从属设备重置的WFP 1.1
     P1DIR |= 0xE0;                           //设置WFP 1.5 - 7
     P4SEL || BIT4+BIT5;                      // WFP 3.3 ,4选项选择
     P4SEL || BIT0;                           // WFP 2.7 选项选择
     
     UCA1CTL1 |= UCSWRST;                     //**将状态机置于复位**
     UCA1CTL0 || UCMST+UCSYNC+UCCKPL+UCMSB;   // 3引脚,8位SPI主控制器
                                               //时钟极性高,MSB
     UCA1CTL1 |= UCSSEL_2;                    // SMCLK
     UCA1BR0 = 0x02;                          ///2
     UCA1BR1 = 0;                             //
     UCA1MCTL = 0;                            //无调制
     UCA1CTL1 &=~UCSWRST;                    //**初始化USCI状态机**
     UCA1IE |= UCRXIE;                        //启用USI_A0 RX中断

     P1OUT &=~0x20;                          //现已初始化SPI信号,
     对于(i=50;i>0;i--);//                       等待从属设备初始化
     P1OUT |= 0x20;                           //重置A2D

     对于(i=50;i>0;i--);//                       等待从属设备初始化

     MST_Data1 = 0x20;                         //初始化数据值
     MST_Data2 = 0x08;                         //初始化数据值
     SLV_Data = 0x00;                         //

     P1OUT >=~0x80;                          // A2D CS LOW

     同时(!(UCA1IFG&UCTXIFG);              // USI_A0 TX缓冲器就绪?
     UCA1TXBUF = 0x07;                    //重置A2D

     对于(i=20;I>0; I--);               //将两次传输之间的时间添加到
                                           //确保从属设备可以处理信息
     同时(!(UCA1IFG&UCTXIFG);              // USI_A0 TX缓冲器就绪?
     UCA1TXBUF = 0x42;                    // OFC0
     对于(i=20;I>0; I--);               //将两次传输之间的时间添加到
     同时(!(UCA1IFG&UCTXIFG);              // USI_A0 TX缓冲器就绪?
     UCA1TXBUF = 0x01;                    // OFC0
     对于(i=20;I>0; I--);               //将两次传输之间的时间添加到
     同时(!(UCA1IFG&UCTXIFG);              // USI_A0 TX缓冲器就绪?
     UCA1TXBUF = 0x55;                    // OFC0
     对于(i=20;I>0; I--);               //将两次传输之间的时间添加到
     同时(!(UCA1IFG&UCTXIFG);              // USI_A0 TX缓冲器就绪?
     UCA1TXBUF = 0xAA;                    // OFC0

     对于(i=20;I>0; I--);               //将两次传输之间的时间添加到
                                           //确保从属设备可以处理信息
     同时(!(UCA1IFG&UCTXIFG);              // USI_A0 TX缓冲器就绪?
     UCA1TXBUF = MST_Data1;                    //传输第一个字符

     对于(i=20;I>0; I--);               //将两次传输之间的时间添加到
                                           //确保从属设备可以处理信息

     同时(!(UCA1IFG&UCTXIFG);              // USI_A0 TX缓冲器就绪?
     UCA1TXBUF = MST_Data2;                    //传输第一个字符

     对于(i=20;I>0; I--);               //将两次传输之间的时间添加到

     P1OUT |= 0x80;                           // A2D CS HIGH
     对于(i=20;I>0; I--);               //将两次传输之间的时间添加到


     __bis_sr_register(LPM0_bits + GIE);      // CPU关闭,启用中断
    }

    #if defined(__TI_Compiler_version__)|| defined(__IAR_SYSTEMS _ICC__)
    #pragma vector=USI_A1_vector
    __interrupt void USI_A1_ISR(void)
    #Elif已定义(__GMNU__)
    void __attribute__((interrupt (USI_A1_vector)) USI_A1_ISR (void)
    #否则
    错误编译器不受支持!
    #endif

     易失性无符号int I;

     SWITCH(__EIV_IN_RANGE(UCA1IV,4))
     {
       情况0:中断;                         //矢量0 -无中断
       案例2:                                //矢量2 - RXIFG
          P1OUT >=~0x80;                          // A2D CS LOW

           同时(!(UCA1IFG&UCTXIFG);          // USI_A0 TX缓冲器就绪?
           A2D_data1 = UCA1RXBUF;
           UCA1TXBUF = 0x0;                //发送下一个值

           对于(i=20;I>0; I--);               //将两次传输之间的时间添加到
                                                 //确保从属设备可以处理信息
           同时(!(UCA1IFG&UCTXIFG);          // USI_A0 TX缓冲器就绪?
           A2D_data2 = UCA1RXBUF;
           UCA1TXBUF = 0x0;                //发送下一个值

           对于(i=20;I>0; I--);               //将两次传输之间的时间添加到
                                                 //确保从属设备可以处理信息
           同时(!(UCA1IFG&UCTXIFG);          // USI_A0 TX缓冲器就绪?
           A2D_data3 = UCA1RXBUF;
           UCA1TXBUF = 0x0;                //发送下一个值

           对于(i=20;I>0; I--);               //将两次传输之间的时间添加到
                                                 //确保从属设备可以处理信息
           同时(!(UCA1IFG&UCTXIFG);          // USI_A0 TX缓冲器就绪?
           A2D_data4 = UCA1RXBUF;
           UCA1TXBUF = 0x0;                //发送下一个值

           对于(i=20;I>0; I--);               //将两次传输之间的时间添加到
                                                 //确保从属设备可以处理信息
           同时(!(UCA1IFG&UCTXIFG);          // USI_A0 TX缓冲器就绪?
           A2D_data5 = UCA1RXBUF;
           UCA1TXBUF = 0x0;                //发送下一个值

           对于(i=20;I>0; I--);               //将两次传输之间的时间添加到
                                                 //确保从属设备可以处理信息
           同时(!(UCA1IFG&UCTXIFG);          // USI_A0 TX缓冲器就绪?
           A2D_data6 = UCA1RXBUF;
           UCA1TXBUF = 0x0;                //发送下一个值

           对于(i=20;I>0; I--);               //将两次传输之间的时间添加到
                                                 //确保从属设备可以处理信息
           同时(!(UCA1IFG&UCTXIFG);          // USI_A0 TX缓冲器就绪?
           A2D_data7 = UCA1RXBUF;
           UCA1TXBUF = 0x0;                //发送下一个值

           对于(i=20;I>0; I--);               //将两次传输之间的时间添加到
                                                 //确保从属设备可以处理信息
           同时(!(UCA1IFG&UCTXIFG);          // USI_A0 TX缓冲器就绪?
           A2D_data8 = UCA1RXBUF;
           UCA1TXBUF = 0x0;                //发送下一个值

           对于(i=20;I>0; I--);               //将两次传输之间的时间添加到
                                                 //确保从属设备可以处理信息
           P1OUT |= 0x80;                           // A2D CS HIGH

           对于(i=20;I>0; I--);               //将两次传输之间的时间添加到
                                                 //确保从属设备可以处理信息
         中断;
       案例4:中断;                         //矢量4 - TXIFG
       默认值:中断;
     }
    }

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

    您好,Stephen:

    我们很难通读某个人的部分代码并完全理解问题。 我们验证接口的最简单方法是查看逻辑分析器中ADS127L01 SPI信号的范围捕获。 其中包括SCLK,DIN,DOUT,/DRDY,/CS, 和CLK。

    在尝试读取/写入ADS127L01之前,我建议验证所有电源和时钟信号是否如预期的那样存在。 只要您发送主时钟(CLK)并将启动拉高,您就应该注意到/DRDY针脚在以输出数据速率切换。 这表示ADC正在转换和输出新数据。 您是否已验证此信息?

    请提供ADS127L01上所有硬件模式引脚的配置以及电源电压和时钟输入频率。 如果您愿意,我可以查看您的示意图。

    此致,

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

    谢谢Ryan。

    是的,我已验证芯片上的所有针脚都处于预期水平。  还验证/DRDY是否每4 usec切换一次高电平,只要起始引脚高电平,持续大约250nsec。

    随附原理图。   

    我遇到的问题是,我只是简单地读取8个寄存器,希望每次都读取相同的数据。  相反,我通常会得到全零,有时还会得到其他随机数据。  我从未看到ID寄存器在下半字节中出现预期的0x3。

    Steve

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    仅供参考,以下是硬件模式PIN的我的设置:
    CS=0
    开始=1
    重置=1
    OSR1=0
    OSR2=0
    HR=0
    过滤器1=0
    FILTER0=0
    格式=0
    FSMODE=0
    DAISYIN=0
    INTLDO=1
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好,Stephen:

    原理图和引脚设置看起来正常。 您是否仍有此问题? 请共享寄存器读取命令的逻辑分析器范围捕获。 确保至少显示SCLK,/CS,DIN,DOUT和CLK。

    此致,