void spi_init()
{
SpiaRegs.SPICCR.all =0x0007; // Reset on, rising edge, 16-bit char bits
SpiaRegs.SPICTL.all =0x0006; // Enable master mode, normal phase,
SpiaRegs.SPIBRR =0x00FF; // enable talk, and SPI int disabled.
// SpiaRegs.SPIBRR =0x0085;
SpiaRegs.SPICCR.all =0x0087; // Relinquish SPI from Reset
SpiaRegs.SPIPRI.bit.FREE = 1; // Set so breakpoints don't disturb xmission
}
void spi_fifo_init()
{
// Initialize SPI FIFO registers
SpiaRegs.SPIFFTX.all=0xE040;
SpiaRegs.SPIFFRX.all=0x204F;
SpiaRegs.SPIFFCT.all=0x0;
}
实际使用时:
AD_CS=0;
SpiaRegs.SPITXBUF=DA_Data;
SpiaRegs.SPITXBUF=DA_Data;
SpiaRegs.SPITXBUF=DA_Data;
while(1)
{
if((SpiaRegs.SPISTS.all&0x40)==1) break;//如果的中断标志位为1,则证明SPI已经发送成功,则停止等待
}
SpiaRegs.SPIRXBUF=SpiaRegs.SPIRXBUF;//虚读SPIRXBUF,以清除SPI中断标志
// while(SpiaRegs.SPIFFTX.bit.TXFFST!=0){}
AD_CS=1;
lphaff 发表于 2013-11-21 13:11 static/image/common/back.gif
是啊,,前段时间是用示波器加了一个延时,让这个延时刚好等于8个时钟,但是这终究不是长久之计啊。
现在 ...
是的我下来再看看相关寄存器 愿意是希望通过查询中断位这段时间来拉高CS的,
但是如果没有查到中断位,则CS直接被拉高了
这样,可能BUFF的数据刚刚送到SPI_DAT里面
所以就出现了几个时钟在CS的高电平后面了
满哥,你有参考例程的话,提供一个给我学习下吧 在这个帖子里:https://bbs.21ic.com/icview-132026-1-1.html
特意提到了,在标准SPI模式下,才会有SPI_INTFLAG置位
但是因为DA芯片是24位,需要一次发送24个bit
若使用标准SPI模式,则相邻八个字节会有时间间隔
所以必须使用FIFO发送
现在FIFO的INT标志位时钟为1,,
不好意思啊没有那么多的时间帮你分析
关于寄存器的相关配置我也就不住还望你多多对比分析
参考TI提供的相关代码 zhangmangui 发表于 2013-11-22 00:00 static/image/common/back.gif
不好意思啊没有那么多的时间帮你分析
关于寄存器的相关配置我也就不住还望你多多对比分析
参考TI提供 ...
谢谢哈。
我再看看
页:
1
[2]