工具/软件:
您好:
我将 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; }
您能指导我如何操作吗?