NIOSⅡ运行顺序错误的C程序

NIOSⅡ运行顺序错误的C程序,c,eclipse,sequence,intel-fpga,nios,C,Eclipse,Sequence,Intel Fpga,Nios,我正在用C语言为我的NIOSII处理器编写代码。 我用的是Ecplipse,让我发疯! 它卡住了很多 这部分代码应该使用SPI读取寄存器,更改数据,写回,然后再次读取以进行验证 所以序列应该是SPIread->SPIwrite->SPIread。 当我运行它时,我得到SPIread->SPIread->SpirWrite 代码示例: alt_u32 SpiRead(alt_u8 spiNbytes, alt_u8 spiReg) { IOWR_32DIRECT(NRF24_SPI_BAS

我正在用C语言为我的NIOSII处理器编写代码。 我用的是Ecplipse,让我发疯! 它卡住了很多

这部分代码应该使用SPI读取寄存器,更改数据,写回,然后再次读取以进行验证

所以序列应该是SPIread->SPIwrite->SPIread。 当我运行它时,我得到SPIread->SPIread->SpirWrite

代码示例:

alt_u32 SpiRead(alt_u8 spiNbytes, alt_u8 spiReg)
{
    IOWR_32DIRECT(NRF24_SPI_BASE, 0, 0x1f & spiReg);    //set register 
    IOWR_8DIRECT(NRF24_SPI_BASE, 8, 0x07 & spiNbytes);  //Start SPI read
    return IORD_32DIRECT(NRF24_SPI_BASE, 12);           //return the data
}

void SpiWrite(alt_u32 data,alt_u8 spiNbytes,alt_u8 spiReg)
{
    spiReg = 0x1F & spiReg;
    spiReg = 0x20 | spiReg;
    data = data<<8;
    IOWR_32DIRECT(NRF24_SPI_BASE, 0, data | spiReg); //set register
    IOWR_8DIRECT(NRF24_SPI_BASE, 8, 0x07 & spiNbytes); //begin write SPI
}


int main(void) 
{
 alt_u32 dat = 0;
 dat = SpiRead(1, 0x06); //read spi

 dat = ((dat>>8) & 0x000000f8) | 0x00000005; //change data
 SpiWrite(dat, 1, 0x06);  //write data back

 dat = SpiRead(1, 0x06); //read data to validate

 while (1)  {   }  //stay here forever

 return 0;
}
如果我删除while循环,我会得到4次SPIread,然后是2次SPIwrite。每一个小小的改变都可能改变一切。。。 我的程序现在是6KB,我有18KB的专用内存

怎么了,请帮忙!
德米特里

如何确定正在执行的读或写操作?您是否考虑到SPI始终是一种数据交换,读取和写入同时发生,并且专用读取或写入只是一种事务,其中某些向一个方向传输的数据被忽略,可能具有意外值?对不起,我忘了提及它。我用示波器检查数据,它连接到所有SPI线。SPI仅在执行读或写操作时才处于活动状态。我不同时使用它们,只是分开读和写。你如何区分读和写?再说一次,除非你有双向变化,否则它们总是一致的,即使有时味噌或MOSI是一种不在乎的东西。仅仅是它是一个不关心的事实并不意味着它将不会被某些数据模式驱动。SPI工作正常,它已经在另一个项目上进行了测试。问题出在C程序或Eclipse本身。再说一次,您如何确定执行了错误的操作?您尚未发布可信的解释。你得出结论的确切结果是什么?