mini2440烧写裸机程序

发布者:Leishan最新更新时间:2024-06-18 来源: elecfans关键字:mini2440  烧写  裸机程序 手机看文章 扫描二维码
随时随地手机看文章

1、实现1+2+3------+100
 
AREA test02,CODE,READONLY
 start
  MOV R0,#0
  MOV R1,#1
  MOV R2,#1
 LOOP
  ADD R2,R2,R0
  ADD R1,R1,#1
  CMP R1,#101
  BEQ label
  ADD R2,R2,R1
  B LOOP
 label
  NOP
  NOP
  NOP
  END
 
2、汇编LED测试
 
/************************************
 
*注意修改段名为testLED(两处修改)
 
*在MDK中,要添加簇文件RuninRAM.sct
 
*在MDK中,要添加初始化文件Ext_RAM.ini
 
**************************************/
 
 AREA testLED,CODE,READWRITE
  ENTRY
 
rGPBCON  EQU  0x56000010
 rGPBDAT  EQU  0x56000014
 rGPBUP  EQU  0x56000018
 start
  ldr r0, =rGPBCON
  ldr r1, [r0]
  bic r1,r1,#(0xff<<10)
  orr r1,r1,#0x01
  orr r1,r1,#(0x55<<10)
  str r1,[r0]
 
 ldr r0, =rGPBUP
  mov r1, #0xff
  str r1,[r0]
 
LED_LOOP
  ldr r0, =rGPBDAT
  mov r1, #0xE0
  str r1, [r0]
 
  mov r2, #0x120000
 delay1
  sub r2, r2, #1
  cmp r2, #0
  bne delay1
 
 ldr r0, =rGPBDAT
  mov r1, #0x00
  str r0, [r0]
 
 mov r2, #0x120000
 delay2
  sub r2, r2, #1
  cmp r2,#0
  bne delay2
 
 b LED_LOOP
 end
 
3、C语言LED测试
 
/*******************************************************
 
*在MDK中需要修改段名(RESET)
 
*在MDK中S3C2440A.S初始化文件已存在
 
*在MDK中需要添加簇文件RuninRAM.sct
 
******************************************************/
 #define rGPBCON  (*(volatile unsigned *)0x56000010)
 #define rGPBDAT  (*(volatile unsigned *)0x56000014)
 #define rGPBUP  (*(volatile unsigned *)0x56000018)
 
