Chinaunix首页 | 论坛 | 博客
  • 博客访问: 164220
  • 博文数量: 36
  • 博客积分: 830
  • 博客等级: 准尉
  • 技术积分: 409
  • 用 户 组: 普通用户
  • 注册时间: 2012-08-10 16:23
文章分类
文章存档

2013年(1)

2012年(35)

分类: 嵌入式

2012-08-16 13:06:05

       正式开始裸机实验啦,这个是非常重要的一步。Mini2440入手已经比较久了,可是都没有怎么玩过,总是各种蛋疼的事,所以趁着现在时间比较充裕的时候,从最基础的全部玩一遍。首先是裸机,其实所谓裸机就是没有带操作系统的,所有的硬件资源都是开放你给玩的,你完全可以把它当做一个高级一点的单片机使用,比普通的单片机就是操作稍微复杂一些,其他都是差不多的。

       那么我们为什么要进行裸机实验了,注意这里说的是实验,因为在工程项目中,2440是不可能用于裸机的,到现在我接触的行业中的,都是带着操作系统跑的,只是底层更新的快慢问题。所以我们这里只是做实验来学习,因为裸机让我们从底层更加理解ARM CPU的操作过程,对以后带上操作系统进行开发非常重要,当然还有bootloader的移植也是一样。

       我用的实验软件是ADS,这也是非常常用的一款软件,ARM公司推出的,我们实验的话用它还是比较容易的,基本用不了它太多的功能,我们主要的目的是学习2440这款芯片的各种功能用法。

       在进行裸机之前,介绍一下一个重要的模板,我们实验的时候可以在这个模版上进行,这个模板把所有进行实验前的环境都进行了设置,那么我们也还是得对模版进行了解一下。

1.下面这个是头文件

2.下面这个是源文件

关于头文件:

2440addr.h:2440的寄存器变量和地址的定义,这样我们就可以直接使用寄存器变量名进行操作

2440addr.inc:汇编语言定义的2440的寄存器变量和地址

2440lib.h::包含了一些常用的函数声明,如串口打印,LCD背光控制

2440slib.h:也是一些函数的声明,主要是关于MMU

def.h:常用的宏定义,如U32BYTE,大小等

IIC.hiic实验的时候的一些宏定义和函数声明

Memcfg.inc:内存bank配置文件

mmu.hmmuc相关的一些宏定义

关于源文件:

2440lib.c2410PLL UART LED 端口初始化,这个我们一般都是自己在主文件中实现

2440slib.sMMU CACHE TLB等功能的一些相关汇编操作

init.s:启动程序,主要是配置内存,ISR,堆栈,为进入我们的c环境做准备

Main.c:主函数,我们主要就是在这个里面进行实验代码的书写了。

mmu.cmmu相关操作的函数

 

看了上面的模版,我们基本清楚了,我们实验主要就是在Main文件中进行了,所以我们看一下最原始的Main文件的代码

/*************************************************

Function name: 这是基础实验的一个模版

Parameter    :

Description     : 做基础实验,直接调用该模板即可

Return            :

Argument     :

Autor & date : Daniel

**************************************************/

#define    GLOBAL_CLK              1

#include

#include

#include "def.h"

#include "option.h"

#include "2440addr.h"

#include "2440lib.h"

#include "2440slib.h"

#include "mmu.h"

#include "profile.h"

#include "memtest.h"

#define LED1 (1<<5)

#define LED2 (1<<6)

#define LED3 (1<<7)

#define LED4 (1<<8)

 

#define KEY1 (1<<0)

#define KEY2 (1<<3)

#define KEY3 (1<<5)

#define KEY4 (1<<6)

/*************************************************

Function name: delay

Parameter    : times

Description     : 延时函数

Return            : void

Argument     : void

Autor & date :

**************************************************/

void delay(int times)

{

    int i;

    for(;times>0;times--)

      for(i=0;i<4000;i++);

}

 

/*************************************************

Function name: Main

Parameter    : void

Description     : 主功能函数

Return            : void

Argument     : void

Autor & date :

**************************************************/

void Main(void) 

{

   

   

   Set_Clk();

   MMU_Init();

  }

 

 

 

上面的Main函数里面的两个函数请注意一下.

第一个是设置时钟的。这样各个部分才能按照正常的规范工作。

第一个是mmu初始化的,主要是用于中断相关的部分,因为我们的中断向量表默认是在虚拟0x0处,所以我们必须把它映射到物理地址0x30000000,也是RO_BASE处。

 

主体框架出来了,我们即将开始裸奔了,但是我们还是可以看看启动文件,分析一下。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

阅读(1168) | 评论(0) | 转发(0) |
0

上一篇:电脑

下一篇:2440启动文件分析

给主人留下些什么吧!~~