微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 硬件电路设计 > TI模拟硬件电路设计 > 关于ADS1299的SPI读取器件ID的程序移植

关于ADS1299的SPI读取器件ID的程序移植

时间:10-02 整理:3721RD 点击:

各位好。

现在我用msp430f5529lp与ads1299通信。下面是energia的程序

测试读取结果 0011 1110  与手册中的说明符合

Bits[7:5] Not used

Bit 4 Must be set to '1'

Bits[3:0] Factory-programmed device identification bits

1110 = ADS1299

然后我用CCS写5529的程序

#include <msp430.h>
char a=0;
int main(void)
{
volatile unsigned int i;

WDTCTL = WDTPW+WDTHOLD; // Stop watchdog timer

P3SEL |= BIT3+BIT4; // P3.3,4 option select
P2SEL |= BIT7; // P2.7 option select

UCA0CTL1 |= UCSWRST; // **Put state machine in reset**
UCA0CTL0 |= UCMST+UCSYNC+UCCKPH+UCMSB; // 3-pin, 8-bit SPI master
//, MSB
UCA0CTL1 |= UCSSEL_2; // SMCLK
UCA0BR0 = 2; // /2
UCA0BR1 = 0; //
UCA0MCTL = 0; // No modulation
UCA0CTL1 &= ~UCSWRST; // **Initialize USCI state machine**
UCA0IE |= UCRXIE; // Enable USCI_A0 RX interrupt

//P1OUT &= ~0x02; // Now with SPI signals initialized,
//P1OUT |= 0x02; // reset slave

for(i=50;i>0;i--); // Wait for slave to initialize

P2OUT &=~BIT3; //CS LOW
while (!(UCA0IFG&UCTXIFG));//SDATAC
UCA0TXBUF=0X11;
P2OUT |= BIT3; //CS HIGH
__delay_cycles(4);//4CLK

while(1)
{
P2OUT &=~BIT3; //CS LOW
while (!(UCA0IFG&UCTXIFG));
UCA0TXBUF=0X20;
while (!(UCA0IFG&UCTXIFG));
UCA0TXBUF=0X00;
while (!(UCA0IFG&UCTXIFG));
UCA0TXBUF=0X00;

while (!(UCA0IFG&UCRXIFG));
a=UCA0RXBUF;
P2OUT |= BIT3; //CS HIGH

__delay_cycles(300000);
}
}

然后读取,结果都是0;请指教

这类 SPI 通信结果全0和全1 的情况, 很可能是连接,芯片供电和复位等因素,先检查芯片有没有能够工作了

感谢您的回答,关于供电和复位的原因,我之前就遇到过,已经排除了,当时是只给数字电源,然后模拟电压没给,以为不需要芯片转换,只读ID是没问题的,但是发现无法读取,然后加上模拟电源就可以读取

现在我是5529与ADC连接好,然后分别开energia和CCS下载,这样我应该没有去动过两者间的连线,

然后我发现下面相同程序片段在CLK上输出的波形不一样(在CLK周期相同的情况下)

CCS:                                                                                  energia:

while (!(IFG2 & UCA0TXIFG));

UCA0TXBUF=0X11  ;                                                           SPI.transfer(0x11);

while (!(IFG2 & UCA0TXIFG));

UCA0TXBUF=0X11   ;                                                          SPI.transfer(0x11);

while (!(IFG2 & UCA0TXIFG));

UCA0TXBUF=0X11  ;                                                           SPI.transfer(0x11);

下面是波形示意图,energia在发送8位数据时,中间有明显的延迟,

结贴了,亲测可以430g2955-ads1299 SPI读取ID  0011 1110    3E

时钟8M, UCB0BR0 = 0x02最简单的初始化顺序:

csLow();
while (!(IFG2 & UCB0TXIFG));
UCB0TXBUF=0X11;                               //RDATAC
csHigh();
delay_us(100);

csLow();
delay_us(4);
while (!(IFG2 & UCB0TXIFG));
UCB0TXBUF=0X20;                           //Addr+0X20
delay_ns(1300);                                   //不加延时读出0x00,很关键
while (!(IFG2 & UCB0TXIFG));
UCB0TXBUF=0X00;                           //ID
delay_ns(1300);
while (!(IFG2 & UCB0TXIFG));
UCB0TXBUF=0X00;
delay_ns(1300);
//while (!(IFG2 & UCB0RXIFG));
while (!(IFG2 & UCA0TXIFG));
UCA0TXBUF=UCB0RXBUF;            //串口发送
csHigh();
//delay_ms(50);

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top