ARM9/ARM11裸机开发笔记1之MDK开发环境和点亮LED

 很多从单片机或者从CM3转到ARM9/ARM11的时候,一开始就讲得是Uboot,Linux,然后就是什么QT等高级玩意,不像单片机有什么裸机开发的概念,的确,这些高级ARM本来就是用来跑系统,谁用来它做裸机开发呢。但是如果我们要更好了解ARM的工作原理,,尤其是想进阶嵌入式中最难的一层,驱动层的话,甚至想把其它的非Linux系统移植到ARM9/ARM11上。我们就无法避免要跟ARM跟底层的寄存器打交道,要了解ARM的内核,时钟,GPIO,SPI,等等外设的工作原理和配置。通过裸机的一些实验,我们就可以像用STM32这样来写ARM9/ARM11代码,让我们更深入了解ARM的原理。
      我之前因为在做把MF这个系统移植到S3C2416上,基本上都靠MDK来完成调试,对ARM9/ARM11的认识有了进一步的认识。这里我就以S3C2416为例来讲怎么建立开发环境和点亮LED灯。
       1、裸机开发必要条件:玩过ARM9之上同学都知道,ARM9之类的ARM是没有内部Flash的话,我们不能直接用开发软件来对烧写代码来调试硬件,这点跟我们开发单片机是最大的区别,也是导致很多人不知道怎么来进行ARM9的裸机开发。有同学就说,没有Flash,还有RAM,没错S3C2416内部是有RAM,但是很小,S3C2416的内部RAM在用NAND启动时候,才8K而已,S3C2440的才4K,我们要在这8K的RAM既放存数据还要放代码,那我们写不了几行代码。所以最好的方法就是用Uboot,先把芯片的时钟,SDRAM都初始化好,那我们就可以用SDRAM来调试代码,一般都有64M的SDRAM,对我们来完全足够用了。这里我只在开发上烧写了Uboot,内核跟文件系统都没有烧,因为如果Uboot引导了Linux内核后,Linux内核接到CPU的控制权,Debug会被关掉,我们就无法再使用Jlink对开发进行调试。你可以进去Uboot上用nand erase来把内核擦掉,不然你每次要调试的时候要注意不要让Uboot引导内核。
       2、用MDK建立工程:新建工程大家都会,我这里只说要点。选择器件的话,选择我们对应ARM开发板上芯片,注意如果是MDK5.0以上,默认是没有安装有ARM7/ARM9有器件库的,我有发帖子共享给大家,如果用是用MDK5.0以上的同学翻翻帖子去下载。

      点确定后,然后是打开工程设置
 
     其中IROM就是代码区的地址,前面说了我们没法用NAND,只能通过SDRAM来调试。我的S3C2416的开发是64M的DDR,地址就是从0X30000000开始到0x34000000,这里我一半用做ROM,从0x32000000开始,另一半用做RAM。

      Debug设置,一样我们设置成J-Link。点OK就可以完成工程的建立。
      3、点亮LED灯:用过STM32的同学都知道,新工程后,要增加启动代码,然后才是C代码来写Main函数。这里我们没有启动代码,也不知道怎么找到Main函数。没关系,我们自己来写个最简单的启动代码,让它来转到我们的C代码。新建一个startup.s的汇编代码文件,然后加入到工程上来,代码如下

    IMPORT Main ;//c语言入口函数
     PRESERVE8 ;//字节对齐
    CODE32 ;//ARM代码
    AREA RESET,CODE,READONLY ;//reset名,代码段,只读
    ENTRY    ;//程序入口
    bl Main 
    END
 IMPORT Main这里就引入我们C文件里的Main函数,ENTRY  表示的这里代码的开始,编译器就从这里开发编译代码。 bl Main这里就是跳转到我们的Main函数。END就是说这里代码的结尾。相关的汇编指令大家可以去找《DUI0204HC_rvct_assembler_guide 》这本书,里面就讲到MDK所有的汇编指令。这里我们就写出来最简单的启动代码。接着就是写我们的C代码了,增加Main.c文件到工程中,我的代码如下:

 #define GPBCON *(volatile unsigned int*)0x56000010
 #define GPBDAT *(volatile unsigned int*)0x56000014
 #define GPBUDP *(volatile unsigned int*)0x56000018
 int Main(void)
 {
unsigned int i;
   GPBCON = 1 << 2;//设置PB1为输出
GPBUDP = 2 << 2;//设置PB1为上拉
GPBDAT &= ~(1 << 1);//置PB1的输出为0
while(1)
{
}
 }
 点亮LED的原理大家都知道,就不用我再说了,我的开发的LED的控制脚对应的是PB1,这里我就要对GPIOB第一个引脚进去配置。代码的开头我定义了GPIOB口相关的寄存器。具体的自然也就是翻对应ARM的参考手册,下面是S3C2416手册相关GPIOB的寄存器


   这里就以GPBCON的寄存器来说,折腾寄存器的同学一看明白怎么做了。GPBCON是来控制GPIO的输入还是输出的,我们这里把GPB1设置成输出,然后设置GPBDAT寄存器让GPB1输出低电平,LED就会被点亮。
          接下就是编译,代码没写错就会编译成功,点调试之前要注意开发不要进去Linux,如果你没有擦除内核,就要让开发板进入Uboot,如下:

