历史上的今天
返回首页

历史上的今天

今天是:2024年10月11日(星期五)

正在发生

2018年10月11日 | OK6410裸机学习之C语言调用汇编函数

2018-10-11 来源:eefocus

start.S源码:

.globl _start

.globl delay       //用globl声明,外部函数就可以调用delay函数

_start:

// 硬件相关的设置 

    // Peri port setup 

    ldr r0, =0x70000000

    orr r0, r0, #0x13

    mcr p15,0,r0,c15,c2,4       @ 256M(0x70000000-0x7fffffff)

    

// 关看门狗 

    // 往WTCON(0x7E004000)写0 

    ldr r0, =0x7E004000

    mov r1, #0

    str r1, [r0]

    // 设置栈 

    ldr sp, =8*1024

    mov r0, #9

    bl xxxxx

halt:

    b halt    

delay:

delay_loop:        

    cmp r0, #0

    sub r0, r0, #1

    bne delay_loop

    mov pc, lr

====================================================================

led.c源码:


void delay(int count);    //声明

int xxxxx(int start)

{

    int i = start;

    

    volatile unsigned long *gpmcon = (volatile unsigned long *)0x7F008820;

    volatile unsigned long *gpmdat = (volatile unsigned long *)0x7F008824;

    

    // gpm0,1,2,3设为输出引脚 

    *gpmcon = (*gpmcon & ~0xffff) | 0x1111;

    

    while (1)

    {

        *gpmdat = (*gpmdat & ~0xf) | i;

        i++;

        if (i == 16)

            i = 0;

        delay(0x10000);

    }

    

    return 0;

}

====================================================================

Makefile:

led.bin: start.o led.o

    arm-linux-ld -Ttext 0 -o led.elf start.o led.o

    arm-linux-objcopy -O binary led.elf led.bin

    arm-linux-objdump -D led.elf > led.dis

start.o : start.S

    arm-linux-gcc -o start.o start.S -c -O2

led.o : led.c

    arm-linux-gcc -o led.o led.c -c -O2

clean:

    rm *.o led.elf led.bin led.dis


推荐阅读

史海拾趣

DAVE Embedded Systems公司的发展小趣事

随着公司的发展,DAVE Embedded Systems不断投入研发力量,致力于技术创新和产品创新。他们基于最新技术(如多核ARM Cortex、PowerPC和X86)设计了一系列高端嵌入式系统模块,这些产品不仅满足了客户对性能的需求,还提供了更好的可靠性和可扩展性。此外,公司还积极开发基于Android和Windows平台的嵌入式系统模块,以满足不同客户的需求。

Advanced Linear Devices公司的发展小趣事

随着全球对环保和可持续发展的重视,DAVE Embedded Systems也积极响应这一趋势。他们在生产过程中采用了环保材料和工艺,减少了对环境的影响。同时,公司还致力于开发环保型嵌入式系统模块,以帮助客户实现绿色生产和可持续发展。这些举措不仅体现了公司的社会责任感,也为公司的长远发展奠定了基础。

Advance Tapes公司的发展小趣事

面对日益复杂的市场环境和客户需求,Advance Tapes公司积极寻求与其他企业的合作机会。通过与上游原材料供应商建立长期稳定的合作关系,确保了原材料的稳定供应和质量保障;通过与下游电子制造企业的深度合作,共同开发定制化胶带产品,满足了客户的特殊需求。这些合作不仅提升了Advance Tapes的市场竞争力,也促进了整个电子产业链的健康发展。

Capax Technologies Inc公司的发展小趣事

Capax Technologies Inc的成功还得益于与各大企业的紧密合作。公司与多家知名的电子设备制造商建立了长期稳定的合作关系,为其提供高品质的组件和技术支持。通过与合作伙伴的共同努力,Capax Technologies Inc的产品得以广泛应用在各类电子设备中,进一步提升了公司的知名度和市场份额。

EQCOLOGIC公司的发展小趣事

随着环保意识的日益增强,电子行业对环保的要求也越来越高。EQCOLOGIC公司积极响应环保号召,将环保理念贯穿于产品研发、生产和销售的各个环节。公司采用环保的生产工艺和材料,减少污染物的排放;同时,还开展了一系列环保宣传活动,提高员工和消费者的环保意识。这些举措不仅提升了公司的社会形象,也为公司的可持续发展奠定了基础。

