《嵌入式硬件(八):基于IMX6ULL的點燈操作》

一、IMX6ULL啟動代碼

.global _start_start:ldr pc, =_reset_handlerldr pc, =_undefine_handlerldr pc, =_svc_handlerldr pc, =_prefetch_abort_handlerldr pc, =_data_abort_handlerldr pc, =_reserved_handlerldr pc, =_irq_handlerldr pc, =_fiq_handler_undefine_handler:ldr pc, =_undefine_handler_svc_handler:ldr pc, =_svc_handler_prefetch_abort_handler:ldr pc, =_prefetch_abort_handler_data_abort_handler:ldr pc, =_data_abort_handler_reserved_handler:ldr pc, =_reserved_handler_irq_handler:ldr pc, =_irq_handler_fiq_handler:ldr pc, =_fiq_handler_reset_handler:mrs r0, cpsrbic r0, r0, #0x1Forr r0, r0, #0x12   //irqmsr cpsr, r0ldr sp, =0x86000000	//起始地址80000000,ram大小為512mb(20000000)	80000000~A0000000-1mrs r0, cpsrbic r0, r0, #0x1Forr r0, r0, #0x1F   //systemmsr cpsr, r0   ldr sp, =0x84000000	//給irq分配的棧指針空間

二、點燈的步驟

????????????????1)初始化時鐘

? ? ? ? ? ? ? ? 2)設置引腳功能復用(GPIO)

? ? ? ? ? ? ? ? 3)引腳電氣屬性(功率、電阻)

? ? ? ? ? ? ? ? 4)設置外設引腳的輸入輸出方向

? ? ? ? ? ? ? ? 5)設置數據寄存器拉低/拉高電平

三、初始化系統時鐘


ARM內核為了低功耗,剛開始是全部關閉(通過cg門)

把這七個寄存器全部打開,值全部設置為默認值,初始化系統時鐘

四、功能復用

??

????????設置為gpio1

五、電氣屬性

????????默認值就行,因為是輸出

???

? ? ? 六、外設引腳GDRI

? ? ? ? ? ? ? ? 設置輸入輸出

七、數據寄存器DR

?八、點燈代碼

????????1.代碼結構

bsp為各種.c.h文件,im6ull為內核文件,obj是生成文件的保存路徑,project是主函數以及啟動文件

2.bsp

? ? ? ? 1)led.c
#include "led.h"
#include "fsl_iomuxc.h"
#include  "MCIMX6Y2.h"void init_led(void)
{IOMUXC_SetPinMux(IOMUXC_GPIO1_IO03_GPIO1_IO03, 0);IOMUXC_SetPinConfig(IOMUXC_GPIO1_IO03_GPIO1_IO03, 0x10B0);GPIO1->GDIR |= (1 << 3);
}void led_on(void)
{GPIO1->DR &= ~(1 << 3);
}void led_off(void)
{GPIO1->DR |= (1 << 3);
}void led_nor(void)
{GPIO1->DR ^= (1 << 3);
}
? ? ? ? 2)led.h
#ifndef _LED_H_
#define _LED_H_extern void init_led(void);
extern void led_on(void);
extern void led_off(void);
extern void led_nor(void);#endif

3.project

