|
发表于 2014-8-12 19:21:15
|
显示全部楼层
去年用过 现在这个项目还在 所以就只能把最基本的串口初始化跟读写函数贴出来 如果最基本的没问题 剩下的就是看DATASHEET了 有时间看看英文的DATAsheet 中文的不清楚
void SpiInit()
{
unsigned char i,j,write_temp;
SDI=0;
SCLK=0;
CS2=0;
SDO=1;
for(i=0;i<3;i++)
{
write_temp=0xff;
for(j=0;j<8;j++)
{
write_temp<<=1;
SDI=CY; //Any Digital Input Rise/Fall Time < 1us
_nop_();
SCLK=1; //Rise Time SCLK < 100us
_nop_();
// delay100us();
SCLK=0; //Fall Time SCLK < 100us
_nop_();
// delay100us();
}
}
write_temp=0xfe;
for(j=0;j<8;j++)
{
write_temp<<=1;
SDI=CY; //Any Digital Input Rise/Fall Time < 1us
_nop_();
SCLK=1; //Rise Time SCLK < 100us
_nop_();
// delay100us();
SCLK=0; //Fall Time SCLK < 100us
_nop_();
// delay100us();
}
CS2=1;
}
/*****************************************
函数名称:SdiWrite
功 能:Write Command & Data to CS5463
参 数:pointer--The Char Array of Command + Data (1 + 3)
返 回 值:无
******************************************/
void SdiWrite (unsigned char *pointer)
{
unsigned char i,j,write_temp;
CS2=0;
for(i=0;i<4;i++)
{
write_temp=pointer[i];
for(j=0;j<8;j++)
{
write_temp<<=1;
SDI=CY; //Any Digital Input Rise/Fall Time < 1us
_nop_();
SCLK=1; //Rise Time SCLK < 100us
_nop_();
// delay100us();
SCLK=0; //Fall Time SCLK < 100us
_nop_();
// delay100us();
}
}
SDI=1;
CS2=1;
}
/*****************************************
函数名称:SdoRead
功 能:Write Command to CS5463 & Read Data from CS5463
参 数:pointer-->The Char Array of Command + Data (1 + 3)
返 回 值:无
******************************************/
void SdoRead (unsigned char *pointer)
{
unsigned char i,j,cmd;
CS2=0;
cmd=pointer[0];
for(i=0;i<8;i++)
{
cmd<<=1;
SDI=CY; //Any Digital Input Rise/Fall Time < 1us
_nop_();
SCLK=1; //SCLK Rise Time < 100us
_nop_();
// delay100us();
SCLK=0; //SCLK Fall Time < 100us
_nop_();
// delay100us();
}
SDI=1;
for(i=1;i<4;i++)
{
for(j=0;j<8;j++)
{
SDO=1; //读取数据前先置高
pointer[i]<<=1;
SCLK=1;
_nop_();
// delay100us();
if(SDO)
pointer[i]++;
// temp=SDO;
// pointer[i]+=temp;
SCLK=0;
_nop_();
// delay100us();;
}
}
CS2=1;
}
我用的是stc89c52 晶振11.0592MHz |
|