DRV8323R: 我在CCS21使用28P65系列芯片开发DRV8323RS系列的驱动板,只能使用SPI通讯写入部分寄存器?

Part Number: DRV8323R
Other Parts Discussed in Thread: DRV8323

我在CCS21使用28P65系列芯片开发DRV8323RS系列的驱动板,想通过主板的SPI通讯读写驱动芯片内部的所有寄存器,这里只能写入02,03寄存器,但是对于04,05,06就无法进行写入操作,就像是04,我对04寄存器写入0x1B7E,但是实际读取返回的数值是0x0140,无论我写入什么数据一直都是0x0140,明明我03寄存器已经写入解锁操作了

#include "drv8323.h"

//开发板所用引脚
//检测VCC 电源电压          B0
//驱动板使能引脚:GPIO42     1(使能)     0(失能)
//注意:对于GPIO42与TSSA2相连相连,要将SCL_SEL设置为1,才将GPIO42连接到目标芯上,
//     否则无法控制GPIO42

//检测三相电压:     A(A14/B14/C14)       B(A4)       C(B4)
//检测三相电流:     A(B7)           B(A7)          C(C4)
//三相霍尔传感器:   A(IO57)     B(IO84)     C(IO12)
//三相PWM输出操作:  A(H:IO8,L:IO9)  B(H:IO6,L:IO7)  c(H:IO10,L:IO11)
// IDRIVE  :C7
// VDS     :A0
// POT     :C0
//SCLK     :IO18/IO72
//MODE     :IO14
//SDI      :IO16
//SDO      :IO17
//nSCS/GAIN:IO23
//CAL      :IO133

// //
//SPI数据交换接口:
//base:外设指针
//charLength:数据长度
//pTxBuffer:发送的数据(必须有)==>指针
//pRxBuffer:接收的数据(可以没有, 传输入NULL)==》指针
//numOfWords:传输的数据个数
//txDelay:发送数据延迟(多数据发送 延时)
// SPI_pollingFIFOTransaction(uint32_t base, uint16_t charLength, uint16_t *pTxBuffer, uint16_t *pRxBuffer, uint16_t numOfWords, uint16_t txDelay)


void DRV8323_WriteReg(uint8_t reg_addr, uint16_t reg_data)
{
    uint16_t tx_data;
    // Bit15=0写,bit14‑11地址,bit10‑0数据
    tx_data = DRV8323_BUILD_WR_FRAME(reg_addr, reg_data);
    DRV8323_CS_LOW;
    SPI_pollingFIFOTransaction(mySPI_DRV8323_BASE,16U,&tx_data,NULL,1,0);
    DRV8323_CS_HIGH;
    DEVICE_DELAY_US(1);
}

uint16_t DRV8323_ReadReg(uint8_t reg_addr)
{
    uint16_t tx_data;
    uint16_t rx_data;
    // Bit15=1读,bit14‑11地址,低11bit dummy
    tx_data = DRV8323_BUILD_RD_FRAME(reg_addr);  
    DRV8323_CS_LOW;
    //DRV8323:读命令帧的那一组 16 个 SCLK 时钟脉冲期间,SDO 线上就同步吐出寄存器返回数据
    //参考手册时序图:nSCS 拉低之后,连续输出 16 个 SCLK;
    //在这 16 个时钟周期内,主机 SDI 送出读命令帧,同一时刻从器件 SDO 输出寄存器数据;
    //16 个时钟结束立刻拉高 nSCS,没有第二组时钟
    //发送读命令
    SPI_pollingFIFOTransaction(mySPI_DRV8323_BASE,16U,&tx_data,&rx_data,1,0);
    DRV8323_CS_HIGH;
    DEVICE_DELAY_US(1);
    return (rx_data & 0x07FF); // 提取后11位有效数据
}
//驱动板初始化
void DRV8323_Init(void)
{
    DRV8323_START;
    DSP_Delayms(1); // 等待芯片完全唤醒,手册典型值1ms
    read_back = DRV8323_ReadReg(0x00);
    printf("Reg 0x00 read:0x%04X\r\n", read_back);
    read_back = DRV8323_ReadReg(0x01);
    printf("Reg 0x01 read:0x%04X\r\n", read_back);

    DRV8323_WriteReg(0x02, 0x0000);
    read_back = DRV8323_ReadReg(0x02);
    printf("Reg 0x02 Write:0x0000,read:0x%04X\r\n", read_back);

    DRV8323_WriteReg(0x03, 0x037E);  
    read_back = DRV8323_ReadReg(0x03);
    printf("Reg 0x03 Write:0x037E,read:0x%04X\r\n", read_back);    

    DRV8323_WriteReg(0x04, 0x1B7E);
    DEVICE_DELAY_US(1000);
    read_back = DRV8323_ReadReg(0x04);
    printf("Reg 0x04 Write:0x1B7E,read:0x%04X\r\n", read_back);      
}
这个是我的代码