在线看毛片网站电影-亚洲国产欧美日韩精品一区二区三区,国产欧美乱夫不卡无乱码,国产精品欧美久久久天天影视,精品一区二区三区视频在线观看,亚洲国产精品人成乱码天天看,日韩久久久一区,91精品国产91免费

<menu id="6qfwx"><li id="6qfwx"></li></menu>
    1. <menu id="6qfwx"><dl id="6qfwx"></dl></menu>

      <label id="6qfwx"><ol id="6qfwx"></ol></label><menu id="6qfwx"></menu><object id="6qfwx"><strike id="6qfwx"><noscript id="6qfwx"></noscript></strike></object>
        1. <center id="6qfwx"><dl id="6qfwx"></dl></center>

            新聞中心

            s3c2440硬件篇之一:GPIO

            作者: 時(shí)間:2016-11-21 來(lái)源:網(wǎng)絡(luò) 收藏
            S3C2440共有130個(gè)I/O 端口,共分為GPA,GPB,...,GPJ.對(duì)于這幾組GPIO引腳,他們的寄存器是相似的:
            GPxCON:用于配置(configure),選擇引腳的功能。
            GPxDAT:用于讀/寫(xiě)數(shù)據(jù)。
            GPxUP:確定是否使用內(nèi)部上拉電阻。(沒(méi)有GPAUP寄存器。)
            PORTB~PORTJ在寄存器操作方面完全相同。GPxCON中每?jī)晌豢刂埔桓_:00表示輸入,01表示輸出,10表示特殊功能,11保留不用。
            一。使用匯編代碼點(diǎn)亮一個(gè)LED。參照韋東山大哥的,上圖是從韋大哥的書(shū)中截圖的,而我的開(kāi)發(fā)板對(duì)應(yīng)的是GPF接口。僅此區(qū)別。
            (1)led_on.S匯編代碼。

            @******************************************************************************
            @ File:led_on.S
            @ 功能:LED點(diǎn)燈程序,點(diǎn)亮LED1
            @******************************************************************************

            .text@偽代碼指令,指定下面開(kāi)始是代碼段,
            .global _start
            _start:
            LDR R0,=0x56000050 @ R0設(shè)為GPFCON寄存器。此寄存器
            @ 用于選擇端口F各引腳的功能:.
            @ 是輸出、是輸入、還是其他
            MOVR1,#0x00000001
            STRR1,[R0] @ 設(shè)置GPF0為輸出口,位[1:0]=0b01

            LDR R0,=0x56000058 @ R0設(shè)為GPFUP寄存器。此寄存器
            @ 用于選擇端口F使能禁止上拉的功能:
            MOVR1,#0x00000000
            STRR1,[R0] @ 使能GPF0上拉

            LDR R0,=0x56000054 @ R0設(shè)為GPFDAT寄存器。此寄存器
            @ 用于讀/寫(xiě)端口F各引腳的數(shù)據(jù)
            MOVR1,#0x00000000 @ 此值改為0x00000001,
            @ 可讓LED1熄滅
            STRR1,[R0] @ GPF0輸出0,LED1點(diǎn)亮

            MAIN_LOOP:
            B MAIN_LOOP

            本文引用地址:http://www.biyoush.com/article/201611/319469.htm

            (2)Makefile文件:

            led_on.bin:led_on.S
            arm-linux-gcc-g-c-o led_on.o led_on.S
            arm-linux-ld-Ttext 0x0000000-g led_on.o-o led_on_elf
            arm-linux-objcopy-O binary-S led_on_elf led_on.bin
            clean:
            rm-f led_on.bin led_on_elf*.o

            其中:arm-linux-ld-Ttext 0x0000000-g led_on.o-o led_on_elf:指定了代碼段的運(yùn)行地址為0x0000_0000,并指定生成連接文件led_on_elf,由于沒(méi)有定義數(shù)據(jù)段和BSS段的起始地址,它們唄依次放在代碼段的后面。arm-linux-objcopy-O binary-S led_on_elf led_on.bin:由連接文件生產(chǎn)可執(zhí)行文件led_on.bin,下載進(jìn)開(kāi)發(fā)板即可觀察到led1點(diǎn)亮了。

            重要說(shuō)明:玩單片機(jī)的時(shí)候我們一般是把程序下載到單片機(jī)的自身帶的flash中,而s3c2440不是這樣的,我們是把程序下載到它的外部存儲(chǔ)器中,如Norflash或者NandFlash.只有s3c2440是不能運(yùn)行的,它的最小系統(tǒng)包括了,SDRAM(即內(nèi)存),FLASH(Nand或者Nor,即相當(dāng)于硬盤(pán))。我們把程序下載到NandFlash中而不是CPU本身,那么當(dāng)選擇從NandFlash啟動(dòng)CPU的時(shí)候(即OM0,OM1設(shè)置為00的時(shí)候)S3C2440會(huì)自動(dòng)根據(jù)內(nèi)部的硬件結(jié)構(gòu)將NandFlash中的前4K代碼復(fù)制到S3C2440的內(nèi)部RAM中,此時(shí)內(nèi)部RAM的地址為0,程序?qū)?開(kāi)始執(zhí)行。

            一。使用C語(yǔ)言點(diǎn)亮一個(gè)LED。
            (1)crt0.S

            @******************************************************************************
            @ File:crt0.S
            @ 功能:通過(guò)它轉(zhuǎn)入C程序
            @******************************************************************************

            .text
            .global _start
            _start:
            ldr r0,=0x56000010 @ WATCHDOG寄存器地址
            movr1,#0x0
            strr1,[r0]@ 寫(xiě)入0,禁止WATCHDOG,否則CPU會(huì)不斷重啟

            ldr sp,=1024*4 @ 設(shè)置堆棧,注意:不能大于4k,因?yàn)楝F(xiàn)在可用的內(nèi)存只有4K
            @ nand flash中的代碼在復(fù)位后會(huì)移到內(nèi)部ram中,此ram只有4K
            blmain @ 調(diào)用C程序中的main函數(shù)
            halt_loop:
            b halt_loop

            (2)len_on.c

            #defineGPFCON(*(volatileunsignedlong*)0x56000050)
            #defineGPFDAT(*(volatileunsignedlong*)0x56000054)
            #defineGPFUP(*(volatileunsignedlong*)0x56000058)

            intmain()
            {
            GPFCON=0x00000004;// 設(shè)置GPF1為輸出口, 位[3:2]=0b01
            GPFUP=0x0;//使能上拉
            GPFDAT=0x00000000;// GPF1輸出0,LED1點(diǎn)亮

            return0;
            }


            (3)Makefile:

            led_on.bin:crt0.S led_on.c
            arm-linux-gcc-g-c-o crt0.o crt0.S
            arm-linux-gcc-g-c-o led_on.o led_on.c
            arm-linux-ld-Ttext 0x0000000-g crt0.o led_on.o-o led_on_elf
            arm-linux-objcopy-O binary-S led_on_elf led_on.bin
            arm-linux-objdump-D-m arm led_on_elf>led_on.dis
            clean:
            rm-f led_on.dis led_on.bin led_on_elf*.o


            比較疑惑的一點(diǎn)是crt0.S中blmain @ 調(diào)用C程序中的main函數(shù),怎么實(shí)現(xiàn)的,我是這么理解的,arm-linux-ld連接生成了led_on_elf文件,這是一個(gè)文件。



            關(guān)鍵詞: s3c2440硬件GPI

            評(píng)論


            技術(shù)專區(qū)

            關(guān)閉