OK6410裸机学习之时钟设置-汇编

发布者:三青最新更新时间: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]

    

    // 设置时钟 

    bl clock_init

    // 设置栈 

    ldr sp, =8*1024

    bl main

halt:

    b halt    

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

clock.S源码:

//MDIV=250 对应: ARMCLK = 500MHz, HCLK = 100MHz, PCLK = 50MHZ 

//MDIV=266 对应: ARMCLK = 532MHz, HCLK = 133MHz, PCLK = 66.5MHZ 

.globl clock_init

clock_init:

    

    // 1.设置LOCK_TIME ,等待时钟稳定的时间

    ldr r0, =0x7E00F000  // APLL_LOCK 

    ldr r1, =0x0000FFFF

    str r1, [r0]

    

    str r1, [r0, #4]           // MPLL_LOCK 

    str r1, [r0, #8]           // EPLL_LOCK     

    

#define OTHERS        0x7e00f900

    @ set async mode     // 当CPU时钟 != HCLK(内存等)时,要设为异步模式 

    ldr r0, =OTHERS

    ldr r1, [r0]

    bic r1, #0xc0            

    str r1, [r0]

loop1:                           // 等待,直到CPU进入异步模式 

    ldr r0, =OTHERS

    ldr r1, [r0]

    and r1, #0xf00                    

    cmp r1, #0

    bne loop1        

    

    // SYNC667 

    // MISC_CON[19] = 0 

#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]

    

    // 2.配置时钟 

    // 2.1 配置APLL 

    // 2.1.1 设置APLL

    // 2.1.2 MUXAPLL

    // 2.1.3 SYNC667

    // 2.1.4 DIVAPLL

     

#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  

    

    // 2.2 配置MPLL 

    // 2.2.1 设置MPLL

    // 2.2.2 MUXMPLL

    // 2.2.3 SYNCMUX

    // 2.2.4 SYNC667

    // 2.2.5 HCLKX2_RATIO

    // 2.2.6 PCLK_RATIO

     

#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  

    

    // 3.选择PLL的输出作为时钟源 

    ldr r0, =0x7E00F01C

    ldr r1, =0x03

    str r1, [r0]

    

    mov pc, lr

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

led.c源码:

void delay()

{

    volatile int i = 0x10000;

    while (i--);

}

int main()

{

    int i = 0;

    

    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 == 16)

            i = 0;

        delay();

    }

    

    return 0;

}

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

Makefile:

led.bin: 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

%.o : %.S

    arm-linux-gcc -o $@ $< -c

%.o : %.c

    arm-linux-gcc -o $@ $< -c

    

clean:

    rm *.o led.elf led.bin led.dis

OK6410裸机学习之时钟设置-汇编


关键字:OK6410  裸机  时钟设置  汇编 引用地址:OK6410裸机学习之时钟设置-汇编

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

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

