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
  • 示例項目結構 在 Visual Studio 中創建一個 WinForms 應用程式後,項目結構如下所示: MyWinFormsApp/ │ ├───Properties/ │ └───Settings.settings │ ├───bin/ │ ├───Debug/ │ └───Release/ ...
  • [STAThread] 特性用於需要與 COM 組件交互的應用程式,尤其是依賴單線程模型(如 Windows Forms 應用程式)的組件。在 STA 模式下,線程擁有自己的消息迴圈,這對於處理用戶界面和某些 COM 組件是必要的。 [STAThread] static void Main(stri ...
  • 在WinForm中使用全局異常捕獲處理 在WinForm應用程式中,全局異常捕獲是確保程式穩定性的關鍵。通過在Program類的Main方法中設置全局異常處理,可以有效地捕獲並處理未預見的異常,從而避免程式崩潰。 註冊全局異常事件 [STAThread] static void Main() { / ...
  • 前言 給大家推薦一款開源的 Winform 控制項庫,可以幫助我們開發更加美觀、漂亮的 WinForm 界面。 項目介紹 SunnyUI.NET 是一個基於 .NET Framework 4.0+、.NET 6、.NET 7 和 .NET 8 的 WinForm 開源控制項庫,同時也提供了工具類庫、擴展 ...
  • 說明 該文章是屬於OverallAuth2.0系列文章,每周更新一篇該系列文章(從0到1完成系統開發)。 該系統文章,我會儘量說的非常詳細,做到不管新手、老手都能看懂。 說明:OverallAuth2.0 是一個簡單、易懂、功能強大的許可權+可視化流程管理系統。 有興趣的朋友,請關註我吧(*^▽^*) ...
  • 一、下載安裝 1.下載git 必須先下載並安裝git,再TortoiseGit下載安裝 git安裝參考教程:https://blog.csdn.net/mukes/article/details/115693833 2.TortoiseGit下載與安裝 TortoiseGit,Git客戶端,32/6 ...
  • 前言 在項目開發過程中,理解數據結構和演算法如同掌握蓋房子的秘訣。演算法不僅能幫助我們編寫高效、優質的代碼,還能解決項目中遇到的各種難題。 給大家推薦一個支持C#的開源免費、新手友好的數據結構與演算法入門教程:Hello演算法。 項目介紹 《Hello Algo》是一本開源免費、新手友好的數據結構與演算法入門 ...
  • 1.生成單個Proto.bat內容 @rem Copyright 2016, Google Inc. @rem All rights reserved. @rem @rem Redistribution and use in source and binary forms, with or with ...
  • 一:背景 1. 講故事 前段時間有位朋友找到我,說他的窗體程式在客戶這邊出現了卡死,讓我幫忙看下怎麼回事?dump也生成了,既然有dump了那就上 windbg 分析吧。 二:WinDbg 分析 1. 為什麼會卡死 窗體程式的卡死,入口門檻很低,後續往下分析就不一定了,不管怎麼說先用 !clrsta ...
  • 前言 人工智慧時代,人臉識別技術已成為安全驗證、身份識別和用戶交互的關鍵工具。 給大家推薦一款.NET 開源提供了強大的人臉識別 API,工具不僅易於集成,還具備高效處理能力。 本文將介紹一款如何利用這些API,為我們的項目添加智能識別的亮點。 項目介紹 GitHub 上擁有 1.2k 星標的 C# ...