工具/软件:
您好:
我将 DAC80504RTET 与 TMS320F28035MPNTEP 微控制器配合使用。 尝试读取器件 ID 时、我收到了0x00、但 MISO 线路上可以看到活动。 我还尝试写入 DAC 寄存器0x08、但在模拟输出中未观察到输出。 我在这里附上了我的程序。
函数调用 Uint16 DevID = SPI_readFromDAC (0x01);
读取器件 ID 的 SPI 信号捕获。
ch0:CS
Ch1:CLK
CH2:MISO (SDO)
CH3:MOSI (SDI)

写入操作: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;
}

您能指导我如何操作吗?


