nRF51822 TWI学习

本文介绍了nRF51822芯片的TWI(IIC)通信协议,包括TWI的初始化、写数据、读数据的详细过程。通过分析官方SDK的源代码,解析了nRF51822在TWI通信中的时序和事件处理,以及如何使用PPI通道进行控制。
摘要由CSDN通过智能技术生成

由于nRF51822与模块之间通过IIC总线通信,在解决问题的时候学习了TWI,现在将其总结一下。

TWI(Two-wire interface),即两线通信接口,也就是我们平时常说的IIC接口。

IIC串行总线一般有两根信号线,一根是双向数据线SDA,另一根是时钟线SCL。所有接到IIC总线设备上的串行数据SDA都接到总线的SDA上,各设备的时钟线SCL接到总线的SCL上。

以下是在百科上找到的关于IIC工作的硬件原理:总线的运行(数据传输)由主机控制。所谓主机是指启动数据的传送(发出启动信号)、发出时钟信号以及传送结束时发出停止信号的设备,通常主机都是微处理器。被主机寻访的设备称为从机。为了进行通讯,每个接到I2C总线的设备都有一个唯一的地址,以便于主机寻访。主机和从机的数据传送,可以由主机发送数据到从机,也可以由从机发到主机。凡是发送数据到总线的设备称为发送器,从总线上接收数据的设备被称为接受器。

TWI初始化

1、由手册可知,TWI信号线可在GPIO口中任意选择映射,并单独配置。因此,在初始化最开始的时候还是GPIO口的初始化。

以前在写关于nRF51822的学习笔记的时候,并没有详细介绍GPIO口的配置,在这里说明一下。

nRF51822总共有32个GPIO口,每一个GPIO口都可以通过PIN_CNF[n]单独配置。

一般配置如下方面:



一般GPIO口的配置都是通过PIN_CNF[n]寄存器的设置来实现的,在nRF51822中都可以通过相关的库函数来实现,现在介绍一下PIN_CNF[n]寄存器。

1 DIR INPUT 0 输入引脚
方向 OUTPUT 1 输出引脚
2 INPUT CONNECT 0 连接输入缓冲器
输入缓冲 DISCONNECT 1 无连接输入缓冲器
3 PULL DISABLED 0 无上下拉
PULLDOWN 1 下拉模式
上下拉模式 PULLUP 2 上拉模式
4 DRIVE S0S1 0 Standard 0、Standard1
H0S1 1 High drive0、Standard1
驱动模式 S0H1、H0H1、D0S1、D0H1、S0D1、H0D1 2--7 ……
5 SENSE DISABLED 0
HIGH 1 高电平敏感
敏感机制 LOW 2 低电平敏感
在根据具体要求配置GPIO口属性的时候,只需设置相应的寄存器位就可以了。当然,nRF51822官方给出的开发包中有相应的库函数可以轻松的配置要求的GPIO口属性。例如,下面是将引脚设置为指定上下拉属性的官方库函数。

static __INLINE void nrf_gpio_cfg_input(uint32_t pin_number, nrf_gpio_pin_pull_t pull_config)
{
    /*lint -e{845} // A zero has been given as right argument to operator '|'" */
    NRF_GPIO->PIN_CNF[pin_number] = (GPIO_PIN_CNF_SENSE_Disabled << GPIO_PIN_CNF_SENSE_Pos)
                                        | (GPIO_PIN_CNF_DRIVE_S0S1 << GPIO_PIN_CNF_DRIVE_Pos)
                                        | (pull_config << GPIO_PIN_CNF_PULL_Pos)
                                        | (GPIO_PIN_CNF_INPUT_Connect << GPIO_PIN_CNF_INPUT_
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值