TI中文支持网
TI专业的中文技术问题搜集分享网站

请教28069的SPI的FIFI设置问题

我SPI发送时,想在SpibRegs.SPITXBUF = SpiTxData; 后就产生中断,不知道如何设置SPIFFTX、SPIFFRX?

我的SPI配置如下:下面的配置无法在写一个SPITXBUF 时产生中断

 //SPIb配置寄存器
 SpibRegs.SPICCR.all = 0x000F;    // 数据16位
 //bit7,Reset=0;
 //bit6,clock_polarity=0,clock-phase =0//数据在上升沿输出且在下降沿输入
 //bit5,reserved
 //bit4,spibk=0
 //bit3-0,Chars=1111

 //SPI操作寄存器
 SpibRegs.SPICTL.all = 0x0007;
 //bit7-5,reserved
 //bit4,overload int enable=0
 //bit3,clock-phase=0
 // SPICLK信号延迟半个周期,
 //bit2,master/slave=1    // 主模式
 //bit1,talk=1    // 允许发送
 //bit0,spi int NEA=1     // 使能中断

 //SPI波特率寄存器
 SpibRegs.SPIBRR = 39;       // 500KHz

 //FIFO发送寄存器
 SpibRegs.SPIFFTX.all = 0xe048;    // 使能FIFO
 //FIFO接收寄存器
 SpibRegs.SPIFFRX.all = 0x2061;    // 使能接收中断,接收FIFO为2级
 //FIFO控制寄存器
 SpibRegs.SPIFFCT.all = 0x0000;    // FIFO发送延迟为0

 SpibRegs.SPICCR.bit.SPISWRESET = 1;    // 重启SPI 发送fifo 接收fifo
 SpibRegs.SPIFFTX.bit.TXFIFO = 1;
 SpibRegs.SPIFFRX.bit.RXFIFORESET = 1;

Eric Ma:

Qiang,

SpibRegs.SPIFFTX.all = 0xe048;    // 使能FIFO

你这里把SPIFFTX.TXFFIL 设置为8?是什么意思呢,06x只有4个FIFO。你应该设置为0,这样当TXFIFO为0的时候,就会产生中断,而你在中断里面只要写入一个数据就可以了,这样该数据发送完后,TXFIFO又为0,又接着产生中断。

Eric

我SPI发送时,想在SpibRegs.SPITXBUF = SpiTxData; 后就产生中断,不知道如何设置SPIFFTX、SPIFFRX?

我的SPI配置如下:下面的配置无法在写一个SPITXBUF 时产生中断

 //SPIb配置寄存器
 SpibRegs.SPICCR.all = 0x000F;    // 数据16位
 //bit7,Reset=0;
 //bit6,clock_polarity=0,clock-phase =0//数据在上升沿输出且在下降沿输入
 //bit5,reserved
 //bit4,spibk=0
 //bit3-0,Chars=1111

 //SPI操作寄存器
 SpibRegs.SPICTL.all = 0x0007;
 //bit7-5,reserved
 //bit4,overload int enable=0
 //bit3,clock-phase=0
 // SPICLK信号延迟半个周期,
 //bit2,master/slave=1    // 主模式
 //bit1,talk=1    // 允许发送
 //bit0,spi int NEA=1     // 使能中断

 //SPI波特率寄存器
 SpibRegs.SPIBRR = 39;       // 500KHz

 //FIFO发送寄存器
 SpibRegs.SPIFFTX.all = 0xe048;    // 使能FIFO
 //FIFO接收寄存器
 SpibRegs.SPIFFRX.all = 0x2061;    // 使能接收中断,接收FIFO为2级
 //FIFO控制寄存器
 SpibRegs.SPIFFCT.all = 0x0000;    // FIFO发送延迟为0

 SpibRegs.SPICCR.bit.SPISWRESET = 1;    // 重启SPI 发送fifo 接收fifo
 SpibRegs.SPIFFTX.bit.TXFIFO = 1;
 SpibRegs.SPIFFRX.bit.RXFIFORESET = 1;

Qigang Sun:

回复 Eric Ma:

找到问题原因了:是因为一直在写SPITXBUF,导致无法产生中断后面加一延时即可

