nrf51822裸机教程-IIC】的更多相关文章

关于IIC总线的核心有以下几点: :时钟线高电平期间必须保持数据线不变. :时钟线低电平期间可以改变数据. :时钟线和数据线上都要接上拉电阻,以使总线不工作时,两根线的电平都处于高电平状态. :每个传输的字节后面需要由对方回送一个应答信号. 由上面可知,在时钟线为高电平的时候如果数据线改变,那么就是”不合法” 的.于是就刚好利用这种”不合法的”的跳变来作为数据 起始信号和停止信号. 于是规定: :时钟线为高电平时,数据线由高到低跳变为起始信号 :时钟线为高电平时,数据线有低到高跳变为 停止信号.…
关于SPI总线的介绍这里就不细说了,网上有很多介绍SPI总线时序的. SPI总线的本质就是一个环形总线结构,在时钟驱动下两个双向移位寄存器进行数据交换. 所以SPI总线的特色就是:传输一字节数据的同时也会接收到一字节数据.支持SPI操作的芯片通常都会有一个CS引脚作为片选信号,所以总线上可以挂多个支持SPI操作的芯片,每次想对哪个操作就直接使能那个芯片就可以了. 对比于IIC总线,IIC总是在一个时钟周期内传输一个bit, IIC总线总是在每个时钟周期的高电平部分采样数据. 而SPI的特点是在时…
art硬件模块通常都有内置的硬件接收buff,比如51822的硬件uart模块图如下 因为通常接收到uart数据时都会做一些处理.比如保存到数据,或者对数据做一些判断之类的. 如果uart的波特率设置的很快,mcu的处理速度又不是很快或者是处理的过程比较耗时,那么当uart串口连续过来很多数据时,你在处理第一个数据时,后续的数据就可能丢失.所以通常uart模块都会内置一个很小的硬件接收buff,51822就内置了一个6字节的硬件接收buff.这样就能起到缓存作用. Uart一般有两种工作方式  …
RTC0被协议栈使用了.所以在跑蓝牙程序的情况下.RTC0不能使用. RTC相关寄存器如下: EVTEN,EVTENSET,EVTENCLR. 这三个寄存器用来设置是否使能某个事件.(TICK,OVRFLW,COMPARE0-3 事件) INTEN,INTENSET,INTENCLR. 这三个寄存器用来设置某个事件发生时是否触发RTC中断. PRESCALER 该寄存器用来设置RTC的时钟分频 分频公式:fRTC [kHz] = 32.768 / (PRESCALER + 1 )       …
先简单介绍一下PWM的原理. 原理很简单. 假设COUNTER是个从0开始递增的计数器.  我们设置两个值 counter0 和counter1 在 COUNTER 计数到counter0的值时候翻转输出的电平,然后COUNTER继续计数,在计数到counter1的值的时候再翻转输出电平. 同时清零COUNTER计数器.让其从0开始重新计数,这样就可以产生一个方波. 从上面的图可以看出这个方波的一个周期T的时间是由 counter1来决定的.所以周期的调节就是通过counter1的值来调节. …
Programmable Peripheral Interconnect即可编程外设互联 系统,该模块是51822 提供的一个特性. 目的是为了让51822 的外围模块可以不通过处理器而自动相互作用. 工作原理很简单. 可以将PPI看做是一通道. 该通道有两个端点,一个叫event end-point,另一个为task end-point. 通过将具体的 event寄存器和 task寄存器 分别赋值到 ppi通道的event end-point和task end-point中. 那么当 even…
GPIO通常都会具有中断功能,上一讲的GPIO中并没有涉及到中断的相关寄存器. 51822将GPIO的中断相关做成了一个单独的模块GPIOTE,这个模块不仅提供了GPIO的中断功能,同时提供了 通过task和event的方式来访问GPIO的功能.其实中断功能也是通过 event来使能的,即中断是通过设置寄存器中相关位来决定  当event发生时是否发生中断 来设置中断功能的,具体下面介绍寄存器就明白了. (task和event的引入主要是为了和51822中的PPI(可编程外围设备互联系统)模块的…
该讲介绍51822的Timer/Counter模块工作在timer模式下(定时器模式,还可以工作为计数器模式) 如何操作 51822的Timer/Counter结构如下图所示 Timer模块从PCLK16M/PCLK1M 处获得时钟源,然后经分频后得到的时钟作为timer模块的时钟 ( 上图Ftimer).当timer模块选择为timer模式时,Counter会在Ftimer的每个tick 计数一次当计数值与cc[n](n为0,1,2,3)寄存器中的值相等时就会触发对应的Compare[n]事件…
首先看看一下相关的寄存器说明 Out寄存器 输出设置寄存器 每个比特按顺序对应每个引脚,bit0对应的就是 引脚0 该寄存器用来设置 引脚作为输出的时候的 输出电平为高还是低. 与输出设置相关的 还有另外两个寄存器 OUTSET和OUTCLR OUTSET用来设置某个引脚的输出为高电平 OUTCLR用来设置某个引脚的输出为低电平 这两个寄存器同OUT寄存器一样 每个位按顺序对应每个引脚.但有个特别的地方在于OUTSET和OUTCLR两个寄存器的每个bit都是写1有效,写0无效. 比如在引脚都被设…
使用的工程为是基于sdk10工程 在将以nRF51_SDK_10.0.0_dc26b5e\examples\peripheral\twi_sensor作为模版 修改代码main.c #include <stdio.h> #include "boards.h" #include "app_util_platform.h" #include "app_error.h" #include "nrf_drv_twi.h"…