硬件: nRF52832

SDK: Ver 15.2.0

目标: TWI (I2C) 总线应用 (TWI MASTER 模式)

样例: <InstallFolder>\examples\peripheral\twi_sensor


TWI driver 包括两层: HAL 硬件层和 DRV 驱动层;


1. TWI MASTER 于 sdk_config.h 中配置

注意:配置中下图红框中 TWI0_ENABLED 使能!  TWI0_USE_EASY_DMA 视应用要求选择。

2. 于工程中添加文件 nrfx_drv_twi.c, nrf_twim.c


TWI 初始化

初始化和使能函数:  nrf_drv_twi_init(), nrf_drv_twi_enable()

去除初始化和禁止函数: nrf_drv_twi_disable(), nrf_drv_twi_uninit()

void twi_handler(nrf_drv_twi_evt_t const * p_event, void * p_context)
{switch (p_event->type){case NRF_DRV_TWI_EVT_DONE:if (p_event->xfer_desc.type == NRF_DRV_TWI_XFER_RX){data_handler(m_sample);}m_xfer_done = true;break;default:break;}
}void twi_init (void)
{ret_code_t err_code;const nrf_drv_twi_config_t     twi_config = {.scl                = ARDUINO_SCL_PIN,.sda                = ARDUINO_SDA_PIN,.frequency          = NRF_DRV_TWI_FREQ_100K,.interrupt_priority = APP_IRQ_PRIORITY_HIGH,.clear_bus_init     = false};err_code = nrf_drv_twi_init(&m_twi_0, &twi_config, twi_handler, NULL);APP_ERROR_CHECK(err_code);nrf_drv_twi_enable(&m_twi_0);
}

TWI 驱动实例初始化函数

ret_code_t nrf_drv_twi_init ( nrf_drv_twi_t const *  p_instance,
    nrf_drv_twi_config_t const *  p_config,
    nrf_drv_twi_evt_handler_t  event_handler,
    void *  p_context 
  )

参数 event_handler 如果设置为 NULL, 则 TWI 为阻塞工作模式 ( blocking mode). 


基本用法, 阻塞模式 (blocking mode)

此模式下,不使用中断,没有上下文句柄;

功能函数 nrf_drv_twi_rx(), nrf_drv_twi_tx()  在请求传输完成后,或出错就会返回。

// 阻塞模式示例代码uint32_t err_code;
uint8_t tx_data[] = {'a', 'b', 'c', 'd', 'e'};
const nrf_drv_twi_t twi = NRF_DRV_TWI_INSTANCE(0);
err_code = nrf_drv_twi_init(&twi, NULL, NULL);
APP_ERROR_CHECK(err_code);
nrf_drv_twi_enable(&twi);
err_code = nrf_drv_twi_tx(&twi, SLAVE_ADDRESS, tx_data, sizeof(tx_data), false);
APP_ERROR_CHECK(err_code);

高级用法,非阻塞模式 (non-blocking mode) 

TWI 中断会调用对应的事件处理

功能函数 nrf_drv_twi_tx(), nrf_drv_twi_rx(), nrf_drv_twi_xfer() 执行后会立即返回 NRF_SUCCESS,

或是当驱动忙时, 立即返回 NRF_ERROR_BUSY

此模式下, 可用 nrf_drv_twi_xfer() 进行复杂参数传输,使用 nrf_drv_twi_xfer_desc_t 结构体;

注: TWI 仅支持 NRF_DRV_TWI_FLAG_TX_NO_STOP flag. 其它标识需要 TWIM.

nrf_drv_twi_xfer_desc_t::type 定义了传输类型


Starting a transfer from PPI (暂略)

Repeated transfers (暂略)

Events (暂略)

