|
楼主 |
发表于 2014-7-23 13:36:06
|
显示全部楼层
芯片的控制方式为4线制spi接口。先贴一下模拟spi接口程序吧。
void sendzero(void) //·¢ËÍ0
{
SCK=1;
DelayNS(1);
SI=0;
DelayNS(1);
SCK=0;
DelayNS(1);
return;
}
void sendone(void) //·¢ËÍ1
{
SCK=1;
DelayNS(1);
SI=1;
DelayNS(1);
SCK=0;
DelayNS(1);
return;
}
/////////////////////////////////////////////////////////////
/*.............SPIͨÐÅÅäÖÃgp22_opcode_data24write..................................*/
void gp21_opcode8_data32write(unsigned char opcode_address,unsigned long data_buf_32bit)
{
unsigned char cnt;
data_buf_32bit=data_buf_32bit;
SSN=0;
DelayNS(1);
DelayNS(1);
for(cnt=8;cnt>0;cnt--) //·¢ËÍopcode_address²Ù×÷Ö¸Áî
{
if((opcode_address&0x80)==0)
sendzero(); //·¢ËÍ
else
sendone();//·¢ËÍ1
opcode_address=(opcode_address<<1);
}
for(cnt=32;cnt>0;cnt--)
{
if((data_buf_32bit&0x80000000)>0)
{
sendone();
}
else
{
sendzero();
}
data_buf_32bit=(data_buf_32bit<<1);
}
DelayNS(1);
DelayNS(1);
SSN=1;
}
/////////////////////////////////////////////////////////////
/*.............SPIͨÐÅÅäÖÃgp22_opcode_data24write..................................*/
void gp21_opcode8_data24write(unsigned char opcode_address,unsigned long data_buf_32bit)
{
unsigned char cnt;
data_buf_32bit=(((long)opcode_address<<24)|data_buf_32bit);
SSN=0;
DelayNS(1);
DelayNS(1);
for(cnt=32;cnt>0;cnt--)
{
if((data_buf_32bit&0x80000000)>0)
{
sendone();
}
else
{
sendzero();
}
data_buf_32bit=(data_buf_32bit<<1);
}
DelayNS(1);
DelayNS(1);
SSN=1;
}
/////////////////////////////////////////////////////////////
/*.............SPIͨÐÅÅäÖÃgp22_opcode_data8read..................................*/
unsigned char gp21_opcode8_data8read(unsigned char opcode_address)
{
unsigned char cnt;
unsigned char dataread=0x00;
SSN=0;
DelayNS(1);
DelayNS(1);
for(cnt=8;cnt>0;cnt--) //·¢ËÍopcode_address²Ù×÷Ö¸Áî
{
if((opcode_address&0x80)==0)
sendzero(); //·¢ËÍ
else
sendone();//·¢ËÍ1
opcode_address=(opcode_address<<1);
}
for(cnt=8;cnt>0;cnt--) //¶ÁÈ¡²Ù×÷Ö¸Áî¶ÔÓ¦µÄ·µ»ØÊý¾Ý
{
SCK=1;
DelayNS(1);
dataread=dataread<<1;
SCK=0;
DelayNS(1);
if(SO==1)
{
dataread|=0X01;
}
else
{
dataread&=~0X01;
}
}
DelayNS(1);
DelayNS(1);
SSN=1;
return dataread;
}
/////////////////////////////////////////////////////////////
/*.............SPIͨÐÅÅäÖÃgp21_opcode_data8read..................................*/
unsigned int gp21_opcode8_data16read(unsigned char opcode_address)
{
unsigned char cnt;
unsigned int dataread=0x00;
SSN=0;
DelayNS(1);
DelayNS(1);
for(cnt=8;cnt>0;cnt--) //·¢ËÍopcode_address²Ù×÷Ö¸Áî
{
if((opcode_address&0x80)==0)
sendzero(); //·¢ËÍ
else
sendone();//·¢ËÍ1
opcode_address=(opcode_address<<1);
}
for(cnt=16;cnt>0;cnt--) //¶ÁÈ¡²Ù×÷Ö¸Áî¶ÔÓ¦µÄ·µ»ØÊý¾Ý
{
SCK=1;
DelayNS(1);
dataread=dataread<<1;
SCK=0;
DelayNS(1);
if(SO==1)
{
dataread|=0X0001;
}
else
{
dataread&=~0X0001;
}
}
DelayNS(1);
DelayNS(1);
SSN=1;
return dataread;
}
/////////////////////////////////////////////////////////////
/*.............SPIͨÐÅÅäÖÃgp22_opcode_data8read..................................*/
/////////////////////////////////////////////////////////////
void gp21_opcode8(unsigned char data_buf_8)
{
unsigned char cnt,tmp=0x80;
SSN=0;
DelayNS(1);
DelayNS(1);
for(cnt=8;cnt>0;cnt--)
{
if((data_buf_8&tmp)==0) // tmp=tmp>>1; //tmp ÓÒÒÆһλ
sendzero(); //·¢ËÍ
else
sendone();//·¢ËÍ1
data_buf_8=(data_buf_8<<1);
}
DelayNS(1);
DelayNS(1);
SSN=1;
return;
}
/*.............SPIͨÐÅÅäÖÃgp22_opcode_data8read..................................*/
unsigned long gp21_opcode8_data32read(unsigned char opcode_address)
{
unsigned char cnt;
unsigned long Data_32_tmp=0x00000000;
SSN=0;
DelayNS(1);
DelayNS(1);
for(cnt=8;cnt>0;cnt--) //·¢ËÍopcode_address²Ù×÷Ö¸Áî
{
if((opcode_address&0x80)==0)
sendzero(); //·¢ËÍ
else
sendone();//·¢ËÍ1
opcode_address=(opcode_address<<1);
}
for(cnt=32;cnt>0;cnt--)
{
SCK=1;
DelayNS(1);
DelayNS(1);
Data_32_tmp=(Data_32_tmp<<1);
SCK=0;
DelayNS(1);
DelayNS(1);
if(SO==1)
{
Data_32_tmp|=0X00000001;
}
else
{
Data_32_tmp&=~0X00000001;
}
DelayNS(1);
DelayNS(1);
}
DelayNS(1);
DelayNS(1);
SSN=1;
return(Data_32_tmp);
}
///////////////////////////////////////////////////////////// |
|