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 ...
随机推荐
- Vue--- 手动禁止ESlint
使用vue-cli构建项目时,通常会问你要不要 “Use ESlint to lint your code?” 建议使用,这样会有助于规范我们的代码(这也是一种审美),ESlint的规范就不说了,写多 ...
- custom usb-seriel udev relus for compatible usb-seriel devices using kermit
custom usb-seriel udev relus for compatible usb-seriel devices add-pl2303.rules: ACTION== "add& ...
- SQL Server 调优系列基础篇 - 并行运算总结(一)
前言 上三篇文章我们介绍了查看查询计划的方式,以及一些常用的连接运算符.联合运算符的优化技巧. 本篇我们分析SQL Server的并行运算,作为多核计算机盛行的今天,SQL Server也会适时调整自 ...
- Html.RenderPartial("")与Html.Partial("")区别
这个HtmlHelper的扩展方法Partial,和HtmlHelper自带的 RenderPartial功能比较接近, 两者都可以输出一个Partial视图:其区别如下: <一>. Pa ...
- bzoj1053&&51nod1060
题解: 其实就是求1-n之中拥有最多约数的数 一个数x的质因数分解为p1^e1*p2^e2*...*pn^en,则正因数的个数为(e1+1)(e2+1)...(en+1) 那么发现,正因数的个数和p没 ...
- 纪念第一次ak。。。
1.MM的数学作业 [题目大意] 今天,MM在上数学课,数学课的主题是函数.讲完以后老师留了一个家庭作业,让同学们回家思考.题目如下: 定义一个函数,F(x)表示x转成二进制后,二进制中“1”的个数. ...
- DevExpress v18.1新版亮点——WPF篇(一)
用户界面套包DevExpress v18.1日前终于正式发布,本站将以连载的形式为大家介绍各版本新增内容.本文将介绍了DevExpress WPF v18.1 的新功能,快来下载试用新版本!点击下载& ...
- 【DevExpress v17.2新功能预告】WinForms上的图表增强
在WinForms Charts v17.2中,我们新增了一些有用的功能,开发人员和最终用户可能都会喜欢. 基于标准的过滤 Chart控件已经支持一系列的过滤,但是在这个版本中,我们用FilterCr ...
- spring事务管理及相关知识
最近在项目中遇到了spring事务的注解及相关知识,突然间感觉自己对于这部分知识只停留在表面的理解层次上,于是乎花些时间上网搜索了一些文章,以及对于源码的解读,整理如下: 一.既然谈到事务,那就先搞清 ...
- gulp 系统教程
移步: http://www.cnblogs.com/2050/p/4198792.html gulp外挂 加md5 版本号 自动合并图片并修改css的坐标 一个系统列子 gulp可以做哪些事情