arm 跑马灯 linux,02 ARM11 时钟初始化后的跑马灯程序
.text
.globl _start
_start:
ldr r0, =0x70000000
orr r0, r0, #0x13
mcr p15, 0, r0, c15, c2, 4
ldr r0, =0x7e004000
mov r1, #0
str r1, [r0]
bl clock_init
ldr sp, =8*1024
bl xxxx
b .
start.S 文件,调用完时钟初始化函数后调用跑马灯程序。
.globl clock_init
clock_init:
ldr r0, =0x7E00F000
ldr r1, =0x0000FFFF
str r1, [r0]
str r1, [r0, #4]
str r1, [r0, #8]
#define OTHERS0x7e00f900
ldr r0, =OTHERS
ldr r1, [r0]
bic r1, r1, #0xc0
str r1, [r0]
loop1:
ldr r0, =OTHERS
ldr r1, [r0]
and r1, r1, #0xf00
cmp r1, #0
bne loop1
#define ARM_RATIO 0 /* ARMCLK = DOUTAPLL / (ARM_RATIO + 1) */
#define HCLKX2_RATIO 1 /* HCLKX2 = HCLKX2IN / (HCLKX2_RATIO + 1) */
#define HCLK_RATIO 1 /* HCLK = HCLKX2 / (HCLK_RATIO + 1) */
#define PCLK_RATIO 3 /* PCLK = HCLKX2 / (PCLK_RATIO + 1) */
#define MPLL_RATIO 0 /* DOUTMPLL = MOUTMPLL / (MPLL_RATIO + 1) */
ldr r0, =0x7E00F020 /* CLK_DIV0 */
ldr r1, =(ARM_RATIO) | (MPLL_RATIO << 4) | (HCLK_RATIO << 8) | (HCLKX2_RATIO << 9) | (PCLK_RATIO << 12)
str r1, [r0]
#define APLL_CON_VAL ((1<<31) | (266 << 16) | (3 << 8) | (1))
ldr r0, =0x7E00F00C
ldr r1, =APLL_CON_VAL
str r1, [r0]
/*
* APLL_CON, FOUTAPL = MDIV * Fin / (PDIV*2^SDIV) = 266*12/(3*2^1) = 532MHz
*/
#define MPLL_CON_VAL ((1<<31) | (266 << 16) | (3 << 8) | (1))
ldr r0, =0x7E00F010
ldr r1, =MPLL_CON_VAL
str r1, [r0]
/*
* MPLL_CON, FOUTMPL = MDIV * Fin / (PDIV*2^SDIV) = 266*12/(3*2^1) = 532MHz
*/
ldr r0, =0x7E00F01C
ldr r1, =0x03
str r1, [r0]
mov pc, lr
clock.S:时钟初始化。
all:start.o clock.o led.o
arm-linux-ld -Ttext 0 -o led.elf start.o clock.o led.o
arm-linux-objcopy -O binary led.elf led.bin
arm-linux-objdump -D led.elf > led.dis
cp led.bin /tftpboot/led.bin
%.o:%.S
arm-linux-gcc -c $< -o $@
%.o:%.c
arm-linux-gcc -c -o $@ $<
clean:
rm -rf *.o *.elf *.dis *.bin /tftpboot/*.bin
Makefile:在跑马灯的基础上添加clock.o
void delay ()
{
int i;
for (i = 0; i < 100000; i++)
;
}
int xxxx (void)
{
volatile unsigned long *gpmcon = (volatile unsigned long *)0x7f008820;volatile unsigned long *gpmdat = (volatile unsigned long *)0x7f008824;
int i;
for (i = 1; i <= 4; i++){
if (1 == i){
*gpmcon &= ~0xffff;
*gpmcon |= 0x1;
}else if (2 == i){
*gpmcon &= ~0xffff;
*gpmcon |= 0x10;
}else if (3 == i){
*gpmcon &= ~0xffff;
*gpmcon |= 0x100;
}else if (4 == i){
*gpmcon &= ~0xffff;
*gpmcon |= 0x1000;
i = 0;
}
*gpmdat = 0;
delay();
}
return 0;
}
led.c:同上一章一样。
结果:初始化时钟后,跑马灯速度明显快于不初始化时钟的跑马灯程序。
arm 跑马灯 linux,02 ARM11 时钟初始化后的跑马灯程序相关推荐
- 02 ARM11 时钟初始化后的跑马灯程序
2019独角兽企业重金招聘Python工程师标准>>> .text .globl _start _start:ldr r0, =0x70000000orr r0, r0, #0x13 ...
- 【嵌入式开发】时钟初始化 ( 时钟相关概念 | 嵌入式时钟体系 | Lock Time | 分频参数设置 | CPU 异步模式设置 | APLL MPLL 时钟频率设置 )
文章目录 一. 时钟相关概念解析 1. 相关概念术语 ( 1 ) 时钟脉冲信号 ( 概念 : 电压幅度 时间间隔 形成脉冲 | 作用 : 时序逻辑基础 间隔固定 根据脉冲数量可计算出时间 ) ( 2 ...
- [国嵌攻略][038][时钟初始化]
时钟脉冲信号 按一定的电压幅度,一定的时间间隔连续发出的脉冲信号叫做时钟脉冲信号.用于给处理器和其他硬件提供时钟度量. 时钟脉冲频率 在单位时间内产生的时钟脉冲的个数叫做时间脉冲频率 时钟源分类 1. ...
- Linux内部的时钟处理机制全面剖析
Linux内部的时钟处理机制全面剖析 在 Linux 操作系统中,很多活动都和时间有关,例如:进程调度和网络处理等等.所以说,了解 Linux 操作系统中的时钟处理机制有助于更好地了解 Linux 操 ...
- 交叉编译器的命名规则及详细解释(arm/gnu/none/linux/eabi/eabihf/gcc/g++)
在linux系统下搞嵌入式开发,交叉编译器那肯定是必备工具.用的场合多了,就会见到各种各样的编译工具,比如: arm-linux-gcc arm-linux-gnueabi-gcc arm-none- ...
- linux监控任务跑满,Linux服务器带宽和CPU跑满或跑高排查
Linux服务器带宽和CPU跑满或跑高排查 CPU 负载查看方法 使用 vmstat 查看系统纬度的 CPU 负载 使用 top 查看进程纬度的 CPU 负载 使用 vmstat 查看系统纬度的 CP ...
- linux 挂iscisc存储,基于arm的嵌入式linux操作系统的移植研究-通信与信息系统专业论文.docx...
基于arm的嵌入式linux操作系统的移植研究-通信与信息系统专业论文 Classified Index: TP316.8 U.D.C: 621.38 Dissertation for the Mas ...
- 基于ARM的嵌入式Linux移植真实体验(3)――操作系统
基于ARM的嵌入式Linux移植真实体验(3)――操作系统 宋宝华[email]21cnbao@21cn.com[/email] 出处:dev.yesky.com 在笔者撰写的<C语言嵌入式系统 ...
- s3c24xx的时钟初始化
本文出处:http://blogold.chinaunix.net/u3/93291/showart_2071102.html 逢山开路 遇水架桥,今天想自己写个adc的驱动,发现不清楚系统各个模块的 ...
最新文章
- MySQL闪退问题的解决
- IJCAI 2021:周志华任大会首个华人程序主席,南大校友获AIJ杰出论文奖
- CodeForces - 571D Campus(数据结构综合)
- cfg桩设备型号_什么是CFG桩?带您看下CFG桩施工工艺及流程,检测项目
- opencv获取mat的指针_数字图像处理之opencv中Mat数据操作
- 1716.计算力扣银行的钱-LeetCode
- python中关于元组的基础运用
- android7.0 ActivityManagerService(AMS)启动流程
- 客户机无法上网,ping 127.0.0.1提示unable to contact IP driver ,error code2
- 微信小程序01-底部导航栏设置
- 基于java的企业人事管理系统的设计与实现(含源文件)
- 二阶无源低通滤波器幅频特性曲线_二阶无源滤波器
- project不显示里程碑标志_Project教程 在Project软件中如何让里程碑任务显示更直观...
- Deepin 深度操作系统安装教程
- 世界杯winner只属于你——MESSI
- Swift游戏实战-跑酷熊猫 07 平台的移动
- 2022张宇考研基础30讲 第十三讲 常微分方程
- execjs 模块 call() 方法报错 AttributeError: ‘NoneType‘ object has no attribute ‘replace‘
- 使用Java对PDF进行电子签章
- GAN生成对抗网络合集(三):InfoGAN和ACGAN-指定类别生成模拟样本的GAN(附代码)