ABOV(现代单片机)公司的发展小趣事

为了进一步提升公司的竞争力和市场份额,EQCOLOGIC公司决定实施国际化战略。公司积极参与国际电子展会和交流活动,与国际同行建立广泛的合作关系;同时,还加大在海外市场的投入力度,拓展销售渠道和市场份额。通过不断的努力和创新,EQCOLOGIC的产品逐渐打入国际市场,公司的国际化战略也取得了显著成效。

问答坊 | AI 解惑

硬件工程师必杀技

1 、充分了解各方的设计需求,确定合适的解决方案 启动一个硬件开发项目,原始的推动力会来自于很多方面,比如市场的需要,基于整个系统架构的需要,应用软件部门的功能实现需要,提高系统某方面能力的需要等等,所以作为一个硬件系统的设计 ...…

查看全部问答>

国内外汽车徽标

国内品牌原动力大切诺基 帕杰罗 欧蓝德 Jeep2500 吉普 切诺基索纳塔 伊兰特 路霸 战旗风景海狮 风景冲浪 风景爱尔法福莱尔 福星 F系列北斗星 爱迪尔蒙迪欧 嘉年华奥拓 羚羊长安新星 长安星韵 长安雪虎 长安镭蒙 长安CM8赛弗 赛影 赛铃 迪尔 ...…

查看全部问答>

第四届全国大学生电子设计竞赛获奖作品选编

本帖最后由 paulhyde 于 2014-9-15 09:12 编辑 第四届全国大学生电子设计竞赛获奖作品选编  …

查看全部问答>

也来谈谈有功功率和无功功率

在网上找到的,觉得说的比较清楚,分享下: 在交流电路中,由电源供给负载的电功率有两种;一种是有功功率,一种是无功功率。 有功功率是保持用电设备正常运行所需的电功率,也就是将电能转换为其他形式能量(机械能、光能、热能)的电功率。比如 ...…

查看全部问答>

请教~初学者什么时候买开发板?

我刚刚开始接触FPGA,资料也才看了一点,Verilog HDL也只是大致了解. 我在想要不要买块开发板,一边看资料一边在开发板上试试 以前学C的时候上课也觉得很枯燥,但是会经常自己编些小算术题之类的~呵呵 望有经验的兄弟姐妹给些建议 不慎感谢…

查看全部问答>

掉电保持数据 20字节左右

想实现 运行状态 掉电保持,以便重新上电时恢复, 需要保持的数据大约  20字节, 该状态每秒更新一次。 请问有什么比较好的方法?掉电检测如何实现? //目前使用的方法是:Dallas SDRAM, 当作RAM一部分。 掉电检测没有,上电时检查状 ...…

查看全部问答>

文件读取与字符抽取问题

        char pbyReadbuf[100];         CString tmpstr,temp;         if( !myFile.Open(_T(\"\\\\myfile.txt\"), CFile::modeRead,&e) )   {   &nbs ...…

查看全部问答>

国内某著名通行公司招聘,想换工作的看过来

工作经验:最少2年 工作地点:西安 咨询电话:029-87667362 我的邮箱(一般周末看):zhanglinnnli@163.com 因为待遇比较好,大家抓紧机会了…

查看全部问答>

AT89S51单片机控制GSM模块(M22)发送短信程序!~!~!~!

AT89S51单片机控制GSM模块(M22)发送短信程序!~!~!~! 自己改的AT89S51单片机控制GSM模块(M22)发送短信程序,在Keil上编译没错,但还未试过烧入片内运行。。 大家看看,这个程序可行否? 还有什么错误的地方? 希望搞过GSM的朋友多提点 ...…

查看全部问答>

很奇怪的现象,大家来帮我看看,

我定义个数组,用来存储不同类型的数 INT8U I2cData[32]; 然后 *((INT16U*)I2cData)=1234; 1234的16进制是0x04d2; 这样,应该是 I2cData[0]=0xd2,I2cData[1]=0x04; 才对, 可是我再仿真时,发现数据都向前偏移了1个地址,比如 I2cData 的首地址为 ...…

查看全部问答>