在线问答
直播中

himol

11年用户 607经验值
擅长:可编程逻辑 电源/新能源 MEMS/传感技术 测量仪表 嵌入式技术 制造/封装 模拟技术 连接器 EMC/EMI设计 光电显示 存储技术 EDA/IC设计 处理器/DSP 接口/总线/驱动 控制/MCU RF/无线
私信 关注

【ok210试用体验】0302__ok210详细(烧写)裸奔过程(带你裸奔带你飞)

      参考ok210裸机参考说明整理此文档。。。。。希望对大家有用。

一、开发环境
       1、 学习过简单的C语言和ARM汇编语言。
       2、 开发平台:windows xp +虚拟机VMware,使用arm‐linux‐gcc4.4.1编译代码。
       3、 配套开发板:OK210开发板+Android(linux)系统,所有裸机程序均在OK210开发板上正常运行。

二、环境搭建
       1、虚拟机的安装及Ubuntu的安装与设置请按照光盘资料《OK210软件手册》说明操作。
       2、OK210开发板系统烧写请按照光盘资料《OK210软件手册》说明操作。
三、循环点亮led 灯
       1、 查看原理图
       OK210开发板提供了4个LED,其‘底板原理图.pdf ’下:
         030201.png
        对应的ARM  管脚
         030202.png
       2、 程序讲解
         1 Init.s
           .global _start
           _start:
              bl  main //
          halt:
              b halt
       .global关键字用来让一个符号对链接器可见,可以供其他链接对象模块使用。.global _start  让
        _start  符号成为可见的标识符,这样链接器就知道跳转到程序中的什么地方并开始执行。
       BL指令引起处理器转移到" main .c"处开始执行。
       2)  Makefile
        CFLAGS   := -Wall -O2 -fno-builtin -ffreestanding -nostdlib  
        led_wtd.bin: init.o main.o
           arm-linux-ld -Ttext 0x0 -o led.elf $^
           arm-linux-objcopy -O binary led.elf led.bin
           arm-linux-objdump -D led.elf > led_elf.dis
        %.o : %.S
           arm-linux-gcc $(CFLAGS) -o $@ $< -c
        %.o : %.c
           arm-linux-gcc $(CFLAGS) -o $@ $< -c
       clean:
           rm *.o *.elf *.bin *.dis forlinx –f
   1.执行arm-linux-gcc $(CFLAGS) -o $@ $< -c命令 将当前目录下的init.s和main.c文件编译成.O文件
   2.执行arm-linux-ld -Ttext 0x0 -o led.elf $^命令 将.O文件链接称elf文件。
   3.执行arm-linux-objcopy -O binary led.elf led.bin命令 将elf文件抽取为.bin文件。
   4.执行arm-linux-objdump -D led.elf > led_elf.dis命令,将elf文件反汇编后保存在dis文件中。
     3) main.c
     #define GPH2_CON  (*(volatile unsigned long *)0xE0200C40)
     #define GPH2_DAT  (*(volatile unsigned long *)0xE0200C44)
     #define GPH2_PUD  (*(volatile unsigned long *)0xE0200C48)
     #define GPD0CON   (*(volatile unsigned long *)0xE02000A0)
     void clock_init(void);
     void putc(char c);
     void uart_init(void);
     void putout(char * c);
     int print(const char *fmt, ...);
     static void Delay(int count)
     {
        volatile int i, j = 0;
        volatile static int loop = 800000000/10000;
        for(;count > 0;count‐‐)
        for(i=0;i < loop; i++) { j++; }
    }
    void main(void)
    {
    int i;
    GPD0CON &= ~(0xF << 0);//关闭蜂鸣器
    GPH2_CON=(GPH2_CON & ~0x0000FFFF)| 0x00001111;
                         //设置low4 为管脚为输出方式
    clock_init();
    uart_init();
        //MP0_4DAT |= 0xF0;
       for( i=4;i<8;i++)//关闭led
       {
       GPH2_DAT |=  ( 1<< i);
       Delay(100000);  
       }
       char print[40]={'l','e','d','1',' ','i','s',' ','o','p','e','n'};
       char print1[40]={'l','e','d','1',' ','i','s',' ','c','l','o','s','e'};
  while(1)
      {
       for( i=0;i<4;i++)//循环点亮led  
       {        
         print[3]= i+48;
         print1[3]= i+48;
         GPH2_DAT &= ~( 1<< i);            
         putout(print);//输出打印信息   
         Delay(300000);  
         GPH2_DAT |= ( 1<< i);
         putout(print1);//  输出打印信息
         Delay(300000);   
      }  
  }
}
第一步  执行GPH2_CON=(GPH2_CON & ~0x0000FFFF)| 0x00001111;  
         语句设置GPH2_CON寄存器高四位为输出功能。
第二步  关闭4个led
第三步  循环点亮4个led  执行GPH2_DAT &= ~( 1<< i);;点亮led,
        执行GPH2_DAT |= ( 1<< i);;关闭led。
3、 编译代码  
运行VMware软件出现如下界面,点击“Power on this virtual machine”  运行虚拟机。
030203.png
启动之后出现以下界面:
030204.png
选择Applications ‐>Accessories‐>Files:   
030205.png
右击桌面,选择“Creat New Folder”新建一个名称为work的文件夹,将裸机程序放到此文件夹下。
030206.png
选择Applications ‐>System Tools‐>XTerm   
030207.png
进入了编译环境
030208.png
输入cd work       回车进入work文件夹,
输入ls –l        回车可以看到路径下包含的裸机程序,
输入cd forlinx_led,回车,进入forlinx_led路径下,
输入make  编译led 逻辑程序,编译成功,生成可以在开发板运行的bin文件。
4烧写运行
    1)将开发板调试串口和电脑相连,建立以超级终端连接,设置波特率为115200,数据流控制为无。
    2)启动开发板当超级终端显示打印信息Hit any key to stop autoboot:  按任意键输出以下信息,输入5回车  。
030209.png
   输入“loadb 20008000”    回车。 或者 “loadb c00080000”  回车.注意:20008000指的是s5pv210的ddr2低位两片内存的地址;c0008000 是20008000  内存物理地址的虚拟地址。
   单击菜单栏“传送”按钮在下拉菜单中选择“发送文件”选项。
030210.png
在弹出的对话框中选择要烧写的bin文件,单击“发送”按钮。
030211.png
弹出以下对话框,表示正在将bin文件下载到开发板。
030212.png
文件传输成功,输入“go  20008000”  运行逻辑程序。
030213.png
程序运行后可以看到4个led 循环点亮,并在超级终端输出打印信息如下:
led1 is close
led2 is open
led2 is close
led3 is open
led3 is close
led4 is open
led4 is close
其他程序类似的下载和运行方法;
Go命令是uboot的执行命令。

回帖(2)

HelloWii

2015-9-14 13:31:08
感谢分享。。。。
举报

himol

2015-9-15 00:02:26
希望对大家有帮助
举报

更多回帖

发帖
×
20
完善资料,
赚取积分