s3c2410的时钟和定时器

发布者:genius6最新更新时间:2016-04-20 来源: eefocus关键字:时钟  定时器  s3c2410 手机看文章 扫描二维码
随时随地手机看文章
外接晶振,然后通过内部电路产生时钟源

直接使用外部提供的时钟源

通过引脚的设置来选择

 

FCLK  cpu

HCLK  AHB

PCLK  APB

 

PLL 通过时钟控制逻辑PLL来提高系统的时钟

 

UPLL  USB

MPLL  FCLK HCLK PCLK

 

没有启动PLL FCLK=Fin(晶振频率)

 

s3c2410有五个16位的定时器  其中前面的四个定时器有PWM功能  即有一个输出引脚  可以通过定时器来控制输出引脚周期性的高、低电平。定时器的时钟源是PCLK

 

 

@******************************************************************************
@ File:head.S
@ 功能:初始化,设置中断模式、系统模式的栈,设置好中断处理函数
@******************************************************************************      
  
.extern     main
.text
.global _start
_start:
@******************************************************************************      
@ 中断向量,本程序中,除Reset和HandleIRQ外,其它异常都没有使用
@******************************************************************************      
     Reset

@ 0x04: 未定义指令中止模式的向量地址
HandleUndef:
     HandleUndef
 
@ 0x08: 管理模式的向量地址,通过SWI指令进入此模式
HandleSWI:
     HandleSWI

@ 0x0c: 指令预取终止导致的异常的向量地址
HandlePrefetchAbort:
     HandlePrefetchAbort

@ 0x10: 数据访问终止导致的异常的向量地址
HandleDataAbort:
     HandleDataAbort

@ 0x14: 保留
HandleNotUsed:
     HandleNotUsed

@ 0x18: 中断模式的向量地址
     HandleIRQ

@ 0x1c: 快中断模式的向量地址
HandleFIQ:
     HandleFIQ

 

 

Reset:                 
    ldr sp, =4096           @ 设置栈指针,以下都是C函数,调用前需要设好栈
    bl  disable_watch_dog   @ 关闭WATCHDOG,否则CPU会不断重启

 


    bl  clock_init          @ 设置MPLL,改变FCLK、HCLK、PCLK


    bl  memsetup            @ 设置存储控制器以使用SDRAM
    bl  copy_steppingstone_to_sdram     @ 复制代码到SDRAM中
    ldr pc, =on_sdram                   @ 跳到SDRAM中继续执行
on_sdram:
    msr cpsr_c, #0xd2       @ 进入中断模式
    ldr sp, =4096           @ 设置中断模式栈指针

 

    msr cpsr_c, #0xdf       @ 进入系统模式
    ldr sp, =0x34000000     @ 设置系统模式栈指针,

 

    bl  init_led            @ 初始化LED的GPIO管脚


    bl  timer0_init         @ 初始化定时器0  


    bl  init_irq            @ 调用中断初始化函数,在init.c中
    msr cpsr_c, #0x5f       @ 设置I-bit=0,开IRQ中断
   
    ldr lr, =halt_loop      @ 设置返回地址
    ldr pc, =main           @ 调用main函数
halt_loop:
     halt_loop

HandleIRQ:
    sub lr, lr, #4                  @ 计算返回地址
    stmdb   sp!,    { r0-r12,lr }   @ 保存使用到的寄存器
                                    @ 注意,此时的sp是中断模式的sp
                                    @ 初始值是上面设置的4096
   
    ldr lr, =int_return             @ 设置调用ISR即EINT_Handle函数后的返回地址 
    ldr pc, =Timer0_Handle          @ 调用中断服务函数,在interrupt.c中
int_return:
    ldmia   sp!,    { r0-r12,pc }^  @ 中断返回, ^表示将spsr的值复制到cpsr

 

 

 

#include "s3c24xx.h"
 
void disable_watch_dog(void);
void clock_init(void);
void memsetup(void);
void copy_steppingstone_to_sdram(void);
void init_led(void);
void timer0_init(void);
void init_irq(void);


void disable_watch_dog(void)
{
    WTCON = 0;  // 关闭WATCHDOG很简单,往这个寄存器写0即可
}

#define S3C2410_MPLL_200MHZ     ((0x5c<<12)|(0x04<<4)|(0x00))
#define S3C2440_MPLL_200MHZ     ((0x5c<<12)|(0x01<<4)|(0x02))

void clock_init(void)
{
    // LOCKTIME = 0x00ffffff;   // 使用默认值即可
    CLKDIVN  = 0x03;            // FCLK:HCLK:PCLK=1:2:4, HDIVN=1,PDIVN=1

   
__asm__(
    "mrc    p15, 0, r1, c1, c0, 0n"       
    "orr    r1, r1, #0xc0000000n"         
    "mcr    p15, 0, r1, c1, c0, 0n"       
    );

   
    if ((GSTATUS1 == 0x32410000) || (GSTATUS1 == 0x32410002))
    {
        MPLLCON = S3C2410_MPLL_200MHZ; 
    }
    else
    {
        MPLLCON = S3C2440_MPLL_200MHZ; 
        
}


void memsetup(void)
{
    volatile unsigned long *p = (volatile unsigned long *)MEM_CTL_BASE;

   
   
    p[0] = 0x22011110;     //BWSCON
    p[1] = 0x00000700;     //BANKCON0
    p[2] = 0x00000700;     //BANKCON1
    p[3] = 0x00000700;     //BANKCON2
    p[4] = 0x00000700;     //BANKCON3 
    p[5] = 0x00000700;     //BANKCON4
    p[6] = 0x00000700;     //BANKCON5
    p[7] = 0x00018005;     //BANKCON6
    p[8] = 0x00018005;     //BANKCON7
   
   
    p[9]  = 0x008C04F4;
    p[10] = 0x000000B1;     //BANKSIZE
    p[11] = 0x00000030;     //MRSRB6
    p[12] = 0x00000030;     //MRSRB7
}

void copy_steppingstone_to_sdram(void)
{
    unsigned int *pdwSrc  = (unsigned int *)0;
    unsigned int *pdwDest = (unsigned int *)0x30000000;
   
    while (pdwSrc < (unsigned int *)4096)
    {
        *pdwDest = *pdwSrc;
        pdwDest++;
        pdwSrc++;
    }
}


#define GPB5_out        (1<<(5*2))      // LED1
#define GPB6_out        (1<<(6*2))      // LED2
#define GPB7_out        (1<<(7*2))      // LED3
#define GPB8_out        (1<<(8*2))      // LED4


#define GPG11_eint      (2<<(11*2))     // K1,EINT19
#define GPG3_eint       (2<<(3*2))      // K2,EINT11
#define GPF3_eint       (2<<(3*2))      // K3,EINT3
#define GPF2_eint       (2<<(2*2))      // K4,EINT2
 
void init_led(void)
{
    GPBCON = GPB5_out | GPB6_out | GPB7_out | GPB8_out ;
}


void timer0_init(void)
{
    TCFG0  = 99;        // 预分频器0 = 99       
    TCFG1  = 0x03;      // 选择16分频
    TCNTB0 = 31250;     // 0.5秒钟触发一次中断
    TCON   |= (1<<1);   // 手动更新
    TCON   = 0x09;      // 自动加载,清“手动更新”位,启动定时器0
}


void init_irq(void)
      
    // 定时器0中断使能
    INTMSK   &= (~(1<<10));
}

 


#include "s3c24xx.h"

void Timer0_Handle(void)
{
   
    if(INTOFFSET == 10)
    {
        GPBDAT = ~(GPBDAT & (0xf << 5));
    }
    //清中断
    SRCPND = 1 << INTOFFSET;
    INTPND = INTPND;    
}

 

 

int main(void)
{
    while(1);
    return 0;
}


关键字:时钟  定时器  s3c2410 引用地址:s3c2410的时钟和定时器

上一篇:UART的操作
下一篇:s3c24xx中断的操作

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

少被人提的时钟芯片市场:日本超强,美国不容忽视
在去年,我们采访了主要时钟芯片公司。报道了随着5G通信的高频化、汽车的电动化、IoT进化带来的用途展开的多样化,高精度的频率控制、最适合定时的有规律的基准信号控制等,其需求的提高,时钟芯片的存在感增加。 从连载结束后到现在,围绕着这个“时钟设备”内容,看到了各时钟芯片公司增强投资的新闻。并且基于MEMS时钟芯片的阵营在不断地技术改善的同时,捕捉到了发起正式攻势的机会。这次的内容要比之前连载主题更新的内容还要更加靠近最新动向的中心,同时还要纵观时钟设备现在的市场。 向高附加值领域扩展 首先,所谓“时钟设备”是什么,是为了使所有电子设备的电子电路不混乱地继续发挥作用而成为基准的以一定间隔创造稳定的“时钟信号”的设
[焦点新闻]
MSP430 时钟设置(三)
3、CPU运行在晶振(32768Hz)和DCO时钟下: 最慢的频率,我们可以运行DCO约在1MHz(这也是默认速度)。 因此,我们将开始切换MCLK到DCO下。在大多数系统中,你会希望ACLK上运行的VLO或32768赫兹晶振。 由于ACLK在我们目前的代码是在晶体上运行,我们会打开DCO计算。 #include msp430g2231.h void main(void) { WDTCTL = WDTPW + WDTHOLD; 关闭看门狗定时器 if (CALBC1_1MHZ == 0xFF || CALDCO_1MHZ == 0xFF) { while(1);
[单片机]
一种新型的时钟日历芯片DS12C887
1 器件特性   DS12C887实时时钟芯片功能丰富,可以用来直接代替IBM PC上的时钟日历芯片DS12887,同时,它的管脚也和MC146818B、DS12887相兼容。   由于DS12C887能够自动产生世纪、年、月、日、时、分、秒等时间信息,其内部又增加了世纪寄存器,从而利用硬件电路解决子“千年”问题; DS12C887中自带有锂电池,外部掉电时,其内部时间信息还能够保持10年之久;对于一天内的时间记录,有12小时制和24小时制两种模式。在12小时制模式中,用AM和PM区分上午和下午;时间的表示方法也有两种,一种用二进制数表示,一种是用BCD码表示;DS12C887中带有128字节 RAM,其中有11字节RA
[应用]
超低抖动时钟分配解决方案整合了 EZSync 多芯片同步
凌力尔特公司 (Linear Technology Corporation) 推出超低抖动 1.8GHz 时钟分配芯片系列 LTC6954,该器件有 3 个独立的输出,每个都有自己的分频器和相位延迟。凭借在 12kHz 至 20MHz 带宽内不到 20fsRMS 的附加抖动,LTC6954 在对输入时钟进行分频和分配的同时,可最大限度减少了引入的噪声。这使 LTC6954 能够提供抖动很低的时钟,在驱动高分辨率数据转换器时,必须用这样的时钟才能实现最佳信噪比 (SNR)。例如,在对 RF 或高 IF 高频模拟信号等进行数字化时时,低抖动 ADC 时钟尤其重要,这使 LTC6954 成为这类系统中的理想时钟解决方案。 LTC6
[模拟电子]
MSP430F149定时器TA总结
msp430的定时器主要是指基本定时器,看门狗定时器和TATB定时器,两种定时器从功能和用法的角度基本相似,TB功能更为强大,有7个CCR0寄存器,即可输出六路PWM,在做三相逆变的时候,需要六路每路相差60°的spwm波,就是用TB来发生的。 定时器的PWM发生利用的是比较模式,即在CCR0中储存周期,CCR1中储存一个小于CCR0的数字,CCR1/CCR0的比值即为占空比,其原理如下图所示: 在一个16位计数器TAR增加的过程中,当达到CCR1前输出高电平,达到CCR0值前输出低电平,达到CCR0后,重新置位。 与TA相关的寄存器分为四类: 1、TACCRx(CCRx) //捕获/比较寄存器 2、TAC
[单片机]
LPC2106 基本信息、ISP、JTAG、时钟计算
LPC2104/05/06基于16位/32位ARM7TDMI-S CPU,该CPU支持实时仿真和嵌入式跟踪,并拥有128 KB的嵌入式高速Flash存储器。128位存储器接口和独特的加速架构使得32位代码可在最高时钟速率下执行。对代码大小要求严格的应用程序,可选用的16位Thumb模式以最小的性能损失换取超过30%的代码压缩。 由于尺寸小,功耗低,对于小型化是一项关键要求的应用(如门禁控制和销售点),这些微控制器是理想之选。它们具有各种串行通信接口和高达64 KB的片内SRAM选项,非常适合于通信网关和协议转换器、软调制解调器、语言识别和低端成像,提供大缓冲容量和高处理能力两大优势。多个32位定时器、PWM通道和32个GPIO线使
[单片机]
LPC2106 基本信息、ISP、JTAG、<font color='red'>时钟</font>计算
STM32通用定时器的几个重要寄存器
1..自动装载寄存器部分实际上包含两个寄存器: 自动装载寄存器缓冲寄存器 和 自动装载寄存器影子寄存器 其中自动装载寄存器缓冲寄存器可以有ARPE位控制是否起作用: ARPE = 0 写 自动装载寄存器 时,数据直接写入到 自动装载寄存器缓冲寄存器 的同时,立即更新到 自动装载寄存器影子寄存器 ARPE = 1 写 自动装载寄存器 时,数据直接写入到 自动装载寄存器缓冲寄存器 的同时,只有更新事件发生的时候,才更新到 自动装载寄存器影子寄存器 2.预分频器控制寄存器也分为两部分: 预分频器缓冲寄存器 和 预分频器影子寄存器 当更新事件发生的时候, 预分频器缓冲寄存器 的内容更新到 预分频器影子寄存器中 3.UDIS位作用:
[单片机]
英特尔推低电压酷睿2双核CPU 能耗不过17瓦
2月5日外电消息,英特尔公司已经推出了二款低电压版酷睿2双内核处理器。尽管还没有出现在正式报价单上,但名为L7200和L7400的这二款处理器已经出现在其网站上。 据channelregister网站报道称,L7200和L7400的时钟频率分别为1.33GHz和1.5GHz。它们都采用667MHz的前端总线,集成有4MB的二级缓存。二者的能耗都不超过17瓦。 这二款低电压版Merom芯片在2006年5月份首次出现在了英特尔的产品发布计划中,而且推出窗口是今年第一季度。英特尔下个季度还将推出低电压的U7500。 英特尔第二季度还将推出L7300和L7500,它们支持800MHz的前端总线,并采用Socket P接口。
[焦点新闻]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

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

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

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