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

发布者:第二眼帅哥最新更新时间:2018-10-11 来源: eefocus关键字:OK6410  裸机  汇编函数 手机看文章 扫描二维码
随时随地手机看文章

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


关键字:OK6410  裸机  汇编函数 引用地址:OK6410裸机学习之C语言调用汇编函数

上一篇:OK6410裸机学习之时钟设置-汇编
下一篇:OK6410裸机学习之汇编调用C函数传参数

推荐阅读最新更新时间:2024-03-16 16:15

mini2440裸机编程--------触摸屏驱动
mini2440上连接的是一个电阻式触摸屏,电阻式触摸屏是基于AD转换实现的,即某个位置按下之后,这点的电压会发生改变,通过电压就可以判断出是哪一个点被按下了,arm可以得到这个点的坐标。因为触摸屏和lcd是两个设备,因此,触摸屏得到的坐标一般不能够与lcd上的坐标对应起来,所以需要我们在程序中手动的进行校正(虽然不对应,但是他们之间的关系式线性的,因此通过三个点的采样,就可以把系数确定下来。) s3c2440是不支持中断嵌套的。 arm与触摸屏通过tsxptsxm tsyptsym 四根线相连接,数据手册中有一句话:When Touch Screen device is used; XM or PM is only co
[单片机]
02-JZ2440裸机学习之MMU内存管理单元
1、MMU定义: MMU是Memory Management Unit的缩写,中文名是内存管理单元,它是中央处理器(CPU)中用来管理虚拟存储器、物理存储器的控制线路,同时也负责虚拟地址映射为物理地址,以及提供硬件机制的内存访问授权,多用户多进程操作系统。 2、MMU的作用: (1)权限管理 (2)地址映射 3、权限管理简介 不同时刻只有一个程序段再跑,都有自己的内存地址空间,互不相同,不能互相访问地址空间,A访问内核空间会崩溃 4、地址映射简介 两个程序 两个程序同时运行,都存在于内存中 多任务系统 其实也是分时系统 俩程序在内存中的 不同地址,为什么打印的地址相同呢? CPU访问
[单片机]
02-JZ2440<font color='red'>裸机</font>学习之MMU内存管理单元
s3c2440裸机-内存控制器(三-2、norflash编程之适配访问时序)
前面我们了解了 norFlash的特性和原理 ,那么cpu是如何和nor进行通信的呢?下面开始详细介绍。 1.内存控制器适配norflash 如图是S3C2440的内存控制器的可编程访问周期读写时序,里面的时间参数要根据外部norflash的性能进行配置,这里先列出时间参数的含义: Tacs: Address set-up time before nGCSn(表示地址信号A发出多久后才能发出nGCS片选) Tcos: Chip selection set-up time before nOE(表示片选信号nGCS发出多久后才能发出读使能信号) Tacc:access cycle(数据访问周期) Tacp:page模式下的访问周
[单片机]
s3c2440<font color='red'>裸机</font>-内存控制器(三-2、norflash编程之适配访问时序)
STM32裸机编程的基础知识(5)
闪烁 LED 现在我们已经搭建好了完整的构建、烧写的基础设施,是时候让固件做点儿有用的事情了。什么是有用的事情?当然是闪烁 LED 了!Nucleo-F429ZI 开发板有 3 颗 LED,在开发板数据手册的 6.5 节,我们可以看到板载 LED 连接的引脚: PB0: green LED PB7: blue LED PB14: red LED 再次修改 main.c 文件,添加上引脚定义,然后把蓝色 LED 引脚设为输出模式,开始无限循环。首先,把我们之前讨论过的 GPIO 定义和模式设置拷贝过来,注意,现在又新加了一个 BIT(position) 工具宏: #include inttypes.h #include
[单片机]
mini2440裸机试炼之——PWM定时器按键更改频率
资料:《s3c2440中文数据手册(完整版)》 第九章:输入输出端口 ; 第十章:PWM蜂鸣器 //按按键k1蜂鸣器频率降低, //按按键k2蜂鸣器频率升高, //按按键k3退出蜂鸣器测试 //按按键k4开启蜂鸣器测试 #define GPBCON (*(volatile unsigned long*)0x56000010) //rGPBCON是指向0x56000010这个地址空间的一个宏 #define GPBDAT (*(volatile unsigned long*)0x56000014) //led GPIO #define GPGCON (*(volatile unsigned long*)0x
[单片机]
六、2440裸机开发 lcd操作
LCD ( Liquid Crystal Display 的简称)液晶显示器。LCD 的构造是在两片平行的玻璃基板当中放置液晶盒,下基板玻璃上设置TFT(薄膜晶体管),上基板玻璃上设置彩色滤光片,通过TFT上的信号与电压改变来控制液晶分子的转动方向,从而达到控制每个像素点偏振光出射与否而达到显示目的。现在LCD已经替代CRT成为主流,价格也已经下降了很多,并已充分的普及。 s3c2440通过lcd来显示图像,在2440内部,存在lcd控制相关的寄存器,其结构图如下: 其中,REABANK是一些寄存器组主要包含17个设置参数的寄存器和256x16的调色板内存,其每个寄存器的作用将在下文一一展开;LCDCDMA是供LCD专用的
[单片机]
六、2440<font color='red'>裸机</font>开发 lcd操作
jz2440裸机开发与分析:内存控制器3之时序图分析
根据前两节课,我们明白不同内存类设备与2440的连接 2440与NOR flash的连接图 由上图NOR flash 读的时序图可知,Taa即当输出地址的70ns之后数据有效;Tce即当CE处于低电平大于70ns之后数据有效;Toe即当OE处于低电平大于30ns之后数据有效;Trc即为读周期的时间为70ns;Tdf即为OE和CE处于高电平大于30ns之后,数据输出稳定;综上,我们要让2440同时发出CE,OE,addr信号。 寄存器的配置: 综上,通过配置寄存器BANKCON0使其发出可以满足控制NOR flash读的时序 代码 init.c #include s3c2440_soc.h void b
[单片机]
jz2440<font color='red'>裸机</font>开发与分析:内存控制器3之时序图分析
OK6410块设备驱动之用内存模拟磁盘
ramblock.c源码: // 参考drivers/block/xd.c,z2ram.c #include linux/major.h #include linux/vmalloc.h #include linux/init.h #include linux/module.h #include linux/blkdev.h #include linux/bitops.h #include linux/hdreg.h #define RAMBLOCK_SIZE 0x100000 static struct gendisk *ramblock_disk; static struct request_queue *ra
[单片机]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

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

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved