由于我在使用spi的时候发的一些细节写出来和大家分享一下。
前段时间我一直在调试用硬件spi来控制一款串口扩展芯片vk3234
这款芯片的时序有点特殊,即对芯片操作必须是双字节操作。
我再调试的时候发现的一些规律
无论我们是操作rSPRDAT0还是rSPTDAT0的时候,时钟引脚都会产生相应的8位时钟信
void spi_send_byte(U8 dat)
{ //vk32xx_cs0();
rSPTDAT0=dat;
while(!(rSPSTA0&0x01))//准备就绪退出循环
;
//vk32xx_cs1();
//return rSPRDAT0;
}
U8 spi_read_byte(U8 dat)
{ U8 data1;
vk32xx_cs0();
rSPTDAT0=dat;
while(!(rSPSTA0&0x01))//准备就绪退出循环
;
delay1(0xf);
rSPTDAT0=0xff;
while(!(rSPSTA0&0x01))//准备就绪退出循环
;
vk32xx_cs1();
//Uart_Printf("\nidx=0x%x\n",rSPRDAT0);
data1=rSPRDAT0;
//Uart_Printf("\nidx=0x%x\n",data1);
return data1;
}
void vk3xxx_write_reg(U8 port,U8 reg,U8 dat)
{ vk32xx_cs0();
delay1(0x8f);
spi_send_byte(0x80+((port-1)<<5)+(reg<<1));
spi_send_byte(dat);
delay1(0x4ff);
vk32xx_cs1();
}
U8 vk3xxx_read_reg(U8 port,U8 reg)
{
return spi_read_byte(((port-1)<<5)+(reg<<1));
}