历史上的今天
返回首页

历史上的今天

今天是:2024年10月09日(星期三)

正在发生

2019年10月09日 | FL2440 (1) 裸板程序 LED

2019-10-09 来源:eefocus

程序从JZ2440中改的


用的到文件如下:


crt0.S,leds.bin,leds.c,leds.lds,Makefile


crt0.S


@******************************************************************************

@ File:crt0.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


leds.c

 

//FL2440    

#define    GPBCON        (*(volatile unsigned long *)0x56000010)

#define    GPBDAT        (*(volatile unsigned long *)0x56000014)

 

#define    GPB5_out    (1<<(5*2))//对应原理图的4个led

#define    GPB6_out    (1<<(6*2))

#define    GPB8_out    (1<<(8*2))

#define    GPB10_out    (1<<(10*2))

 

void  wait(volatile unsigned long dly)

{

    for(; dly > 0; dly--);

}

 

 

int main(void)

{

    unsigned long i=0;

    //     0010 0000

    //     0100 0000

    //   1 0000 0000

    // 100 0000 0000

    unsigned long arr[4]={0x20,0x40,0x100,0x400};

    GPBCON = GPB5_out|GPB6_out|GPB8_out|GPB10_out;        // 将LED0-3对应的GPB 5/6/8/10  output

 

    while(1)

    {

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

        {

            //GPBDAT=0x7ff;//全灭

            //wait(90000);

            GPBDAT=~arr[i]; //要注意是高电平灭       

            wait(90000);    

                 }

    }

 

    return 0;

}

 

leds.lds


SECTIONS {

    . = 0x00;

      .text          :   { *(.text) }

    .rodata ALIGN(4) : {*(.rodata)} 

      .data ALIGN(4) : { *(.data) }

      .bss ALIGN(4)  : { *(.bss)  *(COMMON) }

}

 


Makefile


CFLAGS     := -Wall -Wstrict-prototypes -g -fomit-frame-pointer -ffreestanding

all : crt0.S  leds.c

    arm-linux-gcc $(CFLAGS) -c -o crt0.o crt0.S

    arm-linux-gcc $(CFLAGS) -c -o leds.o leds.c

    arm-linux-ld -Tleds.lds  crt0.o leds.o -o leds_elf

    arm-linux-objcopy -O binary -S leds_elf leds.bin

    arm-linux-objdump -D -m arm  leds_elf > leds.dis

clean:

    rm -f   leds.dis leds.bin leds_elf *.o

说明:Makefile编译使用警告,优化级别等


推荐阅读

史海拾趣

Hokuriku公司的发展小趣事

进入80年代,随着电子技术的不断进步和应用领域的拓宽,Hokuriku Electric意识到单一产品线的局限性。于是,公司开始实施多元化产品战略,相继推出了传感器、贴片保险丝、机械零件、电路基板等一系列新产品。这些产品不仅丰富了公司的产品线,还进一步巩固了其在电子行业中的地位。通过多元化布局,Hokuriku Electric成功抵御了市场波动带来的风险,实现了持续稳定的增长。

Freeport Resources Enterprises Corp公司的发展小趣事

随着全球对环保和可持续发展的重视,Freeport Resources将这一理念融入到公司的发展战略中。公司投入大量资金进行环保设施建设和生产技术改造,致力于减少开采和加工过程中的环境污染和资源浪费。同时,Freeport Resources还积极参与社会公益活动,推动矿业与社区的和谐共生。这些举措不仅提升了公司的社会形象,也为其在电子材料市场的长期发展奠定了坚实的基础。

雅特力(Artery)公司的发展小趣事

雅特力公司自成立以来,始终致力于技术创新和产品升级。在早期的发展阶段,公司便推出了一系列具有竞争力的电子产品,通过不断的技术突破,逐渐在市场中占据了一席之地。特别是在集成电路设计领域,雅特力凭借其高效能、低能耗的产品特性,赢得了众多客户的青睐。随着技术的不断进步,雅特力逐渐成为了电子行业的佼佼者,引领着市场的发展方向。

Eureka Microelectronics Inc公司的发展小趣事

