NORDIC的打怪之旅(第二篇)

  Nordic的52832芯片中有很多可以使用的协议,在其的官方文档中可以查看到(地址 在第一篇SDK的网址是一样的),其中使用最多的为spi,twi等,而twi中又完全兼容I2C协议,今天的目的主要是说明一下spi的配置过程(twi的配置过程在第三篇会提及到)。

  首先介绍一下什么是spi,先上图:

  可以很清楚的看到spi的实现过程。spi使用4根线,sck,mosi,miso,cs,而其中的MOSI的含义是Master Input Slave Output,MISO的含义是Master Output Slave Input ,这样看的好处是能够方便的分清楚是怎么传输数据的。在52832中又有个新的东西叫做EasyDMA,这个是可以自动读写RAM,让CPU可以一次性配置完一整个数据包的传输,然后在整包数据传输完成之后再处理剩下的TASKS了,所以对于低功耗开发而言是很不错的。

  这里我把spi处理过程分成了以下几个方面

  (1)spi的配置;

  spi的配置其实有点意思,在实际的项目中根据你所需要的模块,在sdk_config.h中去配置,有两个方法可以进行相应的配置,第一个是通过找到对应的spi的Macro,即宏,去配置相应的信息;

第二是通过Configuration Wizard来配置,这个方法是我现在选择的,比较方便也比较直接,不容易出现差错。

在所需的模块上进行选择和配置。

  (2)spi的初始化;

  spi的初始化过程也很有意思,也是需要去配置spi的四个引脚值及其他的一些基本信息。其目的在于初始化spi模块并使能其引脚及初始化读写操作,并且外设库SPI初始化函数nrf_drv_spis_init()可以提供一个函数句柄,用做传输完成的回调函数。。

  (3)spi的启动;

  spi的初始化过程中就会去启动spi,我提出来说的目的在于我最开始没有去启动,犯了一个傻瓜式的错误。启动的过程就是调用52832的底层函数nrf_drv_spis_init();没有启动的spi是不能够进行后面的操作的。

  (4)spi的读写;

  spi的读写操作在应用层看来是比较简单的,因为官方的SDK中已经提供给你了底层函数接口,直接配置好调用就行。在读写操作中需要调用的函数是nrf_drv_spis_buffers_set(),spi读写是同步的故直接封装成一个函数。在第一张图中可以看到是需要用到缓冲区的,目的在于更准确的发送和接收数据。

  (5)spi的关闭;

   当你不再发送数据,及你的发送缓冲区和接收缓冲区都没有数据的时候,spi选择关闭,这样做的目的在于降低功耗。spi关闭也会调用底层的接口函数nrf_drv_spis_uninit()。

  最后,spi通过初始化过程时提供了一个回调函数,即spis_event_handler(),这是spi发送完成的回调函数,将会在发送完成中断中调用。到这里基本的spi就完成了,当然如果需要修改默认的spi的参数内容,可以在初始化配置过程中进行。

  高山远水,漫步悠扬。

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

沉夢志昂丶

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值