点调试,弹出下面对话框,提示Jlink不支持S3C2416,没关系,点Yes

然后我们选一个最接近S3C2416的S3C2410A。如果是用S3C2440的话应该就不会有这个问题。

然后点OK进去调试。进去调试后注意不要点运行。因为这时候的PC指针地址是0x0,而我们的代码并不是在0x0,而是在0x32000000。我们手工修改PC指针为0x32000000

然后我们单步执行,可以看代码跑起来了,代码执行于While(1)的时候,就可以看到LED灯亮起来了。


  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Keil Arm-MDK是一种用于嵌入式系统开发开发工具。其具有使用方便、灵活性高、功能强大等特点,让开发者可以在开发过程中更加高效的完成工作。 在使用Keil Arm-MDK进行嵌入式系统开发时,开发者可以通过多种方式获取参考资料,帮助自己更好的完成开发工作。以下是一些常见的Keil Arm-MDK开发参考资料: 1. 官方文档:Keil Arm-MDK官方网站上提供了大量的使用文档和指南,包括入门指南、用户手册、开发指南、技术文档等,可供开发者在线或离线查阅。 2. 示例代码:Keil Arm-MDK带有大量的示例代码,覆盖了多个应用领域和开发板型号,开发者可以借鉴这些示例代码,快速掌握Keil Arm-MDK的使用方法和注意事项。 3. 手册和编程参考书籍:市面上有大量的Keil Arm-MDK编程参考书籍和手册,其中包括了Keil Arm-MDK的基础知识、实用技巧、应用案例等,有助于开发者深入了解Keil Arm-MDK的使用方法和开发技巧。 4. 在线资源:开发者可以通过搜索引擎或嵌入式技术社区查询Keil Arm-MDK相关的博客、论坛、教程等在线资源,获取更多的开发经验和技巧。 总之,Keil Arm-MDK开发参考资料丰富,开发者可以通过多种方式获取帮助和指导,在开发过程中更加高效的完成工作。 ### 回答2: Keil ARM-MDK是一款广泛使用的嵌入式系统开发工具,可用于开发各种基于ARM处理器的应用程序。Keil ARM-MDK的参考资料是非常丰富的,以下是一些常用的参考资料: 1. Keil ARM-MDK官方网站:该网站提供了Keil ARM-MDK的下载、安装、使用等方面的详细介绍和说明,是了解ARM-MDK最基本的途径。 2. Keil ARM-MDK用户手册:该手册包括所有Keil ARM-MDK软件及功能的详细介绍和指导。用户手册可分为几个章节,涵盖了工程管理、源文件编辑、编译、调试、版本管理等方面的内容。 3. Keil ARM-MDK软件包:Keil公司提供多种软件包,该软件包可以作为Keil ARM-MDK的附加组件,提供一些额外的功能。例如,可以使用CMSIS嵌入式软件包、Keil RTX实时操作系统等。 4. ARM Cortex-M4技术资料:Keil ARM-MDK支持基于Cortex-M4的处理器,该处理器具有高度的性能和灵活性。ARM提供了大量关于Cortex-M4的技术资料,这些资料涵盖了处理器的架构、指令集、时钟、内存、外设等方面的内容。 5. Keil ARM-MDK示例代码:Keil公司为ARM-MDK提供了大量的示例代码。这些示例涵盖了各种应用场景,包括基本的GPIO控制、LCD显示、串口通信、CAN总线通信等等。这些示例代码可以帮助新手更快地上手Keil ARM-MDK开发。 总之,Keil ARM-MDK的参考资料是非常丰富的,但需要注意的是,学习前需要具备一定的单片机和C语言基础,同时需要对ARM处理器的特点和应用有一定的了解。 ### 回答3: Keil ARM-MDK是一种用于开发ARM微处理器的集成开发环境。它支持多种ARM处理器系列,包括Cortex-M系列和Cortex-R系列。Keil ARM-MDK提供了一个强大的编译器、调试器和仿真器,能够帮助开发人员快速有效地开发出高质量的嵌入式软件。 在使用Keil ARM-MDK进行ARM微处理器开发时,参考资料是非常重要的。下面是一些可供参考的资料: 1. Keil ARM-MDK官方网站:官方网站提供了大量的文档、例程和资料,以帮助开发人员更好地使用Keil ARM-MDK进行ARM微处理器开发开发人员可以在官网的下载中心下载Keil ARM-MDK以及其他相关工具。 2. Keil ARM-MDK编译器用户手册:这是Keil ARM-MDK编译器的详细说明,包括编译器使用、编译器选项、编译器错误处理等。 3. Keil ARM-MDK调试器用户手册:该手册提供了关于Keil ARM-MDK调试器的使用说明和调试技巧。 4. 《ARM Cortex-M系列嵌入式系统开发实战》:该书是一本关于使用Keil ARM-MDK开发Cortex-M系列嵌入式系统的实战指南,内容包括嵌入式系统架构、软件设计、硬件控制等方面。 5. KEIL软件开发管理单元教程:该手册提供了一个完整的Keil ARM-MDK开发项目配置和管理教程,包括软件开发流程、项目配置、固件升级等。 以上资料可以帮助开发人员更好地使用Keil ARM-MDK进行ARM微处理器开发,提高开发效率和开发质量。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值