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 ...
随机推荐
- JavaScript学习总结(三)——逻辑And运算符详解
在JavaScript中,逻辑 AND 运算符用双和号(&&)表示 1 var bTrue = true; 2 var bFalse = false; 3 var bResult = ...
- 重启oracle数据库的操作方法
在实际的应用中,有时候工作数据库需要重新启动.本文介绍了一个特别实用的操作步骤,希望对大家有所帮助. 1. 停应用层的各种程序 2. 停Oralce的监听进程 $ lsnrctl stop 3. 在独 ...
- 'PostBuildEvent' failed with error code '1' 'Unspecified error'( PostBuildEvent”失败,错误代码为“1”。“未指定的错误” )
这种错误很坑,2年前遇到一次,现在有遇到了(主要记不得上次怎么解决了的) 主要在于js文件文件修改保存的时候得以ansi格式保存,不能以utf-8 http://files.cnblogs.com/f ...
- Oracle 11g新特性 Interval Partition
分区(Partition)一直是Oracle数据库引以为傲的一项技术,正是分区的存在让Oracle高效的处理海量数据成为可能,在Oracle 11g中,分区技术在易用性和可扩展性上再次得到了增强.在1 ...
- 保姆级教程——Ubuntu16.04 Server下深度学习环境搭建:安装CUDA8.0,cuDNN6.0,Bazel0.5.4,源码编译安装TensorFlow1.4.0(GPU版)
写在前面 本文叙述了在Ubuntu16.04 Server下安装CUDA8.0,cuDNN6.0以及源码编译安装TensorFlow1.4.0(GPU版)的亲身经历,包括遇到的问题及解决办法,也有一些 ...
- C++设计模式之解释器模式
2013年07月06日 19:43:00 阅读数:8853 概述: 未来机器智能化已然成为趋势,现在手机都能听懂英语和普通话,那我大中华几万种方言的被智能化也许也是趋势,我们的方言虽然和普通话相似,但 ...
- openssl 非对称加密DSA,RSA区别与使用介绍(转)
openssl 非对称加密DSA,RSA区别与使用介绍(转) 博客分类: OS.Linux Security 在日常系统管理工作中,需要作一些加解密的工作,通过openssl工具包就能完成我们很多 ...
- 一些java的部署执行编译等命令
编译: javac 参数 -d 指定编译后文件的位置 java 执行java文件 java生成jar文件 java执行jar文件 java生成war文件 war包是一种将web程序捆绑到单个文件上的一 ...
- 打开WORD文档出错提示
打开WORD文档出错提示: Microsoft Office Word 遇到问题需要关闭.我们对此引起的不便表示抱歉. 您正在处理的信息有可能丢失.Microsoft Office Word 可以尝试 ...
- 20165210 Java第四周学习总结
20165210 Java第四周学习总结 教材学习内容 第五章学习总结 子类与父类: 子类: class 子类名 extends 父类名 { ... } 类的树形结构 子类的继承性: 子类和父类在同一 ...