历史上的今天

今天是:2024年10月11日(星期五)

正在发生

2018年10月11日 | OK6410裸机学习之时钟设置-C语言

发布者:温柔心绪 来源: eefocus关键字:OK6410  裸机  时钟设置  C语言 手机看文章 扫描二维码
随时随地手机看文章

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]

    

    // 设置栈 

    ldr sp, =8*1024

    // 设置时钟 

    bl clock_init

    bl main

halt:

    b halt    

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

clock.c源码:

#define APLL_LOCK (*((volatile unsigned long *)0x7E00F000))

#define MPLL_LOCK (*((volatile unsigned long *)0x7E00F004))

#define EPLL_LOCK (*((volatile unsigned long *)0x7E00F008))

#define OTHERS    (*((volatile unsigned long *)0x7e00f900))

#define CLK_DIV0  (*((volatile unsigned long *)0x7E00F020))

#define ARM_RATIO    0     // ARMCLK = DOUTAPLL / (ARM_RATIO + 1)    

#define HCLKX2_RATIO 4   // HCLKX2 = HCLKX2IN / (HCLKX2_RATIO + 1) = 100MHz 

#define HCLK_RATIO   0     // HCLK = HCLKX2 / (HCLK_RATIO + 1)   = 100MHz       

#define PCLK_RATIO   1     // PCLK   = HCLKX2 / (PCLK_RATIO + 1) = 50MHz    

#define MPLL_RATIO   0    // DOUTMPLL = MOUTMPLL / (MPLL_RATIO + 1)     

#define APLL_CON  (*((volatile unsigned long *)0x7E00F00C))

#define APLL_CON_VAL  ((1<<31) | (250 << 16) | (3 << 8) | (1))

#define MPLL_CON  (*((volatile unsigned long *)0x7E00F010))

#define MPLL_CON_VAL  ((1<<31) | (250 << 16) | (3 << 8) | (1))

#define CLK_SRC   (*((volatile unsigned long *)0x7E00F01C))

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

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

void clock_init(void)

{

    APLL_LOCK = 0xffff;

    MPLL_LOCK = 0xffff;

    EPLL_LOCK = 0xffff;

    // set async mode 当CPU时钟 != HCLK时,要设为异步模式 

    OTHERS &= ~0xc0;

    while ((OTHERS & 0xf00) != 0);

    CLK_DIV0 = (ARM_RATIO) | (MPLL_RATIO << 4) | (HCLK_RATIO << 8) | (HCLKX2_RATIO << 9) | (PCLK_RATIO << 12);

    

    APLL_CON = APLL_CON_VAL;    // 500MHz 

    MPLL_CON = MPLL_CON_VAL;  // 500MHz 

    CLK_SRC = 0x03;

}

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

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裸机学习之时钟设置-C语言


关键字:OK6410  裸机  时钟设置  C语言 引用地址:OK6410裸机学习之时钟设置-C语言

上一篇:OK6410裸机学习之串口实验
下一篇:OK6410裸机学习之时钟设置-汇编

推荐阅读

据DSCC预计,三星将于2019年开始试生产QD-OLED,每月5,000片8.5代基板。如果成功,三星将在2020年将产能翻番,并在2021年和2022年再每年增加30,000片基板。三星QD-OLED电视的材料收入将在2022年达到5600万美元。  不过,DSCC也承认,由于三星在推出商用QD-OLED电视之前面临若干技术挑战,该项预测可能会出现变动——SDC很有可能会取消该项目,或者可以...
原文题目:为何要花费重金才能使千兆网速走入千家万户 翻译自——zdnet,Daphne Leprince-Ringuet ——Sajid Javid承诺将花费50亿英镑来支持千兆宽带,但钱不是唯一需要解决的问题。 在本周举行的保守党大会上,财政大臣Sajid Javid宣布,将拨款250亿英镑用于建设新的公共基础设施,为“英国脱欧后的未来”提供支持。他指出,其中的50亿英镑将用于在最难...
一加8T定档10月15日,线下新品发布会的主题为“让眼力,有电力”,现在距离新机正式发布已经没有几天了。10月10日,一加宣布一加8T开启预约,将于10月19日正式开售。用户以旧换新购买新机,还能额外再返至高1500元补贴,并有机会抽奖赢取新机!一加8T开启预约作为一加最新旗舰新机,一加8T各方面配置不俗。具体来说,一加8T配备了一块120Hz流体屏,将为用...
1.NandFlash结构介绍 一个page是由2028的page data和64字节的OOB(out of bank)组成的, 位反转:NandFlash在读一页数据或者写一页数据的时候有可能会发生位反转,就是在读某一页数据的时候,里面有某一位可能是错误的,为了解决这个问题引入了oob区,写页数据的时候,把数据写进去,同时会生成一个校验码,把校验码写到oob区里面,读数据的时候,读出一...

