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.

Can't read ADS1293's registers with Tiva-C at once. I can read it after 8 times.

Other Parts Discussed in Thread: MSP430F5529, ADS1293

 Hi all,

I disconnect MSP430F5529 on ADS1293 by scratching R25, R26 and R28 on board and I am driving J2 (SPI) port with Tiva-C LaunchPad.

My first problem is; I can't read the register at once. When I want to read specific address, I have to read in "for" loop. (after 8 times, in 9th count)

My code is attached. I would appreciate if  you can help.

Best Regards,

Burak

#include <stdint.h>
#include <stdbool.h>
#include "inc/hw_memmap.h"
#include "inc/hw_types.h"
#include "driverlib/sysctl.h"
#include "driverlib/interrupt.h"
#include "driverlib/gpio.h"
#include "driverlib/timer.h"

// SPI
#include "inc/hw_ssi.h"
#include "driverlib/ssi.h"
#include "driverlib/pin_map.h"

void ClockSetup(void);
void SetupSPI(void);
void ADS1293_RegWrite(uint32_t adres,uint32_t value);
uint32_t ADS1293_RegRead(uint32_t adres2);
void ADS1293_Setup_3Lead(void);


uint32_t read_value;
uint32_t value;
uint32_t value2;

uint32_t inst1;
uint32_t inst2;

int i;


#define ADS1293_WRITE_BIT                             (0x7F)
#define ADS1293_READ_BIT                              (0x80)


void ClockSetup(void){

	SysCtlClockSet(SYSCTL_SYSDIV_5|SYSCTL_USE_PLL|SYSCTL_XTAL_16MHZ|SYSCTL_OSC_MAIN);

}

void SetupSPI(void){

	SysCtlPeripheralEnable(SYSCTL_PERIPH_SSI3);
	SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOD);

	GPIOPinConfigure(GPIO_PD0_SSI3CLK);
	GPIOPinConfigure(GPIO_PD3_SSI3TX);
        GPIOPinConfigure(GPIO_PD2_SSI3RX);
        GPIOPinTypeSSI(GPIO_PORTD_BASE,GPIO_PIN_3|GPIO_PIN_0|GPIO_PIN_2);
SSIConfigSetExpClk(SSI3_BASE, SysCtlClockGet(), SSI_FRF_MOTO_MODE_0, SSI_MODE_MASTER, 16000000, 16); SSIEnable(SSI3_BASE); GPIOPinTypeGPIOOutput(GPIO_PORTD_BASE, GPIO_PIN_1); GPIOPinWrite(GPIO_PORTD_BASE,GPIO_PIN_1, GPIO_PIN_1); } int main(void) { ClockSetup(); SetupSPI(); ADS1293_Setup_3Lead(); for(i=0;i<9;i++){ //replace 9 with 1 it doesn't work value2=ADS1293_RegRead(0x01); //reading 0x01 for example value2&=0x00FF; } } } void ADS1293_RegWrite(uint32_t adres,uint32_t value) { GPIOPinWrite(GPIO_PORTD_BASE,GPIO_PIN_1, 0); inst1 = ((ADS1293_WRITE_BIT & adres)<<8)|value; SSIDataPut(SSI3_BASE,inst1); while(SSIBusy(SSI3_BASE)); GPIOPinWrite(GPIO_PORTD_BASE,GPIO_PIN_1, GPIO_PIN_1); } uint32_t ADS1293_RegRead(uint32_t adres2) { GPIOPinWrite(GPIO_PORTD_BASE,GPIO_PIN_1, 0); inst2 = (ADS1293_READ_BIT | adres2)<<8; SSIDataPut(SSI3_BASE,inst2); while(SSIBusy(SSI3_BASE)); SSIDataGet(SSI3_BASE, &read_value); while(SSIBusy(SSI3_BASE)); GPIOPinWrite(GPIO_PORTD_BASE,GPIO_PIN_1, GPIO_PIN_1); return read_value; } void ADS1293_Setup_3Lead(void) { ADS1293_RegWrite(0x00,0x00); ADS1293_RegWrite(0x01,0x11); ADS1293_RegWrite(0x02,0x19); ADS1293_RegWrite(0x0A,0x07); ADS1293_RegWrite(0x0C,0x04); ADS1293_RegWrite(0x12,0x04); ADS1293_RegWrite(0x14,0x24); ADS1293_RegWrite(0x21,0x02); ADS1293_RegWrite(0x22,0x02); ADS1293_RegWrite(0x23,0x02); ADS1293_RegWrite(0x27,0x08); ADS1293_RegWrite(0x2F,0x30); }