• 大小: 5KB
    文件类型: .rar
    金币: 1
    下载: 0 次
    发布日期: 2021-06-18
  • 语言: 其他
  • 标签: RN8302  SPI  

资源简介

锐能微RN8302电能采集芯片的驱动程序,通过SPI接口进行通信。

资源截图

代码片段和文件信息

#include “RN8302.h“      
   
uint8_t TX_DATA[10];   
uint8_t TX_DATA_CHK[10];   
uint16_t RX_DATA_RAM[10];   
uint8_t RX_DATA[50];   
struct RN_Coefficient sChnlCoef;

void RN8302_Delay(int16_t i)   
{   
    while(i--);   


//函数说明: 向8302中发送一帧数据,TX_DATA发送缓冲区
//发送数据帧格式为 地址+命令+数据+CS校验
uint32_t TX_frame(uint8_t Num)   
{   
    uint8_t ijiRcscsrTXFLAG;   
    uint32_t tempTXtempRX;   
    switch(Num)   
        {   
        case 3:tempTX = TX_DATA[2];break;   //TX_DATA[0]为地址,TX_DATA[1]为命令,tempTX为数据
        case 4:tempTX = (TX_DATA[2]<<8)|TX_DATA[3];break;   
        case 5:tempTX = (TX_DATA[2]<<16)|(TX_DATA[3]<<8)|TX_DATA[4];break;   
        default:tempTX = 0; break;   
        }   
TXFLAG = 3;   //暂时不懂这个变量的用处,为何要连续发送三次?
    SPI_SCSNSET;   //开启通讯
//    while(TXFLAG)   
//        {   
        i=0;   
        cs=0;   
for(;Num>0;Num--)   //发送Num个字节(包括地址+命令+数据)
            {   
TX_ONEBYTE(TX_DATA[i]); //依次发送地址,命令,数据
            cs=cs+TX_DATA[i];    
            i++;   
            }   
        cs=~cs;  //cs为单字节求和(地址+命令+数据)取反
TX_ONEBYTE(cs);   //发送校验字节
  
        if((TX_DATA[0]==0x82)&&(TX_DATA[1]==0x90)&&(TX_DATA[2]==0xFA))   
            {   
            TXFLAG = 0;
            return(0);   
            }   //如果发送的是复位信号
//        j = 0;   
//        iR = 0;   
//        csr = 0;   
//        TX_DATA_CHK[0]=WRCHKREG;   //0x8D,保存上一次写入的数据寄存器
//        TX_DATA_CHK[1]=0x00|(bank1<<4);   
//        csr = csr+TX_DATA_CHK[0];   
//        csr = csr+TX_DATA_CHK[1];   
//        TX_ONEBYTE(TX_DATA_CHK[0]); 
// TX_ONEBYTE(TX_DATA_CHK[1]);  //写入地址+命令   
//        for(j=3;j>0;j--)   
//            {   
//            RX_DATA[iR]=RX_ONEBYTE(); 
//            csr=csr+RX_DATA[iR]; 
//            iR++;   
//            }   //该寄存器3个字节
//        RX_DATA[iR]=RX_ONEBYTE();  
//        csr=csr+RX_DATA[iR];//校验字节
//        if(csr == 0xFF)   
//            {   
//            tempRX = (RX_DATA[0]<<16)|(RX_DATA[1]<<8)|RX_DATA[2];   
//            if(tempRX == tempTX)   
//                {   
//                TXFLAG = 0;
//                return(0);   
//                }   
//   
//            else   
//                TXFLAG--;   
//                   
//            }   
//        else   
//            {   
//            TXFLAG--;   
//            }   
                   
      //  }   
RN8302_Delay(50);
RN8302_Delay(50);
RN8302_Delay(50);
    SPI_SCSNCLR; //通讯结束    
    return(0);   
}   


 //函数说明: 从8302中读取一帧数据,RX_DATA接收缓冲区
uint32_t RX_frame(uint8_t Num)   
{   
    uint32_t icsresulttempRXFLAG;
    temp=Num;  RXFLAG=3;   
    i=0;cs=0result=0;   
    SPI_SCSNSET;  //开启通讯  
//while(RXFLAG)   
        //{   
        TX_ONEBYTE(TX_DATA[0]);   
TX_ONEBYTE(TX_DATA[1]);  //先发送地址+命令
        cs=cs+TX_DATA[0];  
        cs=cs+TX_DATA[1];    
         for(;Num>0;Num--)  
        {   
            RX_DATA[i]=RX_ONEB

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----

     文件      14997  2018-11-06 10:51  RN8302\RN8302.c

     文件       4434  2018-11-06 10:51  RN8302\RN8302.h

     目录          0  2018-11-08 16:10  RN8302

----------- ---------  ---------- -----  ----

                19431                    3


评论

共有 条评论