JZ2440 裸机驱动 第10章 系统时钟和定时器


对于S3C2410,HDIVN是CLKDIVN寄存器的位[1];
# MMU_SetAsyncBusMode
mrc p15, , r0, c1, c0,
orr r0, r0, #R1_nF:OR:RL_iA
mcr p15, , r0, c1, c0,



n为0~4,这两个寄存器都只用到位[15:0],TCNTBn中保存定时器的初始值,TCMPBn
10.1.3 WATCHDOG定时器
{prescaler value} = 0~255;{divider value} = 16、32、64、128
行号
23行 #define s3c2410_MPLL_200MHz ((0x5c << 12) | (0x04 << 4) | (0x00)) /*MDIV = 0x5c, PDIV = 0x04, SDIV = 0*/
24行 #define s3c2440_MPLL_200MHz ((0x5c << 12) | (0x01 << 4) | (0x02))
25行 /*
26行 *对于MPLLCON寄存器,[19:12]为MDIV、[1:0]为SDIV
27行 *有如下公式:
28行 * s3c2410:MPLL(FCLK) = (m * Fin)/(p * 2^s)
29行 * s3c2440:MPLL(FCLK) = (2*m*Fin)/(p * 2^s)
30行 * 其中:m = MDIV + 8,p = PDIV +2, s = SDIV
31行 *对于本开发板,Fin = 12MHz
32行 *设置CLKDIVN,令分频比为:FCLK:HCLK:PCLK = 1:2:4
33行 *FCLK = 200MHz,HCLK = 100MHz,PCLK = 50MHz
34行 */
35行 void clock_init(void)
36行 {
37行 //LOCKTIME = 0x00ff ffff //使用默认值即可
38行 CLKDIVN = 0x03; //FCLK:HCLK:PCLK = 1:2:4,HDIVN = 1, PDIVN = 1
39行
40行 /*如果HDIVN非0,CPU的总线模式应该从“fast bus mode”变为“asynchronous bus mode”*/
41行 __asm__(
42行 "mrc p15, 0, r1, c1, c0, 0\n" //读出控制寄存器
43行 "orr r1, r1, #0xc0000000\n" //设置为“asynchronous bus mode”
44行 "mcr p15, 0, r1, c1, c0, 0\n" //写入控制寄存器
45行 )
46行
47行 /*判断是s3c2410还是s3c2440*/
48行 if((GSTATUS1 == 0x32410000) || (GSTATUS1 == 0x32410002))
49行 {
50行 MPLLCON = S3C2410_MPLL_200MHz; /*现在,FCLK = 200MHz,HCLK = 100MHz,PCLK = 50MHz*/
51行 }
52行 else
53行 {
54行 MPLLCON = S3C2440_MPLL_200MHz;
55行 }
56行 }
57行
init.c->clock_init.c()
MPLL(FCLK) = (m * Fin)/(p * ^s) = (0x5c + ) * 12MHz/((0x04 + )*^) = 200MHz
HCLK = FCLK/ = 100MHz
PCLK = FCLK/ = 50MHz
行号
58行/*
59行*设置存储控制器以使用SDRAM
60行*/
61行void memsetup(void)
62行{
63行 volatile unsigned long *p = (volatile unsigned long *)MEM_CTL_BASE;
64行
65行 /*这个函数之所以这样赋值,而不是像前面的实验(比如mmu实验)那样将配置值
66行 *写在数组中,是因为要生成位置无关代码,使得这个函数可以被复制到
67行 *SDRAM之前就可以在Steppingstone中运行
68行 */
69行 /*存储控制器13个寄存器的值*/
70行 p[] = 0x22011110; //BWSCON
71行 P[] = 0x00000700; //BANKCON0
72行 p[] = 0x00000700; //BANKCON1
73行 p[] = 0x00000700; //BANKCON2
74行 p[] = 0x00000700; //BANKCON3
75行 p[] = 0x00000700; //BANKCON4
76行 p[] = 0x00000700; //BANKCON5
77行 p[] = 0x00018005; //BANKCON6
78行 p[] = 0x00018005; //BANKCON7
79行
80行 /*REFRESH,
81行 *HCLK = 12MHz :0x008c 07a3
82行 *HCLK = 100MHz:0x008c 04f4
83行 */
84行 p[] = 0x008c04f4;
85行 p[] = 0x000000b1; //BANKSIZE
86行 p[] = 0x00000030; //MRSRB6
87行 p[] = 0x00000030; //MRSRB7
88行}
89行
init.c->memsetup()
行号
124行/*
125行*Timer input clock Frequency = PCLK / (prescaler value + 1) / (divider value)
126行*(prescaler value) = 0~255
127行*(divider value) = 2、4、8、16
128行*本实验的Timer0的时钟频率 = 100MHz/(99 + 1)/(16) = 62500Hz
129行*设置Timer0 0.5s触发一次中断
130行*/
131行void timer0_init(void)
132行{
133行 TCFG0 = ; //预分频器 0 = 99
134行 TCFG1 = 0x03; //选择16分频
135行 TCNTB0 = ; //0.5s触发一次中断
136行 TCON |= ( << ); //手动更新
137行 TCON = 0x09; //自动加载,清除“手动更新”位,启动定时器0
138行}
139行
init.c->timer0_init()
行号
140行/*
141行*定时器0中断使能
142行*/
143行void init_irq(void)
144行{
145行 //定时器0中断使能
146行 INTMSK &= (~( << ));
147行}
init.c->init_irq()
行号
03行void Timer0_Handler(void)
04行{
05行 /*
06行 *每次中断令3个LED改变状态
07行 */
08行 if(INTOFFSET == )
09行 {
10行 GPFDAT = ~(GPFDAT & (0x7 << ));
11行 }
12行 //清除中断
13行 SRCPND = << INTOFFSET;
14行 INTPND = INTPND;
15行}
interrupt.c
JZ2440 裸机驱动 第10章 系统时钟和定时器的更多相关文章
- JZ2440 裸机驱动 第11章 通用异步收发器UART
本章目标: 了解UART原理: 掌握S3C2410/S3C2440中UART的使用 11.1 UART原理及UART内部使用方法 11.1.1 UART原理说明 UART用于传输串行数据: ...
- JZ2440 裸机驱动 第13章 LCD控制器(1)
本章目标 了解LCD显示器的接口及时序: 掌握S3C2410/S3C2440 LCD控制器的使用方法: 了解帧缓冲区的概念,掌握如何设置帧缓冲区来显示图像: 13.1 LCD和LCD控制器 13.1 ...
- JZ2440 裸机驱动 第14章 ADC和触摸屏接口
本章目标: 了解S3C2410/S3C2440和触摸屏的结构: 了解电阻触摸屏的工作原理和等效电路图: 了解S3C2410/S3C2440触摸屏控制器的多种工作模式: ...
- JZ2440 裸机驱动 第6章 存储控制器
本章目标: 了解S3C2410/S3C2440地址空间的布局 掌握如何通过总线形式访问扩展的外设,比如内存.NOR Flash.网卡等 ························ ...
- JZ2440 裸机驱动 第12章 I2C接口
本章目标: 了解I2C总线协议: 掌握S3C2410/S3C2440中I2C接口的使用方法: 12.1 I2C总线协议及硬件介绍 12.1.1 I2C总线协议 1 I2C总线的概念 2 I2C总线的信 ...
- JZ2440 裸机驱动 第8章 NAND Flash控制器
本章目标 了解NAND Flash 芯片的接口 掌握通过NAND Flash控制器访问NAND Flash的方法 8.1 NAND Flash介绍和NAND Flash控制器使用 NAND ...
- JZ2440 裸机驱动 第7章 内存管理单元MMU
本章目标: 了解虚拟地址和物理地址的关系: 掌握如何通过设置MMU来控制虚拟地址到物理地址的转化: 了解MMU的内存访问权限机制: 了解TLB.Cache.Write ...
- JZ2440 裸机驱动 第5章 GPIO接口
本章目标: 掌握嵌入式开发的步骤:编程.编译.烧写程序.运行 通过GPIO的操作了解软件如何控制硬件 5.1 GPIO硬件介绍 S3C2440A有130个多功能输入/输出口引脚 ...
- JZ2440 裸机驱动 第9章 中断体系结构
本章目标: 了解ARM体系CPU的7种工作模式 了解S3C2410/S3C2440中断体系结构 掌握S3C2410/S3C2440的中断服务程序的编写方法 9.1 S3C241 ...
随机推荐
- OC MRC之循环引用问题(代码分析)
// // main.m // 07-循环引用 // // Created by apple on 13-8-9. // Copyright (c) 2013年 itcast. All rights ...
- OC 类的本质和分类
一.分类 (一)分类的基本知识 概念:Category 分类是OC特有的语言,依赖于类. 分类的作用:在不改变原来的类内容的基础上,为类增加一些方法. 添加一个分类: 文件结构图: 在分类中添加一 ...
- dubbo为consumer创建代理
ReferenceConfig.init()方法中获取到了最终的代理对象,先观察一下代理对象的视图. 默认使用javassist生成动态类,可配置proxy为jdk,则使用jdk动态代理: <d ...
- React脚手架create-react-app+elementUI使用
一.介绍 1.create-react-app是FaceBook官方发布了一个无需配置的.用于快速构建开发环境的脚手架工具. 2.优点 a.无需配置:官方的配置堪称完美,几乎不用你再配置任何东西,就可 ...
- 我的一起开源网 www.17ky.net上线了
.net开源生态的落后,使得.net开发人员所拥有的开源资源比其他语言的开发者少了很多,这也使得笔者很早之前就喜欢收集各种开源项目,经常会去逛codeplex,开源中国社区等网站,同时也喜欢在自己或公 ...
- 《Python》 property、classmethod、staticmethod、isinstance、issubclass
一.property property是一个装饰器函数 装饰器函数的使用方法:在函数.方法.类的上面一行直接@装饰器的名字 装饰器的分类: 1.装饰函数 2.装饰方法:property 3.装饰类 i ...
- DevExpress XtraScheduler日程管理控件应用实例(1)-- 基本使用
在一些应用场景中,我们可能需要记录某一天,某个时段的日程安排,那么这个时候就需要引入了 DevExpress 的日程控件XtraScheduler 了,这个控件功能非常强大,提供了很好的界面展现方式, ...
- JVM自动内存管理:对象判定和回收算法
可回收对象的判断方法 1.引用计数算法 2.可达性分析算法 引用计数算法 给对象中添加一个引用计数器,每当有一个地方引用它时,计数器值就加1:当引用失效时,计数器值就减1:任何时刻计数器为0的对象就是 ...
- Redis Cluster(Redis集群)的搭建和使用
Reids集群准备知识: (1)Redis集群介绍 Redis 集群是一个提供在多个Redis间节点间共享数据的程序集. Redis集群并不支持处理多个keys的命令,因为这需要在不同的节点间移动数据 ...
- oracle function用法(本文来自百度文库)
函数调用限制 1.SQL语句中只能调用存储函数(服务器端),而不能调用客户端的函数 2.SQL只能调用带有输入参数,不能带有输出,输入输出函数 3.SQL不能使用PL/SQL的特有数据类型(boole ...