Part Number: TMS320F28377S
Other Parts Discussed in Thread: CONTROLSUITE, , DAC8560
Hello TI community,
I am currently trying to configure the TMS320F28377S MCU to send 24 bits data stream through the SPIB (GPIO58 to GPIO61). I am understand that the MCU can only send up to 16 bit words; however, it can be configured to send continuous data without delay by configuring the FIFO. I have come up with sending three 8-bit words to achieve my 24-bit data stream. I am working off the spi_loopback (no interrupt) example code from controlSUITE except I set the loop back to 0.
I am monitoring the TX FIFO status register can see the register being incremented up to 2 only. I also can see my values are being written correctly to the transfer buffer. I am also wondering why the receive buffer is being filled as the loop back bit is set to 0? Anyways, I am trying to communicate to a DAC8560() to disable it's internal reference. I can't see to get the internal reference to be disabled. I wrote a simple code for the SPIB. I am wondering what I am doing wrong.
#define DAC8560_DISABLE_INT_SEQ_P1 0b0100100000000000 // 8-bit left justified
#define DAC8560_DISABLE_INT_SEQ_P2 0b0000010000000001
#define DAC8560_NORMAL_OP 0b0000000000000000
#define DAC8560_PWR_DWN_1K 0b0000000100000000
#define DAC8560_PWR_DWN_100K 0b0000001000000000
#define DAC8560_PWR_HIGH_Z 0b0000001100000000
volatile struct SPI_REGS *SPI_PTR[SPI_CH] = {&SpiaRegs, &SpibRegs, &SpicRegs};
void disable_int_ref_DAC8560(volatile struct SPI_REGS *SPI)
{
set_DAC8560(SPI, DAC8560_DISABLE_INT_SEQ_P1, DAC8560_DISABLE_INT_SEQ_P2);
}
void set_DAC8560(volatile struct SPI_REGS *SPI, Uint16 dac8560_op_mode, Uint16 dac_level)
{
//Uint16 rdata;
Uint16 sdata[] = {0, 0, 0};
Uint16 i;
sdata[0] = dac8560_op_mode;
sdata[1] = dac_level & 0xFF00;
sdata[2] = (dac_level & 0x00FF) << 8;
for(i=0; i<3; i++)
{
spi_xmit(SPI, sdata[i]);
}
}