for ( ; ; ) {

        HPSampling1 = ADReadTemp2;        Spi_TxWritePOS(0x3c7f);

        DELAY_US(1000);

    }

我SPI发送时,想在SpibRegs.SPITXBUF = SpiTxData; 后就产生中断,不知道如何设置SPIFFTX、SPIFFRX?

我的SPI配置如下:下面的配置无法在写一个SPITXBUF 时产生中断

 //SPIb配置寄存器
 SpibRegs.SPICCR.all = 0x000F;    // 数据16位
 //bit7,Reset=0;
 //bit6,clock_polarity=0,clock-phase =0//数据在上升沿输出且在下降沿输入
 //bit5,reserved
 //bit4,spibk=0
 //bit3-0,Chars=1111

 //SPI操作寄存器
 SpibRegs.SPICTL.all = 0x0007;
 //bit7-5,reserved
 //bit4,overload int enable=0
 //bit3,clock-phase=0
 // SPICLK信号延迟半个周期,
 //bit2,master/slave=1    // 主模式
 //bit1,talk=1    // 允许发送
 //bit0,spi int NEA=1     // 使能中断

 //SPI波特率寄存器
 SpibRegs.SPIBRR = 39;       // 500KHz

 //FIFO发送寄存器
 SpibRegs.SPIFFTX.all = 0xe048;    // 使能FIFO
 //FIFO接收寄存器
 SpibRegs.SPIFFRX.all = 0x2061;    // 使能接收中断,接收FIFO为2级
 //FIFO控制寄存器
 SpibRegs.SPIFFCT.all = 0x0000;    // FIFO发送延迟为0

 SpibRegs.SPICCR.bit.SPISWRESET = 1;    // 重启SPI 发送fifo 接收fifo
 SpibRegs.SPIFFTX.bit.TXFIFO = 1;
 SpibRegs.SPIFFRX.bit.RXFIFORESET = 1;

Qigang Sun:

回复 Eric Ma:

SPIFFTX.TXFFIL 中的值是最大值,就是(less than or equal to). 如果小于它则产生中断

我是发送一个数据,所以设置为0,与其它值都一样

Eric说的对,当然不应该写8,最大值只能写4

谢谢!

 

我SPI发送时,想在SpibRegs.SPITXBUF = SpiTxData; 后就产生中断,不知道如何设置SPIFFTX、SPIFFRX?

我的SPI配置如下:下面的配置无法在写一个SPITXBUF 时产生中断

 //SPIb配置寄存器
 SpibRegs.SPICCR.all = 0x000F;    // 数据16位
 //bit7,Reset=0;
 //bit6,clock_polarity=0,clock-phase =0//数据在上升沿输出且在下降沿输入
 //bit5,reserved
 //bit4,spibk=0
 //bit3-0,Chars=1111

 //SPI操作寄存器
 SpibRegs.SPICTL.all = 0x0007;
 //bit7-5,reserved
 //bit4,overload int enable=0
 //bit3,clock-phase=0
 // SPICLK信号延迟半个周期,
 //bit2,master/slave=1    // 主模式
 //bit1,talk=1    // 允许发送
 //bit0,spi int NEA=1     // 使能中断

 //SPI波特率寄存器
 SpibRegs.SPIBRR = 39;       // 500KHz

 //FIFO发送寄存器
 SpibRegs.SPIFFTX.all = 0xe048;    // 使能FIFO
 //FIFO接收寄存器
 SpibRegs.SPIFFRX.all = 0x2061;    // 使能接收中断,接收FIFO为2级
 //FIFO控制寄存器
 SpibRegs.SPIFFCT.all = 0x0000;    // FIFO发送延迟为0

 SpibRegs.SPICCR.bit.SPISWRESET = 1;    // 重启SPI 发送fifo 接收fifo
 SpibRegs.SPIFFTX.bit.TXFIFO = 1;
 SpibRegs.SPIFFRX.bit.RXFIFORESET = 1;

HUIHUI LIU:

回复 Eric Ma:

之前一直没搞清楚TXFFIL中断优先级位的意义,你这样说就明白了。

赞(0)
未经允许不得转载:TI中文支持网 » 请教28069的SPI的FIFI设置问题
分享到: 更多 (0)