技術文章:基於Cortex-A9 LED彙編、C語言驅動編寫

2020-12-24 OFweek維科網

ARM系列文章合集如下:

《從0學arm合集》

0. 前言

一般我們購買一個開發板,廠家都會給出對應的電路圖文件,我們可以通過搜索對應名稱來查找到對應的外設。對於驅動工程師來說,我們只需要知道外設與SOC交互的一些數據線和信號線即可。

用主控晶片控制這些外設的一般步驟:

看電路原理圖,弄明白主控晶片和外設是怎麼連接的,對於驅動工程師來說,主要是看外設的一些clk、數據引腳、控制引腳是如何連接的;外設一般都會連接到SOC的1個或者多個控制器上,比如i2c、spi、gpio等,有的是數據線有的是信號線,中斷線等;根據電路連接和需求對主控晶片進行設置,往往對外設的設置都是通過寄存器操作實現;書寫相應代碼,實現功能,不同類型的外設,代碼結構也不盡相同,比如按鍵,我們既可以通過輪詢方式讀取按鍵信息,也可以通過中斷方式來讀取。

下面我們就以華清遠見的fs4412開發板為例來看如何編寫led的裸機程序。SOC exynos 4412 datahseet 下載地址:

https://download.csdn.net/download/daocaokafei/12533438

一、LED燈電路圖

首先看下led電路圖:

LED電路圖該板子有4個LED,是發光二極體,有電流是為藍色;led都接了上拉電阻;三極體的基極接了SOC的某個GPIO引腳;比如GPX1_0,當該引腳為高電平是,三極體pn結導通,於是LED3兩側就有了電勢差,LED3被點亮,如果該引腳為低電平,pn結截止,LED3兩側就沒有了電勢差,LED3熄滅。

下面是CPU核訪問GPIO控制器的數據通路:

AHB:高速總線APB Bridge:APB總線橋APB:外設總線,低速總線GPIO掛載在APB總線上

GPIO 與 SOC

由上圖可知,cpu要訪問GPIO的寄存器需要經過的路徑。

