初级会员

- 积分
- 65
- 金钱
- 65
- 注册时间
- 2015-8-23
- 在线时间
- 20 小时
|

楼主 |
发表于 2016-7-4 16:34:33
|
显示全部楼层
void Tx_Onebyte(unsigned char TxData)
{
unsigned char i,j,k;
SCK_DOWN;
NOP();
NOP();
i = 0x80;
j = 8;
for(;j>0;j--)
{
k=TxData&i;
if(k > 0)
{
SDI_UP;
SCK_UP;
NOP();
NOP();
NOP();
SCK_DOWN;
NOP();
NOP();
NOP();
}
else
{
SDI_DOWN;
SCK_UP;
NOP();
NOP();
NOP();
SCK_DOWN;
NOP();
NOP();
NOP();
}
i=i>>1;
}
SCK_DOWN;
}
unsigned char Rx_Onebyte(void)
{
unsigned char i,j;
SCK_DOWN;
NOP();
NOP();
i=0x00;j=8;
for(;j>0;j--)
{
i=i<<1;
SCK_UP;
//NOP();
//NOP();
//NOP();
SCK_DOWN;
//NOP();
//NOP();
if(SDO==0){i=i|0x00;}
else {i=i|0x01;}
NOP();
NOP();
NOP();
NOP();
NOP();
}
NOP();
SCK_DOWN;
NOP();
return i;
}
unsigned char Rx_Frame(unsigned char Num) //接收数据存储在SPI_Rxdat[]内;
{
unsigned char i,cs;
i=0;
cs=0;
Tx_Onebyte(SPI_Txdat[0]);
Tx_Onebyte(SPI_Txdat[1]);
cs=cs+SPI_Txdat[0];
cs=cs+SPI_Txdat[1];
for(;Num>0;Num--)
{
SPI_Rxdat=Rx_Onebyte();
cs=cs+SPI_Rxdat;
++i;
}
SPI_Rxdat=Rx_Onebyte();
cs=cs+SPI_Rxdat; //校验和未取反CS加最后一个校验和字节=0xff(CS=CS+~CS);
NOP();
NOP();
NOP();
if(cs==0xff){return 1;} //校验和正确返回1
else return 0; //校验和错误返回0
}
unsigned char Tx_Frame(unsigned char Num)
{
unsigned char i,cs;
i=0;
cs=0;
for(;Num>0;Num--)
{
Tx_Onebyte(SPI_Txdat);
cs=cs+SPI_Txdat;
i++;
}
cs=~cs;
Tx_Onebyte(cs);
NOP();
NOP();
NOP();
NOP();
return cs;
}
unsigned char RN8302_Rdat(unsigned int bank,unsigned char addr,unsigned char num)
{
unsigned char Check=0;
CS_DOWN;
if(num<5) //最大同时读4个寄存器;
{
SPI_Txdat[0]=addr; //发送首地址;
SPI_Txdat[1]=0x00|(bank<<4); //地址高三位;
Check=Rx_Frame(num);
CS_UP;
}
else
{
Check=0; //否则错误;
}
return Check; //接受数据正确;返回1;
}
unsigned char RN8302_Wdat(unsigned int bank,unsigned char addr,unsigned char num,...)
{
unsigned int i=0;
unsigned char temp=0;
unsigned char Check=0;
va_list argp;
CS_DOWN;
temp=num+2;
if(num<4)
{
va_start(argp,num);
SPI_Txdat[0]=addr;
SPI_Txdat[1]=0x80|(bank<<4);
for(;num>0;num--)
{
SPI_Txdat[i+2]=va_arg(argp,unsigned char);
++i;
}
va_end(argp);
Check=Tx_Frame(temp);
CS_UP;
}
else
{
Check=0;
}
return Check;
}
|
|