s3c2410时钟信号:FCLK、HCLK和PCLK

本文详细介绍了S3C2410芯片中FCLK、HCLK和PCLK三个时钟的用途及其与AHB、APB总线的关系。并通过代码示例展示了如何使用C语言获取这些时钟的频率,特别提到了uclk时钟的作用。文章还概述了AMBA总线规范,包括AHB、ASB和APB的不同应用场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

s3c2410 有三个时钟FLCK 、HCLK 和PCLK (这3个时钟都是核心时钟)
s3c2410 芯片有这么一段话:
FCLK is used by ARM920T ,内核时钟,主频
HCLK is used for AHB bus, which is used by the ARM920T, the memory controller, the interrupt controller, the LCD controller, the DMA and USB host block. 也就是为AHB总线上的外设提供时钟信号,包括USB时钟。 AHB总线用于连接高速外设
PCLK is used for APB bus, which is used by the peripherals such as WDT, IIS, I2C, PWM timer, MMC interface,ADC, UART, GPIO, RTC and SPI. 也就是为APB总线上的外设提供时钟信号,即IO接口时钟,串口的时钟设置就是从PCLK来的。APB总线用于连接低速外设
The S3C2410X supports selection of Dividing Ratio betweenFCLK, HLCK and PCLK. This ratio is determined by HDIVN and PDIVN of CLKDIVN control register.
s3c2410可通过设置CLKDIVN控制寄存器的HDIVN位(第1位)和PDIVN位(第0位)来改变FCLK, HLCK 和 PCLK的比率。
那么如何获取FCLK, HLCK 和 PCLK的时钟频率呢?
可先通过clk_get获取一个clk结构体
[cpp]  view plain copy
  1. /* clk_get获取一个名为id的时钟 
  2. * 输入参数dev:    可以为NULL 
  3. * 输入参数id:     时钟名称,如fclk、hclk、pclk等 
  4. * 返回值:         返回该时钟的clk结构体 
  5. */  
  6. struct clk *clk_get(struct device *dev, const char *id)  
  7.   
  8. struct clk {  
  9.      struct list_head list;  
  10.      struct module *owner;  
  11.      struct clk *parent;  
  12.      const char *name; /* 该时钟名称 /  
  13.      int id;  
  14.      int usage;  
  15.      unsigned long rate; /* 时钟频率 /  
  16.      unsigned long ctrlbit;  
  17.   
  18.      int (*enable)(struct clk *, int enable);  
  19.      int (*set_rate)(struct clk *c, unsigned long rate);  
  20.      unsigned long (*get_rate)(struct clk *c);  
  21.      unsigned long (*round_rate)(struct clk *c, unsigned long rate);  
  22.      int (*set_parent)(struct clk *c, struct clk *parent);  
  23. };  

再将clk_get返回的clk结构体传递给clk_get_rate,获取该时钟的频率
原型为: unsigned long clk_get_rate(struct clk *clk);
看一个例子:
[cpp]  view plain copy
  1. printk(KERN_DEBUG"fclk = %d, pclk = %d, hclk = %d, uclk = %d\n",  
  2.              clk_get_rate(clk_get(NULL, "fclk")),  
  3.              clk_get_rate(clk_get(NULL, "hclk")),  
  4.              clk_get_rate(clk_get(NULL, "pclk")),  
  5.              clk_get_rate(clk_get(NULL, "uclk")));  

这里出现了另一个时钟uclk,专门给usb供给时钟信号。uclk是外部时钟源,由s3c2410芯片的gph8/uclk管脚引入,给uart提供外部时钟信号,以获取更精确地时钟频率。
关于AMBA片上总线
AMBA(Advanced Microcontroller Bus Architecture)是由ARM公司提出的片上总线规范。AMBA 2.0规范包括四个部分:AHB(AMBA高性能总线)、ASB(AMBA系统总线)、APB(AMBA外设总线)和Test Methodology。
the Advanced High-performance Bus(AHB)应用于连接高性能、高时钟频率的系统模块(如CPU、DMA和DSP等)它构成了高性能的系统骨干总线( back-bone bus )。AHB bus上的外设有LCD controller(CONT代表controller,控制器)、USB Host CONT、ExtMaster、Nand CONT和nand flash boot loader、bus CONT、interrupt CONT、power management、memory CONT(sram/nor/sdram等)。
the Advanced System Bus(ASB)是第一代AMBA系统总线,同AHB相比,它数据宽度要小一些,它支持的典型数据宽度为8位、16位、32位。
the Advanced Peripheral Bus(APB)是本地二级总线(local secondary bus ),通过桥和AHB/ASB相连。它主要是为了满足不需要高性能流水线接口或不需要高带宽接口的设备的互连。APB bus上的外设有UART、USB device、SDI/MMC、Watch Dog Timer、bus CONT、spi、iic、iis、gpio、rtc、adc、timer/pwm。
定义:上下文无关文法是一种描述形式语言的数学模型,由四元组 G=(V,Σ,R,S) 构成。其中,V 是非终结符集合,Σ 是终结符集合,R 是产生式规则集合,S 是起始符号。 示例:在文档中,有 G(E) 和 G(S) 等上下文无关文法,用于描述表达式的结构。例如,G(E) 的定义如下: E→T∣E+T∣E−T T→F∣T∗F∣T/F F→(E)∣i 这里,E、T、F 是非终结符,而 +、−、∗、/、(、) 和 i 是终结符。该文法用于描述算术表达式的构造方式。 推导是根据文法规则从起始符号逐步生成句子的过程,分为两种类型: 最左推导:始终扩展当前最左边的未展开非终结符。 最右推导:始终扩展当前最右边的未展开非终结符。 例如,在 G(N) 的上下文无关文法中,数字串的最左推导过程可以表示为: N⇒ND⇒NDD⇒⋯⇒DDD⇒0DDD⇒01DD⇒012D⇒0127 语法树是通过图形方式展示字符串如何根据文法规则进行推导的结构。它清晰地反映了推导过程中的层次关系。例如,对于表达式 i+i∗i,其语法树可以直观地展示操作符和操作数之间的层次结构。 如果一个句子存在多个不同的语法树,即可以通过多种推导过程生成,那么这个文法就被认为是二义性的。例如,句子 iiiei 有两个可能的语法树,这表明该文法存在二义性。 在自动机理论中,确定化是指将非确定有限自动机(NFA)转换为确定有限自动机(DFA),以确保每个状态在读取输入符号时只有一个确定的转移路径。最小化则是指去除 DFA 中的冗余状态,以获得更简洁的模型。文档中提供了 DFA 确定化和最小化的详细步骤示例。 正则表达式是一种用于匹配字符串模式的工具。文档中给出了许多正则表达式的例子,例如 (0∣1)∗01,用于匹配所有以“01”结尾的由 0 和 1 组成的字符串。正则表达式在文本处理和模式匹配中具有广泛应用。 综上所述,编译原理不仅涉
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值