1

我正在为我的 NIOS II 处理器编写 C 语言代码。我正在使用让我发疯的 Ecplipse!卡了很多!!

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

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

代码示例:

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。每一个小小的改变都可能改变一切……我的程序现在是 6Kbytes,我有 18Kbytes 的专用内存(OnChipMemory)。

有什么问题,请帮忙!德米特里。

4

0 回答 0