CS5460读取电流有效值寄存器,spi通信

2019-07-20 00:32发布

现在在用CS5460,我读直流电流有效值寄存器的时候,不加电流负载都能从寄存器里读到值,而且值是没有规律的在变的,大神们有没有知道原因的。
另外就是直流电流有效值寄存器里读出来的值要怎么转成实际的电流值呢,请大神们指教。感激不尽。
void CS5460A_Init()
{
        u32 temp;
       
//        __nop(); __nop(); __nop(); __nop();
        CAN_SPI_Init();
        CS5460_CS=1;
        CS5460_RST=0;
        delay_ms(30);
        CS5460_RST=1;//¸′λ5460
        CS5460_CS=0;//5460Ƭѡ
//        __nop(); __nop(); __nop(); __nop();   
        WriteSPI(0xff);//SYNC1
        WriteSPI(0xff);
        WriteSPI(0xff);
        WriteSPI(0xfe);//SYNC0
        CS5460_CS=1;
//        __nop(); __nop(); __nop(); __nop();

       
       
/************¼Ä′æÆ÷ÅäÖÃ************///òéÎê?
        CS5460A_Write(0x00,0x000001);//写配置寄存器

        CS5460A_Write(0x0f,0xffffff);//清除状态寄存器
       
        CS5460A_Write(0x1A,0x000000);//写屏蔽寄存器
        CS5460A_Write(0x1C,0x000000);//写控制寄存器
        CS5460A_Write(0x05,0x000fa0);//写周期计数寄存器 N=400,1s计数一次
                                                                                                                         
                                         
        temp=CS5460A_Read(0x0f);
        CS5460A_Write(0x0f,temp);    //清除状态寄存器

/**********************************/       
       
        CS5460A_Write_CMD(0xe8);     //启动转换命令
}


void CS5460A_Write(u8 addr,u32 data)
{
        u8 x=0x01;
        u8 addr_temp=0;
        CS5460_CS=0;         //5460Ƭѡ
//        __nop(); __nop(); __nop(); __nop();
        addr_temp=(addr<<1)|0x40;
        x=WriteSPI(addr_temp); //·¢&#203;íD′μ&#216;&#214;·
        x=WriteSPI((u8)(data>>16));
        x=WriteSPI((u8)(data>>8));
        x=WriteSPI((u8)(data));//D′êy&#190;Y
       

       
//        __nop(); __nop(); __nop(); __nop();__nop(); __nop(); __nop(); __nop();
        CS5460_CS=1;

        //__nop(); __nop(); __nop(); __nop();__nop(); __nop(); __nop(); __nop();
}

u32 CS5460A_Read(u8 addr)
{
        u8 addr_temp=0;
        u8 temp=0;
        u8 temp2=0;
        u8 temp3=0;
        u32 buf=0;
        CS5460_CS=0;
//        __nop();__nop();__nop();__nop();
        addr_temp=(addr<<1);
//        printf("%u",addr_temp);
        WriteSPI(addr_temp);//·¢&#203;í&#182;áμ&#216;&#214;·
        temp=WriteSPI(0xfe);
        printf("%d ",temp);/////
        temp2=WriteSPI(0xfe);
        printf("%d ",temp2);//////
        temp3=WriteSPI(0xfe);
        printf("%d ",temp3);//////
//        __nop();__nop();__nop();__nop();
        CS5460_CS=1;
//        __nop();__nop();__nop();__nop();
        return buf;
}

void CS5460A_Write_CMD(u8 cmd)
{
        CS5460_CS=0;
//        __nop(); __nop(); __nop(); __nop();
        WriteSPI(cmd);
//        __nop(); __nop(); __nop(); __nop(); __nop(); __nop(); __nop(); __nop();
        CS5460_CS=1;
//        __nop(); __nop(); __nop(); __nop(); __nop(); __nop(); __nop(); __nop();
}


寄存器配置啥的应该没有问题吧?目前没做校准。我写配置寄存器然后在去读,读的值和我写的是一样的,证明读写寄存器应该没什么问题



友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。