我正在为我的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。每一个小改变都可能改变一切...... 我的程序现在是6K字节,我有18K字节的专用内存(OnChipMemory)。
有什么问题,请帮忙! 梅德。