datasheet

OK6410裸机学习之汇编调用C函数传参数

2018-10-11来源: eefocus 关键字:OK6410  裸机  汇编调用  传参数

start.S汇编源码:

.globl _start

_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, =6*1024

    

    // int xxxxx(int start, int end, int a, int b, int c, int d) 

    mov r0, #0   // start 

    mov r1, #8   // end 

    mov r2, #0   // a 

    mov r3, #0   // b 

    

    // c, d 存在栈里 ,C函数的参数超过4个以后超过的部分存在栈里

    // 栈是向下增长的,数据入栈时SP指针先减再存入数据

    // 把sp栈顶的位置先减8,对于32位的单片机一个寄存器32位4个字节,减8可以存两个寄存器的值

    ldr sp, =6*1024-8;  

    mov r4, #0

    str r4, [sp]              // c 

    

    mov r4, #1

    str r4, [sp, #4]        // d ,把参数d的值r4存在sp+4的位置

    

    // 到此sp-8预留的空间已经存入了c、d两个参数

    bl xxxxx

halt:

    b halt    

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

led.c源码:

void delay(int a, int b, int c, int d, int e, int f, int g, int h)

{

    volatile int i = a+b+c+d+e+f+g+h;

    while (i--);

}

int xxxxx(int start, int end, int a, int b, int c, int d)

{

    int i = start + a + b + c + d;

    

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

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

    

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

    *gpmcon = 0x1111;

    

    while (1)

    {

        *gpmdat = i;

        i++;

        if (i == end)

            i = start;

        delay(0, 1, 2, 3, 4, 5, 6, 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


关键字:OK6410  裸机  汇编调用  传参数

编辑:什么鱼 引用地址:http://www.eeworld.com.cn/mcu/2018/ic-news101141678.html
本网站转载的所有的文章、图片、音频视频文件等资料的版权归版权所有人所有,本站采用的非本站原创文章及图片等内容无法一一联系确认版权者。如果本网所选内容的文章作者及编辑认为其作品不宜公开自由传播,或不应无偿使用,请及时通过电子邮件或电话通知我们,以迅速采取适当措施,避免给双方造成不必要的经济损失。

上一篇:OK6410裸机学习之C语言调用汇编函数
下一篇:最后一页

关注eeworld公众号 快捷获取更多信息
关注eeworld公众号
快捷获取更多信息
关注eeworld服务号 享受更多官方福利
关注eeworld服务号
享受更多官方福利

推荐阅读

OK6410裸机简单的NAND FLASH驱动

OK6410裸机简单的NAND FLASH驱动,只写了个简单的函数,读取一页<img src="http://my.csdn.net/uploads/201207/20/1342795831_9865.JPG" alt="">      /*************************************************************************************************************  * 
发表于 2017-02-26
OK6410裸机简单的NAND FLASH驱动

OK6410开发板裸机DS18B20驱动

相信玩过51的童鞋应该都玩过DS18B20吧,虽然用在ARM11上面,但是操作还是一样,多了一点就是读写IO前需要切换IO方向,其实51在读取之前需要切换到高电平的,这个一般由编译器完成的,/*************************************************************************************************************  * 文件名: ds18b20.c  * 功能:      S3C6410
发表于 2017-02-26

OK6410汇编程序练习

尝试使用一下6410的汇编,发现跟当年的51差不多,一步一步的学习 ;*************************************************************************************************************  ;* 文件名: ok6410.s  ;* 功能:      S3C6410 汇编  ;* 作者:      
发表于 2017-02-26

OK6410裸机程序之开始模板(Linux环境)

;  中断初始化,中断处理等regs.h            6410的寄存器地址,需要哪些寄存器可以在本文件中声明和定义sdram.c          有关sdram的一些操作,如sdram初始化等time.c             系统时钟的有关设置,如PLLclock等led.c  
发表于 2017-01-06
OK6410裸机程序之开始模板(Linux环境)

OK6410 NandFlash硬件初体验

;    如何访问NandFlash?     那就需要参照datasheet的参考时序:因为6410内部集成NandFlash控制器,因此控制NandFlash就很简单,只需控制Nandflash控制器即可。步骤为:(1)初始化NandFlash控制器     a. 发出片选信号——nCE(2)发出命令    对于6410,因为有NandFlash控制器,只需把命令写到NFCMD寄存器,如果没有NandFlash控制器,需要进行以下步骤:     a.先把
发表于 2017-01-06
OK6410 NandFlash硬件初体验

OK6410 裸机中断最简单代码

近来想学ARM开发,使用了S3C6410核的OK6410开发板,为了学习ARM的底层技术,想从裸机开始学习,结果一路挫折,问题多多,经过很长一段时间的摸索也没有太多成果,因为平常上班,项目的事情也忙,看书的时间也不够多,结果走进中断编程都经过了将近一个月!!   中断,我认为在初学单片机开发的时候是一个比较麻烦的事情,所有想把这个东西弄懂,结果在网上找了遍,都没有找到可以用的代码!为什么呢?因为懂的人,觉得没有必要,不懂的人反正是不懂,就像我一样。在论坛上http://bbs.witech.com.cn/thread-3809-1-1.html ,我觉得那个裸机视频很好,至少我在视频的帮助下,很快可以完成点灯
发表于 2016-07-26
OK6410 裸机中断最简单代码

小广播

何立民专栏

单片机及嵌入式宝典

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

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