初入ARM,點燈,按鍵與中斷相結合

與MCU不同,ARM屬于功能更復雜,更強大的SOC,是可以移植操作系統的,但是在最開始學習arm,需要了解arm的運行方式,所以現在使用的是裸機開發。arm系統有多種工作模式,分別是User,IRQ,FIQ,Supervisor,Abort,Undef? 和 System。一般情況下arm會工作在User模式,但是當有異常發生時,pc指針會指向異常向量表中對應的異常向量,該異常向量保存的是異常處理函數入口,然后就會進入異常處理函數。

而對這些異常向量進行初始化,對其對應的cpsr,sp進行初始化就是需要匯編實現的功能,將這些寫好之后,在匯編中使用b指令進行跳轉,跳轉到c文件的主函數開始正常運行。

而這些異常向量最常用到的就是中斷異常,我選擇的是使用IRQ模式執行中斷處理函數,當產生中斷的時候就會跳轉到異常向量的位置,然后會跳轉到中斷處理函數,該中斷處理函數是所有的中斷都會跳轉過來的函數,所以在該函數中,需要對跳轉的是哪一個中斷進行判斷,一般使用的是INTOFFSET,中斷偏移量進行判斷,INTOFFSET值不同就代表了不同的中斷,然后根據對應的中斷去處理相應的函數,最終在處理完之后要記得源掛起寄存器和中斷掛起寄存器的置起位都清掉,不然就會反復執行該中斷。

因為我要使用的是按鍵,使用按鍵需要配置端口 G 控制寄存器(GPGCON,??GPGDAT,?GPGUP)

然后配置GPGCON存器中的GPG0,GPG3等與按鍵相關的這六個GPG,讓他們的模式為EINT模式,就可以通過按鍵觸發對應的外部中斷了。然后通過配置EXTINTn(外部中斷控制寄存器 n),就可以選擇對應的觸發方式,按鍵按下是高電平向低電平的跳變,所以這里選擇的是下降沿觸發方式,然后需要配置EINTMASK(外部中斷屏蔽寄存器),通過配置該寄存器的對應位來允許中 斷,這些都是對該外部中斷的初始化,讓其按下按鍵會進入相應的終端,最后在中斷處理函數中檢查EINTPEND(外部中斷掛起寄存器)中被置起的位,就可以得知是外部中斷是EINT8_23中的哪一個中斷被相應了,然后就讓一全局變量的鍵值改變,最后使用led燈對該鍵值進行顯示。? ? ? ? ? ?

但是在使用led之前,也同樣需要查手冊,對led點亮相關的GPB寄存器進行配置,寫好初始化函數,還要寫好led點亮的函數,最后才能實現按鍵控制led的功能。? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?

總而言之,與之前學習的51相比,要實現一個簡單的功能,也需要查手冊,然后需要配置大量的寄存器才能實現對應的功能,但是寄存器這么多也才能實現更復雜的功能,所以還需繼續加油!

下面是我實現該功能所需要配置的寄存器的手冊內容

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/73982.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/73982.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/73982.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Moonlight-16B-A3B: 變革性的高效大語言模型,憑借Muon優化器打破訓練效率極限

近日,由Moonshot AI團隊推出的Moonlight-16B-A3B模型,再次在AI領域引發了廣泛關注。這款全新的Mixture-of-Experts (MoE)架構的大型語言模型,憑借其創新的訓練優化技術,特別是Muon優化器的使用,成功突破了訓練效率的極…

風尚云網|前端|JavaScript性能優化實戰:從瓶頸定位到高效執行

JavaScript性能優化實戰:從瓶頸定位到高效執行 JavaScript性能優化 在移動優先和Web應用日益復雜化的今天,JavaScript性能優化已成為前端工程師的必修課。本文將通過真實場景案例,深入解析從性能瓶頸定位到具體優化策略的完整閉環&#xff…

強大的AI網站推薦(第一集)—— Devv AI

網站:Devv AI 號稱:最懂程序員的新一代 AI 搜索引擎 博主評價:我的大學所有的代碼都是使用它,極大地提升了我的學習和開發效率。 推薦指數:🌟🌟🌟🌟🌟&#x…

使用 .NET Core 的本地 DeepSeek-R1

使用 .NET 在我的 MacBook Pro 上與當地 LLM 聊天的歷程。 如今,只需使用瀏覽器即可輕松使用 ChatGPT 或其他 genAI。作為開發人員,我們可以通過直接集成 OpenAI API 等來做更復雜的事情。如果我們想在自己的機器上運行 LLM,只是為了找人聊天…

將 VOC 格式 XML 轉換為 YOLO 格式 TXT

目錄 1. 導入必要的模塊 2. 定義類別名稱 3. 設置文件路徑 完整代碼 1. 導入必要的模塊 import os import xml.etree.ElementTree as ET os:用于文件和目錄操作,例如創建目錄、遍歷文件等。 xml.etree.ElementTree:用于解析XML文件&#…

Visual Studio調試的技巧

