国产无码免费,人妻口爆,国产V在线,99中文精品7,国产成人无码AA精品一,制度丝袜诱惑av,久久99免费麻辣视频,蜜臀久久99精品久久久久久酒店
        訂閱
        糾錯
        加入自媒體

        基于Cortex-A9 LED匯編、C語言驅動編寫

        2020-12-22 16:10
        一口Linux
        關注

        四、驅動編寫

        下面我們分別用匯編和C語言來給LED編寫驅動程序。

        1. 匯編代碼

        大家如果掌握了我之前講解的匯編指令的知識點,那么這個代碼很容易就能看明白:

        .globl _start
        .arm
        _start:
        LDR R0,=0x11000C20 @將配置寄存器GPX1CON的地址寫入到R0
        LDR R1,[R0]  @讀取寄存器GPX1CON的值保存到R1
        BIC R1,R1,#0x0000000f @將R1的3:0位清0,目的是不覆蓋到其他bit的值
        ORR R1,R1,#0x00000001 @將R1的3:0位置1
        STR R1,[R0]  @將R1的值寫回寄存器GPX1CON
        loop:
        LDR R0,=0x11000C24 @將data寄存器GPX1DAT的地址寫入到R0
        LDR R1,[R0] @讀取寄存器GPX1DAT的值保存到R1
        ORR R1,R1,#0x01 @將R1的值bite0 設置為1,即拉高,點燈
        STR R1,[R0]  @將R1的值寫回寄存器GPX1DAT
        BL delay  @調用延時函數
        LDR R1,[R0]
        BIC R1,R1,#0x01 @將R1的值bite0 設置為0,即拉低,滅燈
        STR R1,[R0]
        BL delay
        B loop
        delay:     @delay延時函數
        LDR R2,=0xfffffff
        loop1:
        SUB R2,R2,#0x1
        CMP R2,#0x0
        BNE loop1
        MOV PC,LR @返回
        .end

        Makefile

        TARGET=gcd
        all:
        arm-none-linux-gnueabi-gcc -O0 -g -c -o $(TARGET).o $(TARGET).s
        arm-none-linux-gnueabi-ld   $(TARGET).o -Ttext 0x40008000 -N -o $(TARGET).elf
        arm-none-linux-gnueabi-objcopy -O binary -S $(TARGET).elf $(TARGET).bin
        clean:
        rm -rf *.o *.elf *.dis *.bin

        程序功能很簡單,就是讓LED3呈現一閃一閃的效果。

        執行make,最終生成的gcd.bin文件。

        2. c語言實現

        如果要進入C語言執行環境,那么就必須為設置棧空間,函數調用參數和返回值會壓棧。

        start.s

        .text
        .global _start
        _start:
         ldr  sp,=0x70000000         get stack top pointer
         b  main

        main.c

        GPX1
        typedef struct {
           unsigned int CON;
           unsigned int DAT;
           unsigned int PUD;
           unsigned int DRV;
        }gpx1;
        #define GPX1 (* (volatile gpx1 *)0x11000C20 )
        void led_init(void)

        GPX1.CON = GPX1.CON & (~(0x0000000f)) | 0x00000001;

        void led_on(int n)

        GPX1.DAT = GPX1.DAT|0x01;

        void led_off()

        GPX1.DAT = GPX1.DAT&(~(0x01));  

        void  delay_ms(unsigned int num)
        {   int i,j;
            for(i=num; i>0;i--)
             for(j=1000;j>0;j--)
                ;

        int main(void)

        led_init ();
        while (1) {
         led_on();
         delay_ms(500);
         led_off();
         delay_ms(500);

        while(1);
           return 0;
        }  

        map.lds

        OUTPUT_FORMAT("elf32-littlearm", "elf32-littlearm", "elf32-littlearm")
        OUTPUT_ARCH(arm)
        ENTRY(_start)
        SECTIONS

        . = 0x40008000;     ;從該地址開始
        . = ALIGN(4);
        .text      :       ;指定代碼段

        <上一頁  1  2  3  4  下一頁>  余下全文
        聲明: 本文由入駐維科號的作者撰寫,觀點僅代表作者本人,不代表OFweek立場。如有侵權或其他問題,請聯系舉報。

        發表評論

        0條評論,0人參與

        請輸入評論內容...

        請輸入評論/評論長度6~500個字

        您提交的評論過于頻繁,請輸入驗證碼繼續

        暫無評論

        暫無評論

          人工智能 獵頭職位 更多
          掃碼關注公眾號
          OFweek人工智能網
          獲取更多精彩內容
          文章糾錯
          x
          *文字標題:
          *糾錯內容:
          聯系郵箱:
          *驗 證 碼:

          粵公網安備 44030502002758號

          主站蜘蛛池模板: 69精品视频| 亚洲日本中文字幕| 五十路AV| 亚洲自拍电影| 亚洲成人自拍| yy19影院| 中文字幕在线观看网址| 亚洲欧美综合| 专干老熟女A片| 尖扎县| X66AV| 亚洲性受| 91狠狠爱| 3Pav图| 天堂无码| 错那县| 粉嫩AV一区二区凹凸精品| 欧州成人与兽| 中文字幕一区二区人妻痴汉电车| 欧美A√| 积石山| 第一福利精品| 影音先锋你懂得| 少妇50p| 五月综合久久| 色天使AV| 张家口市| AV一二三| 国产va影院| 激情综合久久| 博乐市| 青青综合网| 熟女嫩穴?播放| 蜜桃视频在线入口www| 91成人视频在线观看| 欧美精品99久久久| 超碰人人摸| 同江市| 波多野结衣AV一区| 亚州精品熟女在线| 丰满熟女人妻一区二区三|