Other Parts Discussed in Thread: ADS1299
Tool/software: Code Composer Studio
This is my program for MSP432P401R (MASTER) SPI for ADS1299 (SALVE). But I can't get the desired result, DRDY and START don't have any signal, what should I do?
#include "msp.h"
#include <stdint.h>
#define SPIU EUSCI_B0
#define HZ 3000000UL // more or less
#define SPI_HZ 1000000UL // 1MHz clock
volatile uint8_t rreg;
#define CS_LO() do {P3->OUT &= ~BIT0;} while (0)
#define CS_HI() do {P3->OUT |= BIT0;} while (0)
#define tCLK 0.000666
///
// spi_init()
// Set UCB0 to SPI, Master, 1MHz, mode=(1,1), 3-wire
//
void
spi_init(void)
{
SPIU->CTLW0 = EUSCI_B_CTLW0_SWRST|
EUSCI_B_CTLW0_SSEL__SMCLK|EUSCI_B_CTLW0_SYNC|
EUSCI_B_CTLW0_MODE_0|EUSCI_B_CTLW0_MST|EUSCI_B_CTLW0_MSB|
(1*EUSCI_B_CTLW0_CKPL)|(0*EUSCI_B_CTLW0_CKPH); // mode=(1,1)
SPIU->BRW = HZ/SPI_HZ; // SPI clock rate
SPIU->CTLW0 &= ~EUSCI_B_CTLW0_SWRST; // Out of reset
P1->SEL0 |= (BIT5|BIT6|BIT7); // UCB0 per SLAS826G Table 6-62
P1->SEL1 &= ~(BIT5|BIT6|BIT7);
P3->OUT |= BIT0; // P3.0 as /CS (but not STE)
P3->DIR |= BIT0;
return;
}
///
// spix()
// Exchange one byte
//
uint8_t spix(uint8_t b)
{
while (!(SPIU->IFG & EUSCI_B_IFG_TXIFG)) /*EMPTY*/;
SPIU->TXBUF = b;
while (!(SPIU->IFG & EUSCI_B_IFG_RXIFG)) /*EMPTY*/;
b = SPIU->RXBUF;
return(b);
}
void main(void)
{
WDT_A->CTL = WDT_A_CTL_PW | WDT_A_CTL_HOLD; // stop watchdog timer
spi_init();
while(1){
CS_LO();
__delay_cycles((2^16)*tCLK);
spix(0x06);//RESET
__delay_cycles(2*tCLK);
spix(0x02);//WAKEUP
__delay_cycles(HZ/3);
spix(0x0A);//START
__delay_cycles(HZ/3);
spix(0x11);//SDATAC
__delay_cycles(HZ/3);
spix(0x20);//RREG OPCODE1
__delay_cycles(HZ/3);
spix(0x0);//RREG OPCODE2
__delay_cycles(HZ/3);
rreg = spix(0x0);//ID
CS_HI();
}
}