1.什么是bug? bug:程序漏洞,也就是程序中存在的問題。 2.什么是調試? 當我們發現了程序中的問題后就會解決問題,前提是要找到問題,那么進行調試(debug)以此來找到問題。 3.debug…

C++ 各種map對比

文章目錄 特點比較1. std::map2. std::unordered_map3. std::multimap4. std::unordered_multimap5. hash_map(SGI STL 擴展) C 示例代碼代碼解釋 特點比較 1. std::map 底層實現:基于紅黑樹(一種自平衡的二叉搜索樹&#xff09…

fontTools工具的使用介紹

前言 python工具庫fontTools,我是用來壓縮前端字體的,優化前端請求速度的;使用的過程中,遇到了不少的坑,把這個過程記錄下來,防止再犯。 安裝 # fontTools 4.56.0 pip install fontTools提取子字體集 方…

利用大語言模型生成的合成數據訓練YOLOv12:提升商業果園蘋果檢測的精度與效率

之前小編分享過關于《YOLO11-CBAM集成:提升商業蘋果園樹干與樹枝分割的精準度》,改進YOLO11算法后,進行蘋果樹的實例分割。本期文章我們將分享關于最新的YOLO12算法改進的蘋果目標檢測。 論文題目:Improved YOLOv12 with LLM-Gen…

設計模式 二、創建型設計模式

GoF是 “Gang of Four”(四人幫)的簡稱,它們是指4位著名的計算機科學家:Erich Gamma、Richard Helm、Ralph Johnson 和 John Vlissides。他們合作編寫了一本非常著名的關于設計模式的書籍《Design Patterns: Elements of Reusable…

redis,tar.gz安裝后,接入systemctl報錯解決

1. WARNING Memory overcommit must be enabled! 這種報錯,有兩種解決方法 1.1 修改系統參數 編輯 /etc/sysctl.conf 文件,設置 overcommit_memory 為 1 vm.overcommit_memory 11.2 修改redis的最大使用內存 修改配置文件 redis.conf maxmemory 1g…

Python繪圖技巧,主流繪圖庫

一、主流繪圖庫概覽 1. 核心工具對比 庫名稱特點適用場景Matplotlib基礎繪圖庫,高度可定制科學繪圖、論文圖表Seaborn基于Matplotlib,統計圖表優化數據分布、關系可視化Plotly交互式可視化,支持網頁輸出儀表盤、動態數據展示Pandas內置簡易…

網絡安全之前端學習(HTML篇)

前言:網絡安全中有一個漏洞叫xss漏洞,就是利用網頁引發彈窗,這就要求我們看得懂源碼,所以我會持續更新前端學習,可以不精通,但是一定要會,主要掌握HTML,css,js這三項技術…

Qt 多線程設計:死循環與信號槽的權衡

在開發音視頻播放器時,多線程設計是不可避免的挑戰。音頻和視頻的解碼、播放需要高效運行,同時還要與主線程或其他線程同步,例如通過信號通知播放進度。本文基于一個實際案例,分析了兩種線程設計在死循環和信號槽使用中的表現&…

knowledge-微前端(多個前端應用聚合的一個應用架構體系,每個小的應用可獨立運行,獨立開發,獨立部署上線)

1.前言 微前端,將一個大的前端應用拆分為多個小型的,獨立開發的前端應用,每一個小型的應用都可以單獨的開發,部署和運行。這種結構允許不同的團隊使用不同的技術棧來開發應用的不同部分,提高開發的效率與靈活性。 2.實…

工廠函數詳解:概念、目的與作用

一、什么是工廠函數? 工廠函數(Factory Function)是一種設計模式,其核心是通過一個函數來 創建并返回對象,而不是直接使用 new 或構造函數實例化對象。它封裝了對象的創建過程,使代碼更靈活、可維護。 二、…

旋轉位置編碼(Rotary Positional Encoding, RoPE):中文公式詳解與代碼實現

旋轉位置編碼(Rotary Positional Encoding, RoPE):中文公式詳解與代碼實現 在序列模型中,位置信息對于任務的理解至關重要。傳統的絕對和相對位置編碼各有優缺點,而RoPE作為一種創新的位置編碼方法,展現了…

C語言-指針變量和變量指針

指針 預備知識 內存地址 字節:字節是內存的容量單位,英文名Byte,1Byte8bits 地址:系統為了便于區分每一個字節面對它們的逐一進行編號(編號是唯一的),稱為內存地址,簡稱地址。int…

unityAB包(1/2)

unityAB包學習 1.AB包的導出擴展BuildAssetBundleOptions無特殊選項壓縮相關選項 2.AB包資源管理3.Resource和AssetBundle加載方式的區別4.預設體5.Unity Asset Bundle Browser 工具5為什么要勾選拷貝到StreamingAsset里面。6.AB包的加載 1.AB包的導出 首先在Project窗口&…

算法——廣度優先搜索——跨步迷宮

原題鏈接 思路:找出最短路徑,然后判斷是否存在連續三個點是橫縱坐標相等的,如果有就步數減1 但是有兩個樣例過不了 錯誤原因:在錯誤的測試案例中,最短路徑可能有多條,而我剛好選了一條比較曲折的&#x…