我正在为我的 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)。
有什么问题,请帮忙!德米特里。