史海拾趣

问答坊 | AI 解惑

ARM汇编伪指令介绍(2)

汇编控制( Assembly Control )伪指令 汇编控制伪指令用于控制汇编程序的执行流程,常用的汇编控制伪指令包括以下几条: — IF 、 ELSE 、 ENDIF — WHILE 、 WEND — MACRO 、 MEND — MEXIT ...…

查看全部问答∨

FPGA在高速互连中的应用(2)

如同高速网络交换和采用多处理器结构的超级计算机一样,在多FPGA的设计中千兆位收发器的采用是必然的。带有RocketIO收发器的FPGA会成为连接处理器矩阵和FPGA的唯一互连选择,以确保整个板上处理器矩阵间的数据吞吐能力。   当实现高速串行连接时 ...…

查看全部问答∨

CC++编程指南

软件质量是被大多数程序员挂在嘴上而不是放在心上的东西! 除了完全外行和真正的编程高手外,初读本书,你最先的感受将是惊慌:“哇!我以前捏造的C++/C程序怎么会有那么多的毛病?” 别难过,作者只不过比你早几年、多几次惊慌而已。 请花一两 ...…

查看全部问答∨

eVC资源文件中的窗口的尺寸的单位是什么?

如题。 MoveWindow(0, 0, 480, 272); (刚好是GPS导航仪的全屏) 里的单位就是像素,但是 IDD_JTTTS_MFC_DIALOG DIALOGEX 0, 0, 480, 272 (超出了屏幕好多) 却不是。 http://topic.eeworld.net/t/20050615/16/4084612.html 这个帖子说是 DLU ...…

查看全部问答∨

用stc isp那个软件下载就是不能与计算机握手连接

如题,刚开始的时候怀疑一种情况就是通讯线没有接好,但是换过一要线之后,问题仍然存在,一直不能进行握手协议,有朋友知道这是怎么一回事吗?谢谢…

查看全部问答∨

mx27下视频去隔行处理的实现

视频A/D转换用的tvp5150,要在LCD上显示,如何将隔行视频转换成逐行的,有做过的么?(用的嵌入式linux)还请指点下。…

查看全部问答∨

关于SD卡的问题 请高手帮忙,谢谢

我通过SD卡在PDA上装一个程序,程序文件里面的目录\\\\Storage Card\\。但是装完重启,这个程序运行却 提示找不到SD卡,如果我重新建立一个\\\\SD Card 文件夹,把2577文件夹拷贝进去,重启后就不报错。修改 注册表将SD卡名改为\\\\SD Card,重启 ...…

查看全部问答∨

那位大虾指点一下 stellaris LwIP例程的程序流程!

如题,比如说有个数据从上位机发过了,程序是如何处理的? 貌似 例程用systick 中断和Ethernet硬件中断来处理的,不过看中断程序跳过来跳过去的,不太明白其处理流程,盼指点!…

查看全部问答∨

关于clock的问题

我是新手,第一次学MSP430。有一道作业题想问一下大家,应该是很弱智的问题 题目:Microcontroller MSP430 is using 32KHz crystal connected to LFXT1 Oscillator, 8MHz crystal connected to XT2 Oscillator, and 3V power supply. 给的条件 fR ...…

查看全部问答∨

MSP430 LaunchPad 试用 (1)

拿到MSP430 LaunchPad板子一段时间了,一直没有动。实在是时间不多。 今天开始了。。。。 第一步,欲善其事必先利其器。   咱们就开始找工具吧。   开发工具软件就用IAR FOR MSP430 V5.30吧。   硬件工具没得说,就用送的MSP43 ...…

查看全部问答∨
小广播
设计资源 培训 开发板 精华推荐

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

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

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved