Hey guys I'm having issues reading from my external ADC via SPC and can't seem to find the problem. At the moment I'm just constantly receiving 0s back from the ADC. The ADC I'm using is the MAX11060 (https://datasheets.maximintegrated.com/en/ds/MAX11040K-MAX11060.pdf) and I'm unsure what is wrong, I've included all my code below.
Thank you
#include <stdio.h> #include <stdlib.h> #include <stdint.h> #include <stdbool.h> #include <string.h> #include <inttypes.h> #include "inc/hw_memmap.h" #include "inc/hw_types.h" #include "driverlib/adc.h" #include "driverlib/debug.h" #include "driverlib/fpu.h" #include "driverlib/gpio.h" #include "driverlib/pin_map.h" #include "driverlib/rom.h" #include "driverlib/sysctl.h" #include "driverlib/uart.h" #include "utils/uartstdio.h" #include "inc/tm4c123gh6pm.h" #include "inc/hw_i2c.h" #include "inc/hw_gpio.h" #include "driverlib/i2c.h" #include "driverlib/interrupt.h" #include "driverlib/timer.h" #include "inc/hw_pwm.h" #include "driverlib/timer.h" #include "driverlib/interrupt.h" #include "driverlib/rom_map.h" #include "driverlib/udma.h" #include "driverlib/pwm.h" #include "driverlib/ssi.h" #include "driverlib/systick.h" // VARIABLE DECLARTATIONS //================================================================================================================= #define NUM_SSI_DATA 2 uint32_t ui32Loop,ui32Index; uint32_t pui32DataTx[NUM_SSI_DATA]; uint32_t pui32DataRx[NUM_SSI_DATA]; //================================================================================================================= #define UART_BAUD_RATE 115200 void ConfigureUART(void) { /* Enable the GPIO Peripheral used by the UART */ ROM_SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOA); /* Enable UART0 */ ROM_SysCtlPeripheralEnable(SYSCTL_PERIPH_UART0); /* Configure GPI Pins for UART mode */ ROM_GPIOPinConfigure(GPIO_PA0_U0RX); ROM_GPIOPinConfigure(GPIO_PA1_U0TX); ROM_GPIOPinTypeUART(GPIO_PORTA_BASE, GPIO_PIN_0 | GPIO_PIN_1); /* Use the internal 16MHz oscillator as the UART clock source */ UARTClockSourceSet(UART0_BASE, UART_CLOCK_PIOSC); ROM_UARTConfigSetExpClk(UART0_BASE, ROM_SysCtlClockGet(), UART_BAUD_RATE, (UART_CONFIG_WLEN_8 | UART_CONFIG_PAR_NONE | UART_CONFIG_STOP_ONE)); /* Initialize the UART for console I/O */ UARTStdioConfig(0, UART_BAUD_RATE, 16000000); /* Enable the UART interrupt */ ROM_IntMasterEnable(); ROM_UARTIntClear(UART0_BASE, ROM_UARTIntStatus(UART0_BASE, false)); ROM_UARTIntEnable(UART0_BASE, UART_INT_RX | UART_INT_RT); ROM_IntEnable(INT_UART0); } void SPIWrite(uint32_t Addr,uint32_t Val){ while(SSIDataGetNonBlocking(SSI2_BASE, &pui32DataRx[0])){} pui32DataTx[0]=Addr;pui32DataTx[1]=Val; SSIDataPut(SSI2_BASE, pui32DataTx[0]); SSIDataPut(SSI2_BASE, pui32DataTx[1]); while(SSIBusy(SSI2_BASE)){} } void SPIRead(uint32_t Addr){ while(SSIDataGetNonBlocking(SSI2_BASE, &pui32DataRx[0])){} SSIDataPut(SSI2_BASE, (Addr|0x80)); SSIDataGet(SSI2_BASE, &pui32DataRx[0]); while(SSIBusy(SSI2_BASE)){} UARTprintf("\nData Received: %i ", pui32DataRx[0]); } void main(void){ ROM_FPULazyStackingEnable(); // Set the clocking to run directly from the crystal. SysCtlClockSet(SYSCTL_SYSDIV_8 | SYSCTL_USE_PLL | SYSCTL_XTAL_16MHZ | SYSCTL_OSC_MAIN); ConfigureUART(); // Function for Initializing the UART Protocol SysCtlPeripheralEnable(SYSCTL_PERIPH_SSI2); SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOB); SSIDisable(SSI2_BASE); SSIClockSourceSet(SSI2_BASE, SSI_CLOCK_SYSTEM); GPIOPinConfigure(GPIO_PB4_SSI2CLK); GPIOPinConfigure(GPIO_PB5_SSI2FSS); GPIOPinConfigure(GPIO_PB6_SSI2RX); GPIOPinConfigure(GPIO_PB7_SSI2TX); GPIOPinTypeSSI(GPIO_PORTB_BASE, GPIO_PIN_7 | GPIO_PIN_6 | GPIO_PIN_4); SSIConfigSetExpClk(SSI2_BASE, SysCtlClockGet(), SSI_FRF_MOTO_MODE_0, SSI_MODE_MASTER, 1000000, 8); GPIOPinTypeGPIOOutput(GPIO_PORTB_BASE, GPIO_PIN_5); GPIOPinWrite(GPIO_PORTB_BASE, GPIO_PIN_5, GPIO_PIN_5); SSIEnable(SSI2_BASE); SSIConfigSetExpClk(SSI2_BASE, SysCtlClockGet(), SSI_FRF_MOTO_MODE_0, SSI_MODE_MASTER, 1000000, 8); SSIEnable(SSI2_BASE); GPIOPinWrite(GPIO_PORTB_BASE, GPIO_PIN_5, 0); SPIWrite(0x60,0x34); //SPIWrite(0x60,0xF0); SPIRead(0xE0); GPIOPinWrite(GPIO_PORTB_BASE, GPIO_PIN_5, GPIO_PIN_5); SSIDisable(SSI2_BASE); UARTprintf("\nEnd of Program..."); }