S3C2440—2.裸机开发步骤及工具使用
一.裸机开发步骤简介 1.在X86架构的Windows系统中 1.建立工程 2.编辑源代码 3.编译(VC6.0) 4.运行 2.在X86架构的Ubuntu系统中 1.编辑源代码(vim) 2.编译(gcc) 3.运行 3.ARM裸机开发 1.编辑源代码(Windows:Source insight或者Notepad++) 2.编译(涉及到交叉编译:arm-linux-gcc) arm-linux-gcc是基于Linux系统的arm编译器,功能强大、稳定、支持qrm芯片多。 3.烧写 4.运行 注意: 使用ads(停止更新)、MDK编译器,是win系统的编译器,功能很弱,只适合个
[单片机]
S3C2440—2.<font color='red'>裸机</font>开发步骤及工具使用
ARM9 mini2451裸机学习——NAND flash驱动学习 2
上一篇文章主要学习了NAND Falsh的基础知识,今天则来总结NAND Flash的初始化,以及块擦除,页的读写操作,以及芯片id号的获取。 6. NAND FLASH 的操作接口 我们知道,函数在调用时需要使用栈,当项目的函数调用关系复杂时,尤其是存在多级 函数调用时,容易导致栈溢出,此处函数调用的开销也会逐渐加大。 为了更好的解决上述问题,一般使用宏的形式来实现规模较小的函数,因为宏调用时在 预处理阶段,由预处理器对源程序中的宏进行展开,所以宏展开不占用运行时间。 因为每一次宏调用都需要进行宏展开,所以会加大程序的代码量,因此规模较大的函数 不宜使用宏的形式来实现 ① NAND FLASH 使
[单片机]
ARM9 mini2451<font color='red'>裸机</font>学习——NAND flash驱动学习 2
51单片机汇编语言带进位加法指令(4条)
算术运算 指令 共有24条,算术运算主要是执行加、减、乘、除法四则运算。另外MCS-51指令系统中有相当一部分是进行加、减1操作,BCD码的运算和调整,我们都归类为运算指令。虽然MCS-51单片机的算术逻辑单元ALU仅能对8位无符号整数进行运算,但利用进位标志C,则可进行多字节无符号整数的运算。同时利用溢出标志,还可以对带符号数进行补码运算。需要指出的是,除加、减1指令外,这类指令大多数都会对PSW(程序状态字)有影响。这在使用中应特别注意。 . 加法指令(4条) 这4条指令的作用是把立即数,直接地址、工作寄存器及间接地址内容与累加器A的内容相加,运算结果存在A中。 ADD A,#data ;(A)+#data→(A) 累加器
[单片机]
PIC16F877A控制DS18B20汇编程序
;*********************************************** ;功能实现:通过DS18B20来读取温度,显示在2位LED上,精确到1度 ;硬件连接:(1)RC0-RC7接共阳数码管的段码A-H ; RA0-RA3接共阳数码管的位码DIG0-DIG3 ;*************************************************** ;**************************************************** ;定义单片机型号为PIC16F877A ;程序包含文件:P16F877A.INC ;定义配置字 ;*************
[单片机]
Freescale MC9S08AW60汇编学习笔记(八)
能够实现用七段led数码管显示出数字和字母、让它们同时显示甚至于滚动显示,这些功能已经很不错了,但是这样还不够,我们还想实现更准确的控制,让数码管按照我们的想法来显示,而不是呆板的循环,这样我们引入中断的想法。也许其他人会从查询和中断的关系这些地方来引出中断,但是我还是倾向于从控制的观点来引出中断,毕竟中断也是实现更直观的人为控制的方法,程序的运行变得可以加入人的意愿来执行,如果我们要让程序进入某一个中断程序,那么给主程序发一个中断,让它跳到中断子程序中运行就行了;我们不发中断,中断子程序就不会执行。还是用七段led数码管来演示,我们没发一个中断信号,数码管就在0~9之间变化一下。代码如下: INCLUDE MC9S08AW6
[单片机]
Freescale MC9S08AW60<font color='red'>汇编</font>学习笔记(八)
一起学mini2440裸机开发(四)--S3C2440定时器学习
S3C2440定时器原理概述 s3c2440有5个16位定时器,定时器0、1、2和3有脉冲宽度调制(PWM)功能,因此这4个定时器也被称为PWM定时器。定时器4是一个内部的定时器,没有外部输出引脚。 定时器的时钟源是PCLK,定时器工作所需频率并不等于PCLK,还要进一步将PCLK通过内部的分频器分频才能得到。这里也可以看出外部设备所需的工作频率不一定等于它的时钟源。其中,定时器0、1公用一个分频器,另外3个定时器公用一个分频器。分频器输入信号经过第2级分频器进一步降低时钟频率,然后输出作为定时器工作的时钟。下图为由PCLK得到定时器工作时钟的框图: 虽然S3C2440定时器有5个,但是它们的工作原理都是相同的,只需
[单片机]
一起学mini2440<font color='red'>裸机</font>开发(四)--S3C2440定时器学习
s3c6410 裸机----时钟
目标:编一个 pwm 控制蜂鸣器 5秒叫,5秒shut up 了解系统时钟: 可以看到那个pwm受apb控制,而APB 的时钟是受,MPLL 控制的,这是我要关心的流程图,而每个register的 的功能都可以在datasheet中找到,研究一下就可以了,可以发现那些 那些值的设置都是顾定的,see(we recommended only the values in the PLL value recommendation table), 所以推测 有初始化的时钟,只需获取pclk,然后分频就可以得到要的时钟频率了。·······请大牛们看到了,如果你们写了设置系统时钟的code,成功了 ,给我一分,我想学习一
[单片机]
s3c6410 <font color='red'>裸机</font>----<font color='red'>时钟</font>
第三章、Tiny4412 U-BOOT移植三 时钟设置
这一章说明配置时钟频率基本原理 OK,接着说,这次先讲讲CPU的系统时钟。U-BOOT在启动的过程中,需要配置系统时钟,没有这东西,CPU就跑不起来。配置系统时钟,大致是以下几个步骤: (1)设置系统PLL锁定时间 (2)配置PLL (3)配置各模块分频系数 (4)切换到PLL时钟 一、基本原理 如下图3-1所示是Tiny4412 (Exynos4412)的核心板,板子最上面的是27MHz的晶振,下面一颗是24MHz,顺便讲一下另外几片东西,最左边的两片是内存DDR3-800,这表示数据传输频率为800MHz,外部时钟频率200MHz,内部时钟频率为100MHz(时钟可能有误),背面还有两片;下面的MCL FLASH,外部时钟
[单片机]
第三章、Tiny4412 U-BOOT移植三 <font color='red'>时钟</font><font color='red'>设置</font>
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
热门活动
换一批
更多
设计资源 培训 开发板 精华推荐

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

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

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