1. 程式人生 > >一步步點亮LED3_從零開始手寫彙編點亮LED

一步步點亮LED3_從零開始手寫彙編點亮LED

《朱老師物聯網大講堂》學習筆記

結合上節內容可知

GPJ0埠一共有8個引腳,分別是GPJ0_0~GPJ0_7

這次我們用到的是GPJ0_3,GPJ0_4,GPJ0_5

結合物理特性分析,在這裡LED,低電平亮/高電平滅

DataSheet中像GPJ0CON[3]這樣的名字不能直接在程式中用

IO與記憶體統一編址,CPU訪問暫存器和訪問記憶體是一樣的

2.2.20.1 Port Group GPJ0 Control Register (GPJ0CON, R/W, Address = 0xE020_0240)
2.2.20.2 Port Group GPJ0 Control Register (GPJ0DAT, R/W, Address = 0xE020_0244)

GPJ0CON(0xE020_0240)
GPJ0DAT(0xE020_0244)

兩個地址相差正好4個位元組(Byte),也就是32位(bit),正好

接下來我們需要準備東西

Makefile

mkv210_image.c

write2sd

start.S

其中start.S是我們這次要著手去寫的

_start:

ldr r0, =0x11111111

把0x11111111寫入0xE0200240

需要說明一下的是,ldr既是指令,也是偽指令,

這裡從=0x11111111可以看出是偽指令,

因為需要編譯器來判斷是合法還是非法立即數

一般都用ldr偽指令,暫存器從r0開始到r7開始用

如果要用指令,就應該這樣寫#0x11111111,

需要我們人為注意的是,這個數字必須是合法立即數

ldr r1, =0xE0200240

str r0, [r1]

這裡我居然弄反資料傳輸的方向了,

實際上是把r0中的數寫入r1中數為地址的記憶體中去,

還有這是暫存器間接定址

ldr r0, =0x0

ldr r1, =0xE020_0244

把0x0寫入0xE0200244

這個0x0實際上0x00000000,換算成二進位制就是32個0,

聯絡想下下面關於32的解釋。

str r0, [r1]

GPJ0DAT這個暫存器從資料手冊中檢視,只看到0~7位的定義,

實際上這個暫存器和GPJ0CON一樣也有32位,但是隻有0~7位是有效的,

高8~31位是無效的,

也就是說暫存器理論上是32位的,實際上可能沒有這麼多

flag:

b flag

在這裡為什麼要寫一個死迴圈?

裸機程式是直接執行在CPU上的,

CPU會逐行執行裸機程式,

直到CPU斷電關機,

如果這裡沒有指令,

而所有的程式碼又都執行完了,

它就會跑飛,

跑飛以後,

就是未定義的

下面看看make過程,更能幫你理解makefile的編寫

[email protected]:~/windows_share/1.leds_s# make
arm-linux-gcc -o start.o start.S -c
arm-linux-ld -Ttext 0x0 -o led.elf start.o
arm-linux-ld: warning: cannot find entry symbol _start; defaulting to 00000000
arm-linux-objcopy -O binary led.elf led.bin
arm-linux-objdump -D led.elf > led_elf.dis
gcc mkv210_image.c -o mkx210
./mkx210 led.bin 210.bin

相關推薦

步步LED3_開始彙編LED

《朱老師物聯網大講堂》學習筆記 結合上節內容可知 GPJ0埠一共有8個引腳,分別是GPJ0_0~GPJ0_7 這次我們用到的是GPJ0_3,GPJ0_4,GPJ0_5 結合物理特性分析,在這裡LED,低電平亮/高電平滅 DataSheet中像GPJ0CON[3]這

開始 spring ioc 框架,深入學習 spring 原始碼

IoC Ioc 是一款 spring ioc 核心功能簡化實現版本,便於學習和理解原理。 創作目的 使用 spring 很長時間,對於 spring 使用非常頻繁,實際上對於原始碼一直沒有靜下心來學習過。 但是 spring 原始碼存在一個問題,那就是過於抽象,導致學習起來成本上升。 所以本專案由漸入深,只實

Python+Flask+Gunicorn 專案實戰() 開始一個Markdown解析器 —— 初體驗

      (一)前言 在開始學習之前,你需要確保你對Python, JavaScript, HTML, Markdown語法有非常基礎的瞭解。專案的原始碼你可以在 https://github.com/zhu-y/markdown-toolkit 找到,最後的

開始一起學習SLAM | 雲平滑法線估計

參考 需要 後臺 不常用 為什麽 分表 覆蓋 了吧 完全 點擊公眾號“計算機視覺life”關註,置頂星標更快接收消息! 本文編程練習框架及數據獲取方法見文末獲取方式 菜單欄點擊“知識星球”查看「從零開始學習SLAM」一起學習交流 點雲濾波後為什麽還需要平滑? 小白:師兄

開始仿一個抖音App——音視訊開篇

本文於掘金——何時夕,搬運轉載請註明出處,否則將追究版權責任。交流qq群:859640274 GitHub地址 大家好,距離上次本專題發文已經有五個星期了,中間發了兩篇非本專題的文章,可能很多人都以為我要棄坑了。但是並不是這回事,主要是工作有點忙,而且我在音視訊方面其實也有許多東西需要學習和整理。那

開始仿一個抖音App——基於FFmpeg的極簡視訊播放器

