在F28335的spi模块中,我直接给spitxbuf寄存器赋值,它会激发spi的发送功能,数据会在spidat移位寄存器中逐位的发送给spisimo引脚;
1、现在我想用FIFO寄存器不知道给怎样给发送fifo寄存器赋值
2、txfifo寄存器和txbuf和spidat寄存器之间是个什么样的关系
3、使用fifo寄存器后,怎样确定上一次的数据已经发送完成,我好写入下一次的数据
This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
在F28335的spi模块中,我直接给spitxbuf寄存器赋值,它会激发spi的发送功能,数据会在spidat移位寄存器中逐位的发送给spisimo引脚;
1、现在我想用FIFO寄存器不知道给怎样给发送fifo寄存器赋值
2、txfifo寄存器和txbuf和spidat寄存器之间是个什么样的关系
3、使用fifo寄存器后,怎样确定上一次的数据已经发送完成,我好写入下一次的数据
其实我的意思是,对于SPIFFTX寄存器中的0~4位TXFFIL0~4可以设置fifo transmit的中断等级,当fifo状态位 TXFFST4-0小于或者等于前面设置的TXFFIL0~4时,会发生中断;
我不清楚上面是一种怎样的逻辑,而且当这种fifo中断作用,结合我自己使用的需求,该怎样用?我现在在10k中断中产生数据,但是我想10K的速度往外发,因为从机接收速度没有这么高,所以我就想把数据打包,例如:我积攒10次中断的数据,发送一次,这样的发送方式应该是必须用到txfifo,相当于我积攒10次,激活一次fifo发送数据,等这10次的数据发送完成后,在往里面存10次的数据,这种需求该怎样结合上面的fifo发送中断实现呢,项目催的急,请您见谅,期待你的解答,谢谢!
按照我理解的您的意思,下面是我对spififo的初始化和我在中断程序里面的发送程序,跪请您看看;
void spi_fifo_init()
{
SpiaRegs.SPICCR.bit.SPISWRESET=0; // Reset SPI
SpiaRegs.SPICCR.all=0x000F; // 移位寄存器一次可以移出16位,禁用SPI的环路返回模式
SpiaRegs.SPICTL.all=0x0017; // 时钟相位没有延时,SPI为主模式,使能4个引脚,spi中断使能
SpiaRegs.SPISTS.all=0x0000; // 状态位置零
SpiaRegs.SPIBRR=0x0024; // 波特率1M
SpiaRegs.SPIFFTX.all=0xCF20; // fifo深度写 15位,中断等级写0,当发送15位之后,fifo空,发生中断,
SpiaRegs.SPIFFCT.all=0x00; // 无延时
SpiaRegs.SPICCR.bit.SPISWRESET=1; // Enable SPI
SpiaRegs.SPIFFTX.bit.TXFIFO=1; //写1,再次使能发送FIFO工作
}
中断发送程序
interrupt mianisr()
{
SpiaRegs.SPICCR.bit.SPISWRESET=0; // Reset SPI 不启动发送
SpiaRegs.SPITXBUF=sdata[j]; // 往fifo中写入数据
if(j==16) // 往fifo中写入了16次数据
{
GpioDataRegs.GPBTOGGLE.bit.GPIO57 = 1; // 将高电平翻转为低电平,拉低片选,使能从机接收
SpiaRegs.SPICCR.bit.SPISWRESET=1; // enable SPI 启动发送
}
while(SpiaRegs.SPIFFTX.TXFFINT==1);// 判断fifo的中断标志位,说明fifo已经发送为空,
SpiaRegs.SPITXBUF=sdata[j]; // 再次往fifo中写入数据
}
请您看看,逻辑上我有点混论,请您帮忙理清一下。谢谢!