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语言调用汇编函数
推荐阅读最新更新时间: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访问
[单片机]
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模式下的访问周
[单片机]
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专用的
[单片机]
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
[单片机]
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
[单片机]