本文發於掘金——何時夕,搬運轉載請註明出處,否則將追究版權責任。交流qq群:859640274 GitHub地址 好久不見,最近加班比較多所以第二篇音視訊方面的文章 delay 了一週,大家多包涵哈。本文預計閱讀時間二十分鐘。 本文分為以下章節,讀者可以按需閱讀 1.FFmpeg原始碼

開始仿一個抖音App——跨平臺視訊編輯SDK專案搭建

本文發於掘金——何時夕,搬運轉載請註明出處,否則將追究版權責任。交流qq群:859640274 GitHub地址 不知不覺已經到了2019年,本系列的文章也更新到了8篇。很慶幸筆者能堅持下來,從我司的程式碼中學習到了很多東西。當然更慶幸的是收穫了眾多讀者的鼓勵和支援。從本篇文章開始,我們將接觸短視訊

開始HTTP伺服器(七)muduo+tinyhttpd

(一)前言 對muduo內嵌的HttpServer進行了稍微的改進,融入了TinyHttpd中對CGI部分內容。 (二)程式碼 (三)CGI 簡單的理解:如果客戶請求的是靜態資料,則web server直接將資料響應給客戶端,如果是動

0 開始一個 Spring MVC 框架,向高手進階

Spring框架對於Java後端程式設計師來說再熟悉不過了,以前只知道它用的反射實現的,但瞭解之後才知道有很多巧妙的設計在裡面。如果不看Spring的原始碼,你將會失去一次和大師學習的機會:它的程式碼規範,設計思想很值得學習。 我們程式設計師大部分人都是野路子,不懂什麼

STM32F103+RTT開始)——LED

最近心血來潮,打算重新撿起老本行,結果發現很多都忘記了。乾脆重新開始學習,並做個從零開始的筆記了。 STM32系列MCU STM32系列晶片包括F0/F1/F2/F3/F4/F7/L0/L1/L4/H7等系列晶片晶片。不同系列的晶片適用於不同的應用場景。

不使用 vue-cli 與 vue 模版,使用 Vue2.x + webpack4.x 開始步步搭建專案框架

說明 這是我根據慕課網上的一個課程 Vue+Webpack打造todo應用 過程一步步搭下來的框架,去掉了業務相關的邏輯。 專案最終的效果包括了引入vue框架;使用CSS前處理器;使用babel;引用圖片等靜態資源;區分開發環境與生成環境,並做相應優化等。基本接近真正做專案時候的配置

現代前端開發路線圖:開始步步成為前端工程師

編者按:很多人都想學程式設計。但是苦於沒有具體的步驟和指導。比如想找份前端開發的工作,卻不知道應該先學習什麼再學習什麼,也不知道該選擇什麼樣的工具。因為經常被人問到類似的問題,全棧開發者Kamran Ahmed索性在github上制訂了一份現代前端開發的路線圖,並且用一篇文章

開始步步LSTM

歡迎轉載,但請務必註明原文出處及作者資訊。 @author: huangyongye  @creat_date: 2017-03-09  前言: 根據我本人學習 TensorFlow 實現 LSTM 的經歷,發現網上雖然也有不少教程,其中很多都是根據官方給出的例子,用

教程 | 步步開始:使用PyCharm和SSH搭建遠端TensorFlow開發環境

作者:Erik Hallström 機器之心編譯 參與:機器之心編輯部 一般而言,大型的神經網路對硬體能力有著較高的需求——往往需要強勁的 GPU 來加速計算。但是你也許還是想拿著一臺筆記本坐在咖啡店裡安靜地寫 TensorFlow 程式碼,同時還能享受每秒數萬億次

開始學Xamarin.Forms() 概述

erl 系統 mod 重寫 fwe 依賴 模式 sil c# Xamarin 讀 “?z?m?rin”,是一個基於開源項目mono的可以使用C#開發的收費的跨平臺(iOS、Android、Windows Phone、Mac)解決方式。

【轉】【修真院“善良”系列之十八】WEB程序員開始到就業的全資料V1.0——只看這篇就夠了!

absolute feed 自己 session rem 好的 ans 一個 css樣式 這是兩年以來,修真院收集整理的學習資料順序。以CSS15個任務,JS15個任務為基礎,分別依據要完成任務的不同的技能點,我們整理出來了這麽一篇在學習的時候需要看到的資料。這是Versi

開始學習OpenCL開發()架構

處理器 多媒體 c++ stl context 實驗 通用 必看 是你 同時存在 1 異構計算、GPGPU與OpenCL OpenCL是當前一個通用的由很多公司和組織共同發起的多CPU\GPU\其他芯片 異構計算(heterogeneous)的標準,它是跨平臺的。旨在充

開始學習jQuery () 開天辟地入門篇

完全 不同 喝茶 圖靈 lac 格式化 元素 script 引入 從零開始學習jQuery (一) 開天辟地入門篇 本系列文章導航 從零開始學習jQuery (一) 開天辟地入門篇 從零開始學習jQuery (二) 萬能的選擇器 從零開始學習jQuery (

開始玩轉JMX()——簡介和Standard MBean

pos cor csdn comm art order clas post tex 從零開始玩轉JMX(一)——簡介和Standard MBeanJMX超詳細解讀 參考資料JMX整理JMX簡介http://blog.csdn.net/DryKillLogic/articl

開始學Linux系統(

系統啟動 linux 自定義 管理 如果 level 技術 int 沒有 Linux系統:分時多用戶多任務的操作系統; Linux系統引導流程: inittab配置文件中: 定義了linux系統的運行的7個級別:從0~6 0、6:分別代表關機和重啟,不建議設置為默認的