? ? ? ? 1)main.c
#include "MCIMX6Y2.h"
#include "fsl_iomuxc.h"
#include "led.h"void enable_clocks(void)
{CCM->CCGR0 = 0xFFFFFFFF;CCM->CCGR1 = 0xFFFFFFFF;CCM->CCGR2 = 0xFFFFFFFF;CCM->CCGR3 = 0xFFFFFFFF;        CCM->CCGR4 = 0xFFFFFFFF;CCM->CCGR5 = 0xFFFFFFFF;CCM->CCGR6 = 0xFFFFFFFF;  
}void delay(unsigned int n)
{while(n--);
}int main(void)
{enable_clocks();init_led();while(1){led_nor();delay(0xFFFFF);}return 0;
}
? ? ? ? 2)start.S
.global _start_start:ldr pc, =_reset_handlerldr pc, =_undefine_handlerldr pc, =_svc_handlerldr pc, =_prefetch_abort_handlerldr pc, =_data_abort_handlerldr pc, =_reserved_handlerldr pc, =_irq_handlerldr pc, =_fiq_handler_undefine_handler:ldr pc, =_undefine_handler_svc_handler:ldr pc, =_svc_handler_prefetch_abort_handler:ldr pc, =_prefetch_abort_handler_data_abort_handler:ldr pc, =_data_abort_handler_reserved_handler:ldr pc, =_reserved_handler_irq_handler:ldr pc, =_irq_handler_fiq_handler:ldr pc, =_fiq_handler_reset_handler:mrs r0, cpsrbic r0, r0, #0x1Forr r0, r0, #0x12   //irqmsr cpsr, r0ldr sp, =0x80600000mrs r0, cpsrbic r0, r0, #0x1Forr r0, r0, #0x1F   //systemmsr cpsr, r0   ldr sp, =0x80400000bl _bss_clearb main_bss_clear:ldr r0, =__bss_startldr r2, =__bss_end
loop:mov r1, #0str r1, [r0]add r0, r0, #4cmp r0, r2blt loopbx lrfinished:b finished

4.Makefile