void msdelay(int time)
 {
  volatile unsigned int i,j;
  for(i=0;i<2000;i++)
  for(j=0;j }
 
void GPIO_init()
 {
  rGPBCON &= ~((3<<10)|(3<<12)|(3<<14)|(3<<16));
    rGPBCON |= (1<<10)|(1<<12)|(1<<14)|(1<<16);
  //rGPBCON = 0x15400;//0001 0101 0100 0000  0000
  rGPBUP = 0xff;
 
}
 
void ledtestC()
 {
  volatile unsigned int i;
  while(1)
  {
  for(i=0;i<4;i++)
  {
    rGPBDAT = 0x000;
    rGPBDAT |=(1<<(5+i));
    msdelay(500);
 
  rGPBDAT &=~(1<<(5+i));
    msdelay(500);
  }
  }
 }
 int main(int argc, char **argv)
 {
  GPIO_init();
  ledtestC();
  return 0;
 }


一、编写源代码
 
源代码:
 
/*******************************led_off.S**************************/
 
.text
 .global _start
 _start:
            LDR    R0,=0x56000010
            MOV    R1,#0x00015400
            STR    R1,[R0]
 
            LDR    R0,=0x56000014
            MOV    R1,#0x0df
            STR    R1,[R0]
 
MAIN_LOOP:
            B      MAIN_LOOP
 
/*******************************Makefile****************************/
 
*指定链接文件地址
 
*指定链接文件顺序
 
*********************************************************************/
 
 
 
led_off.bin : led_off.S
        arm-linux-gcc -g -c -o led_off.o led_off.S
        arm-linux-ld -Ttext 0x0000000 -g led_off.o -o led_off_elf
        arm-linux-objcopy -O binary -S led_off_elf led_off.bin
 clean:
        rm -f  led_off.bin led_off_elf *.o
 
/*******************************************************************/
 
二、使用Jlink下载led_off.bin到nand flash(参考烧写Uboot方法)
 
5.1 打开 J-Link Commander,输入-r
 5.2 speed 12000
 5.3  J-Link Commonder 输入loadbin f:init.bin 0
 5.4  setpc 0
 5.5  g
 5.5  h
 5.6  J-Link Commonder 输入loadbin f:u-boot.bin_openjtag 0x33f80000
 5.7  setpc 0x33f80000
 5.8  g
 5.9  h
 5.10 J-Link Commonder 输入loadbin f:u-boot.bin  0x30000000
 ******************************************************************************************
 J-Link Commonder 输入loadbin f:led_off.bin  0x30000000,即可以烧写汇编程序
 ******************************************************************************************
 5.11 g
 5.12 h
 5.13 在secretcat 中输入nand scrub
 5.14 y
 5.15 在secretcat 中输入nand erase 0 0x40000
 5.16 在secretcat 中输入nand write.jffs2 30000000 0 0x40000
 5.17 重新启动进入nand flash
 
三、开发板重启即可。

一、编写源程序(init.S、testledC.lds、testledC.c、Makefile)
 
@******************************************************************************
 @ File:init.S
 @ 功能:通过它转入C程序
 @******************************************************************************     
 
.text
 .global _start
 _start:
            ldr    r0, =0x53000000    @ WATCHDOG寄存器地址
            mov    r1, #0x0                   
            str    r1, [r0]            @ 写入0,禁止WATCHDOG,否则CPU会不断重启
           
            ldr    sp, =1024*4      @ 设置堆栈,注意:不能大于4k, 因为现在可用的内存只有4K
                                              @ nand flash中的代码在复位后会移到内部ram中,此ram只有4K
            bl      main                @ 调用C程序中的main函数
 halt_loop:
            b      halt_loop
 
/***********************************
 
*功能:链接文件TestledC.lds
 
*************************************/
 SECTIONS {
  . = 0x00;
    .text          :  { *(.text) }
  .rodata ALIGN(4) : {*(.rodata)}
  .data ALIGN(4) : { *(.data) }
    .bss ALIGN(4)  : { *(.bss)  *(COMMON) }
 }
 SECTIONS {
  . = 0x00;
    .text          :  { *(.text) }
  .rodata ALIGN(4) : {*(.rodata)}
  .data ALIGN(4) : { *(.data) }
    .bss ALIGN(4)  : { *(.bss)  *(COMMON) }
 }
 
/**************************************
 
*编写testledC.c源程序
 
*************************************/
 
/*************************************************
 * File: testledC.c
 * funtion:stream light
* author:zhaochuang
 * data: 2013.5.8
 * vision 1.0
 **************************************************/
 #define rGPBCON  (*(volatile unsigned *)0x56000010)
 #define rGPBDAT  (*(volatile unsigned *)0x56000014)
 #define rGPBUP  (*(volatile unsigned *)0x56000018)
 
void msdelay(int time)
 {
  volatile unsigned int i,j;
  for(i=0;i<2000;i++)
  for(j=0;j }
 
void GPIO_init()
 {
  rGPBCON &= ~((3<<10)|(3<<12)|(3<<14)|(3<<16));
    rGPBCON |= (1<<10)|(1<<12)|(1<<14)|(1<<16);
  //rGPBCON = 0x15400;//0001 0101 0100 0000 0000
  rGPBUP = 0xff;
 
}
 
void ledtestC()
 {
  volatile unsigned int i;
  while(1)
  {
  for(i=0;i<4;i++)
  {
    rGPBDAT = 0x000;
    rGPBDAT |=(1<<(5+i));
    msdelay(5);
 
  rGPBDAT &=~(1<<(5+i));
    msdelay(5);
  }
  }
 }
 int main(int argc, char **argv)
 {
  GPIO_init();
  ledtestC();
  return 0;
 }
 /*************************************************/
 /*********************************************************************************************
 * File: int_test.c
 * Author: Hanson
* 嵌入式家园  www.embedclub.com
 * 上海嵌入式家园-开发板商城  http://embedclub.taobao.com
 * Desc: LED test using c code
 * History: May 16th 2011
 * 
 *********************************************************************************************/
 
/*------------------------------------------------------------------------------------------*/
 /*                                    include files                                    */
 /*------------------------------------------------------------------------------------------
 
#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
 
#define U32 unsigned long
 
#define LED1_ON  ~(1<<5)
 #define LED2_ON  ~(1<<6)
 #define LED3_ON  ~(1<<7)
 #define LED4_ON  ~(1<<8)
 
#define LED1_OFF  (1<<5)
 #define LED2_OFF  (1<<6)
 #define LED3_OFF  (1<<7)
 #define LED4_OFF  (1<<8)
 
void dely(U32 tt)
 {
    U32 i;
    for(;tt>0;tt--)
    {
      for(i=0;i<10000;i++){}
    }
 }

int main()
 {
 
 rGPBCON &= ~((3<<10)|(3<<12)|(3<<14)|(3<<16));
    rGPBCON |= (1<<10)|(1<<12)|(1<<14)|(1<<16);
 
 rGPBDAT = rGPBDAT|(LED1_OFF)|(LED2_OFF)|(LED3_OFF)|(LED4_OFF);
 
 while (1)
  {
  rGPBDAT = rGPBDAT&(LED1_ON);
  dely(100);
  rGPBDAT = rGPBDAT|(LED1_OFF)|(LED2_OFF)|(LED3_OFF)|(LED4_OFF);
  dely(100);
  rGPBDAT = rGPBDAT&(LED2_ON);
  dely(100);
  rGPBDAT = rGPBDAT|(LED1_OFF)|(LED2_OFF)|(LED3_OFF)|(LED4_OFF);
  dely(100);
  rGPBDAT = rGPBDAT&(LED3_ON);
  dely(100);
  rGPBDAT = rGPBDAT|(LED1_OFF)|(LED2_OFF)|(LED3_OFF)|(LED4_OFF);
  dely(100);
  rGPBDAT = rGPBDAT&(LED4_ON);
  dely(100);
  rGPBDAT = rGPBDAT|(LED1_OFF)|(LED2_OFF)|(LED3_OFF)|(LED4_OFF);
  dely(100);
  }   
}
 ***********************************************************************/
 /*********************************************************************************
 
*Makefile编写规则
 
***********************************************************************************/
 
CFLAGS  := -Wall -O2
testledC.bin : init.S testledC.c
 arm-linux-gcc $(CFLAGS) -c -o init.o init.S
  arm-linux-gcc $(CFLAGS) -c -o testledC.o testledC.c
  arm-linux-ld -TtestledC.lds  init.o testledC.o -o testledC_elf
  arm-linux-objcopy -O binary -S testledC_elf testledC.bin
  arm-linux-objdump -D -m arm  testledC_elf > testledC.dis
 clean:
  rm -f  testledC.bin testledC_elf testledC.dis *.o

[1] [2]
关键字:mini2440  烧写  裸机程序 引用地址:mini2440烧写裸机程序

上一篇:u-boot-2009.11移植到mini2440
下一篇:mini2440 LED驱动程序开发

推荐阅读最新更新时间:2024-11-12 23:11

mini2440uboot移植-基本操作指令
继续uboot移植的基础知识学习 1.首先学习下nandfalsh基本操作指令 nand info(显示可以使用的nand flash) nand device (显示或设定当前使用的nand flash) nand read addr off size (nand flash读取命令,从nand的off偏移地址处读取size字节的数据到SDRAM的addr地址) nand write addr off size (nand flash烧写命令,将SDRAM的addr地址处的size字节的数据烧写到nand flash的off偏移地址) nand write ] addr off size(烧写yaffs映
[单片机]
mini2440 按键驱动异步信号通知模式 实验
Makefile KERN_DIR = /home/grh/kernel_source_code/linux-2.6.32.2 all : make -C $(KERN_DIR) M=`pwd` modules arm-linux-gcc key_interrupt_app.c -o key_interrupt_app clean : make -C $(KERN_DIR) M=`pwd` modules clean rm -rf modules.order obj-m += test_driver.o obj-m += key_poll.o obj-m += key_interrupt.o copy
[单片机]
<font color='red'>mini2440</font> 按键驱动异步信号通知模式 实验
JLink烧写2440的NOR配置
打开SEGGER\JLinkARM_V408k目录下的JFlashARM.exe。 点击File- New Project新建工程,选择Options- Project settings,切换到CPU页,勾选Use target RAM(如果不勾选这个,烧写时就不会利用2440片内的SRAM,导致烧写速度会非常慢),Addr填入40000000(2440从Nor启动时,片内的SRAM地址映射到0x40000000),大小选择4KB。 点击下方的Add按钮,Action Type选择Write 32bit,Address填入53000000(2440的看门狗寄存器地址),Data填入00000000,这是为了防止烧写大文件时,看门
[单片机]
U-boot-2014.04移植到MINI2440(9) nor flash启动和nand flash 启动
在mini2440上,nor flash启动和nand flash启动可以满足不同的需要,这里进行移植,nor的启动移植比较简单,因为不需要进行代码的重定向,nand的启动相对复杂,这里先从nor开始,进入正题: 一.修改支持nor flash启动 第一步:修改mini2440.h 在第27行: #define CONFIG_SYS_TEXT_BASE 0x30008000 这里将这个值改为0x0,因为从nor flash启动,直接在0地址执行就可以,不需要再拷贝到sdram中。修改为: #define CONFIG_SYS_TEXT_BASE 0x0
[单片机]
玩转mini2440开发板之【tekkamanninja版的u-boot的编译和烧录】
今天继续玩一玩mini2440开发板,弄清楚U-boot的编译和烧录过程。 首先,这里交代一个前提,此处所使用的u-boot,是已经移植测试过的,完全可用的版本。就本文而言,我使用的是tekkamanninja大神于2010.03移植过来的mini2440定制版的u-boot,这位大神是友善之臂官方推荐的研究u-boot的大神,厉害之极,其所移植的代码也一直都是大众所效仿和研究的目标。下面就开始具体步骤的介绍: 1、下载和分支 由于tekkamanninja大神的u-boot源码存放于github上,因此我们使用以下命令进行克隆: git clone https://github.com/tekkamanninja/u
[单片机]
Mini2440 DM9000 驱动分析(一)
硬件特性 Mini2440开发板上DM9000的电气连接和Mach-mini2440.c文件的关系: PW_RST 连接到复位按键,复位按键按下,低电平触发重新初始化,初始化完成后5us后可以使用(The DM9000 is ready after 5us when this pin deasserted ) CMD 连接到s3c2440 的ADD2 pin INT 连接到s3c2440 的EINT7/GPF7,将中断控制端口 LINK_ACT 连接到网络接口的GLEDK pin,连接到LINK LED,这样网卡上面的灯才可以亮 LINK_O、WAKEUP、SPEED100# 这三个pin并联之后连接的网络接口的YLE
[单片机]
玩转mini2440开发板之【在Ubuntu 14.04下编译安装tslib 1.4版本】
今天在研究mini2440的QT程序时,发现缺少tslib,于是想办法安装。 一开始想直接去tslib官网上下载最新版本的,但是编译时发现无法通过,于是只好按照大多数网友的做法,取了一个最成熟最稳定的版本(1.4版)来使用。步骤记录如下: 1、准备工作 首先执行以下命令,确认tslib所需的各个库都已正常安装。 # apt-get install autoconf # apt-get install automake # apt-get install libtool 2、下载源码 这里我使用的是CSDN网友上传的版本,经测试在我本人的开发环境下(64位Ubuntu 14.04)是可用的,大家自行下载即可(http
[单片机]
建立交叉编译环境——mini2440开发板
Ubuntu 64位 直接安装arm-linux-gcc-4.4.3 会出错 ~$ sudo apt-get install ia32-libs 装一些32位的库 ``` 开发环境:Fedora9 32位 注:vmbox桥接网络时 需要设置静态IP,否则无法联网 第一步:安装arm-linux-gcc-4.4.3 将光盘目录 linux中的 arm-linux-gcc-4.4.3.tgz 复制到某个目录下如 tmp,然后 进入到该目录,执行解压命令: #cd /tmp tar -xzvf arm-linux-gcc-4.4.3.tar.gz -C / 注意:C 后面有个空格,并且 C 是大写的,它是英文单词
[单片机]
建立交叉编译环境——<font color='red'>mini2440</font>开发板
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved