s5pv210學習之一步步點亮LED總結

来源:http://www.cnblogs.com/ldhbetter/archive/2016/05/31/5545605.html
-Advertisement-
Play Games

當我們想操控一個硬體的時候,我們有必要先去瞭解這個硬體的一些物理特性,比如如何點亮LED,那麼我們首先就得瞭解LED的一些特性,如下: LED本身有兩個接線點,一個是LED的負極,一個是LED的正極。LED這個硬體本身存在的作用就是亮或者不亮,而我們想要LED亮或者不亮,那就可以通過對LED的正負極 ...


 

如何一步步點亮LED

 

註:實驗是基於s5pv210的板子,這篇筆記參考自《朱老師物聯網大講堂》朱老師隨堂筆記

文中提到的手冊下載鏈接:(https://yunpan.cn/OcSz7Yh35ISJK7  訪問密碼 6665;https://yunpan.cn/OcSz7SzsfS7a6p  訪問密碼 180f)

  想要點亮LED,首先就得知道LED為什麼會被點亮。那麼就先來瞭解一下LED的一些物理特性:LED本身有2個接線點,一個是LED的正極,一個是LED的負極。LED這個硬體的功能就是點亮或者不亮,物理上想要點亮一顆LED只需要給他的正負極上加正電壓即可,要熄滅一顆LED只需要去掉電壓即可。

  那麼現在開始一步步去達到點亮LED的目的。

  想要點亮板子上的LED等,那麼就需要去查閱硬體手冊(X210BV3),找到LED所對應的原理圖如下:

 

 

  通過查找到的內容我們可以得到的信息如下:

    D26是電源指示燈,因為一端接5V電壓,一端接地,只要一上電,這顆LED就會亮;

    其餘四顆LED的正極是確定的,所以如果我們想要這四顆LED亮,我們能做的就只能在負極上做文章,讓正負極之間形成電壓差,從而點亮,那麼怎麼去控制負極的電壓,後面會一步步到那裡去,所以耐心的往後看

    其餘的四顆LED可以得到他們負極分別所對應的引腳號是多少:

      D22 -> GPJ0_3

      D23 -> GPJ0_4

      D24 -> GPJ0_5

      D25 -> PWMTOUT1(GPD0_1,怎麼得到的這個引腳號呢,通過PWMTOUT1這個名字去核心板的手冊<x210cv3.pdf>查找所對應的引腳)

 

    當進行到這一步,你可能會有一些疑問,為什麼要去找每顆LED對應的引腳號呢?查找到對應的引腳號又有什麼用呢?

    那麼針對這些個問題,我們需要在瞭解了下麵的知識後才能知道為什麼?

    1.我們是想通過寫程式去控制LED亮或者不亮,那麼我們為什麼可以通過程式去控制硬體?

      <1>編寫程式去控制硬體的關鍵就是寄存器

      <2>那麼什麼是寄存器?

      寄存器分為通用寄存器和特殊功能寄存器,我在這裡講的寄存器是特殊功能寄存器(SFRspecial function register

        *寄存器屬於CPU外設的硬體組成部分

        *CPU可以像訪問記憶體一樣訪問寄存器

        *寄存器是CPU的硬體設計者制定的,目的是留作外設被編程式控制制的“活動開關”

        *正如彙編指令集是CPU的編程介面API一樣,寄存器是外設硬體的軟體編程介面API。使用軟體編程式控制制某一硬體,其實就是編程讀寫該硬體的寄存器。

 

  關於寄存器就說到這裡,那麼接下來我想描述的就是與寄存器有關一個內部外設--GPIO(general purpose input/output):通用輸入輸出。在這裡,我們可以把GPIO理解成晶元上的引腳,當然,晶元上有很多引腳,不是所有的引腳都是GPIO,只有一部分是。作為GPIO的這類引腳,他的特點就是可以通過編程去控制它的工作模式,也可以編程式控制制它的電壓高低

 

  通過之前的分析我們知道,我們設計電路時就把LED接在了一個GPIO上,這樣我們就可以通過編程式控制制GPIO的模式和輸入輸出值來操控LED亮還是滅;如果你當時設計電路時把LED接在非GPIO上那我們就不可能通過編程去控制了。

  所以瞭解到了這裡,應該就明白我們為什麼要去查找每顆LED所對應的引腳號了。因為LED的正極的電壓是3.3V(這個可以通過手冊知道),而LED的負極是接在GPIO上的,所以我們想要點亮LED,我們就得去控制GPIO的工作模式輸出,並且輸出一個低電壓,從而讓正負極形成電壓差,LED就被點亮,而我們想要去控制GPIO的工作模式和輸出電壓的高低,那就需要去通過寄存器,也就 是特殊功能寄存器,通過對寄存器的值的配置從而達到對GPIO的設定。

   那麼我們既然知道了想要控制LED,由於LED的負極接在GPIO上,是輸入還是輸出,是高電壓還是低電壓是GPIO說了算,所以我們需要去控制GPIO,而想要控制GPIO,又需要通過寄存器去配置寄存器中的相關值,從而達到對GPIO的控制,達到對LED的控制。

   所以到此,我們需要做的就是去修改寄存器當中的值,那麼怎麼去修改寄存器當中的值?這肯定不能說想怎麼改就這麼改,得去查數據手冊,因為這些都是人家設計者在設計時就確定好了的,所以我們需要去查數據手冊作為參考,按設計者提供的信息去做相應的修改,才能達到最終想要的結果。

現在開始查閱數據手冊(S5PV210_UM_REV1.1.pdf  

  打開數據手冊,找到section 02_system下的2 GENERAL PURPOSE INPUT/ OUTPUT下的2.2.20  PORT GROUP GPJ0 CONTROL REGISTER 。因為我們接的引腳是GPJ0的是345.(當然還有一個接GPD0的就不說了,都是一樣的原理和查法)。所以就得找到GPJ0所對應的寄存器,我們通過目錄找到關於GPJ0對應寄存器的信息地方,我們可以看到

 

 

 

 

  在這裡我只截取了GPJ0CONGPJ0DAT,的相關內容,因為點亮LED只需要這兩個寄存器就可以實現,其他的暫時沒有去瞭解

查閱數據手冊可知,GPJ0相關的寄存器有以下:

GPJ0CON, GPJ0 controlGPJ0控制寄存器,用來配置各引腳的工作模式

GPJ0DAT, (GPJ0 data)當引腳配置為input/output模式時,寄存器的相應位和引腳的電平高低相對應。

GPJ0PUD, pull up down)控制引腳內部弱上拉、下拉

GPJ0DRV, driver)配置GPIO引腳的驅動能力

GPJ0CONPDN,(記得是低功耗模式下的控制寄存器)

GPJ0PUDPDN  (記得是低功耗模式下的上下拉寄存器)

註:在驅動LED點亮時,應該將GPIO配置為output模式。

 

  實際上真正操控LED的硬體,主要的有:GPJ0CON, GPJ0DAT 這麼2個。

通過這樣查找過後,我提取出這樣一些需要的信息:

***GPJ0CON的地址:Address = 0xE0200240(因為s5pv210I/O與記憶體統一編址,我想操作寄存器可以像訪問地址一樣通過地址去訪問寄存器,去讀寫)

0001 = intput(如果想要讓對應的引腳為輸出模式,就需要把對應的引腳的位配置成 0001)所以我們編程式,需要把GPJ0_3,GPJ0_4,GPJ0_5對應的寄存器的對應位設置成0001,其他的位就不用管。

***關於GPJ0DAT寄存器我們可以得到的信息是:

GPJ0DAT,的地址:Address = 0xE0200240;【When the port is configured as input port, the corresponding bit is the pin state. When the port is configured as output port,the pin state is the same as the corresponding bit.When the port is configured as functional pin, the undefined value will be read.(翻 譯:把埠作為輸入埠配置時,對應的比特為引腳狀態,把埠作為輸出埠配置時,引腳狀態和對應的比特相同,埠作為功能型引腳配置時,可讀出未定義值。)】

這段話是什麼意思呢,意思就是如果想要讓GPJ0_3的引腳輸出高電壓,那麼GPJ0DAT對應的比特位(有07位)的bit 3就要配置為1.如果想要讓GPJ0_3的引腳輸出低電壓,那麼GPJ0DAT對應的比特位(有07位)的bit 3就要配置為0.   GPJ0DAT中的07八個比特位分別對應GPJ0CON中的07個埠。

 

當瞭解完這些過後,我就可以真正的開始寫程式去實現點亮LED等了

 

_start:

//首先需要把對應的埠配置為輸出模式,所以我們需要把bit12bit23 配置0001 //0001 0001

ldr r0, =0x11111111 //r0寫入一個值,這個值的作用是把相應的位置1

ldr r1, = 0xE0200240 //把寄存器地址寫入r0中

str r0 ,[r1] //把GPJ0_3GPJ0_4GPJ0_5配置成輸出模式

 

//當配置好引腳的模式後,接下來需要做的就是通過GPJ0DAT寄存器讓引腳輸出低 //電壓

ldr r0, =(1 << 3) | (1<<4) | (1<<5) //r0寫入一個值,這個值的作用是把相應的位置1

ldr r1, = 0xE0200244 //把寄存器地址寫入r0中

str r0 ,[r1]

 

b . //最後寫的跳轉指令是個死迴圈,為了防止cpu跑飛

 

當這個程式經過一系列的編譯鏈接後,最後會得到一個bin文件,將這個bin文件通過usb啟動,有dnw軟體將這個文件下載到開發板里,當cpu工作的時候,就會讀取代碼,最終會看到LED被成功點亮


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 1、編寫目的 使用統一的命名和編碼規範,使資料庫命名及編碼風格標準化,以便於閱讀、理解和繼承。 2、適用範圍 本規範適用於公司範圍內所有以ORACLE作為後臺資料庫的應用系統和項目開發工作。 3、對象命名規範 3.1 資料庫和SID 資料庫名定義為系統名+模塊名 ★ 全局資料庫名和常式SID 名要求 ...
  • 前面三篇通過CPU、記憶體、磁碟三巨頭,講述瞭如何透過現在看本質,怎樣定位伺服器三巨頭反映出的問題。為了方便閱讀給出鏈接: Expert 診斷優化系列 你的CPU高麽? Expert 診斷優化系列 記憶體不夠用麽? Expert 診斷優化系列 冤枉磁碟了 通過三篇文章的基本介紹,可以看出系統的語句如果不 ...
  • 使用 mysqladmin 創建資料庫 使用普通用戶,你可能需要特定的許可權來創建或者刪除 MySQL 資料庫。 所以我們這邊使用root用戶登錄,root用戶擁有最高許可權,可以使用 mysql mysqladmin 命令來創建資料庫。 實例 以下命令簡單的演示了創建資料庫的過程,數據名為 TUTOR ...
  • db.集合名稱.update({query},{update},upsert, multi})query:過濾條件update:修改內容upsert:如果不存在查詢條件查出的記錄,是否插入一條數據,預設是falsemulti:是否只修改查詢條件查出的第一條記錄,預設是false 把整條數據都修改了, ...
  • 訪問FTP站點下載文件,提示“當前的安全設置不允許從該位置下載文件”的解決方案: ...
  • 最近用linux在玩Tomcat,啟動的時候總是會報錯(8080/8009/8005) 於是整理了一下網上零亂的查看PID和埠的命令,以備記錄。 1.由埠號查詢PID號 首先myeclipse報錯的時候會提示:“8009埠被占用”,那麼你不得不依據此埠去查看該埠下運行的哪些進程 使用命令來 ...
  • 作為收購 NeXT 公司的結果,蘋果公司獲得了 NeXTSTEP 架構中的 Mach 和 Objective-C 等設計。儘管 NeXTSTEP 本身已經不再發展了,但是其中的組件在 OS X 中獲得了新生。事實上,可以將 OS X 看成是 Mac OS Classic 和NeXTSTEP 的融合, ...
  • 操作系統:CentOS6.6_32位 控制腳本目錄/etc/rc.d,該目錄下存在各個運行級別的腳本文件,執行ls /etc/rc.d,顯示結果為:init.d rc rc0.d rc1.d rc2.d rc3.d rc4.d rc5.d rc6.d rc.local rc.sysinit。 /et ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...