📄 vs1001k.c
字号:
#include<all.h>
void delay(uint dat)//延迟10us
{ uint m,n;
for(m=0;m<dat;m++)
for(n=0;n<2;n++);
}
/*等DREQ*/
void vs_wait_dreq(void)
{ while(!(PIND&0x04)); }
/*发单个命令*/
uchar write_single(uchar dat)//发
{
SPDR=dat;
while(!(SPSR&0x80));
return SPDR;
}
uchar read_single(void)//读单个数据
{ return write_single(0xff); }
/*写命令*/
void vs_write_sci(uchar add,uint dat)//写命令
{ clear_xcs;//XCS有效
select_vs;
write_single(0x02);//写命令
write_single(add);//写地址
write_single((uchar)(dat>>8));
write_single((uchar)dat );
set_xcs;
}
uint vs_read_sci(uchar add)//读命令
{ uint dat;
clear_xcs;//XCS有效
select_vs;
write_single(0x03);//读命令
write_single(add);//写地址
dat=(uint)read_single()<<8;
dat|=read_single();
set_xcs;
return dat;
}
/*发数据*/
void vs_write_sdi_byte(uchar dat)//发送单个字节
{ set_xcs;
select_vs;
clear_bysnc;
set_bysnc;
SPDR=dat;
while(!(SPSR&0x80));
clear_bysnc;
}
void vs_write_sdi_bytes(uchar *add,uint n)//发送多个数据
{ uint i;
// vs_wait_dreq();//等DREQ变高
select_vs;
set_xcs;//选中DCLK
for(i=0;i<n;i++)
{ clear_bysnc;
set_bysnc;
SPDR=*add++;
while(!(SPSR&0x80));
}
while(!(SPSR&0x80));
clear_bysnc;
}
void vs1001k_reset(void)//VS1001K复位
{ vs_write_sci(MODE,0x0004);
delay(500);
vs_wait_dreq();
vs_write_sci(MODE,0x0000);
vs_write_sci(VOL,0x0000);
vs_write_sdi_byte(0x00);
vs_write_sdi_byte(0x00);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -