OK6410裸机学习之时钟设置-C语言

发布者:温柔心绪最新更新时间:2018-10-11 来源: 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裸机学习之时钟设置-汇编

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

基于stc51单片机的光立方c语言源代码
电路图等制作资料请到这里下载: http://www.51hei.com/bbs/dpj-20613-1.html 下面是程序源码: #include STC12C5A60S2.h #define uint unsigned int #define uchar unsigned char sbit keyamenu=P4^4;//按键 sbit keyout=P4^5; sbit keymenu=P4^6; uint code tab_water ={ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0080,0x0140,0x0080,0x0000,0x0000,0x0000,
[单片机]
基于stc51单片机的光立方<font color='red'>c语言</font>源代码
STM32再学习――启动流程分析
  我们写嵌入式程序,基本上采用C语言来编写,以main( )作为程序的入口。但实际上,mian()并不是最先要执行的,在这之前需要做一些基本的工作,如堆、栈的定义;main函数的复位连接等,这些工作就需要一个专门的启动程序来完成,由于需要做的工作内容不多,并且需要更直接的管理内存,一般采用汇编编写。   无论是STM32、ARM系列的单片机,还是简单的如51,PIC等,都以为上述原因,需要启动程序,只不过51,PIC等单片机的启动程序已经在相应的IDE编译、链接的时候隐含的编译了,故在写单片机程序的时候无需考虑。而STM32的启动有相应的启动文件,本文将采用KEIL MDK自带的启动文件STM32F10x.s进行分析。
[单片机]
C语言如何实现循环点亮单位数码管
数码管里面就是由 8个 二极管组成的,其中7个二极管构成数字,剩下一个二极管是一个点。下面这个单位数码管是共阳数码管,即 数码管里面8个二极管的阳极是共同连接在一起,而阴极就是独立分开的,这样就可以通过控制阴极来点亮熄灭二极管了。 若设置二极管阴极为低电平,则这个对应的二极管就点亮了。 把所有二极管阴极都设置低电平,则可以使这个数码管显示 8 数字,下面的小点 也点亮。 下面是 实现循环点亮单位数码管的程序。 #include reg52.h void Delay() { unsigned int i; unsigned char j; for(i=1000; i 0; i--) f
[单片机]
怎样使用C语言来编写MSP430的高质量代码
简介:微处理器一般用于特定环境和特定用途,出于成本、功耗和体积的考虑,一般都要求尽量节省使用资源,并且,由于微处理器硬件一般都不支持有符号数、浮点数的运算,且运算位有限,因此,分配变量时必须仔细。另外要说明的是,速度和存储器的消耗经常是2个不可兼顾的目标,在多数情况下,编程者必须根据实际情况作出权衡和取舍。 需要注意的事项如下: 1) 通常在满足运算需求的前提下,尽量选择为变量定义字节少的数据类型。 比如最常用的int和char,int是16位的,char是8位的,如果没有必要,不要使用int,而且使用char也最好使用unsigned char。运行时,可以在变量窗口看到,使用类型为unsigned char的变量是
[单片机]
基于51单片机的MODBUS通信C语言程序(从机)
#include reg52.h typedef unsigned char uint8; typedef unsigned int uint16; typedef unsigned long uint32; #define TIMER_HIGHT 0xf8 #define TIMER_LOW 0xcd sbit bRunLED =P3^4; //运行指示灯 sbit bWatchDog =P1^7; //看门狗复位 sbit b485Send= P1^3; //75LBC184 发送接收控制 uint32 dwTickCount,dwIntTick; //时钟 uint8 i
[单片机]
mini2440裸机试炼之——看门狗中断和复位操作
看门狗的工作原理: 设本系统程序完整执行一周期的时间是Tp,看门狗的定时周期为Ti,Ti Tp,在程序正常执行时,定时器就不会溢出,若因为干扰等原因使系统不能在Tp时刻改动定时器的记数值,定时器将在Ti时刻溢出,引发系统复位,使系统得以又一次执行,从而起到监控的作用。 看门狗具有两个功能: 1、当做常规时钟,能够产生中断; 2、当看门狗定时器使用,当计数器WTCNT为0时,产生复位; 看门狗的功能方框图: 我程序中PCLK为50MHz,预分频值=77,时钟除数因子选128, 时钟周期t_watchdog=1/ =1/ =0.0002 t_watchdog表示的是看门狗计数计时器WTCNT每降低1所用的时
[单片机]
mini2440<font color='red'>裸机</font>试炼之——看门狗中断和复位操作
基于51单片机的C语言流水灯程序
#include reg51.h //51系列单片机定义文件 #define uchar unsigned char //定义无符号字符 #define uint unsigned int //定义无符号整数 void delay(uint); //声明延时函数 void main() { uint i; uchar temp; while(1) { temp=0x01; for(i=0;i 8;i++) //8个流水灯逐个闪动 { P2=~temp; delay(500); //调用延时函数 temp =1; } tem
[单片机]
一种新算法的干扰信号侦测、追踪与定位系统
  1 引言   在大型集会场合,武警、公安在复杂电磁环境下要求快速准确传递信息,完成执勤、处突和反恐等任务,而自然环境和人为干扰将直接影响信息传输。准确侦测定位干扰信号。可以及时了解干扰环境的组成、特点和电磁态势,有助于做出正确的应对措施。目前,国内外虽均有用于电磁检测的设备,但价格昂贵,因此提出一种新算法的干扰信号侦测、追踪与定位系统,该系统设计的硬件设备、电路设计简单。并具有小型灵活、简单实用、性价比高等特性。   2 新算法与经典算法比较   传统目标源定位中,计算目标源经度和纬度的经典算法主要有2种:一是“两点定位法”,即2条相对干扰源的定向射线(由测量时,定向天线给出的方向)交于一点,则这一交点,就是所要求的目标
[嵌入式]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

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

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

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