Nordic nRF52832使用寄存器实现SPI功能

目录

概述

1 SPI相关的寄存器

1.1 SPI的框架结构

1.2 功能描述

1.3 SPI Master模式引脚配置

1.4 SPI Master模式下的时序

2 SPI相关的寄存器 

2.1 Instances

2.2 详细寄存器定义

2.3 SPI master interface特性

3 Zephyr 平台下SPI功能时序(寄存器)

3.1 寄存器的文件地址

 3.2 SPI驱动实现

3.3 源代码


概述

本文详细介绍了nRF52832芯片的SPI接口寄存器配置与功能实现。主要内容包括:1)SPI主设备框架结构,重点说明双缓冲TXD/RXD寄存器的工作机制;2)SPI主模式下的引脚配置(SCK/MOSI/MISO)与时序控制要求;3)给出了完整的寄存器定义表,涵盖使能、引脚选择、频率配置等关键寄存器;4)基于Zephyr平台提供了SPI驱动实现方案,包含初始化代码、数据传输函数及芯片选择控制逻辑,并附有完整的源代码示例。特别强调SPI主设备不直接支持片选功能,需通过GPIO独立控制从设备选择。

1 SPI相关的寄存器

1.1 SPI的框架结构

SPI 主设备提供了一个简单的 CPU 接口,其中包括用于发送数据的 TXD 寄存器和用于接收数据的 RXD 寄存器。

1.2 功能描述

TXD和RXD寄存器是双缓冲的,以便在一定程度上允许不间断的数据流进出SPI主机。SPI主控不直接实现对芯片选择的支持。因此,CPU必须使用可用的 gpio来选择正确的从站,并独立于SPI主站进行控制。SPI主机支持 SPI模式0 ~ 3。

SPI 工作列表

1.3 SPI Master模式引脚配置

与SPI主控相关联的不同信号SCK、MOSI和MISO被映射到物理引脚。该映射分别根据PSELSCK、PSELMOSI和PSELMISO 寄存器中指定的配置。如果在这些寄存器中指定了0xFFFFFFFF的值,则相关的SPI 主信号不会连接到任何物理引脚。

PSELSCK、PSELMOSI和PSELMISO寄存器 及其配置仅在SPI主设备启用时使用,并且仅在 设备处于ON模式时保留。

1.4 SPI Master模式下的时序

SPI主事务通过将第一个字节写入 TXD寄存器来启动,该字节将由SPI主服务器传输。由于发送器是双缓冲的,第二个字节可以在第一个字节 之后立即写入TXD寄存器。然后SPI主机将按照写入TXD寄存器的顺序发送这些字节。

SPI主控将传入的字节移动到RXD寄存器后,随着SCK时钟 在字节的最后一位周期的短暂延迟。这也意味着READY事件将相应地延迟,参见下图的SPI主事务。因此,务必始终清除 READY事件,即使没有使用RXD寄存器和正在接收的数据。

2 SPI相关的寄存器 

2.1 Instances

nRF52832总共有3个SPI接口可供使用

和SPI相关的寄存器总表

2.2 详细寄存器定义

1)Enable interrupt

2) Disable interrupt

3) Enable SPI

4) PSELSCK

5) PSELMOSI

6) PSELMISO

7) RXD

8) TXD

9) FREQUENCY

 10) CONFIG

2.3 SPI master interface特性

1) SPI master interface的电器特性

2) SPI master interface的时序

3 Zephyr 平台下SPI功能时序(寄存器)

Zephyr OS下定义的SPI寄存器数据结构

3.1 寄存器的文件地址

D:\ncs\v2.9.0\modules\hal\nordic\nrfx\hal\nrf_spi.h
D:\ncs\v2.9.0\modules\hal\nordic\nrfx\drivers\include\nrfx_spim.h

 使用寄存器时,必须在.c文件中引用如下两个头文件:

#include <hal/nrf_spi.h>
#include <nrfx_spim.h>

 3.2 SPI驱动实现

1) 初始化SPI接口

2) SPI相关的接口配置

3)数据传输函数

4)芯片使能引脚

3.3 源代码

