資源簡介
銳能微RN8302電能采集芯片的驅(qū)動程序,通過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--);???
}?
//函數(shù)說明:?向8302中發(fā)送一幀數(shù)據(jù),TX_DATA發(fā)送緩沖區(qū)
//發(fā)送數(shù)據(jù)幀格式為?地址+命令+數(shù)據(jù)+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為數(shù)據(jù)
????????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;???//暫時不懂這個變量的用處,為何要連續(xù)發(fā)送三次?
????SPI_SCSNSET;???//開啟通訊
//????while(TXFLAG)???
//????????{???
????????i=0;???
????????cs=0;???
for(;Num>0;Num--)???//發(fā)送Num個字節(jié)(包括地址+命令+數(shù)據(jù))
????????????{???
TX_ONEBYTE(TX_DATA[i]);?//依次發(fā)送地址,命令,數(shù)據(jù)
????????????cs=cs+TX_DATA[i];????
????????????i++;???
????????????}???
????????cs=~cs;??//cs為單字節(jié)求和(地址+命令+數(shù)據(jù))取反
TX_ONEBYTE(cs);???//發(fā)送校驗字節(jié)
??
????????if((TX_DATA[0]==0x82)&&(TX_DATA[1]==0x90)&&(TX_DATA[2]==0xFA))???
????????????{???
????????????TXFLAG?=?0;
????????????return(0);???
????????????}???//如果發(fā)送的是復(fù)位信號
//????????j?=?0;???
//????????iR?=?0;???
//????????csr?=?0;???
//????????TX_DATA_CHK[0]=WRCHKREG;???//0x8D,保存上一次寫入的數(shù)據(jù)寄存器
//????????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個字節(jié)
//????????RX_DATA[iR]=RX_ONEBYTE();??
//????????csr=csr+RX_DATA[iR];//校驗字節(jié)
//????????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;?//通訊結(jié)束????
????return(0);???
}???
?//函數(shù)說明:?從8302中讀取一幀數(shù)據(jù),RX_DATA接收緩沖區(qū)
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]);??//先發(fā)送地址+命令
????????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
- 上一篇:基于51單片機的只能臺燈
- 下一篇:偏最小二乘回歸算法
評論
共有 條評論