日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

从点亮一个LED开始,Cortex-A9裸机程序设计

發布時間:2025/5/22 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 从点亮一个LED开始,Cortex-A9裸机程序设计 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

電路原理圖:

如何點亮一個LED?

?通過對原理圖進行分析,我們能夠發現給三極管的基極加上一個高點平時,三級管be結導通構成通路,此時二極管就點亮了。若要將LED熄滅只需取消高電平輸出。

如何使三級管基極獲得一個高電平?

控制三極管基極的其實是exynos4412的一個引腳(忽略具體是怎么連接的),因此我們要做的就是:

  • 配置相關寄存器使引腳變為輸出功能(這里配置為輸出功能 0x1)
  • 配置上下拉(若需要)
  • 操作寄存器改變引腳電平變化
  • 配置帶負載能力(若需要)
  • 相關寄存器

    配置引腳功能  

    ?

    獲取或設置引腳狀態

    ?配置引腳內部上下拉

    配置帶負載能力

    ?

    一個簡單流水燈的實現:

    #include "exynos_4412.h"/* LED點亮、熄滅以及狀態反轉操作 */ #define LED_ON(LED_x) ( *(LED_x.port) |= (1 << LED_x.pin) ) #define LED_OFF(LED_x) ( *(LED_x.port) &= (~(1 << LED_x.pin)) ) #define LED_REV(LED_x) ( *(LED_x.port) ^= (1 << LED_x.pin) )/* 存放一個LED的端口信息以及引腳信息 */ typedef struct {unsigned int *port; /* LED端口狀態寄存器地址 */int pin; /* 端口中的第幾pin */}led_t;/* 定義并初始化4個LED,方便接下來操作 */ led_t LED_2 = {(unsigned int *)0x11000C44, 7}; /*GPX2DAT, bit[7]*/ led_t LED_3 = {(unsigned int *)0x11000C24, 0}; /*GPX0DAT, bit[0]*/ led_t LED_4 = {(unsigned int *)0x114001E4, 4}; /*GPF3DAT, bit[4]*/ led_t LED_5 = {(unsigned int *)0x114001E4, 5}; /*GPF3DAT, bit[5]*//* 簡單延時函數 */ void delay_ms(unsigned int time);int main() {/*配置引腳作為輸出*/GPX2.CON = GPX2.CON & ~(0xf << 28) | (0x1 << 28);GPX1.CON = GPX1.CON & ~0xf | 0x1;GPF3.CON = GPF3.CON & ~(0xff << 16) | (0x11 << 16);/*實現簡單流水燈*/while(1){LED_ON(LED_2);LED_OFF(LED_3);LED_OFF(LED_4);LED_OFF(LED_5);delay_ms(500);LED_OFF(LED_2);LED_ON(LED_3);LED_OFF(LED_4);LED_OFF(LED_5);delay_ms(500);LED_OFF(LED_2);LED_OFF(LED_3);LED_ON(LED_4);LED_OFF(LED_5);delay_ms(500);LED_OFF(LED_2);LED_OFF(LED_3);LED_OFF(LED_4);LED_ON(LED_5);delay_ms(500);}return 0; }void delay_ms(unsigned int time) {int i, j;while(time--){for(i = 0; i < 5; i++)for(j = 0; j < 610; j++); //do nothing } }

    ?ARM匯編代碼實現LED閃爍

    .globl?_start?? .arm?? _start:??LDR?R0,=0x11000C20??LDR?R1,[R0]??BIC?R1,R1,#0x0000000f??ORR?R1,R1,#0x00000001??STR?R1,[R0]??loop:??LDR?R0,=0x11000C24??LDR?R1,[R0]??ORR?R1,R1,#0x01??STR?R1,[R0]??BL?delay??LDR?R1,[R0]??BIC?R1,R1,#0x01??STR?R1,[R0]??BL?delay??B?loop??delay:??LDR?R2,=0xfffffff?? loop1:??SUB?R2,R2,#0x1??CMP?R2,#0x0??BNE?loop1??MOV?PC,LR??.end??

    ?

    轉載于:https://www.cnblogs.com/chen-farsight/p/6091119.html

    總結

    以上是生活随笔為你收集整理的从点亮一个LED开始,Cortex-A9裸机程序设计的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。