mini2440烧写裸机程序(linux+supervivi+dnw)

一、编写源程序(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<time;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

二、使用在lunux下make,生成可执行文件testled.bin

 

三、下载testledC.bin到开发板中

1、使用supervivi 下载,打到NOR命令行,-v

2、使用DNW下载二进制testledC.bin文件到开发板中

3、拨到Nand flash 下,重启开发板即可


 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值