Nordic nRF5 SDK 学习笔记之四, TWI (I2C) 总线相关推荐

  1. Nordic nRF5 SDK 学习笔记之七, 功耗评估及电源优化

    NORDIC 官方评估功耗在线测试 NORDIC Online Power Profiler,https://devzone.nordicsemi.com/power/ NORDIC 关于低功耗的官方 ...

  2. Nordic nRF5 SDK和softdevice介绍

    SDK和Softdevice的区别是什么?怎么选择SDK和softdevice版本?芯片,SDK和softdevice有没有版本兼容问题?怎么理解SDK目录结构?SDK帮助文档在哪里?Softdevi ...

  3. (Android版)AR 现实增强 高通 Vuforia QCAR SDK学习笔记(一)

    望集齐大家的力量,将AR(增强现实)发展壮大. PS:不是我不加链接,是我加了超链接,没有用啊,难道是我权限不够,只得自己复制.粘贴了 1.下载高通SDK(高通刚刚才更新开发中心地址,版本更新为V2. ...

  4. STM32CubeMX学习笔记——STM32H743_硬件I2C

    STM32CubeMX学习笔记--STM32H743_硬件I2C Github STM32CubeMX配置 Pinout配置 GPIO Clock Configuration配置 代码部分 main. ...

  5. Owl 学习笔记之四---属性

    Owl 学习笔记之四---属性 内容 概述

  6. MAC OS X 技术内幕 学习笔记之四 MAC OS系统的启动引导

    MAC OS X 技术内幕 学习笔记之四 MAC OS系统的启动引导 MAC OS的启动非常快,同样的运行硬件环境,运行MAC系统感觉比运行windows系统要快不少.在使用笔记本时,同样的电池容量, ...

  7. 高通ar android,Android版高通AR Vuforia QCAR SDK学习笔记

    望集齐大家的力量,将AR(增强现实)发展壮大. PS:不是我不加链接,是我加了超链接,没有用啊,难道是我权限不够,只得自己复制.粘贴了 1.下载高通SDK(高通刚刚才更新开发中心地址,版本更新为v2. ...

  8. MOSS SDK学习笔记系列文章

    MOSS是微软的一个门户等的产品,提供了很多SDK供调用 在此记录我学习的过程,作为自己的一个总结.(本系列会不断更新) 1.MOSS SDK学习(1):WinForm客户端调用  2.MOSS SD ...

  9. hive load data inpath 空目录_hive学习笔记之四:分区表

    欢迎访问我的GitHub https://github.com/zq2599/blog_demos 内容:所有原创文章分类和汇总,及配套源码,涉及Java.Docker.Kubernetes.DevO ...

最新文章

  1. MQTT 与 Kafka
  2. 微信公众平台的服务号和订阅号
  3. 蠢货别忘(一)common lisp funcall
  4. 下面属于javascript内部对象的有_JavaScript从零开始——面向对象编程(2)
  5. 支持向量回归预测怎么做_机器学习如何在油气开发预测中发挥作用?
  6. 【恋上数据结构】复杂度知识以及LeetCode刷题指南
  7. 分布式游戏网关--fooking
  8. hutool实战(带你掌握里面的各种工具)目录
  9. CAD导入图片怎么操作?简单几步就导入
  10. python-txt转换为pdf
  11. 在nginx中编写html,码头不会在nginx html根目录中创建文件夹
  12. PropertyBeanUtils.copyProperties(dest, orig)
  13. 用accelstepper库控制28BYJ-48步进电机(快慢运动切换)
  14. ESP32 串口读取 jy901s 姿态传感器
  15. 方正浩:智能制造和工业互联网的投资新视角
  16. linux plt.show不显示图片,解决matplotlib库show()方法不显示图片的问题
  17. confirm-order提交订单
  18. VMware 虚拟机演示进入U盘PE系统
  19. uefi装完系统后无法引导_uefi安装win10无法启动?uefi安装win10无法启动原因分析及解决方法...
  20. Unity Android平台 视频播放

热门文章

  1. 读入一个整数,如果是1~5之间则分别输出5个福娃的名字否则输出“北京欢迎你
  2. linux 内存大页,Linux大页内存管理等---菜鸟初学
  3. 蓝桥杯 PREV-43 拉马车(试题解析)
  4. 金山快盘使用的一些注意
  5. 《Python语言程序设计》王恺 王志 李涛 机械工业出版社第7章 I/O编程与异常 课后习题答案【强烈推荐】
  6. 移动端TB(D)R架构基础
  7. 计算机科学 名言,计算机科学名人名言.doc
  8. 数据的黑暗陷阱是什么?(二)——你想要一匹更快的马,还是一辆汽车?
  9. DHCP欺骗原理与欺骗攻击
  10. java的stackoverflow_call stack - 导致java.lang.StackOverflow的原因