target = ledcross_compiler = arm-linux-gnueabihf-cc = $(cross_compiler)gcc
ld = $(cross_compiler)ld
objcopy = $(cross_compiler)objcopy
objdump = $(cross_compiler)objdumpincdirs = bsp imx6ull
srcdirs = bsp projectinclude = $(patsubst %, -I%, $(incdirs))cfiles = $(foreach dir, $(srcdirs), $(wildcard $(dir)/*.c))
sfiles = $(foreach dir, $(srcdirs), $(wildcard $(dir)/*.S))cfilenodir = $(notdir $(cfiles))
sfilenodir = $(notdir $(sfiles))cobjs = $(patsubst %, obj/%, $(cfilenodir:.c=.o))
sobjs = $(patsubst %, obj/%, $(sfilenodir:.S=.o))objs = $(cobjs) $(sobjs)VPATH = $(srcdirs)$(target).bin : $(objs)$(ld) -Timx6ull.lds -o$(target).elf $^$(objcopy) -O binary -S -g $(target).elf $@$(objdump) -D $(target).elf > $(target).dis$(sobjs) : obj/%.o : %.S@mkdir -p obj$(cc) -Wall -nostdlib -c $(include) -o $@ $<$(cobjs) : obj/%.o : %.c@mkdir -p obj		$(cc) -Wall -nostdlib -c $(include) -o $@ $<.PHONY : clean
clean:rm -rf $(objs) $(target).elf $(target).bin $(target).dis

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

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

相關文章

Spring Boot 調度任務在分布式環境下的坑:任務重復執行與一致性保證

前言在實際業務開發中&#xff0c;調度任務&#xff08;Scheduled Task&#xff09; 扮演著重要角色&#xff0c;例如&#xff1a;定時同步第三方數據&#xff1b;定時清理過期緩存或日志&#xff1b;定時發送消息或報告。Spring Boot 提供了非常方便的 Scheduled 注解&#xf…

剖析ReAct:當大模型學會“邊想邊做”,智能體的進化之路

你是否曾驚嘆于大語言模型&#xff08;LLM&#xff09;強大的推理能力&#xff0c;卻又對其“紙上談兵”、無法真正與世界交互而感到遺憾&#xff1f;你是否好奇&#xff0c;如何讓AI不僅能“說”&#xff0c;更能“做”&#xff0c;并且在做的過程中不斷思考和調整&#xff1f…

小型無人機傳感器仿真模型MATLAB實現方案

一、系統架構設計 無人機傳感器仿真模型需集成多物理場建模與數據融合模塊&#xff0c;典型架構包含&#xff1a; 動力學模型&#xff1a;六自由度剛體運動方程傳感器模型&#xff1a;IMU/GNSS/視覺/氣壓計數學建模數據融合層&#xff1a;卡爾曼濾波/EKF算法實現環境交互模塊&a…

hadoop集群

ssh-keygen -t rsassh-copyid 用戶名遠程服務器地址start-dfs.sh chown [選項] 新所有者[:新所屬組] 目標文件/目錄常用選項&#xff1a;-R&#xff1a;遞歸修改目錄下所有文件和子目錄的所有者&#xff08;處理目錄時常用&#xff09;-v&#xff1a;顯示修改過程的詳細信息-c&…

大模型入門實踐指南

大模型入門教程:從概念到實踐 大模型(Large Language Model, LLM)是當前人工智能領域的核心技術,其本質是通過大規模數據訓練、具備復雜語言理解與生成能力的深度學習模型。本教程將從基礎概念出發,帶你理解大模型的核心邏輯,并通過可直接跑通的代碼示例,快速上手大模型…

貓頭虎開源AI分享:一款CSV to Chat AI工具,上傳CSV文件提問,它可以即時返回統計結果和可視化圖表

貓頭虎開源AI分享&#xff1a;一款CSV to Chat AI工具&#xff0c;上傳CSV文件提問&#xff0c;它可以即時返回統計結果和可視化圖表 摘要 本文將詳細介紹一款開源工具——CSV to Chat AI&#xff0c;它允許用戶上傳CSV文件并通過自然語言提問&#xff0c;系統會即時返回統計…

洛谷P9468 [EGOI 2023] Candy / 糖果題解

[EGOI 2023] Candy / 糖果 思路 NNN 這么小基本就是瞎打的 DP 了。 設 dpi,jdp_{i,j}dpi,j? 為操作 jjj 次后前 iii 項的和最大是多少。 考慮轉移&#xff0c;我們可以枚舉 iii 并考慮將其移動到 ppp 位置&#xff0c;總共操作 kkk 次&#xff0c;那么就有 dpp,kmin?(dpp,…

AI智能體(Agent)大模型入門【3】--基于Chailit客服端實現頁面AI對話

目錄 前言 安裝chailint 創建中文語言環境 創建chailint頁面客戶端 前言 本篇章將會基chailit框架實現頁面進行AI對話。 若沒有自己的本地模型對話&#xff0c;需要查看專欄內的文章&#xff0c;或者點擊鏈接進行學習部署 AI智能體&#xff08;Agent&#xff09;大模型入…

【高并發內存池——項目】定長內存池——開胃小菜

提示&#xff1a;高并發內存池完整項目代碼&#xff0c;在主頁專欄項目中 文章目錄 提示&#xff1a;高并發內存池完整項目代碼&#xff0c;在主頁專欄項目中 先設計一個定長的內存池 一、為什么需要定長內存池&#xff1f; &#x1f3e2; 傳統內存分配的痛點 &#x1f3ed; 內…

6-獲取磁盤分區信息

觀察文件 獲取server端電腦里面存在哪些盤符 int MakeDriveInfo() { //1>A 2>B &#xff08;原本屬于軟盤的 &#xff09;3>C ... 26>Zstd::string result;for (int i 1; i < 26; i) { //讓其循環if (_chdrive(i) 0) //改變當前的驅動,_chdrive函數(c和c中)應…

每天認識一個電子器件之LED燈

LED選型核心參數一覽表參數類別關鍵參數說明 & 為什么重要基本電氣參數正向電壓 (Vf)LED正常發光時兩端的電壓降。必須匹配您的電路電壓。紅/黃光約1.8-2.2V&#xff0c;藍/綠/白光約2.8-3.6V。正向電流 (If)LED正常發光時所需的電流。決定了LED的亮度&#xff0c;必須用電…

Spring Boot 集成 Flowable 7.1.0 完整教程

一、引言 在企業級應用開發中&#xff0c;工作流管理是不可或缺的一部分。從簡單的請假審批到復雜的業務流程&#xff0c;工作流引擎能夠顯著提升系統的靈活性和可維護性。??Flowable?? 作為一個輕量級、基于 Java 的開源工作流引擎&#xff0c;完美支持 ??BPMN 2.0??…

uniapp離線打包安卓apk詳細教程,從HbuilderX新建項目到Android Studio詳細配置(一)

目錄 一、基礎離線打包&#xff0c;無引入模塊&#xff0c;無原生插件 1. HbuilderX新建項目&#xff0c;開發者后臺申請證書和離線key 2.HbuilderX生成本地包 二、Android Studio配置 1.下載離線SDK&#xff0c;解壓&#xff0c;SDK版本需要和HbuilderX 版本一致&#xf…

藍牙鼠標頻繁卡頓?一招解決 Win10/11 的 USB 省電機制干擾問題

藍牙鼠標頻繁卡頓&#xff1f;一招解決 Win10/11 的 USB 省電機制干擾問題 問題背景 在使用藍牙鼠標時&#xff0c;很多用戶會遇到以下問題&#xff1a; 鼠標移動卡頓、延遲明顯偶爾斷連&#xff0c;需重新配對尤其在筆記本合蓋或待機后恢復時更明顯 這些問題在 Windows 10/11 …

領碼方案|Spring Boot 異步請求深度剖析:從原理到 AI 驅動的吞吐量優化

摘要 本文以“領碼方案”為核心&#xff0c;深入剖析 Spring Boot 異步請求的底層原理、線程模型、三種常用實現方式&#xff08;Callable、WebAsyncTask、DeferredResult&#xff09;的運行機制與性能特征&#xff0c;并結合 AI 驅動的自適應線程池調優、云原生架構下的彈性伸…

C++基礎(13)——list類的模擬實現

目錄 一、接口函數和類總覽 二、節點結構體的實現 構造函數 三、迭代器結構體的實現 迭代器模版參數 構造函數 重載運算符 重載--運算符 重載運算符 重載*運算符 重載->運算符 四、list的模擬實現 默認成員函數 構造函數 拷貝構造函數 賦值運算符重載函數 …

從 APP 界面設計到用戶體驗優化:如何讓你的應用脫穎而出?

作為一個經驗豐富的設計師&#xff0c;在產品優化方面我踩過不少坑&#xff0c;也見過很多團隊在界面設計和用戶體驗上的誤區。APP 的外觀決定了用戶的第一印象&#xff0c;但能不能留住用戶、讓他們愿意持續使用&#xff0c;最終還是看體驗。今天就結合自己的經驗&#xff0c;…

Kafka如何配置生產者攔截器和消費者攔截器

Kafka 的生產者攔截器和消費者攔截器允許你在消息發送前后以及消息消費前后嵌入自定義邏輯&#xff0c;用于實現監控、審計、消息修改等功能。本文我們就用一個最常見的傳遞TraceId的案例來說明下這兩類攔截器如何來使用。 生產者發送攔截器 生產者攔截器需要實現 org.apache.k…

vue表單彈窗最大化無法渲染復雜組件內容

背景&#xff1a;最大化后選然后復雜組件內容丟失&#xff0c;如下拉框、圖片上傳組件修復方案&#xff1a;使用深拷貝核心代碼this.maximizeDialog {visible: true,title: 患者申請 - 最大化查看,formModel: JSON.parse(JSON.stringify(this.formModel || [])),formLogic: JS…

經典俄羅斯方塊游戲 | 安卓三模式暢玩,暫時無廣告!

大家好&#xff0c;今天想跟大家分享一款安卓版的俄羅斯方塊游戲。適合無聊的時候玩玩&#xff0c;換換腦子&#xff0c;這款游戲太經典。80、90都玩過這個游戲。之前我也給大家推薦過一些離線小游戲&#xff0c;但有些用著用著就開始出現彈窗廣告&#xff0c;這就有點煩&#…