s5pv210學習之如何一步步點亮LED回顧

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

如何一步步點亮LED 註:實驗是基於s5pv210的板子,這篇筆記參考自《朱老師物聯網大講堂》朱老師隨堂筆記 文中提到的手冊下載鏈接:(https://yunpan.cn/OcSz7Yh35ISJK7 訪問密碼 6665;https://yunpan.cn/OcSz7SzsfS7a6p 訪問密碼 1 ...


 

如何一步步點亮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
更多相關文章
  • 分區里的inode號是0號和1號的block 我相信大家在使用Linux的時候都遇到過誤刪文件系統數據的情況,不管是自己誤刪還是幫人家恢復誤刪 現在用的比較多的恢復工具大概是ext3grep 、extundelete 這兩個 當然本文不是要說這兩個工具的使用方法,而是介紹每個分區里的inode號為0 ...
  • ◊make是什麼? make是一個命令工具,是一個解釋makefile中指令的命令工具。它可以簡化編譯過程裡面所下達的指令,當執行 make 時,make 會在當前的目錄下搜尋 Makefile (or makefile) 這個文本文件,執行對應的操作。make 會自動的判別原始碼是否經過變動了,而 ...
  • 出現這個問題的原因:你可能是上代理了。 解決方案:在IE里 》屬性 》連接 》區域網設置 》去掉前面的勾。確定。 ...
  • 原因:這是由於管理工具的服務中的windows防火牆被禁用了。 解決方案:在window7中點擊控制面板,然後點擊管理工具,在點服務,然後找到windows firewall 然後將其改為自動就就可以了。 ...
  • 本文是Linux Shell系列教程的第(六)篇,更多shell教程請看:Linux Shell系列教程 Shell在編程方面非常強大,其數組功能也非常的完善,今天就為大家介紹下Shell數組的用法。 Shell支持一維數組(不支持多維數組),並且沒有限定數組的大小。 類似與C語言,數組元素的下標由 ...
  • 之前安裝了一個rehat6的linux系統,把交叉編譯搭建給忽視了,結果在編譯uboot的時候出現問題,顯示找不到arm-linux-gcc。於是自己來搭建交 叉編譯環境。出現好多錯。先是解壓時沒在後邊加 -C/,後是直接自己創建了個目錄,把解壓後的bin目錄複製到自己創建的目錄。還是出現問題。但 ...
  • 哈哈,我又回來了,簡單的重新裝了一邊虛擬機,又把vim配置了一遍,這回有信心把youcomplete的安裝方法貼出來了,先給個權威的鏈接,然後給出具體步驟,保證沒問題可以安裝成功 http://www.centoscn.com/image-text/install/2016/0424/7115.ht ...
  • 我的機子炸了,然後我就得重新裝我的虛擬機,再然後我就想去弄好我的共用文件夾安裝vmtools,安裝的時候出現了一個問題,我忘記以前是怎麼解決的,又困擾了我好久 Searching for a valid kernel header path... The path "" is not a valid ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...