我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中断优先级位的意义,你这样说就明白了。