新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 第一個裸奔程序——跑馬燈

        第一個裸奔程序——跑馬燈

        作者: 時間:2016-11-19 來源:網絡 收藏
        經過前段時間的準備,現在終于開始正式寫ARM程序了。本著先易后難的原則,先寫無操作系統的ARM裸奔程序,以便熟悉s3c2440的內部結構,此后再編寫有操作系統的程序。
        第一個程序就從最最簡單的點亮開發板上的四個LED開始,使這四個并排擺放的LED從一端向另一端依次被點亮,從而呈現出跑馬燈的效果。四個LED連接到了B口的5到8引腳,輸出低電平時被點亮,下面就是程序代碼:

        //定義三個寄存器
        #define rGPBCON(*(volatile unsigned *)0x56000010)//Port B control
        #define rGPBDAT(*(volatile unsigned *)0x56000014)//Port B data
        #define rGPBUP(*(volatile unsigned *)0x56000018)//Pull-up control B

        void delay(int);//延時函數

        void Main(void)
        {
        int light;
        int i;
        rGPBCON = 0x015550;//定義PB5~PB8為輸出
        rGPBUP= 0x7ff;//使PB上拉功能失效
        light = 0x10;
        light = light<<1;
        rGPBDAT = ~light;//第一個LED被點亮
        delay(500000);//延時一段時間
        //主程序死循環
        while(1)
        {
        //從一端向另一端
        for (i=0;i<3;i++)
        {
        light = light<<1;
        rGPBDAT = ~light;
        delay(500000);
        }
        //返回
        for (i=0;i<3;i++)
        {
        light = light>>1;
        rGPBDAT = ~light;
        delay(500000);
        }
        }
        }
        //延時函數
        void delay(int a)
        {
        int k;
        for(k=0;k;
        }


        程序很簡單,其中Main函數是在2440啟動代碼執行完后開始被執行。由于該程序沒有用到MMU_SetAsyncBusMode、MMU_SetFastBusMode和RdNF2SDRAM,所以為了正確編譯該程序,只需把啟動代碼中相關的地方注釋掉即可。

        在這里,把ADS的相關配置介紹一下,這些內容是比較重要的。下面是需要修改的內容:
        在Target Settings中的Post-linker中選擇ARM fromELF,因為我們需要把ELF文件格式轉化為下載到flash中所必須的二進制文件。
        在Language Settings中的所有語言的Target下的Architecture or Processor,選擇ARM920T,因為s3c2440是ARM920T內核。
        在ARM Linker中的Output中的RO Base填寫0x30000000,因為在開發板上SDRAM是從0x30000000地址開始。在Layout中的Object/Symbol中填寫2440init.o,它是啟動文件的目標文件,在Section中填寫Init,它是在啟動文件中我們所定義的入口代碼段的名稱。
        在ARM fromELF中的Output format選擇Plain binary,并在Output file name中填寫任意以bin為后綴的輸出文件名。


        關鍵詞: 裸奔程序跑馬

        評論


        技術專區

        關閉
        主站蜘蛛池模板: 赞皇县| 建平县| 灵川县| 九龙坡区| 柳江县| 神农架林区| 银川市| 天镇县| 盐边县| 金湖县| 湖南省| 丰城市| 合作市| 张家口市| 兖州市| 临沂市| 高唐县| 佳木斯市| 乌鲁木齐县| 奇台县| 会同县| 济宁市| 科技| 衡南县| 滦南县| 福泉市| 泗阳县| 岐山县| 乐陵市| 龙胜| 抚远县| 三都| 如东县| 广昌县| 康定县| 永寿县| 亚东县| 云龙县| 东乌| 德令哈市| 新营市|