Eureka一直重视研发实力的提升和技术创新。公司拥有一支专业的研发团队,致力于新技术的研发和应用。近年来,Eureka在人工智能、物联网等领域取得了多项技术突破,推出了一系列具有竞争力的新产品。这些技术的突破和应用,不仅提升了Eureka的产品性能和质量,也推动了公司在行业内的领先地位。

Hammond公司的发展小趣事

随着Eureka产品线的不断拓展,公司开始积极拓展海外市场。通过与国际知名电子制造商的合作,Eureka的产品逐渐打入国际市场。同时,公司也积极参与国际展会和技术交流活动,提升了品牌知名度和影响力。这些努力不仅帮助Eureka扩大了市场份额,也促进了公司与国际同行的交流与合作。

迪一电子公司的发展小趣事

随着数字化和智能化技术的不断发展,迪一电子公司意识到必须跟上时代的步伐。于是,公司开始推进数字化转型和智能化生产。通过引入先进的生产设备和信息系统,优化生产流程,提高生产效率。同时,公司还注重人才培养和引进,建立了一支高素质的技术和管理团队。这些努力使迪一电子在数字化和智能化方面取得了显著成果,提高了公司的竞争力和市场地位。

问答坊 | AI 解惑

求助关于基于单片机的数字PID调节问题

我正在做一个基于ATmega16单片机的直流调速系统 要用到PID控制 第一个问题是 怎么用ATmega16实现PID控制 第二个问题 怎么将PID的输出与PWM波的占空比联系起来…

查看全部问答>

Nios 视频学习

Nios工程创建视频学习教程 内容包括: (1)SOPC Builder 的使用创建工程方法 (2)Quartus中的配置 (3)Nios中C语言工程的创建 (4)Nios中Flash的下载…

查看全部问答>

数字转模拟(D/A) 隔离转换器485/232转4-20MA

数字转模拟(D/A) 隔离转换器:ISO DAO系列 RS232/RS485信号转模拟信号 隔离D/A转换器 产品概述: ISO DAO系列产品实现主机RS-485/232接口信号隔离转换成标准模拟信号,用以控制远程设备。ISODA系列产品可应用在 RS-232/RS-4 ...…

查看全部问答>

二个程序它们各有静态变量或静态区。它们的静态区和操作系统的静态区有什么不同?

二个程序它们各有静态变量或静态区。它们的静态区和操作系统的静态区(事件EVENT,互斥体Mutex存放的地方)有什么不同?…

查看全部问答>

wince内存泄露?

我使用evc开发一个应用程序,使用了timer,当timer里面没有任何人为添加的代码的时候,查看程序内存中正在使用的内存,没有变化。当我添加这样两行代码:         CWnd* pWnd = GetDlgItem(IDC_COORD);       ...…

查看全部问答>

转让友善micro2440sdk开发板

         本人去年7月份左右买了友善之臂的micro2440sdk开发板,现在将其转让,并且我愿意回答bootloader以及wince驱动的问题,其余不懂的我也会给一些意见。开发板网址http://www.arm9.net/micro2440sdk.asp就是这 ...…

查看全部问答>

刷卡支付功能的手机的相关技术

可以给我讲讲有关刷卡支付功能的手机的关键开发技术吗?…

查看全部问答>

求解答,工具是ccs2.2,读写flash空间和Clist问题

1.目前要把VC的程序刻录到板子上,请问原程序中用的是CList, c里面有替代的或差不多的吗?如果有,头文件是什么?刚接触这个,挺迷糊,刚 从一个辞职的同事上接手个半成品程序。 2. 请问怎么往板子里的flash空间写数据? typedef struct & ...…

查看全部问答>

做的一个俄罗斯方块,在全局变量就通过不了了

第一次碰见这种情况,shit是我生气打上的,但还是通过不了ELUOSI.C(25): error C244: \'shit\': can\'t initialize, bad type or classELUOSI.C(25): error C132: \'shit\': not in formal parameter list#include<reg52.h>#include\"anjian.h\ ...…

查看全部问答>

一个不知名的符号

读程序的时候突然发现的,volatile   GPIO   PA @ 0x5000; volatile   GPIO   PB @ 0x5005; 其中@ 符号是什么意思呢,请教各位大虾了!最好能具体点,关于这个符号的,谢谢!…

查看全部问答>