时钟系统与UART
关于时钟设置原理:
关于如何设置系统时钟的思路。
其中锁定时间需要一个寄存器,PLL需要一个寄存器(MPLLCL),分频还需要一个寄存器,总计三个寄存器。步骤如下:
1. 上电后,FCLK=Fin
2. 启动MPLL,经过LOCKTIME后,频率达到要求。
3. 具体寄存器设置如下:
的比例。
If HDIVN is not 0, the CPU bus mode has to be changed from the fast bus mode to the asynchronous
bus mode using following instructions(S3C2440 does not support synchronous bus mode).
MMU_SetAsyncBusMode
mrc p15,0,r0,c1,c0,0
orr r0,r0,#R1_nF:OR:R1_iA
mcr p15,0,r0,c1,c0,0
代码例程如下(此处仅为时钟初始化代码):
- /*
- * 关闭WATCHDOG,否则CPU会不断重启
- */
- 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))
- /*
- * 对于MPLLCON寄存器,[19:12]为MDIV,[9:4]为PDIV,[1:0]为SDIV
- * 有如下计算公式:
- * S3C2410: MPLL(FCLK) = (m * Fin)/(p * 2^s)
- * S3C2440: MPLL(FCLK) = (2 * m * Fin)/(p * 2^s)
- * 其中: m = MDIV + 8, p = PDIV + 2, s = SDIV
- * 对于本开发板,Fin = 12MHz
- * 设置CLKDIVN,令分频比为:FCLK:HCLK:PCLK=1:2:4,
- * FCLK=200MHz,HCLK=100MHz,PCLK=50MHz
- */
- void clock_init(void)
- {
- // LOCKTIME = 0x00ffffff; // 使用默认值即可
- CLKDIVN = 0x03; // FCLK:HCLK:PCLK=1:2:4, HDIVN=1,PDIVN=1
- /* 如果HDIVN非0,CPU的总线模式应该从“fast bus mode”变为“asynchronous bus mode” */
- __asm__(
- "mrc p15, 0, r1, c1, c0, 0\n" /* 读出控制寄存器 */
- "orr r1, r1, #0xc0000000\n" /* 设置为“asynchronous bus mode” */
- "mcr p15, 0, r1, c1, c0, 0\n" /* 写入控制寄存器 */
- );
- /* 判断是S3C2410还是S3C2440 */
- if ((GSTATUS1 == 0x32410000) || (GSTATUS1 == 0x32410002))
- {
- MPLLCON = S3C2410_MPLL_200MHZ; /* 现在,FCLK=200MHz,HCLK=100MHz,PCLK=50MHz */
- }
- else
- {
- MPLLCON = S3C2440_MPLL_200MHZ; /* 现在,FCLK=200MHz,HCLK=100MHz,PCLK=50MHz */
- }
- }
UART的使用
1. 原理图
】
2. 数据传输流程
PS:S3C2440有深度为64bit的FIFO
UART的使用流程:
Ucon1,ucon2,ucon3的具体使用查芯片手册
PS:由于使用了SDRAM,但芯片上电后处于片内ram,即0地址,需要使用位置无关码来避免错误!
位置无关码实例:
- void memsetup(void)
- {
- volatile unsigned long *p = (volatile unsigned long *)MEM_CTL_BASE;
- /* 这个函数之所以这样赋值,而不是像前面的实验(比如mmu实验)那样将配置值
- * 写在数组中,是因为要生成”位置无关的代码”,使得这个函数可以在被复制到
- * SDRAM之前就可以在steppingstone中运行
- */
- /* 存储控制器13个寄存器的值 */
- 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
- /* REFRESH,
- * HCLK=12MHz: 0x008C07A3,
- * HCLK=100MHz: 0x008C04F4
- */
- p[9] = 0x008C04F4;
- p[10] = 0x000000B1; //BANKSIZE
- p[11] = 0x00000030; //MRSRB6
- p[12] = 0x00000030; //MRSRB7
- bl disable_watch_dog @ 关闭WATCHDOG,否则CPU会不断重启
- // bl是位置无关码,相当于:PCnew = PC + 偏移
- // PCnew = (4+8) + 0x28 = 0x34
- //ldr pc, =disable_watch_dog /* 这样写将出错 */
时钟系统与UART的更多相关文章
- 9.S5PV210的时钟系统
1.时钟域:MSYS.DSYS.PSYS(1)因为S5PV210的时钟体系比较复杂,内部外设模块太多,因此把整个内部的时钟划分为3大块,叫做3个域.(2)MSYS: CPU(Cortex-A8内核). ...
- S3C2440时钟系统详解
在讲述系统时钟之前,因为这些设备都是挂靠在系统时钟上的,所以必须先说系统时钟,S3C2440的时钟系统如下 外部时钟源分两种,晶振或者外部频率,由om3-2选择,时钟电路根据两种选择也有两种 我们来分 ...
- SoC时钟系统简介
1.SoC的时钟获得一般有: * 外部直接输入时钟信号,SoC有个引脚用来输入外部时钟信号,用的很少. * 外部晶振+内部时钟发生器产生时钟,大部分低频单片机都是这么工作的. * 外部晶振+内部时钟发 ...
- STM32时钟系统
一.在STM32中,有五个时钟源,为HSI.HSE.LSI.LSE.PLL. ①HSI是高速内部时钟,RC振荡器,频率为8MHz. ②HSE是高速外部时钟,可接石英/陶瓷谐振器,或者接外部时钟源,频率 ...
- 总结:S5PV210时钟系统
在数据手册<S5PV210_UM_REV1.1>中的section 02_system/3 CLOCK CONTROLLER(354页) 一.时钟域 在S5PV210的SoC中,时钟系 ...
- STM8时钟系统详解
就我个人看来,研究一块单片机,分为新手和老手两种模式,新人迫切的想先用,你得告诉他们怎么样最快的写出一个能跑起来的程序,告诉他们每一个外设的使用方式,老手不同,用的单片机多了外设对于他们而言没太多好奇 ...
- Stm32复习之时钟系统
地点:南图 这部分的内容是整个STM32学习知识的核心,不管是什么微控制器处理器,时钟系统都是其核心类似于人之心脏,因此学好理解这一章节至关重要. 为了便于理解这一系统,将从以下几个层次来讲.(忘了是 ...
- 关于STM32时钟系统
初学STM32,感觉最蛋疼的是它的时钟系统,每次看到它的那个时钟树就有点晕,虽然看了很多这方面的资料,甚至也已经写过很多STM32的模块代码,做过一些小项目,但一直还是对这一块模模糊糊,似懂非懂,所以 ...
- IDC:时钟系统
ylbtech-IDC:时钟系统 主要应用于要求有统一时间进行生产,调度的单位如:电力,机场.轻轨.地铁.体育场馆.酒店.医院.部队.油田.水利工程等领域.大区域时钟系统主要由母钟和多台子钟构成. 1 ...
随机推荐
- spring-boot之入门实践
spring-boot是spring的一种微服务框架,spring-boot的出现是为了解决以往spring项目中xml文件繁琐的配置.具体介绍参考:http://docs.spring.io/spr ...
- C# Winform软件多语言(汉语、英语。。。)界面的切换,低耦合
Winform软件多语言切换,个人见解,降低软件对语言展示的耦合度. 1.设计图(自己瞎画的呵呵) 2.做的小demo,界面如下 3.下面是代码展示部分 1)Form1代码展示 namespace W ...
- MySQL prompt命令
修改提示符,设置后挺方便的 例如: 几个好用的参数 \d 当前数据库 \u 当前用户 \h 当前主机 更多参数可以参考mysol官方文档 参考文档:https://dev.mysql.com/doc/ ...
- Java 线程--实现java.lang.Runnable接口实现线程
Java线程的第一种实现方式,主要分两步,第一步是继承java.lang.Thread; 第二步是重写run()方法.接下来我们来看Java线程的第二种实现方式,也是分为两步,第一步,写一个类实现ja ...
- log4j的简单使用
引入jar包org.apache.log4j.Logger,项目src目录下建立一个log4j.properties配置文件 log4j.rootLogger=INFO,A1,R log4j.appe ...
- 六 Selector
选择器是java NIO中能够检测一到多个NIO通道(Channel),并能知晓是否为诸如读写时间做好准备的组件.这样,一个单独的线程可以管理多个channel,从而管理多个网络连接 为什么用Sele ...
- jxls实现动态图表
此文章是基于 jxls实现基于excel模板的报表 一. 制作excel动态图表模板 1. 安装 excel 2003 ,新建文件,命名为:runRecord.xls 2. 创建两个表格,分别命名为: ...
- ccf-201609-2 火车购票
问题描述 请实现一个铁路购票系统的简单座位分配算法,来处理一节车厢的座位分配. 假设一节车厢有20排.每一排5个座位.为方便起见,我们用1到100来给所有的座位编号,第一排是1到5号,第二排是6到10 ...
- vs2017源文件创建代码自动版权声明注释
原来在vs2015下用的挺好,顺便移植到2017下. 用文本打开,在其头部加上 “C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterpr ...
- 【转】Web服务器之Nginx详解(理论部分)
大纲 一.前言 二.Web服务器提供服务的方式 三.多进程.多线程.异步模式的对比 四.Web 服务请求过程 五.Linux I/O 模型 六.Linux I/O 模型具体说明 七.Linux I/O ...