工具/软件:
您好、
我正在使用 TMS320F28035MPNTEP 微控制器和 DAC DAC80504RTET。 会尝试使用 SPIA 进行通信。
我尝试从"器件 ID 寄存器"中读取 DAC 的器件 ID 并获得垃圾值。 于是开始检查 SPI 信号。 片选在数据传输期间不会变为低电平。 下面是信号的代码和屏幕截图
void SPI_configureSPI机模 块(void)
{
EALLOW;
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 配置
SpiaRegs.SPICCR.bit.SPISWRESET = 0;//将 SPI 保持在复位状态
SpiaRegs.SPICCR.all = 0x0047;// 16位 char、无环回
SpiaRegs.SPICTL.all = 0x000E;//主模式、启用 TX、下降沿数据捕获
SpiaRegs.SPIBRR = 0x007F;// SPI 波特率~468.75kHz @ 60MHz
SpiaRegs.SPICCR.bit.SPISWRESET = 1;//释放 SPI
SpiaRegs.SPIPRI.bit.FREE = 1;//自由运行模式
EDIS;
}
void SPI_writeToDAC (Uint8 regAddr、Uint16值)
{
UINT8 cmdByte = 0;
Uint16 word1 = 0;
Uint16 word2 = 0;
//位23 = 0 (写入)、位22–20 = 000 (保留)、位19–16 =寄存器地址
cmdByte =(regAddr 和0x0F);
//将24位帧构建为两次16位写入(MSB 在前)
WORD1 =(CMdByte << 8)|((value >> 8)& 0xFF);//前16位:[command][Data[15:8]]
word2 =(value & 0xFF)<< 8;//最后8位:[DATA[7:0]]位于高字节
GpioDataRegs.GPACLEar.bit.GPIO19 = 1;// CS 低电平
//发送字1
SpiaRegs.SPITXBUF = word1;
while (SpiaRegs.SPISTS.bit.INT_FLAG = 0);
SpiaRegs.SPISTS.all = 0x0000;
//发送字2
SpiaRegs.SPITXBUF = word2;
while (SpiaRegs.SPISTS.bit.INT_FLAG = 0);
SpiaRegs.SPISTS.all = 0x0000;
GpioDataRegs.GPASSET.bit.GPIO19 = 1;//CS 高电平
}
当我尝试写入值1 (SPI_writeToDAC (0x08、0x1);)时、捕获了以下屏幕截图
通道0为 CS
通道1为 CLK
通道2为 SPIA_MISO_DAC (SDO)
通道3是 SPIA_MOSI_uCtoDAC (SDI)
当我尝试写入值0x5555 (SPI_writeToDAC (0x08、0x5555)时、捕获了以下屏幕截图;)
我无法找到代码的问题。 您能帮忙吗?
我尝试将 GPIO19配置为 GPIO 而不是 SPISTEA、但在通道3 (SDI)上没有获得任何信号