×
单片机 > 单片机程序设计 > 详情

OK6410裸机学习之C语言调用汇编函数

发布时间:2020-05-16 发布时间:
|

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



『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
ARM 汇编的必知必会