相關焦點

  • 單片機程序C語言與彙編語言混合編程
    C語言函數和彙編語言函數相互調用在這個示例中C語言函數main()調用彙編語言函數get_rand()以得到一個隨機數;彙編語言函數get_rand()首先調用C語言的標準庫函數rand()得到一個整型隨機值,然後用調用C語言函數mult()的方法把這個隨機值乘以main()函數傳遞給自己的實參,並把乘積值返回給
  • C語言和彙編語言是什麼?他們之間可以有怎樣的合作?為你解析
    驅動程序、嵌入式作業系統和實時運行程序都需要彙編語言。;4.c語言的可讀性差;至於彙編語言的優缺點基本和c的優缺點相反;C和彙編的選擇:1.若只有較簡單的邏輯操作、邏輯算法、簡單運算,使用彙編會得到較為精準的代碼,但用c也同樣可以做到。
  • C語言與彙編語言混合編程應遵守的規則
    例如在一個彙編源文件中定義了如下求和函數: EXPORT add ;聲明add子程序將被外部函數調用 …… add ;求和子程序add ADD r0,r0,r1 MOV pc,lr …… 在一個C程序的main()函數中對add彙編子程序進行了調用: extern int add (int x,int y); //聲明add為外部函數 void main(){ int a=1,b=2,c; c=add
  • ARM中ADS環境下C語言和彙編語言混合編程及示例
    稍大規模的嵌入式程序設計中,大部分的代碼都是用C來編寫的,主要是因為C語言具有較強的結構性,便於人的理解,並且具有大量的庫支持。但對於一寫硬體上的操作,很多地方還是要用到彙編語言,例如硬體系統的初始化中的CPU 狀態的設定,中斷的使能,主頻的設定,RAM控制參數等。
  • 編寫彙編語言常見錯誤分析
    一、彙編軟體彙編失敗原因分析:本文引用地址:http://www.eepw.com.cn/article/201602/287210.htm  這裡採用Keil C51軟體包中的宏彙編器A51作為編繹器,單片機的彙編語言編寫時要注意一定的語法
  • 世界上第一個C語言編譯器是怎麼編寫的?它為什麼能夠用C語言編寫?
    所謂C語言編譯器,就是把編程得到的文件,比如.c,.h的文件,進行讀取,並對內容進行分析,按照C語言的規則,將其轉換成cpu可以執行的二進位文件。 在C語言被用作系統程式語言之前,Tomphson已經使用B語言編寫過作業系統。可見在C語言實現以前,B語言已經可以投使用了。 因此第一個C語言編譯器的原型完全可能是用B語言或者混合B語言與PDP彙編語言編寫的。
  • 第一個 C 語言編譯器是怎樣編寫的?
    當今幾乎所有的實用的編譯器/解釋器(以下統稱編譯器)都是用C語言編寫的,有一些語言比如Clojure,Jython等是基於JVM或者說是用Java實現的,IronPython等是基於.NET實現的,但是Java
  • 【技術交流】編寫高效C語言的四大絕招
    編寫高效簡潔的C語言代碼,是許多軟體工程師追求的目標。本文就是針對編程工作中的一些體會和經驗做相關的闡述。 第二招:數學方法解決問題 現在我們演繹高效C語言編寫的第二招--採用數學方法來解決問題。數學是計算機之母,沒有數學的依據和基礎,就沒有計算機的發展,所以在編寫程序的時候,採用一些數學方法會對程序的執行效率有數量級的提高。舉例如下,求 1~100的和。
  • 基於Android的ARM彙編語言系列之二:C/C++程序生成ARM彙編程序
    章節列表之一:ARM彙編語言開篇之二:C/C++程序生成ARM彙編程序的過程分析之三:ARM彙編語言程序結構之四:ARM處理器的尋址方式之五:ARM指令集與Thumb指令集之六:NEON指令集與VFP指令集本文引用地址:http://www.eepw.com.cn
  • 第一個C語言編譯器是怎樣編寫的?
    當今幾乎所有的實用的編譯器/解釋器(以下統稱編譯器)都是用C語言編寫的,有一些語言比如Clojure,Jython等是基於JVM或者說是用Java實現的,IronPython等是基於.NET所以衡量某種高級語言的可移植性其實就是在討論ANSI/ISO C的移植性。C語言是很低級的語言,很多方面都近似於彙編語言,在《Intel 32位彙編語言程序設計》一書中,甚至介紹了手工把簡單的C語言翻譯成彙編的方法。
  • C語言別致玩法?看這文章,4招教你養成編寫高效簡潔C語言好習慣
    本文主要介紹的是如何在C語言編程工作中寫一些高效簡潔的C語言代碼,這是很多學習C語言的人都要注意點,希望對於廣大讀者學習C語言有一些幫助。編寫高效簡潔的C語言代碼,也是許多軟體工程師追求的目標。;而方法H則僅僅是幾句相關的彙編,代碼更簡潔,效率更高。
  • 四大絕招助你編寫高效簡潔的C語言代碼
    編寫高效簡潔的C語言代碼,是許多軟體工程師追求的目標。本文就是針對編程工作中的一些體會和經驗做相關的闡述。第二招:數學方法解決問題現在我們演繹高效C語言編寫的第二招--採用數學方法來解決問題。數學是計算機之母,沒有數學的依據和基礎,就沒有計算機的發展,所以在編寫程序的時候,採用一些數學方法會對程序的執行效率有數量級的提高。舉例如下,求 1~100的和。
  • 單片機編程用C語言還是彙編?
    單片機的編程可以通過彙編語言和C語言來實現。 1彙編編程的特點 彙編是一種更接近於硬體底層的低級語言。硬體在編程時總線和地址非常重要,在彙編語言中,一般用助記符來替代機器指令的操作碼,用標號代表操作數的地址,所以彙編語言和機器指令之間存在著唯一對應的關係,這就導致了不通系列的單片機其彙編指令集是完全不通的。
  • Go 語言在極小硬體上的運用(二)
    如果你想了解更多有關它們的信息,我建議你閱讀《 高效的 Go 編程 》 和 Russ Cox 的文章 。這一次我們將使用 st-flash 命令:$ arm-none-eabi-objcopy -O binary cortexm0.elf cortexm0.bin$ st-flash write cortexm0.bin 0x8000000st-flash 1.4.0-33-gd76e3c72018-04-10T22:04:34 INFO usb.c: -- exit_dfu_mode2018
  • 混合使用C、C++和彙編語之:內聯彙編和嵌入型彙編的使用
    本文引用地址:http://www.eepw.com.cn/article/257034.htm內聯彙編和嵌入型彙編是包含在C/C++編譯器中的彙編器。使用它可以在C/C++程序中實現C/C++語言不能完成的一些工作。
  • 跟光磊學C語言-C語言概述與開發環境搭建
    個關鍵字就可以完成無數的功能執行速度快(機器語言/彙編語言/C語言)功能強大(C語言是當前最流行的語言)編程自由(語法檢測不是非常嚴格,初學者容易出錯,不同的環境編譯的結果可能不一樣)可移植性好(windows,linux,macOS都支持C語言,嵌入式,物聯網都支持C語言)
  • C語言怎麼樣?今天聊聊C語言的發展史!
    第一個C語言編譯器是怎樣編寫的? 不知道你有沒有想過,大家都用C語言或基於C語言的語言來寫編譯器,那麼世界上第一個C語言編譯器又是怎麼編寫的呢?這不是一個「雞和蛋」的問題…… 回顧一下C語言歷史:Tomphson在BCPL的基礎上開發了B語言,Ritchie又在B語言的基礎上成功開發出了現在的C語言。
  • ARM裸機開發bootloader彙編語言
    一、彙編語言概述1、為什麼要使用彙編本文引用地址:http://www.eepw.com.cn/article/201611/318213.htm一般情況下我們不會用到彙編,但有兩種情況下,我們要用到彙編。1、啟動代碼。