Nordic nRF5 SDK 学习笔记之四, TWI (I2C) 总线
硬件: 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) 总线相关推荐
- Nordic nRF5 SDK 学习笔记之七, 功耗评估及电源优化
NORDIC 官方评估功耗在线测试 NORDIC Online Power Profiler,https://devzone.nordicsemi.com/power/ NORDIC 关于低功耗的官方 ...
- Nordic nRF5 SDK和softdevice介绍
SDK和Softdevice的区别是什么?怎么选择SDK和softdevice版本?芯片,SDK和softdevice有没有版本兼容问题?怎么理解SDK目录结构?SDK帮助文档在哪里?Softdevi ...
- (Android版)AR 现实增强 高通 Vuforia QCAR SDK学习笔记(一)
望集齐大家的力量,将AR(增强现实)发展壮大. PS:不是我不加链接,是我加了超链接,没有用啊,难道是我权限不够,只得自己复制.粘贴了 1.下载高通SDK(高通刚刚才更新开发中心地址,版本更新为V2. ...
- STM32CubeMX学习笔记——STM32H743_硬件I2C
STM32CubeMX学习笔记--STM32H743_硬件I2C Github STM32CubeMX配置 Pinout配置 GPIO Clock Configuration配置 代码部分 main. ...
- Owl 学习笔记之四---属性
Owl 学习笔记之四---属性 内容 概述
- MAC OS X 技术内幕 学习笔记之四 MAC OS系统的启动引导
MAC OS X 技术内幕 学习笔记之四 MAC OS系统的启动引导 MAC OS的启动非常快,同样的运行硬件环境,运行MAC系统感觉比运行windows系统要快不少.在使用笔记本时,同样的电池容量, ...
- 高通ar android,Android版高通AR Vuforia QCAR SDK学习笔记
望集齐大家的力量,将AR(增强现实)发展壮大. PS:不是我不加链接,是我加了超链接,没有用啊,难道是我权限不够,只得自己复制.粘贴了 1.下载高通SDK(高通刚刚才更新开发中心地址,版本更新为v2. ...
- MOSS SDK学习笔记系列文章
MOSS是微软的一个门户等的产品,提供了很多SDK供调用 在此记录我学习的过程,作为自己的一个总结.(本系列会不断更新) 1.MOSS SDK学习(1):WinForm客户端调用 2.MOSS SD ...
- hive load data inpath 空目录_hive学习笔记之四:分区表
欢迎访问我的GitHub https://github.com/zq2599/blog_demos 内容:所有原创文章分类和汇总,及配套源码,涉及Java.Docker.Kubernetes.DevO ...
最新文章
- MIT的这个AI,专治抗生素滥用,二次抗生素直降67%
- 消除warning方法
- ECMAScript6 规范
- Hibernate sqlserver 的对象转成 Hibernate mysql 的对象时 需注意
- dart系列之:dart中的异步编程
- c语言 Nimm game算法,尼姆博奕(Nimm Game)
- Redis数据类型应用场景及具体方法总结
- 【干货】规模化敏捷DevOps四大实践之持续探索CE(中英对照版)
- Java 面向对象 --单例模式
- Linux 设置环境变量导致bash:command not found
- java 模拟电梯_java模拟电梯运行简单实现,swing界面
- mysql mybatis时间_MySQLMyBatis 时间处理的配合
- Nginx-windows
- 云计算下一个十年,IT行业将发生哪些变化?
- 拓端tecdat|R语言对MNIST数据集分析:探索手写数字分类
- 阶段1 语言基础+高级_1-3-Java语言高级_07-网络编程_第1节 网络通信概述_3_网络通信协议分类...
- 算法图解第四章笔记与习题(快速排序)
- 【avx2】VitrualBox 安装centos7 支持avx2
- 48-Elasticsearch-2(DSL查询_搜索结果处理_RestClient查询文档)
- python基础刻意练习--Task 6 字典与集合