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
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/82874.shtml
英文地址,請注明出處:http://en.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…