NiosII_SPI协议(使用笔记)

SPI是一种处理器和外设进行通信的协议。在Nios中使用SPI,需要以下几步:


1、在QSys中添加SPI ip核(SPI 3 Wire Serial),并进行简单配置。如下图所示:


有关Timing的选项,可以参考下图:


对照着上图,查看具体外设的datasheet中的时序图,就可以确定下来。

配置之后,连线--->设置中断--->自动分配地址--->Generate--->Quartus中编译--->下载到板子上。


2、第一步算是配置好了硬件,第二步就是软件的工作了,打开eclipsec-nios2。

首先,需要关注Altera提供的Nios处理器中SPI的寄存器的写法。C代码是面对这些寄存器的,底层的RTL电路负责具体的spi时序问题,C代码只需要根据具体的外设传输数据的方式,写相应的代码即可。

这里以AD7928为例。它是一款多通道ADC,与其他ADC最大的差别在于,它可以自动循环输出各个通道的电压转换值。

先来上一张AD7928的时序图:


从时序图中可以知道:

1> 一次发送2个字节的数据,同时接收2个字节的数据,即16位数据。

2> 从Din写入指令,从Dout返回处理结果。

3> Dout返回的结果的格式是 {0} + {ADD2,ADD1,ADD0} + {DB11,DB10,...DB0}。可以从返回的结果中直接读到通道号和对应的电压值。

4> 关于指令每一位的含义,请看下图:


需要着重关注的是SEQ和SHADOW,这两BIT可以设置ADC的工作方式:传统模式?自动模式1?自动模式2?

(从这里可以看出一般访问外设的一般模式:发送指令,接收返回数据。对应于SPI而言,用时钟同步,用片选处理多外设情况。)

下面简略介绍这三种工作方式:

1> 传统模式:

上电 ---- Din = 全1 ---- 写指令WRITE BIT=1,设置CODING, RANGE,PM, ADD2~ADD0, SEQ=SHADOW=0)---- Dout返回处理结果,Din继续写指令(设定ADD2~ADD0,需要访问的通道)(循环此步骤)。

2>自动模式1:

上电 ---- Din = 全1 ---- 写指令(WRITE BIT=1,设置CODING, RANGE,PM, ADD2~ADD0, SEQ=0,SHADOW=1---- Dout返回处理结果,Din写SHADOW Register(设定自动访问的通道号)----若写指令,则可以在循环输出的同时,改变CODING, RANGE,PM,同时保证SEQ=0,SHADOW=1。若不是写指令(WRITE BIT = 0),则写的其他位都不重要,只需要在Dout读取数据就行了。

3>自动模式2:

和自动模式1的区别在于,省去写SHADOW Register步骤,这样做的结果是,自动循环输出的通道序列是连续的,每次都从通道0开始。

上电 ---- Din = 全1 ---- 写指令WRITE BIT=1,设置CODING, RANGE,PM, ADD2~ADD0SEQ=SHADOW=1)---- Dout返回处理结果;若不是写指令,则写的其他位都不重要,只需要在Dout读取数据就行了。可以用写指令,同时 SEQ=1,SHADOW=0退回到传统模式。

软件代码示例,可以戳这里




  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值