本文包含原理图、PCB、源代码、封装库、中英文PDF等资源
您需要 登录 才可以下载或查看,没有账号?注册会员
×
最近在写一个声音芯片的协议(si730),自己写了一个,不能正常运行,我觉得是时序出了问题,希望和大家探讨一下
我写的协议程序是:
void write_addr_r_w( unchar addrh_rw,unchar addrl)
{//写寄存器地址和读写位
unchar i=4;
unchar h;
h=addrh_rw;
P0CONL = 0xaa; //P0.0-P0.3output mode/powerflag/SEN/SCLK/SDIO
P0PUR = 0x4e; //P0.1/2/3/6Enable pull-up/ P0.0/4/5/7Disable pull-up
set_sen; __NOP();
set_sclk;__NOP();
clr_sclk ;__NOP();
clr_sen ;__NOP();
while(i--)//写A7-A5和R/W位 高4位
{ clr_sclk ;__NOP();
if(h&0x80)set_sdio;
else clr_sdio; __NOP();
set_sclk;__NOP();
h<<=1;__NOP();
}
//addrl=addrl&0x1f;
h=(addrl<<=3);//获取低五位
i=5;
while(i--)//写A4-A0位
{clr_sclk ;__NOP();
if(h&0x80)set_sdio;
else clr_sdio; __NOP();
set_sclk;__NOP();
h<<=1;__NOP();
}
//clr_sclk ;__NOP();
}
void write_data(unchar data_h,unchar data_l)
{//写两个字节
unchar h;
unchar i=8;
h=data_h;
while(i--)//写D15-D0
{ clr_sclk ;__NOP();
if(h&0x80)set_sdio;
else clr_sdio; __NOP();
set_sclk;__NOP();
h<<=1;__NOP();
}
i=8;
h=data_l;
while(i--)//写D15-D0
{ clr_sclk ;__NOP();
if(h&0x80)set_sdio;
else clr_sdio; __NOP();
set_sclk;__NOP();
h<<=1;__NOP();
}
//clr_sclk ;__NOP();
set_sen; __NOP();
set_sclk ;__NOP();
clr_sclk ;__NOP();
}
void read_data(void)
{
//unit out;
unchar i;
P0CONL = 0x2a;//设为输入
set_sclk;__NOP();//a delay of one-half SCLK cycle for bus turnaround
for(i=0;i<8;i++)
{
clr_sclk ;__NOP();
set_sclk ;__NOP();
if(test_sdio)set_bit(out1,bit0); //=1?
else clr_bit(out1,bit0);//=0?
if(i<7) out1<<=1;//下一位
}
for(i=0;i<8;i++)
{
clr_sclk ;__NOP();
set_sclk ;__NOP();
if(test_sdio)set_bit(out2,bit0); //=1?
else clr_bit(out2,bit0);//=0?
if(i<7) out2<<=1;//下一位
}
//clr_sclk ;__NOP();
set_sen; __NOP();
set_sclk ;__NOP();
clr_sclk ;__NOP();
// return out;
}
|
|