#include <zephyr/kernel.h>
#include <hal/nrf_spi.h>
#include <nrfx_spim.h>/*psels = <NRF_PSEL(SPIS_SCK, 0, 27)>,<NRF_PSEL(SPIS_MISO, 0, 28)>,<NRF_PSEL(SPIS_MOSI, 0, 26)>,<NRF_PSEL(SPIS_CSN, 0, 24)>;
*/#define  SPI_SCK_PIN      27
#define  SPI_MOSI_PIN     26
#define  SPI_MISO_PIN     28#define SPI_OBJ                 NRF_SPI2Flash_Info flash_Info_Obj;void spi_init( void )
{// 1 enable POWER  dk_set_led(CTRL_FLASH_POWER_PIN, 1);// 1 选择SPI引脚SPI_OBJ->PSEL.SCK = SPI_SCK_PIN;SPI_OBJ->PSEL.MOSI = SPI_MOSI_PIN;SPI_OBJ->PSEL.MISO = SPI_MISO_PIN;// 2. 配置 SPI 模式 (模式0)NRF_SPI0->CONFIG = (SPI_CONFIG_CPHA_Leading << SPI_CONFIG_CPHA_Pos) |(SPI_CONFIG_CPOL_ActiveHigh << SPI_CONFIG_CPOL_Pos);SPI_OBJ->FREQUENCY = NRF_SPI_FREQ_4M;   // 4 MHz// 使能SPISPI_OBJ->ENABLE = SPI_ENABLE_ENABLE_Enabled << SPI_ENABLE_ENABLE_Pos;
}u8 spi_transfer_byte( u8 data )
{SPI_OBJ->EVENTS_READY = 0;     // 清除就绪事件// 发送数据SPI_OBJ->TXD = data;// 等待发送完成while(!SPI_OBJ->EVENTS_READY);// 清除事件标志SPI_OBJ->EVENTS_READY = 0;// 读取接收到的数据(如果需要)return (u8)SPI_OBJ->RXD;       // 返回接收数据
}/**** @brief  select the flash chip * * @details  en = true, select the chip*           en = false, release the chip* * @ingroup spi flash driver */
void spi_cs_ctrl( bool en )
{if( en )dk_set_led(CTRL_FLASH_PIN, 0);   // cs is enable elsedk_set_led(CTRL_FLASH_PIN, 1);
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.pswp.cn/bicheng/82874.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Python办公】将Excel表格转json(字典)数据-可自定义key和value

目录 专栏导读背景介绍库的安装数据源准备代码1:key1列,value所有列代码1:key多列,value所有列代码3:key自选,value自选总结专栏导读 🌸 欢迎来到Python办公自动化专栏—Python处理办公问题,解放您的双手 🏳️‍🌈 博客主页:请点击——> 一晌小贪欢的博客主页求关…

DexWild:野外机器人策略的灵巧人机交互

25年5月来自 CMU 的论文“DexWild: Dexterous Human Interactions for In-the-Wild Robot Policies”。 大规模、多样化的机器人数据集已成为将灵巧操作策略泛化到新环境的一条有效途径&#xff0c;但获取此类数据集面临诸多挑战。虽然遥操作可以提供高保真度的数据集&#xf…

[蓝帽杯 2022 初赛]网站取证_2

一、找到与数据库有关系的PHP文件 打开内容如下&#xff0c;发现数据库密码是函数my_encrypt()返回的结果。 二、在文件夹encrypt中找到encrypt.php,内容如下&#xff0c;其中mcrypt已不再使用&#xff0c;所以使用php>7版本可能没有执行结果&#xff0c;需要换成较低版本…

星海掘金:校园极客的Token诗篇(蓝耘MaaS平台)——从数据尘埃到智能生命的炼金秘录

hi&#xff0c;我是云边有个稻草人 目录 前言 一、初识蓝耘元生代MaaS平台&#xff1a;零门槛体验AI服务 1.1 从零开始——平台注册与环境搭建 1.2 平台核心功能 1.3 蓝耘平台的优势在哪里&#xff1f; 二、知识库构建新篇章&#xff1a;从零碎资料到智能语义仓库的蜕变…

nt!MmMapViewInSystemCache函数分析PointerPte的填充

第一部分&#xff1a; 1: kd> kc # 00 nt!MmMapViewInSystemCache 01 nt!CcGetVacbMiss 02 nt!CcGetVirtualAddress 03 nt!CcMapData 04 Ntfs!NtfsMapStream 05 Ntfs!NtfsReadBootSector 06 Ntfs!NtfsMountVolume 07 Ntfs!NtfsCommonFileSystemControl 08 Ntfs!NtfsFspDis…

Tailwind CSS 实战,基于Kooboo构建AI对话框页面(一)

在当今数字化时代&#xff0c;AI 助手已成为网站和应用不可或缺的一部分。本文将带你一步步使用 Tailwind CSS 和 Kooboo 构建一个现代化的 AI 对话界面框。 一、选择 Kooboo平台 的核心优势 智能提示&#xff1a;在输入 class 属性时&#xff0c;会自动触发 Tailwind CSS 规则…

【JavaEE】-- 网络原理

文章目录 1. 网络发展史1.1 广域网1.2 局域网 2. 网络通信基础2.1 IP地址2.2 端口号2.3 认识协议2.4 五元组2.5 协议分层2.5.1 分层的作用2.5.2 OSI七层模型&#xff08;教科书&#xff09;2.5.3 TCP/IP五层&#xff08;或四层&#xff09;模型&#xff08;工业中常用&#xff…

UVa1384/LA3700 Interesting Yang Hui Triangle

UVa1384/LA3700 Interesting Yang Hui Triangle 题目链接题意分析AC 代码 题目链接 本题是2006年icpc亚洲区域赛上海赛区的题目 题意 给出素数P和整数N&#xff0c;求杨辉三角第N1行中不能整除P的数有几个&#xff0c; P < 1000 , N ≤ 10 9 P<1000,\;N≤10^9 P<1000…

文件系统与文件管理:从磁盘到内核的全链路解析

一、文件系统&#xff1a;磁盘的 “数据管家” 1.1 硬盘物理结构&#xff1a;数据存储的硬件基础 硬盘如同一个多层书架&#xff0c;由以下核心部件构成&#xff1a; 盘片&#xff1a;多层磁性圆盘&#xff0c;正反两面覆盖磁性涂层&#xff0c;用于存储二进制数据&#xff…

HTML5 Canvas 星空战机游戏开发全解析

HTML5 Canvas 星空战机游戏开发全解析 一、游戏介绍 这是一款基于HTML5 Canvas开发的2D射击游戏&#xff0c;具有以下特色功能&#xff1a; &#x1f680; 纯代码绘制的星空动态背景✈️ 三种不同特性的敌人类型&#x1f3ae; 键盘控制的玩家战机&#x1f4ca; 完整的分数统…

Telegram平台分发其聊天机器人Grok

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗&#xff1f;订阅我们的简报&#xff0c;深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同&#xff0c;从行业内部的深度分析和实用指南中受益。不要错过这个机会&#xff0c;成为AI领…

【GlobalMapper精品教程】095:如何获取无人机照片的拍摄方位角

文章目录 一、加载无人机照片二、计算方位角三、Globalmapper符号化显示方向四、arcgis符号化显示方向一、加载无人机照片 打开软件,加载无人机照片,在GLobalmapperV26中文版中,默认显示如下的航线信息。 关于航线的起止问题,可以直接从照片名称来确定。 二、计算方位角 …

SpringBoot使用ffmpeg实现视频压缩

ffmpeg简介 FFmpeg 是一个开源的跨平台多媒体处理工具集&#xff0c;用于录制、转换、编辑和流式传输音频和视频。它功能强大&#xff0c;支持几乎所有常见的音视频格式&#xff0c;是多媒体处理领域的核心工具之一。 官方文档&#xff1a;https://ffmpeg.org/documentation.h…

OpenCv高阶(十九)——dlib关键点定位

文章目录 一、什么是人脸关键点定位&#xff1f;二、关键点模型的下载及关键信息的理解三、dlib关键点定位的简单实现&#xff08;1&#xff09;导入必要的库&#xff08;2&#xff09;从指定路径读取图像文件&#xff08;3&#xff09;创建dlib的正面人脸检测器对象&#xff0…

人工智能100问☞第36问:什么是BERT?

目录 一、通俗解释 二、专业解析 三、权威参考 BERT是基于Transformer Encoder的双向语言预训练模型,具备强大的语义理解能力,是现代自然语言处理的重要基石。它是一套让机器像人一样“前后一起看”的语言理解技术,它让AI不光“读得快”,还“读得懂”。现在很多搜索引擎…

Chrome/ Edge 浏览器弹出窗口隐藏菜单地址栏

Chrome 利用快捷方式&#xff0c;打开一个无地址栏的浏览器窗口&#xff0c;以百度为例 创建浏览器快捷方式&#xff0c;在目标栏里 添加 -apphttps://www.baidu.com 点击【应用】&#xff0c;【确定】按钮保存生效。后面通过空上快捷方式打开的浏览器没有地址栏。 Edge浏览…

计算机网络常见体系结构、分层必要性、分层设计思想以及专用术语介绍

计算机网络体系结构 从本此开始&#xff0c;我们就要开始介绍有关计算机网络体系结构的知识了。内容包括&#xff1a; 常见的计算机网络体系结构 计算机网络体系结构分层的必要性 计算机网络体系结构的设计思想 举例说明及专用术语 计算机网络体系结构是计算机网络课程中…

【C++】“多态”特性

文章目录 一、多态的概念二、多态的定义实现1. 多态的构成条件1.1 虚函数1.2 虚函数的重写 2. 多态的调用3. 虚函数重写的其他问题3.1 协变3.2 析构函数的重写 三、override和final关键字四、重载/重写/隐藏的对比五、纯虚函数和抽象类六、多态的原理 C的三大主要特性&#xff…

2025.5.27学习日记 linux三剑客 sed与正则表达式

sed是Stream Editor(字符流编辑器)的缩写,简称流编辑器。 sed是操作、过滤和转换文本内容的强大工具。 常用功能包括结合正则表达式对文件实现快速增删改查 , 其中查询的功能中最常用的两大功能是过 滤 ( 过滤指定字符串)、取行(取出指定行)。 注意sed和awk使用单引号,双引号…

文科小白学习Linux系统之安全管理

目录 前言 一、SELinux安全上下文 1、SELinux 简介 2、基础操作命令 1. 查看SELinux状态 2. 切换工作模式 3、安全上下文&#xff08;Security Context&#xff09; 1. 查看上下文 2. 修改上下文 chcon命令 semanage 命令 4、SELinux布尔值&#xff08;Booleans&am…