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 ...
随机推荐
- Splunk Enterprise architecture——转发器本质上是日志收集client附加负载均衡,indexer是分布式索引,外加一个集中式管理协调的中心节点
Splunk Enterprise architecture and processes This topic discusses the internal architecture and proc ...
- 管道的创建与读写pipe
1.管道的创建 #include <unistd.h> int pipe(int pipefd[2]); linux下创建管道可以通过函数pipe来完成.该函数如果调用成功,数组中将包含两 ...
- 守护进程的创建(syslog函数)
守护进程(daemon)是指在后台运行的,没有控制终端与之相连的进程.它独立于控制终端,通常周期性的执行某种任务. 守护进程是一种很有用的进程.Linux的大多数服务器就是用守护进程的方式实现的,如I ...
- HDU 1714 math
#include<stdio.h>#include<string.h>#include<iostream>#include<iomanip>#inclu ...
- POJ 2663 Tri Tiling 矩阵快速幂 难度:3
Tri Tiling Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 7841 Accepted: 4113 Descri ...
- POJ 1947 Rebuilding Roads 树形dp 难度:2
Rebuilding Roads Time Limit: 1000MS Memory Limit: 30000K Total Submissions: 9105 Accepted: 4122 ...
- Windows 7 英文版操作系统中文软件乱码解决方法
http://blog.csdn.net/lqhbupt/article/details/18863243
- ssh的配置,ssh打开密钥登陆,关闭密码登陆。
刚装玩fedora,那么我们就以fedora为例来说一下怎么配置: 1.先确认是否已安装ssh服务: [root@localhost ~]# rpm -qa | grep openssh-server ...
- L215 Visual impairment
Visual impairment(视觉障碍)carries with it a reduced or restricted ability to travel through one’s physi ...
- 目录遍历漏洞简介 转载于h3c
参考文章: 攻防:目录遍历漏洞简介