Nordic例程官方网站(nrf52840/nrf52833)

网站链接:Nordic Semiconductor Infocenter

点击 +号 你就可以看到很多例程 这些例程里面很多源码可以直接用

跟进上面的串口TE驱动链接 可以得到具体的代码细节的使用信息:

Libuarte -先进的uart驱动程序
目录表
nrf_libuarte_drv
硬件资源使用情况
nrf_libuarte_drv用法
接收机
发射机
nrf_libuarte_async
超时的实现
定时器/ RTC外围
app_timer实例
硬件资源使用情况
nrf_libuarte_async用法
接收机
发射机
Libuarte是一个UARTE库,由以下几层组成:

nrf_libuarte_drv——一个低级UARTE驱动程序,具有扩展功能,如连续计数接收到的字节、双缓冲、启动和停止接收器的可选事件,以及在启动和停止接收器时可以触发的可选任务。
Nrf_libuarte_async—适合接收和发送异步数据包的库。它管理接收缓冲区并实现接收者不活动超时。库正在使用nrf_libuarte。它意味着在典型的UART用例中使用,在这种用例中,对方异步发送可变长度的数据包。在这种情况下,用户在包边界(即超时)和DMA缓冲区满时获得一个事件。
有关Libuarte的使用,请参见Libuarte示例。

nrf_libuarte_drv
nrf_libuarte_drv使用EasyDMA双缓冲功能和PPI连接来确保可靠的接收。连续接收由STARTRX任务建立,连接到ENDRX事件。一旦STARTRX任务启动,就会生成RXSTARTED事件。

关于RXSTARTED事件:

EasyDMA是为这次传输配置的,也可以为下一次传输配置。
配置寄存器被锁存。
此外,在RXSTARTED事件上,nrf_libuarte_drv调用用户处理程序,请求下一个缓冲区。处理程序用新的缓冲区进行响应。只要在刚刚开始的传输结束之前提供缓冲区,就不会丢失数据。

使用这种方法,系统延迟取决于所使用缓冲区的大小。如果缓冲区足够大,系统可以保证在没有流量控制的情况下,以多毫秒的延迟完成接收。这个最小的延迟可以覆盖SoftDevice或任何其他高优先级中断和flash操作(包括flash页面擦除)。

此外,计数器模式的专用定时器外设用于跟踪接收到的字节数。

Nrf_libuarte_drv可以配置启动和停止接收器的硬件事件。例如,此选项可用于构建具有请求和响应引脚的低功耗UART协议,该协议仅在传输期间启用接收器。所有硬件任务和事件都与PPI连接,它允许不依赖于中断处理时间的自主操作。

硬件资源使用情况
Nrf_libuarte_drv正在使用以下硬件资源:

UARTE实例
计时器实例
PPI通道:
如果不使用可选任务和事件,则至少有2个PPI通道(在最多255个EasyDMA传输的设备上为3个通道)。
如果使用可选任务和事件,则最多支持9个PPI通道和2个PPI组。
nrf_libuarte_drv用法
Nrf_libuarte_drv用nrf_libuarte_drv_init初始化。

配置包括:

UART配置(引脚、bauddate、硬件流控制和奇偶校验)
中断优先级
硬件事件(开始RX,结束RX)
任务(RX启动,RX完成)
定时器外设用于计数字节
用户事件处理程序
接收机
通过调用nrf_libuarte_drv_rx_start来激活接收器,其中包含接收缓冲区和接收器应该立即启动还是通过PPI启动的信息。

每当nrf_libuarte_drv设置一个EasyDMA接收缓冲区时,就会生成一个缓冲区请求事件(NRF_LIBUARTE_DRV_EVT_RX_BUF_REQ)。在这种情况下,请确保应用程序使用nrf_libuarte_drv_rx_buf_rsp进行响应,并提供新的缓冲区。新的接收缓冲区必须在刚刚开始的传输结束之前提供,否则UARTE将开始覆盖活动缓冲区,因为接收将自动重新启动。

在每次完成EasyDMA传输时,都会生成NRF_LIBUARTE_DRV_EVT_RX_DATA事件。

发射机
Nrf_libuarte_drv允许传输的数据包最大长度为65535字节。

如果设备不支持16位长的EasyDMA传输,则使用EasyDMA双缓冲特性和ENDTX事件与STARTTX任务之间的PPI连接来保证连续传输。在传输完成时,生成NRF_LIBUARTE_DRV_EVT_TX_DONE事件。

nrf_libuarte_async
Nrf_libuarte_async库构建在lib_libuarte_drv驱动程序之上。它实现了接收者不活动超时,这会导致一个带有接收到的数据量的事件。

库有专门的缓冲区用于接收和处理来自驱动程序的缓冲区请求事件(NRF_LIBUARTE_DRV_EVT_RX_BUF_REQ)。

超时的实现
根据可用资源的不同,您可以使用以下选项之一来实现接收器非活动超时:

专用定时器外设
专用的RTC外设
app_timer实例
定时器/ RTC外围
定时器或RTC外设与字节边界事件(RXDRDY)和定时器/RTC外设中的CLEAR任务之间的PPI连接一起使用。

定时器/RTC被配置成在比较事件上触发中断的方式。当任务CLEAR没有按时触发时,会触发中断。

超时是可配置的,其分辨率等于所使用的外设的刻度长度。

app_timer实例
除了TIMER/RTC外设之外,还可以使用app_timer实例来实现超时。这种方法需要在指定的时间间隔定期生成app_timer事件。

在超时时,app_timer事件处理程序检查接收到的字节数是否发生了变化。基于此检查,处理程序报告数据包边界。

与TIMER/RTC外设相比,超时分辨率较低,并且等于可以设置的最短app_timer超时。

硬件资源使用情况
Nrf_libuarte_async正在使用以下硬件资源:

最基本配置的Nrf_libuarte_drv驱动程序:
UARTE实例
计时器实例
2或3个PPI通道
如果TIMER或RTC外设用于接收端不活动超时,则使用以下额外资源:
RTC或TIMER实例
2个PPI通道
nrf_libuarte_async用法
Nrf_libuarte_async使用nrf_libuarte_async_init初始化。

配置包括:

与nrf_libuarte_drv配置相同的元素(参见nrf_libuarte_drv的用法)
接收端不活动超时
超时基础设施(TIMER、RTC或app_timer)
专用于接收器的内存量
接收机
Nrf_libuarte_async_enable使能接收。

在包或缓冲区边界上,使用NRF_LIBUARTE_ASYNC_EVT_RX_DATA调用事件处理程序。事件结构包含指向数据和接收到的数据量的指针。在处理数据时,必须通过调用nrf_libuarte_async_rx_free将数据返回给库。

发射机
Nrf_libuarte_async_tx用于启动传输。

具有NRF_LIBUARTE_ASYNC_EVT_TX_DONE事件的事件处理程序在传输完成时被调用。

  • 29
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

fighting787

一起加油,一起成功!

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

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

打赏作者

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

抵扣说明:

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

余额充值