Tool/software:
Hello,
I'm using the DAC80504RTET with the TMS320F28035MPNTEP microcontroller. When attempting to read the device ID, I received 0x00, although activity is visible on the MISO line. I also attempted to write to DAC register 0x08, but no output is observed on the analog output. I have attached my program here.
Function call Uint16 devID = spi_readFromDAC(0x01);
SPI signal capture of device ID read .
Ch0 : CS
Ch1: CLK
Ch2: MISO (SDO)
Ch3: MOSI (SDI)

Write Operation : spi_writeToDAC(0x08, 0x5555)

void spi_configureSPIAModule(void)
{
EALLOW;
// GPIO configuration
GpioCtrlRegs.GPAMUX2.bit.GPIO16 = 1; // SPISIMOA (MOSI)
GpioCtrlRegs.GPAMUX2.bit.GPIO17 = 1; // SPISOMIA (MISO)
GpioCtrlRegs.GPAMUX2.bit.GPIO18 = 1; // SPICLKA (CLK)
GpioCtrlRegs.GPAMUX2.bit.GPIO19 = 1; // SPISTEA (CS)
GpioCtrlRegs.GPAPUD.bit.GPIO16 = 0;
GpioCtrlRegs.GPAPUD.bit.GPIO17 = 0;
GpioCtrlRegs.GPAPUD.bit.GPIO18 = 0;
GpioCtrlRegs.GPAPUD.bit.GPIO19 = 0;
// SPI config
SpiaRegs.SPICCR.bit.SPISWRESET = 0; // Hold in reset
SpiaRegs.SPICCR.bit.SPICHAR = 7; // 8-bit char
SpiaRegs.SPICCR.bit.CLKPOLARITY = 1; // CPOL = 1 (clock idle high)
SpiaRegs.SPICTL.all = 0;
SpiaRegs.SPICTL.bit.CLK_PHASE = 0; //CPHA=0
SpiaRegs.SPICTL.bit.MASTER_SLAVE = 1;
SpiaRegs.SPICTL.bit.OVERRUNINTENA = 0;
SpiaRegs.SPICTL.bit.SPIINTENA = 0;
SpiaRegs.SPICTL.bit.TALK = 1;
SpiaRegs.SPIBRR = 0x007F; // ~468.75kHz
SpiaRegs.SPICCR.bit.SPISWRESET = 1; // Release SPI
SpiaRegs.SPIPRI.bit.FREE = 1; // Run in emulation suspend
// Enable FIFO
SpiaRegs.SPIFFTX.bit.SPIRST = 1; // FIFO reset
SpiaRegs.SPIFFTX.bit.SPIFFENA = 1; // Enable FIFO enhancements
SpiaRegs.SPIFFTX.bit.TXFFIL = 0; // Interrupt level (unused)
SpiaRegs.SPIFFTX.bit.TXFFIENA = 0; // Disable TX FIFO interrupt
SpiaRegs.SPIFFTX.bit.TXFFINTCLR = 1; // Clear interrupt flag
SpiaRegs.SPIFFTX.bit.TXFIFO = 1; // FIFO reset again
SpiaRegs.SPIFFRX.bit.RXFFIL = 0;
SpiaRegs.SPIFFRX.bit.RXFFIENA = 0;
SpiaRegs.SPIFFCT.all = 0x00; // FIFO delay
EDIS;
}
void spi_writeToDAC(Uint8 regAddr, Uint16 value)
{
Uint8 cmd = regAddr & 0x0F;
Uint8 data_msb = (value >> 8) & 0xFF;
Uint8 data_lsb = value & 0xFF;
// Send 3 bytes via FIFO (no gap)
SpiaRegs.SPITXBUF = ((Uint16)cmd) << 8;
SpiaRegs.SPITXBUF = ((Uint16)data_msb) << 8;
SpiaRegs.SPITXBUF = ((Uint16)data_lsb) << 8;
// Wait until transmit complete
while (SpiaRegs.SPIFFTX.bit.TXFFST != 0); // Wait until FIFO is empty
}
Uint16 spi_readFromDAC(Uint8 regAddr)
{
Uint16 readMSB, readLSB;
Uint16 dummy;
Uint8 cmdByte = 0x80 | (regAddr & 0x0F); // Bit 7 = 1 for read
// Clear RX FIFO
SpiaRegs.SPIFFRX.bit.RXFIFORESET = 0;
SpiaRegs.SPIFFRX.bit.RXFIFORESET = 1;
SpiaRegs.SPITXBUF = ((Uint16)cmdByte) << 8; // Byte 1
SpiaRegs.SPITXBUF = 0x0000; // Byte 2
SpiaRegs.SPITXBUF = 0x0000; // Byte 3
// Wait for all 3 bytes to arrive
while (SpiaRegs.SPIFFRX.bit.RXFFST < 3);
dummy = SpiaRegs.SPIRXBUF;
readMSB = SpiaRegs.SPIRXBUF >> 8;
readLSB = SpiaRegs.SPIRXBUF >> 8;
return (readMSB << 8) | readLSB;
}

Can you please guide me with this?


