请问各位有没有做过NiosII CPU中的SPI测试程序,我在Nios里配置了一个8位的主SPI,另外有一个VerilogHDL写的从SPI接口的控制模块,控制模块从AD采集数据,然后通过SPI传给Nios。接口部分经过验证是没有问题的。写了如下测试程序,但是写进去和读出来的不一样,是不是我这程序写得有问题。麻烦指点,谢谢! #include "alt_types.h" #include "altera_avalon_spi_regs.h" #include "altera_avalon_pio_regs.h" #include "system.h" alt_u8 tx_buf1[6]={0x40,0x0d,0x08,0x08,0x08,0x08}; //tx_buf1前两个字节0x400d组成地址,实际有效的只有0~10位,第14位为1则标志是写寄存器,接下来发送的0x08080808写进内部寄存器。调用alt_avalon_spi_command()函数时将0x08080808写进地址为0xd的内部寄存器(32位的)。 alt_u8 tx_buf2[2]={0x00,0x0d}; //tx_buf2前两个字节0x000d组成地址,从SPI接收到后根据第14位为0判断为读操作,把地址为0xd的内部寄存器的值输出,调用第2个alt_avalon_spi_command()函数时讲值读出并存入rx_buf。 unsigned char rx_buf[4];//接收数组 int main() {
const alt_u8 *wdata=tx_buf1; alt_u8 * read_data; read_data=rx_buf; alt_avalon_spi_command(SPI_MASTER8_BASE,0,6,wdata,0,read_data,0x0); wdata=tx_buf2; alt_avalon_spi_command(SPI_MASTER8_BASE,0,2,wdata,4,read_data,0x0); if(rx_buf[0]==0x8) //判断读出来的跟写进去的是否一致 IOWR_ALTERA_AVALON_PIO_DATA(PIO_BASE, 0x1); else IOWR_ALTERA_AVALON_PIO_DATA(PIO_BASE, 0x2); return 0; }
|