Hi I use the ADS1294 together with the Stellaris LM3S8962 Evaluation Kit.
After following the initialization process I don´t get a DRDY signal.
To test the communication I tried to read the ID register unfortunately this is although not possible.
Here is my code and the Layout:
/* * EKG_V1.c * * Created on: 15.04.2015 * Author: Alexander */ #include "EKG.h" // INIT ---------------------------------------------------------------------------------------- void InitHW(void) { SysCtlClockSet(SYSCTL_SYSDIV_1 | SYSCTL_USE_OSC | SYSCTL_OSC_MAIN | SYSCTL_XTAL_8MHZ); SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOA); GPIOPinTypeGPIOOutput(GPIO_PORTA_BASE,GPIO_PIN_7| GPIO_PIN_3 /*CS*/|GPIO_PIN_5/*SSITX*/); SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOC); GPIOPinTypeGPIOOutput(GPIO_PORTC_BASE,GPIO_PIN_7); SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOD); GPIOPinTypeGPIOOutput(GPIO_PORTD_BASE,GPIO_PIN_5); SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOF); GPIOPinTypeGPIOOutput(GPIO_PORTF_BASE,GPIO_PIN_0); // Ausgänge ausschalten // START = 0 GPIOPinWrite(GPIO_PORTA_BASE, GPIO_PIN_7, 0x00); // Reset = 0 GPIOPinWrite(GPIO_PORTC_BASE, GPIO_PIN_7, 0x00); SysCtlDelay(100); // PWDN = 0 GPIOPinWrite(GPIO_PORTD_BASE, GPIO_PIN_5, 0x00); // CS = 0 GPIOPinWrite(GPIO_PORTA_BASE, GPIO_PIN_3, 0x00); // SSITX = 0 GPIOPinWrite(GPIO_PORTA_BASE, GPIO_PIN_5, 0x00); SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOG); GPIOPinTypeGPIOInput(GPIO_PORTG_BASE,GPIO_PIN_0); GPIOPadConfigSet(GPIO_PORTG_BASE, GPIO_PIN_0, GPIO_STRENGTH_2MA, GPIO_PIN_TYPE_STD_WPU); } void InitSSI(void) { // // Enable the GPIO module that contains the GPIO pins to be used by // the SSI, as well as the SSI module. // SysCtlPeripheralEnable(SYSCTL_PERIPH_SSI0); SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOA); // // Configure the GPIO pins for use by the SSI module. // GPIOPinTypeSSI(GPIO_PORTA_BASE, (GPIO_PIN_2 | GPIO_PIN_3 | GPIO_PIN_4 | GPIO_PIN_5)); //GPIOPadConfigSet(GPIO_PORTA_BASE, GPIO_PIN_2 | GPIO_PIN_3| GPIO_PIN_4 | GPIO_PIN_5, GPIO_STRENGTH_8MA, GPIO_PIN_TYPE_STD_WPU); // SSIDisable(SSI0_BASE); // Initalize the hardware SSI module, using mode 1 and 8 data bits. // sysClk=SysCtlClockGet(); SSIConfigSetExpClk(SSI0_BASE, sysClk, SSI_FRF_MOTO_MODE_1, //siehe S. 15 SSI_MODE_MASTER, 400000, 8); // 10000 gleich 10KHz // // Enable the hardware SSI. // SSIEnable(SSI0_BASE); } void InitADS(void) { // Power-up sequencing SysCtlDelay(1000); // Start = 1 GPIOPinWrite(GPIO_PORTA_BASE, GPIO_PIN_7, GPIO_PIN_7); // PWDN =1 GPIOPinWrite(GPIO_PORTD_BASE, GPIO_PIN_5, GPIO_PIN_5); // RESET =1 GPIOPinWrite(GPIO_PORTC_BASE, GPIO_PIN_7, GPIO_PIN_7); // Wait for 0,275s SysCtlDelay(750000); // bei 1 gleich 0,375 µS //////////////////////////////////////////////////////////////////////////////////// // Test // Sende STANDBY //command_write(0x04); // Sende WAKEUP //command_write(0x02); //////////////////////////////////////////////////////////////////////////////////////////////7 // Sende SDATAC command_write(0x11); // Setze Config3 0xC0h reg_write(0x03, 0xC0); // Setze Config1 0x86h reg_write(0x01, 0x86); // Setze Config2 0x00h reg_write(0x02, 0x00); // Set ADS1294 CH to 0x01h reg_write(0x05, 0x01); reg_write(0x06, 0x01); reg_write(0x07, 0x01); reg_write(0x08, 0x01); // Start =1 GPIOPinWrite(GPIO_PORTA_BASE, GPIO_PIN_7, GPIO_PIN_7); //sendSSI(0x08); //sende RDATAC command_write(0x10); //Sende SDATAC command_write(0x11); // Config2 auf 0x10h setzen reg_write(0x02, 0x10); // CH1SET auf 0x05h setzen reg_write(0x05, 0x05); // Sende RDATAC command_write(0x10); //command_write(0x11); } // MAIN --------------------------------------------------------------------------------------- int main(void) { //long receiveLength; InitHW(); // Power-up sequencing SysCtlDelay(1000); SysCtlDelay(100); GPIOPinWrite(GPIO_PORTF_BASE, GPIO_PIN_0, 1); InitSSI(); SysCtlDelay(5000000); GPIOPinWrite(GPIO_PORTF_BASE, GPIO_PIN_0, 0); SysCtlDelay(5000000); GPIOPinWrite(GPIO_PORTF_BASE, GPIO_PIN_0, 1); InitADS(); SysCtlDelay(5000000); GPIOPinWrite(GPIO_PORTF_BASE, GPIO_PIN_0, 0); while(1) { // TODO: Hauptprogramm // Sende WAKEUP command_write(0x02); SysCtlDelay(10); command_write(0x11); SysCtlDelay(10); command_write(0x12); SysCtlDelay(1000); // Sende STANDBY command_write(0x04); SysCtlDelay(10); reg_write(0x01, 0x86); test=reg_read(0x01); SysCtlDelay(10); command_write(0x12); SysCtlDelay(5000000); GPIOPinWrite(GPIO_PORTF_BASE, GPIO_PIN_0, 1); SysCtlDelay(5000000); GPIOPinWrite(GPIO_PORTF_BASE, GPIO_PIN_0, 0); } } // METHODES ----------------------------------------------------------------------------------- void sendSSI(unsigned long data) { // CS Low //GPIOPinWrite(GPIO_PORTA_BASE, GPIO_PIN_3, 0x00); SSIDataPut(SSI0_BASE, data); // CS High //GPIOPinWrite(GPIO_PORTA_BASE, GPIO_PIN_3, GPIO_PIN_3); } int receiveSSI(unsigned long* data) { int index=0; long receive=1; // CS Low // GPIOPinWrite(GPIO_PORTA_BASE, GPIO_PIN_3, 0x00); while (receive==1) { receive=SSIDataGetNonBlocking(SSI0_BASE, &data[index]); if (receive!=0) { index++; } } // CS High (optional) // GPIOPinWrite(GPIO_PORTA_BASE, GPIO_PIN_3, GPIO_PIN_3); return index; } void reg_write(unsigned long addr, unsigned long data) { // CS Low (optional) //GPIOPinWrite(GPIO_PORTA_BASE, GPIO_PIN_3, 0x00); sendSSI(0x40|addr); sendSSI(0x00); sendSSI(data); SysCtlDelay(10); // CS High (optional) //GPIOPinWrite(GPIO_PORTA_BASE, GPIO_PIN_3, GPIO_PIN_3); } unsigned long reg_read(unsigned long addr) { int index=0; // CS Low (optional) // GPIOPinWrite(GPIO_PORTA_BASE, GPIO_PIN_3, 0x00); sendSSI(0x20|addr); sendSSI(0x00); // 1 Byte while(index==0) { index=receiveSSI(&receiveData[0]); } SysCtlDelay(10); // CS High //GPIOPinWrite(GPIO_PORTA_BASE, GPIO_PIN_3, GPIO_PIN_3); return receiveData[0]; } void command_write(unsigned long data) { sendSSI(data); SysCtlDelay(10); }
Layout:
I can also provide some Scope pictures:
green: CS, red: DIN, blue: SCLK, yellow: DOUT
I would be very thankfull for any help
regards Alexander