在调试NIOS II 的SPI 接口,与网上其他不同的是,此次SPI 接口是作为slave使用,网上大多数资料都是针对master来讲解的,对slave模式都是认为非常简单一笔带过的,我在调试初期也是这样认为的,但实际调试起来,却不是如此,如果单字节传输的话,那是没有什么问题,如果用查询的方式的话检测status 寄存器里的RRDY 或者TRDY 位,如果用中断方式的话只需要配置成接收中断或者发送中断即可,然后读取 rxdat中的数值 或者向txdat 寄存器发送数值,
下面具体列举一下过程, 首先查看 Embedded Peripherals文档的第七章SPI CORE 中关于寄存器的描述 如下图
rxdat 和txdat 是两个数据寄存器,status 和 contro 寄存器是两个控制寄存器,如果只是用查询模式的话那么直接查询status中的RRDY或者TRDY 即可,如果接收到数据则RRDY为1 如果发送完数据则TRDY 为1,读出RRDY中的数据或者写满TRDY 中的数据则它们都置0,由此便可实现简单的数据传输,
如果用中断模式的话,需要先配置一下中断,在control 寄存器中的IRRDY和ITRDY 这两个寄存器是接收和发送中断控制的,其他几个寄存器则是出错中断控制的,在使用中断前,先要注册中断
void init_spi_redata(void)
{
SPI_ADC->CONTROL.BITS.IRRDY=1;
// SPI_ADC->CONTROL.BITS.ITRDY=1;
alt_irq_register(SPI_0_IRQ,NULL,Spi_redata_interrupts);
}
这里我首先配置成接收中断,因为NIOS II 的SPI口是slave 口,不能主动发送,所以首先配置成接收中断
然后再中断处理程序里面,根据传输协议,在接收到特定命令需要发送大量数据时候,更改成发送中断,这样便可以实现SPI slave模式下大量数据流的传输
用户1836975 2015-5-5 11:01
用户1655933 2015-3-25 11:22
用户419433 2012-5-16 15:54