type
status
date
slug
summary
tags
category
icon
password
5.1 S3C2440综述
5.1.0 S3C2440A简介
- S3C2440A 简介
- 三星公司 推出的 16/32位 RISC 微处理器 S3C2440A,为手持设备和一般类型应用提供了 低价格、低功耗、高性能 小型微控制器 的解决方案。
S3C2440A 采用了 ARM920T 的内核,0.13um 的 CMOS 标准宏单元和存储器单元。特别适合于对 成本 和 功率 敏感型的应用。它采用了新的总线架构 AMBA。
- AMBA(Advanced Micro controller Bus Architecture高级的微控制器总线架构)包括四个部分
- AHB、ASB、APB和Test Methodology(测试方法)
- S3C2440A特点
- 其核心处理器(CPU)是由 ARM公司 设计的 16/32 位 ARM920T 的 RISC 处理器。ARM920T 实现了 MMU,AMBA BUS 和 Harvard 高速缓冲体系结构。这一结构具有独立的 16KB指令Cache 和 16KB数据Cache。每个都是由具有 8字长 的行组成。通过提供一套完整的通用系统外设,S3C2440A 减少 整体系统成本 和 无需配置额外的组件
5.1.0.1 S3C2440A 片上功能(-)
- 1.2V 内核供电,1.8V/2.5V/3.3V存储器供电,3.3V 外部I/O供电,具备 16KB的I-Cache 和 16KB的D-Cache/MMU微处理器;
- 外部存储控制器(SDRAM 控制和片选逻辑);
- LCD 控制器(最大支持 4K色STN 和 256K色TFT)提供1通道LCD 专用DMA;
- 通道DMA并有外部请求引脚
- 3 通道UART(串行异步同信) (IrDA1.0,64字节Tx FIFO,64字节Rx FIFO);
- 2 通道SPI(串行外设接口);
- 1 通道IIC-BUS接口(串行总线);
- 1通道IIS-BUS音频编解码器接口;
- AC’97 (音频标准)解码器接口;
- 兼容SD主接口协议1.0版 和 MMC 卡协议2.11兼容版
- 2端口USB主机/1端口USB设备(1.1 版)
- 4通道PWM定时器 和 1通道内部定时器 / 看门狗定时器
- 8通道10比特ADC 和 触摸屏接口
- 具有日历功能的RTC
- 相机接口(最大4096 × 4096像素的投入支持。2048 × 2048像素的投入,支持缩放);
- 130个通用I/O口 和 24通道外部中断源
- 具有普通,慢速,空闲和掉电模式;
- 具有PLL(锁相环)片上时钟发生器。
5.1.1 S3C2440信号描述
5.1.1.1 管脚分配
289个引脚的编号与功能分配详见数据手册。
5.1.1.2 总线控制信号
都是手册,如下图:
- OM信号
- 上拉电阻与下拉电阻
- 加上拉电阻(也就是,引脚通过上拉电阻接电源高电平)使得该引脚在复位时输入为 1
- 加下拉电阻(也就是,引脚通过下拉电阻接地 )使得该引脚在 复位时 输入为0.
- Nand-boot: 从NAND类型的flash 启动系统
- BANK0 的数据总线(nGCS0)宽度:
- BANK0 的数据总线必须首先设置成 16位或32位的,因为 BANK0 通常作为 引导ROM区(映射到地址0X00000000)。在复位时,系统将检测 OM[1:0] 上的逻辑电平,并依据这个电平来决定 BANK0 区存储器的总线宽度
- 其他bank的数据总线宽度:其他bank的数据总线可在系统启动后,由程序来进行设置。
- DATA总线:DATA总线的宽度可通过编程设定为 8/16/32位:这个与存储单元的位宽相对应。
- nOE:输出使能 output enable 对外部存储来说的,就是读操作。
- nXBREQ 和 nXBACK :DMA控制
- nWAIT:扩展同步模式
5.2 S3C2440存储控制器(*)
5.2.1 S3C2440存储控制器特性
S3C2440的存储控制器有以下特性:
- 小/大端(通过软件选择):通过 CP15 协处理器的 寄存器1 的 bit7位** 进行 控制。
- 地址空间:每BANK有128MB(共有1GB/8BANKS);
- 除BANK0(只能是16/32位宽)之外,其他BANK都具有可编程的访问大小(8/16/32位);
- 总共8个存储器BANK,6个是ROM(Flash)、SRAM等类型存储器BANK,剩下的2个可以为ROM、SRAM、SDRAM等存储器BANK
- SRAM
- 优点:速度快,不必配合内存刷新电路,可提高整体的工作效率。
- 缺点:集成度低,功耗较大,相同的容量体积较大,而且价格较高,少量用于关键性系统以提高效率。
- 使用场景
- CPU与主存之间的高速缓存
- CPU内部的L1/L2或外部的L2高速缓存
- CPU外部扩充用的COAST高速缓存
- CMOS 146818芯片(RT&CMOS SRAM)
- SDRAM:同步动态随机存取存储器,同步是指 Memory 工作需要同步时钟,内部命令的发送与数据的传输都以它为基准;动态是指存储阵列需要不断的刷新来保证 数据不丢失;随机是指数据不是线性依次存储,而是由指定地址进行数据读写。
- SRAM与SDRAM的比较
- SRAM是靠双稳态触发器来记忆信息的;SDRAM是靠MOS电路中的栅极电容来记忆信息的
- 由于电容上的电荷会泄漏,需要定时给与补充,所以动态RAM需要设置刷新电路。但动态RAM比静态RAM集成度高、功耗低,从而成本也低,适于作大容量存储器。所以主内存通常采用SDRAM,而高速缓冲存储器(Cache)则使用SRAM,在存取速度上,SRAM>SDRAM。另外,内存还应用于显卡、声卡及CMOS等设备中,用于充当设备缓存或保存固定的程序及数据。
- 7个固定的存储器BANK的起止地址;
- 最后一个BANK的起始地址是可调整的;
- 最后2个BANK的大小是可编程的;
- 所有存储器BANK的访问周期都是可编程的;
- 总线访问周期可以通过插入外部等待(nWAIT)来延长(就是上面总线信号中的nWAIT):nWAIT是信号要求延长一个当前总线周期,只要nWAIT是低电平,当前总线周期就没有结束。
- 支持SDRAM的自刷新和掉电模式。
5.2.1.1 启动流程(**)
- S3C2440复位存储图
注:底部是 0000的位置
- ARM启动的起始地址:在分析启动流程之前我们首先要清楚不论是arm的何种处理器,其都是从0x0000 0000 地址处开始执行程序的。
- 不同类型的flash的区别
- NOR flash:适合存放代码NOR 可以按字节进行读操作,读取的速度快,所以 NOR 更适合代码。
- NAND flash:适合存放数据,NAND的操作对象是页,也就是读写都针对整个页面
- ARM的启动过程:从上图左边是从Nor Flash启动的地址布局,右边是从NAND 启动的地址布局。
- 从Nor Flash启动:因为Nor Flash内可以运行程序,所以我们在放bootloader(是Flash中的部分,用于初始化以及代码加载)的时候放在0地址处即可
- 从NANDFlash启动:我们从地址布局图中可以看到,当我们 从 NAND 启动的时候0地址处是BootSRAM(又叫做stepping stone垫脚石),当我们上电时其会做以下事情
- 上电后处理器自动将 nand flash 前 4KB(页对齐)的内容复制到 boot sram,这个由硬件完成 ,然后,从 boot sram 开始执行(一定是从地址0处开始执行的)
- 通过 bootsram,也就是刚才复制进来的 4k代码,来初始化相关硬件和寄存器从而访问 nand flash,接下来把剩余的 bootloader 复制到内存(SDRAM/DRAM)中,当boot sram 里面的4KB代码执行完以后跳转到内存继续执行,完成系统的启动。
- 当不使用NAND时,ARM芯片内部的集成的RAM(Boot SRAM)的单元地址为0x4000 0000开始的
5.2.2 S3C2440存储控制器功能
5.2.2.1 BANK0总线宽度
BANK0 的数据总线(nGCS0)必须首先设置成 16位或32位的,因为 BANK0 通常作为 引导ROM区(映射到地址0X00000000)。在复位时,系统将检测 OM[1:0] 上的逻辑电平,并依据这个电平来决定 BANK0 区存储器的总线宽度,具体如下表所示:
这个在总线控制信号中也有介绍
5.2.2.2 存储器(SROM/SDRAM)地址引脚的连接(*)
存储器(SROM/SDRAM)地址引脚的连接方式由于数据宽度的设置不同而有所区别
由于存储器传送的单元是字,而不是字节(字的长度由数据总线决定)。所以对16位或者32位存储器芯片,就直接错若干位接(16错一位,32错两位)
5.2.3 S3C2440存储控制器寄存器
5.2.3.1 总线宽度/等待控制寄存器(BWSCON)
都是手册,如下图:
- nBE[3:0]:高低字节使能,UB:高字节使能,LB:低字节使能(16位的高8位和低8位)
- 在16bit SRAM 情况下 使用,两个 16 bit 的 芯片 构成 32bit 存储单元,因此,需要4根信号线,每个芯片使用 2根
- nWBE[3:0]:写字节使能,应用于 32位的 SDRAM/SRAM,用于确定写取哪个字节。当该位为1 的时候,使用nBE[3:0] 这组,当该位为0 的时候,使用nWBE[3:0] 这组。因此该位的设置,主要根据不同器件的类型来决定。
- bank0:比较 特殊 的 是bank0, 它没有 ST0和WS0, 而DW0 两位 只读, 由 硬件 跳线 决定, 0b01表示16bit , 0b10 表示 32bit, bank0 只支持 16bit 和 32bit 两种 位宽。
- 在这个存储控制器里,所有类型的主时钟都对应着总线时钟。例如:SRAM的HCLK就是总线时钟,SDRAM的SCLK也和总线时钟相同
5.2.3.2 总线控制寄存器(BANKCONn:nGCS0~nGCS5)
总线控制寄存器的地址信息
寄存器 用来 控制 bank0 - bank5 外接设备 的 访问 时序, 使用 默认 0x0700 即可
总线控制寄存器 BANKCON0~BANKCON5的各位描述:
位的作用了解即可:
当 处理器要访问存储单元时,首先要把地址放到地址总线,但是这个地址信号不能立即被存储芯片识别利用,往往 需要 经过 一定的 时间 间隔 后,才能被 存储芯片 识别 和 利用,因此,需要 地址信号 的 建立 时间。等 地址信号 建立 以后,再 发送 片选信号,选中 某个 芯片。于是 就有了 这个 设置(Tacs),在 nGCSn 起效 前,地址信号 的 建立 时间。
在 片选信号 起作用 后,也就是 选中了 某个 bank 以后,读使能 信号 才能 起作用。这里Tcos,就是 片选信号的 建立 时间,在这个时间前,读信号是不起作用 的。
读信号起作用后,就可以读取数据 了,Tacc 就是读取数据需要花费的时间周期。
Tacp:Page 模式的 访问周期
Tcoh 读取周期 结束后,nOE信号 就可以 提升 为 高电平,就是 表示 结束 读操作,但是 这个 时候,片选信号 依然 需要 维持,这个 就是 片选信号 维持的 时间。
同样 Tcah:是 nGCSn 结束后(即 电平 升高),地址信号 保持 时间
如下图:
5.2.3.3 BANK控制寄存器(BANKCONn:nGCS6~nGCS7)
BANK 控制寄存器 BANKCON6~BANKCON7的地址信息
位描述:
BANKCON6~BANKCON7 和 前面的 6个 bank 不同,是因为 这2个 bank 可以是 SDRAM,因此 多了 MT[16:15] 两位。如果 MT[16:15] 两位 = 00 则是使用ROM或SRAM,这个时候 该寄存器,剩余的14-0共15位,与前面讲的bank0-5的 总线控制寄存器 BANKCON0~BANKCON5 的 这15位 是 一样的。
如果 MT[16:15] 两位 = 11 则 表明 使用 DRAM, 则 该存储器 的 低4位 有效, 这4位 分别是 :
SDRAM 之所以 成为 DRAM,就是 因为 它要 不断 进行刷新(Refresh),才能 保留 住 数据,因此, 刷新 是 DRAM 最 重要 的 操作。
在DRARM 内存中,分为 行和 列,数据 被 请求后 需 预先 充电,按行 充电 ,行 被 选定后,最后 才 通过 CAS(列地址) 找到 精确 的 地址。整个 过程 也就 是 先 行寻址 再 列寻址。这个 Tracd,就是,行地址 选通信号 到 列地址 选通信号 所需 的 延时。
内存工作时,在要读取或写入某数据,内存控制芯片会先把数据的行地址传送过去,这个RAS信号(Row Address Strobe,行地址信号)就被激活,而在转化到行数据前,需要经过几个执行周期,然后接下来CAS信号(Column Address Strobe,列地址信号)被激活
SDRAM之所以成为DRARM就是因为它要不断进行刷新(Refresh)才能保留住数据,因此它是DRAM最重要的操作。它 是 按 行 进行 刷新操作的。那么要隔多长时间重复一次刷新呢?目前公认的标准是,存储体中电容的数据有效保存期上限是64ms (毫秒, 1 / 1000s),也就是说每一行刷新的循环周期是64ms。这样刷新速度就是:行数量/ 64ms。
5.2.3.4 SDRAM刷新控制寄存器
地址信息:
它的设置决定了 SDRAM的刷新 是否允许、刷新模式、RAS预充电的时间、RAS和CAS最短时间、CAS保持时间 以及 刷新计数值,各位的描述如下所示:
自动刷新(Auto Refresh,简称 AR)与自我刷新(Self Refresh,简称 SR),对应 DRAM的 两种 工作状态,自动刷新,用于 正常 工作的 状态,处理器 芯片 自动产生 行地址,用于刷新。
- 自动刷新:由于动态存储器存储单元存在漏电现象,为了保持每个存储单元数据的正确性,HY57V561620必须保证在64ms内对所有的存储单元刷新一遍。一个自动刷新周期只能刷新存储单元的一个行,每次刷新操作后内部刷新地址计数器自动加“1”。只有在所有体都空闲(因为4个体的对应行同时刷新)并且未处于低功耗模式时才能启动自动刷新操作,刷新操作执行期间只能输入空操作,刷新操作执行完毕后所有体都进入空闲状态。该器件可以每间隔7.8μs执行一次自动刷新命令,也可以在64ms内的某个时间段对所有单元集中刷新一遍。
- 自刷新:自刷新是动态存储器的另一种刷新方式,通常用于在低功耗模式下保持SDRAM的数据。在自刷新方式下,SDRAM禁止所有的内部时钟和输入缓冲(CKE除外)。为了降低功耗,刷新地址和刷新时间全部由器件内部产生。一旦进入自刷新方式只有通过CKE变低才能激活,其他的任何输入都将不起作用。给出退出自刷新方式命令后必须保持一定节拍的空操作输入,以保证器件完成从自刷新方式的退出。如果在正常工作期间采用集中式自动刷新方式,则在退出自刷新模式后必须进行一遍(对于HY57V561620来说,8192个)集中的自动刷新操作。
5.2.3.5 BANKSIZE寄存器
BANKSIZE 寄存器是控制 BANK 大小的寄存器,主要是决定 BANK6/7 的存储区域的空间大小。BANKSIZE 寄存器的地址信息如下:
位描述:
- 猝发读 允许 DRMA中的 一行 被 激活后,连续 读出 若干 个 数据。第一个 数据 在 经过 指定的 CAS延时 节拍 后 呈现 在 数据线 上,以后 每个 时钟 节拍 都会 读出 一个 新的 数据。
- 猝发写 与 猝发读 类似,允许 DRMA中的 一行 被 激活后,连续 写入 若干 个 数据。第一个 写数据 与 猝发写 命令 同时在 数据线上 给出,以后 每个 时钟节拍 给出 一个 新的 数据。
- SCKE_EN[5]:SDRAM 片内 时钟 允许 信号(就是 前面说的 CKE 信号),0 =不使用 SCKE信号, 1 =使用 SCKE 信号,使得 SDRAM 进入 省电模式。(书上的有错)
- SCLK_EN[4]: 0 ——时刻发出SCLK信号, 1 ——仅在访问SDRAM期间发出SCLK信号;
5.2.3.6 SDRAM模式寄存器集寄存器(MRSR)
地址描述:
位描述:
CAS信号(Column Address Strobe,列地址信号) CAS反应时间: 列地址信号激活,需要的时间。
这个寄存器基本都是固定值,除了 CL字段
注意:当代码在 SDRAM 中运行时,绝不能够重新配置 MRSR 寄存器
5.2.3.7 注意事项
重要说明:在掉电模式下, SDRAM 必须进入 SDRAM 的自我刷新模式
这 一堆 寄存器,有 很大 一部分,是在 系统 初始化的 时候,需要 进行 设置和 控制的,比如 BANK 控制寄存器 ,这个 设置 各个 控制信号 间的 时序 关系:这类 寄存器,在 系统 工作 期间,是没有必要更改的。当然针对不同的存储芯片,这些设置的值,可能不同。
5.3 NAND FLASH控制器
5.3.0 NAND Flash简介(**)
由于 NOR Flash 价格较高,而 SDRAM 和 NAND Flash 存储器相对经济,这样促使一些用户在 NAND Flash 上存储启动代码,在 SDRAM 上执行主程序。
S3C2440A 可以执行存储在外部的NAND Flash 存储器上的代码。为了支持NAND Flash 的 boot loader,S3C2440A 配备了一个内部的 SRAM 缓冲器名为 “Steppingstone”(bootram)
注:代码不能直接在NAND Flash 中执行。 SDRAM一般从 0x30000000开始!
- NAND Flash启动(与前面介绍的启动是一样的)
- 启动时,NAND Flash 上的前 4KByte 字节 将被装载到 Steppingstone 中,并且装载到 Steppingstone 上的启动代码会被执行。
- 一般情况下,启动代码会拷贝 NAND Flash 上的内容到 SDRAM 中,在引导代码执行完毕后就跳转到 SDRAM 执行。使用硬件的 ECC(纠错码)对 NAND Flash 的数据进行有效性检查。在完成拷贝的基础上,主程序将在 SDRAM 上被执行。
- ECC(纠错码)是“Error Correcting Code”的简写,ECC 是一种 能够 实现 “ 错误 检查 和 纠正” 的 技术,ECC内存 就是 应用了 这种 技术 的 内存,一般 多应用在 服务器 及图形工作站上,可提高 计算机 运行的 稳定性 和 增加 可靠性。通过ECC检测出错误,并指示出错误的位置,再由软件纠错。
5.3.1 NAND Flash 控制器的特性(-)
5.3.1.1NAND Flash 控制器的特性
- 自动启动:启动代码在重启时被传输到 4kbytes 的 Steppingstone 上。传输后代码会在 Steppingstone 上被执行;
- NAND Flash 存储器接口:支持 256字、512 字节、1000 字 和 2000 字节 页;
- 软件模式:用户可以直接访问 NAND Flash,例如利用这个特性可以被用于对 NADN Flash 存储器的读/擦除/编程;
- 接口:8/16 位的 NADN Flash 存储器接口总线
- 硬件 ECC 生成,检测和指示(软件纠错);
- SFR(特殊功能寄存器)接口:支持小端模式,对于数据和 ECC 数据寄存器的 字节/半字/字访问,对于其他寄存器的字访问;
- Steppingstone 接口:支持大小端,字节/半字/字访问;
- Steppingstone 4kB 内部 SRAM 缓冲器可以在 NAND Flash 启动后被用于其他目的。
NAND Flash模块图如下:
5.3.1.2 引脚配置
在重启期间,NAND Flash 控制器通过引脚状态得到连接的NAND Flash 的信息 (NCON(Advflash),GPG13(页大小),GPG14(地址周期),GPG15(总线宽度)——参考引脚配置)。在上电或重启以后,NAND Flash 控制器自动的装载 4KB的boot loader 代码。在装载 boot loader 代码后,其在 steppingstone 中被执行(因为没有刚刚启动的时候没有软件,所以这个时候就只能通过硬件引脚来配置)
注:在自动重启期间,ECC没有检查,因为NAND Flash的前4KB数据一般认为没有位错误。
- OM[1:0]=00:使能NAND Flash存储器启动;
- NCON: NAND Flash存储器选择
- 0:普通NAND Flash(256 字/512 字节页大小,3个/4个 地址周期);
- 1:先进NAND Flash(1K字/2K字节页大小,4个/5个 地址周期)
- 地址周期:这个是 地址 放到地址线上的持续周期
- GPG13: NAND Flash存储器页容量选择
- 0:页=256 字(NCON=0)或页=1K字(NCON=1);
- 1:页=512 字节(NCON=0)或页=2K字节(NCON=1)。
- GPG14: NAND Flash存储器地址周期选择
- 0:3 个地址周期(NCON=0)或4 个地址周期(NCON=1)
- 1:4 个地址周期(NCON=0)或5 个地址周期(NCON=1)
- GPG15:NAND Flash存储器总线宽度选择
- 0:8 位总线宽度
- 1:16 位总线宽度。
如下图:
5.4 时钟和功率管理
5.4.1 时钟简介
- 时钟和功率管理模块组成:时钟控制、USB控制 和 功率控制
- S3C2440中的时钟:
- CPU的FCLK:为ARM920T的内核提供工作频率
- AHB总线接口的HCLK:为S3C2440 AHB总线(Advanced High performance Bus)上挂接硬件提供工作频率,AHB总线主要挂接有内存,NAND,LCD控制器等硬件。
- APB总线接口的PCLK:为APB总线提供频率,APB总线上主要挂载UART、WatchDog等硬件控制器,
- PLL锁相环:S3C2440 有两个PLL(锁相环),MPLL用于FCLK、HCLK、PCLK;UPLL用于USB模块(48MHZ)。时钟控制逻辑能够由软件控制不将 PLL 连接到各接口模块以降低处理器时钟频率,从而降低功耗。
5.4.2 系统工作的四种功率模式(**)
5.4.2.1 正常模式
功率管理模块向 CPU 和 所有外部设备提供时钟。在正常模式下,所有的外设 和 基本模块,包括:电源管理模块、CPU核、总线控制器、寄存器控制器、中断控制器和DMA,都能完全正常工作。但是,除基本模块外,可以通过软件设置对每一个外设时钟进行选择性的停止,以降低功耗。
5.4.2.2 低速模式
低速模式是 非PLL模式。与正常模式不同的是:低速模式没有通过 PLL电路 。而是直接使用了 一个外部时钟(ETIpll或者EXTCLK)作为 FCLK 信号。在此模式中,电源的功耗仅取决于外部时钟的频率,将 PLL 自身的耗电排除在外。没有PLL,就 意味着 时钟频率更低
此时FCLK 是没有 PLL 时,将 FinN 等分后的频率。分割的比率是由 CLKSLOW 和 CLKDIVN 控制寄存器中的 SLOW_VAL 决定的。下表列出了 SLOW模式下 CLKSLOW 和 CLKDIVN 控制寄存器的设置。
5.4.2.3 空闲模式
在空闲模式下,仅停止为CPU提供时钟信号,只对:总线控制器、存储器控制器和电源管理模式等外设提供时钟。
如果要退出空闲模式,则 EINT[23:0] 或者 RTC 告警中断,或者其他的中断必须处于活动状态(如果想使用 EINT ,则 GPIO 模块在启动前必须是开启的)。即任何中断请求都可以将CPU从中断模式唤醒
空闲模式可以 减少由于CPU核心产生的功耗。关掉FCLK就 意味着 CPU 的 时钟 关闭 了,CPU 停止 工作。
5.4.2.4 掉电模式
功率管理模块断开内部电源,因此 CPU 和 除唤醒逻辑单元以外的外设 都不会产生功耗。要执行掉电模式需要有两个独立的电源,其中一个给唤醒逻辑单元供电,另一个给包括CPU在内的其他模块供电,并且可以被电源开关控制。在掉电模式下,第二个电源将被关掉。掉电模式可以由外设中断EINT[15:0]或RTC唤醒。所有的 GPIO寄存器的值在掉电模式下被保存。
- 进入掉电模式的过程(-)
- 设置 GPIO 配置;
- 在 INTMSK 寄存器中屏蔽所有中断;
- 配置适当的唤醒电源,包括:RTC报警。唤醒源相关的 EINTMSK 位不必被屏蔽。
- 设置 USB 为挂起模式(MISCCR[13:12]=11b)
- 将一些有用的值存入 GSTATUS3、4 ,这些寄存器在掉电模式下是被保持的;
- 通过 MISCCR[1:0] 将 数据总线D[31:0]的上拉电阻配置成断开(禁用)。如果有外部总线保持器,如 74VCH162245,则连接(启用)上拉电阻,否则断开上拉电阻;
- 通过清除 LCDCON1.ENVID位停止LCD;
- 读取 rREFRESH 和 rCLKCON寄存器的值来填充页表缓存
- 通过设置 REFRESH[22]=1b,使 SDRAM 进入自刷新模式(低功耗模式);
- 等待 ,直到SDRAM 自刷新生效;
- 通过设置 MISCCR[19:17]=111b ,使 SDRAM 信号在掉电模式期间被保护起来(SCLK0、SCLK1、SCKE);
- 置位 CLKCON 寄存器的掉电模式位。
- 从掉电模式唤醒的过程(-)
- 如果有唤醒源被触发,内部的复位信号就会动作。这和外部的 nReset 引脚触发非常相似
- 查询 GSTATUS2[1] 位,是否是从掉电模式被唤醒而产生了boot操作;
- 通过将 MISCCR[19:17] 设置为 000b,释放 SDRAM 信号保护;
- 配置 SDRAM 控制器
- 等待 SDRAM 从自刷新模式释放
- GSTATUS3/4 的信息可以被用户使用,因为 GSTATUS3/4 的值已经在掉电模式下被保存了;
- 对于 EINT[3:0],检查 SRCPND 寄存器;对于 EINT[15:4],检查 EINTPND 寄存器;对于 RTC 报警唤醒,检查 RTC 时间,因为在唤醒时 SRCPND 寄存器的 RTC 位不被置位。
关于各个模式的寄存器保留情况详见下面的功率管理部分(GPIO状态是保留的所以才能使用外部中断唤醒)
5.4.3 时钟和功率管理功能描述
5.4.3.1 时钟发生器
框图如下:
5.4.3.2 时钟源选择
控制引脚(OM3和OM2)的组合模式与 S3C2440 时钟源选择关系如下表所示。引脚 OM[3:2] 的状态在 nRESET 上升沿通过控制引脚 OM3 和 OM2 被锁定。
对应的震荡回路为:
- OM[3:2]=00 使用晶振,没有用外部时钟。 主时钟 和 USB 时钟 都 使用 晶振。 这个 情况 下 使用 XTIpll 和 XTOpll 引脚 连接 晶振,产生时钟 频率。外部时钟 引脚 接 VDD
- OM[3:2]=11 没有使用晶振 ,主时钟 和 USB 时钟都使用外部时钟。XTIpll接 VDD , XTOpll 不接,悬空。
5.4.3.3 锁相环PLL
- 晶振 由于 其 频率的 稳定性,一般 作为 系统的 外部 时钟源。晶振的 频率 虽然 稳定,但是,由于 成本 与 工艺 限制,频率 无法 做到 很高,因此 芯片中 高频时钟 就 需要 一种 叫做 压控振荡器 的 器件 生成了,顾名思义,VCO 就是 根据 电压 来 调整 输出 频率。可 压控振荡器 也有 问题,其 频率 不够 稳定,因此,为了 将 频率 锁定在 一个 固定的 期望值,使用 了 锁相环 。
- PLL工作的基本原理就是将压控振荡器的输出经过分频后与基准信号输入PFD,PFD通过比较这两个信号的频率差,输出一个代表两者差异的信号,再经过低通滤波器转变成一个直流脉冲电压去控制VCO使它的频率改变。这样经过一个很短的时间,VCO的输出就会稳定下来。所以:
- PLL并不是直接对晶振进行倍频,而是将频率稳定的晶振作为基准信号,与PLL内部振荡电路生成的信号分频后进行比较,使PLL输出的信号频率稳定
- 最后,根据原理,理解一下锁相环(Phase Locked Loop)的名称
- 为了对基准信号与反馈信号进行频率比较,二者的相位必须相同且锁住,任何时间都不能改变,这样才能方便的比较频率,所以叫锁相(Phase Locked)
- 为了快速稳定输出系统,整个系统加入反馈成为闭环,所以叫环(Loop)
- 以下部分描述了PLL的运行,包括鉴相器、电荷泵、环路滤波器和压控振荡器(VCO)、反馈回路。
- 鉴相器:鉴相器(PFD)检测Fref和Fvco之间的相位差,并在检测到相位差时产生一个控制信号(跟踪信号)。 Fref意思为参考频率,如图所示。
- 电荷泵:电荷泵(PUMP)将PFD控制信号转换为一个按比例变化的电压并通过外部滤波器来驱动VCO。
- 环路滤波器:PFD产生用于电荷泵的控制信号,在每次Fvco与Fref比较时可能产生很大的偏差(纹波)。为了避免VCO过载,使用低通滤波器采样并且滤除控制信号的高频分量。环路滤波器是一个典型由一个电阻和一个电容组成的单极性RC滤波器。
- 压控振荡器:VCO工作原理是从环路滤波器的输出电压驱动VCO,引起其振荡频率线性增大或减小,如同均匀变化电压的功能。当Fvco与Fref频率和相位都在限期内相匹配时, PFD停止发送控制信号给电荷泵,并转变为稳定输入电压给环路滤波器。 VCO频率保持恒定, PLL则保持固定为系统时钟。
- 反馈回路FL(Feedback Loop):通常 由一个 分频器 实现。将 VCO的 输出 降低到 与 基准 信号 相同级别的 频率 才能在 PFD中 比较
锁相环MPLL 参考 输入信号 的 频率 和 相位 产生 一个 输出信号。在 这种 应用 中,其 包含 了 如图 所示的 基本 模块 :
时钟发生器之中的UPLL在每方面都与MPLL类似。
用于将输入频率(Fin)按p分频的分频器P、用于将VCO输出频率按m分频并输入到相位频率检测器(PFD)中的分频器M、用于将VCO输出频率按s分频成为Mpll (输出频率来自MPLL模块)的分频器S、鉴相器、电荷泵及环路滤波器。输出时钟频率Mpll相关参考输入时钟频率Fin有如下等式:
5.4.3.4 时钟控制逻辑
时钟控制逻辑决定使用 哪个 时钟源,例如是 PLL时钟 还是直接的 外部时钟(XTIpll或者EXTCLK)。当 PLL 被配置为 一个新的频率值时,时钟控制逻辑在 PLL输出稳定之前 禁止 FCLK ,直到 PLL锁定系统时钟后 取消禁止。
时钟控制逻辑在 开电源重启时 和 从掉电模式唤醒时起作用(这两个都算是加电重启)
- 加电重启
- 时序图:
从 时序图 中,我们 可以 看到,上电 之后,如果 什么 都 不设置,FCLK 和 晶振的 频率 相等,也就是 它 直接 使用的 是 外部晶振 的 时钟,没有 经过 PLL 做 倍频 处理,这个时候VCO是没有工作的,其波形前端 是 直线。当设置PLL后,CPU并不是马上就使用设置好的高频时钟,而是有一段锁定时间,在这段时间里,CPU停止运行,等12MHz变成高频时钟稳定以后,整个系统再重新运行。
- 在普通操作模式下改变 PLL 设置
- 通过设置 P、M、S 的值改变低速时钟时序图如下
在 Normal 模式下的 s3c2440 操作中,用户可以改变频率通过写 P M S 三个分频器的值,在 PLL 锁存时间会被自动的插入。在锁定时间,时钟没有被提供给 s3c2440A 的内部时钟。
5.4.3.5 USB模块控制
USB主接口 和 USB驱动接口 需要 48MHZ 的时钟。在 S3C2440 中,UPLL(USB dedicated PLL) 为 USB 产生 48MHZ 的时钟。在 UPLL 没有被设置之前 UCLK 不产生。
对应于不同条件下的 UCLK 和 UPLL 状态如下表所示:
- 重启之后:UCLK 没有 产生 48MHz的 信号,直接 使用的 是 XTIpll(外部晶振)或者 EXTCLK(外部时钟),但是 其 状态位 是on,是 打开的。
- UPLL配置之后,则UPLL处于锁定期,这期间,UCLK没有时钟信号输出,一直处于低电平状体。
- CLKSLOW:低速时钟控制寄存器 其中 包含 相关的 控制位( UCLK_ON),可以 控制 UPLL 是打开 还是 关闭的。
5.4.3.6 FCLK、HCLK 和 PCLK
在前面的时钟简介中也有介绍。只不过这里更详细了
- 时钟信号
- FCLK信号是ARM920T内核使用的时钟信号(时钟源可以选择为MPLL,即正常情况下,FCLK的频率就是=MPLL的输出频率)
- HCLK信号是AHB总线的时钟信号,在ARM920T内核、存储控制器、中断控制器、LCD控制器、DMA和USB主模块使用
- PCLK信号是APB总线的时钟信号,在外部设备中使用,如WDT、IIS、I2C、PWM定时器、MMC接口、ADC、UART、GPIO、RTC和SPI
- 三个时钟信号的划分比率:S3C2440 在 FCLK、HCLK 和 PCLK之间可以选择划分比率。比率由 CLKDIVN 时钟分频控制寄存器的 HDIVN 和 PDIVN 决定。HDIVN|[2:1] (HCLK对FCLK的分频关系)共2位 PDIVN[0](PCLK 对 HCLK的分频关系)只有一位。如下图:
- 在设定 P、M、S 的值之后,需要设定 CLKDIVN 寄存器的值,其会在 PLL 锁定的时间后有效,当然在重启和改变电源管理模式之后也可以使用。
- 换句话说,设定 PMS 就是 设置 好 PLL的 三个 分频器 的值。 也就是 确定 了 PLL 输出 的 频率。然后,还需要 设定 CLKDIVN 时钟分频控制寄存器 ,确定 FCLK、HCLK、PCLK 的 频率比,当然,如果 不设置,则 缺省 为1:1:1
5.4.3.7 功率管理
功率管理模块通过软件来控制系统模式,以降低 S3C2440 的功耗。这些方案 与 PLL、时钟控制逻辑 和 唤醒信号有关。(实际上就是上面四种功率模式的进一步说明)
在模式之间的切换 不是没有限制地允许的。电源模式切换图如下(切换条件在图中已经体现了):
时钟控制寄存器(CLKCON)中有IDLE_BIT控制位。SLEEP控制位
不同电源模式下的时钟电源管理如下图:
5.5 DMA
5.5.1 DMA简介(*)
S3C2440 拥有 4个通道 的 DMA 控制器,相连于 系统总线 和 外围总线。DMA控制器 的每一个通道可以在:系统总线上的存储器与外围总线之间、系统总线上的设备之间,以及外围总线设备之间操作数据传输而不被限制。
- DMA运行的四种情况
- 源设备和目标都在系统总线AHB上;
- 源设备和目标都在外围总线APB上;
- 源设备在系统总线,而目标设备位于外围总线;
- 源设备在外围总线,而目标设备位于系统总线。
- 这四点其实可以概括为依据为:就是只要源设备和目标设备,是挂接两个总线上,不论是那个总线,都可以使用DMA方式进行数据传输。
- DMA的主要优点:可以不通过 CPU 的中断来实现数据的传输,DMA 的运行可以通过软件或者通过外围设备的中断和请求来初始化。主要用于主存与 高速外设 之间的数据传输;比如 实时音频、视频 采集 等、
5.5.2 DMA工作原理(*)
5.5.2.1 DMA的服务对象
每个 DMA通道都有多个DMA请求源 ,通过设置,可以从中挑选一个服务。每个通道的 DMA 请求源如下表所示:
这里 nXDREQ0 和 nXDREQ1 表示两个外部源(外部设备),I2SSDO 和 I2SSDI 分别表示 IIS 传输和接收。
如果通过DCON寄存器选择H/W DMA请求模式,则DMA控制器的每个信道可以在多个DMA源中选择一个DMA请求源。(注意,如果选择了S/W请求模式,则此DMA请求源完全没有意义)
5.5.2.2 DMA的工作过程(*)
- 外设向DMA发出请求
- DMA通过HOLD向CPU发出总线请求
- CPU响应释放三总线,并且发应答HLDA
- DMA向外设发DMA应答
- DMA发出地址、控制信号,为外设传送数据
传送完规定的数据后,DMA 撤销 HOLD 信号,CPU 也撤销 HLDA 信号,并且恢复对三条总线的控制
工作过程框图如下:
- S3C2440 DMA 工作过程的三个状态(或者说DMA控制器的状态)
- 状态1——等待状态:DMA 等待一个 DMA请求。如果有请求到来,将转移到 状态2。在这个状态下,DMA ACK (DMA 应答信号)和 INT REQ (中断请求信号,为完成了 DMA 传输 以后,向 CPU发出的 中断请求)为 0
- 状态2——准备状态:DMA ACK 变为 1,计数器(CURR_TC)从 DCON[19:0] 寄存器装载计数值。注意:DMA ACK保持为 1 直到它被清除。
- 状态3——传输状态:DMA 控制器从 源地址 读入数据并将它写到 目的地址,每传输 一次,CURR_TC 计数器减1,并且可能做以下操作:
- 重复传输:在全服务模式下,将重复传输,直到计数器 CURR_TC变为0;在单服务模式下,仅传输一次
- 设置中断请求信号:当 CURR_TC 变为 0 时(传输结束),而且 DCON[29] 即中断使能设定位被设为 1 ,则DMAC(DMA控制器) 发出 INT REQ 信号;
- 不管服务模式如何,一旦计数器(CURR_TC)变成 0,中断请求信号 INT REQ 发出。
- 清除 DMA ACK 信号:全服务模式 CURR_TC 变为 0时清除DMA ACK;对单服务模式,执行完该次传输操作时清除DMA ACK。
- 外部DMA请求/响应协议
- 单服务模式
- 在单服务模式下,DMAC 的三个状态(等待、准备和传输)被执行一遍,然后停止,等待下一个 DMA REQ 的到来。如果 DMA REQ 到来,则这些状态被重复操作,直到 CURR_TC 减为 0。
- single service demand,单服务请求(对应于需求模式)
- 在需求模式下:如果DMA请求(xnxDREQ)信号仍然有效,则传输马上再次开始(因为单服务模式结束一次传输之后就会停止),否则等待
- 即一直请求一直传
- single service handshake,单服务握手(握手模式)
- 在握手模式下:如果 DMA 请求信号无效,DMA 在2个时钟周期后将 DMA 响应(xnxDACK)信号变得无效,否则 DMA 等待直到 DMA 请求信号变得无效
- 即每请求一次传输一次。
- whole service handshake,全服务握手(全服务模式)
其他的DMA控制器还有一种方式,2440没有提供,就是单次传送。一次传送涉及 一次从 数据源 的读取 和一次 到目的地址的写 ,这两个步骤,单次模式,就是把一次DMA传送,分为两个DMA应答周期,分别为DMA读和写周期。单步模式通常用于测试和调试,因为在读与写之间总线控制权可能会交给其他总线控制者。
5.6 中断控制器(***)
5.6.0 S3C2440中断简介
S3C2440X 中断控制器有 56个 中断源,对外提供 24个 外中断输入引脚,内部所有设备都有中断请求信号,例如:DMA控制器、UART、IIC等。
S3C2440X 的 ARM920T 内核有两个中断:IRQ中断 和 快速中断FIQ。
- 中断仲裁:当中断控制器接收到 多个中断请求时,其内的优先级仲裁器裁决后向 CPU 发出优先级最高的中断请求信号或快速中断请求信号。
5.6.1 中断控制器的操作
- 当前程序状态寄存器(CPSR)的 F位 和 I位:这两位相当于是总开关
- 如果 CPSR 的 F位 被设置为 1 ,处理器将不接受来自中断控制器的FIQ(快速中断请求);如果 PSR 的 I位 被设置为 1 ,处理器将不接受来自中断控制器的IRQ(中断请求)。因此,为了使能 FIQ 和 IRQ ,PSR 的 F位 或 I位 必须被 清零
- 中断模式:ARM920T 有两种类型的中断模式(INTMOD),即FIQ(快速中断请求)和IRQ(普通中断模式)。所有的中断源在中断请求时都要确定使用哪一种中断模式。
- 中断挂起寄存器:S3C2440 有两个中断挂起寄存器:源挂起寄存器(SRCPND) 和 中断挂起寄存器(INTPND)。SRCPND 和 INTPND 可以被读写。这些挂起寄存器指示了一个中断请求是否被挂起(是否有这个中断请求还没有被相应)。挂起寄存器的设置过程如下:
- 当中断源请求中断服务时,SRCPND 相应位被置 1 。
- 并且同时在仲裁后 INTPND 寄存器 仅有1位被置1。
- 如果中断被屏蔽,那么 SRCPND 相应位被 置1,但并不能引起 INTPND 改变。
- 当 INTPND 的挂起位被设置时,只要相应的 标志位I 或 标志位F 被清0,相应的中断服务程序都被执行。
- 中断屏蔽寄存器(INTMSK)
- 如果该寄存器的某一个位被 置1 ,则该位对应的中断响应被 禁止 了;如果某个中断在 INTMSK 寄存器的对应位 为0 ,则这个中断发生时将会正常被响应。
- 如果某个中断在 INTMSK 的寄存器中的对应位 为1,但是这个中断发生了,它的源挂起寄存器(SRCPND)对应位还是会 置1。而对应中断挂起寄存器(INTPND)标志位,不会被置1 。
下面会详细介绍这里面的内容
5.6.2 S3C2440中断源
- 中断优先级仲裁器及工作原理:中断系统有 6个 分仲裁器 和 1个 总仲裁器,每一个仲裁器可以处理 6路 中断
- 优先级产生模块图如下:
- 中断源和子中断源(次级中断源)
- 中断源就是上图32个中断源。而这32个中断源中包含单一中断源和复合中断源。
- 复合中断源是子中断源(次级中断源)的复合信号。比如:INT_UARTn。
- 这种设计,使得S3C2440中断控制器支持60个(还是56个。考到了就直接数吧)中断源。
- 中断优先级:每一个仲裁器可以控制 6个 中断请求,其基于由仲裁模式控制的 1位(ARBMODE) 和 选择控制信号的2位(ARBSEL)。这 3个 控制位都在 中断优先级寄存器 内
- ARB_SEL
- 如果ARB_SEL位为:00b,优先级次序为REQ0、REQ1、REQ2、REQ3、REQ4和REQ5;
- 如果ARB_SEL位为:01b,优先级次序为REQ0、REQ2、REQ3、REQ4、REQ1和REQ5;
- 如果ARB_SEL位为:10b,优先级次序为REQ0、REQ3、REQ4、REQ1、REQ2和REQ5;
- 如果ARB_SEL位为:11b,优先级次序为REQ0、REQ4、REQ1、REQ2、REQ3和REQ5。
- 仲裁器的 REQ0 为最高优先级,REQ5 为最低优先级,这两个中断的优先级不会改变。通过改变 ARB_SEL 位的值,可以设定 REQ1~REQ4 ,中间 的 4个 中断源 的优先级
- ARB_MODE
- 如果 ARBMODE位 设置为 0 , ARBSEL 位不会自动改变,仲裁器会在固定的优先级模式中操作(即使在这个模式中,也可以通过手动改变 ARB_SEL 位配置优先级)。
- 如果 ARBMODE 位设置为 1,ARBSEL 位轮流改变。会使当前执行的请求优先级变为最低(如果能修改的话)
- 如果REQ0或者REQ5被执行,ARB_SEL不再改变;
- 如果REQ1被执行,ARB_SEL位改变为01b
- 如果REQ2被执行,ARB_SEL位改变为10b;
- 如果REQ3被执行,ARB_SEL位改变为11b
- 如果REQ4被执行,ARB_SEL位改变为00b。
5.6.3 中断控制器的特殊功能寄存器
中断控制器中包括 5个 控制寄存器:源挂起寄存器、中断模式寄存器、屏蔽寄存器、优先级寄存器、中断挂起寄存器(这个寄存器的顺序也是中断信号流动的顺序)
5.6.3.1 源挂起寄存器
来自中断的中断请求首先寄存在 源挂起寄存器。它们基于中断模式寄存器分为 两组:FIQ中断请求 和 IRQ中断请求。对多重IRQ请求的仲裁过程使用优先级寄存器(快速中断无需仲裁,直接进入CPU)
- 源挂起寄存器作用:源挂起寄存器由 32位 组成,每一个比特位均与一个中断源相连。当中断源产生中断请求并且等待中断服务程序的执行时,其相应的比特位设置为 1 ,即源挂起寄存器指示此时哪一个中断源正在等待执行中断请求。
- 源挂起寄存器注意事项
- SRCPND 寄存器的各比特位均为 中断源自动设置,与屏蔽寄存器的相应位设置无关
- SRCPND 寄存器不受中断控制寄存器的优先级逻辑的影响(因为优先级逻辑是在后面进行的)
- 当中断服务被执行时,SRCPND 寄存器的相应位应该 及时清0,以便正确地接收相应中断源的中断请求。(如果没有清除源挂起位,当中断服务返回时,中断控制寄存器会将之作为来自相同中断源的中断请求 第二次执行。也就是说,如果 SRCPND 寄存器的某位为 1,系统一般会当作一个有效的等待执行的中断请求)
- 清除相应位的时间依赖于用户的需求。如果要接收来自相同源的另一个有效中断请求,那么应该清除相应挂起位并且使能中断。
- SRCPND 的清除:可以通过写入一个数据到此寄存器来清除SRCPND寄存器的指定位,这时只清除那些数据中被设置为1的相应位置的SRCPND位。那些数据中被设置为0的相应位置的位保持不变。
- 即对某位写1则将该位清零
- 源挂起寄存器 SRCPND 的地址等信息以及位描述如下:
5.6.3.2 中断模式寄存器
- 中断模式寄存器作用:中断模式寄存器 INTMOD 的 32个 比特位分别与一个中断源相对应。如果某位被设置为 1 ,则相应的中断会以 FIQ 的模式来处理。相反,以 IRQ 的模式来处理
- 中断模式寄存器注意事项
- 中断控制器中 仅有一个中断源 可以由 FIQ 模式来处理(只紧急中断使用FIQ中断),所以 INTMOD 中只有一个比特位可以被设置为 1 (这是为了能快速响应这个快中断)
- 如果 INTMOD 寄存器中某中断模式设置为 FIQ ,那么 FIQ 中断将不会影响 INTPND 和 INTOFFSET 寄存器,两者只对 IRQ 模式的中断源有效(并且不会进入优先级判定的逻辑)
- 中断模式寄存器 INTMOD 的地址等信息以及位描述如下:
5.6.3.3 中断屏蔽寄存器
- 中断屏蔽寄存器作用:中断屏蔽寄存器 INTMSK 也包括了32位,每一个比特位均与相应的一个中断源相对应。如果某位被设置为1,那么CPU不会执行相应中断源提出的中断请求(即使源挂起寄存器的相应位被设置为1)。如果屏蔽位为0,那么中断请求会被正常执行。
- 中断屏蔽寄存器 INTMSK 的地址等信息以及位描述如下:
5.6.3.4 优先级控制寄存器
- 优先级控制寄存器作用:主要就是上面所说的优先级顺序以及优先级是否轮转
- 优先级控制寄存器地址等信息以及位描述如下:
5.6.3.5 中断挂起寄存器
- 中断挂起寄存器作用:中断挂起寄存器INTPND的32位,显示具有最高优先级,且未被屏蔽的中断请求,在等待中断服务。因为INTPND寄存器位于优先级逻辑之后,仅 1 位可以被置 1。该中断请求将生成对CPU的IRQ。在对于IRQ的中断服务程序中,我们可以读取该寄存器,来查看哪个中断源被服务。
- 中断挂起寄存器注意事项
- 同 SRCPND 一样,INTPND 也需要在中断服务程序中加入 清0 操作,位于 SRCPND 寄存器 清0 操作之后(如果先清0 INTPND,那么可能中断优先级再次判定又把INTPND置位了)
- 可以通过向 INTPND 寄存器写入一个数据对相应位 清0 。仅将1对应位清除,其余保持原值不变。(与源挂起寄存器相同)
- 如果 FIQ 模式中断发生,那么在 INTPND 寄存器相应位将不被改变,因为 INTPND 寄存器仅设置为 IRQ 模式中断有效。
- 中断挂起寄存器地址等信息以及位描述
5.6.3.6 INTOFFSET寄存器
- INTOFFSET寄存器作用:INTOFFSET 寄存器的值说明了 INTPND 寄存器中哪一个 IRQ 模式的中断请求有效。这个比特位可以通过清除 SRCPND 和 INTPND 寄存器来自动清除
- INTOFFSET寄存器注意事项
- FIQ 模式中断不影响 INTOFFSET 寄存器,因为 INTOFFSET 寄存器仅对 IRQ 模式中断有效。
- INTOFFSET寄存器地址等信息以及位描述如下:
5.6.3.7 次级源挂起寄存器
- 次级源挂起寄存器作用:用于区分子中断源
- 次级源挂起寄存器注意事项
- 可以通过向 SUBSRCPND 寄存器某一位写入1来清除该位。此数据仅清除数据对应的比特位,其它的比特位不变。(也就是与源挂起寄存器相同)
- 挂起寄存器标志的清除顺序:清理 次级源挂起寄存器 、再 清理 源挂起寄存器 ,最后 清理 中断挂起寄存器。(也就是按照中断置位的顺序来清除)
- 次级源挂起寄存器的地址信息及位描述
5.6.3.8 中断次级屏蔽寄存器
- 中断次级屏蔽寄存器作用:中断次级屏蔽寄存器 INTSUBMSK 中的 11位 和响应的中断源有联系,如果某一比特位设置为 1 ,那么来自相应中断源的中断请求便不会被 CPU 执行。如果屏蔽位为 0 ,那么中断请求将会被执行
- 中断次级屏蔽寄存器注意事项:就算通过INTSUBMSK 屏蔽了某个中断,SUBSRCPND 寄存器相应位会被设置为 1(与总的中断屏蔽寄存器相同)
- 中断次级屏蔽寄存器 INTSUBMSK 的地址等信息及位描述如下
5.6.3.9 总结
5.7 I/O端口
5.7.0 I/O端口简介
处理器通过 I/O端口 和 外围硬件 连接。ARM芯片的 I/O端口 一般是和其它引脚 复用的。如果要熟悉 ARM芯片I/O端口 的配置方法,就要熟悉 S3C2440芯片的I/O端口 功能配置 和 特殊功能寄存器的配置
- S3C2440 多功能 输入/输出引脚分类:S3C2440 有 130个 通用可编程多功能 输入/输出引脚(直接按照端口分类)
- Port A(GPA):25位输出端口;
- Port B(GPB):11位输入/输出端口;
- Port C(GPC):16位输入/输出端口;
- Port D(GPD):16位输入/输出端口;
- Port E(GPE):16位输入/输出端口;
- Port F(GPF):8位输入/输出端口;
- Port G(GPG):16位输入/输出端口;
- Port H(GPH):9位输入/输出端口;(没有I)
- Port J(GPJ):13位输入/输出端口。
- 这些端口都具有 多功能,通过引脚配置寄存器,可以将其设置为所需要的功能,如:I/O功能、中断功能等(即:能复用)每个端口的功能通常要在 主程序开始前被定义。如果一个引脚的多功能没有使用,那么这个引脚将被设置为 I/O端口。在引脚配置之前,需要对引脚的初始化状态进行设置,以避免一些问题的出现。
5.7.1 S3C2440 端口控制描述
5.7.1.1 端口配置寄存器(GPACON~GPJCON)
- 端口配置寄存器作用:在 S3C2440中,大多数的引脚 都是 多功能引脚,所以应该为 每一个引脚 选择功能。端口控制字寄存器(GPnCON)决定了 每一个引脚的功能。
- 端口配置寄存器注意点:如果 GPF0~GPF7 和 GPG0~GPG7 在 掉电的模式下 被用作唤醒信号,则这些端口必须被配置,必须被配置为外中断功能输入口。
5.7.1.2 端口数据寄存器(GPADAT~GPJDAT)
- 端口数据寄存器作用:如果这些端口被配置为 输出端口,则输出数据可以被写入 GPnDAT的相应位 。如果被设定为 输入端口,则输入数据可以从 GPnDAT的相应位读取。
5.7.1.3 端口上拉寄存器(GPBUP~GPJUP)
- 端口上拉寄存器作用:端口上拉寄存器控制 每一个端口组的上拉电阻的使能端。当相应的位被设为 0 时,引脚接上拉电阻;当相应的位被设置为 1 时,引脚不接上拉电阻。引脚是否接上拉电阻,与引脚的功能设置无关(例如input、output、DATAn、EINTn等)。
- 上拉电阻的作用:增加引脚的驱动能力
5.7.1.4 杂项控制寄存器 MISCCR
- 杂项控制寄存器 MISCCR 作用:这个寄存器控制 DATA端口 的 上拉电阻、hi-z(高阻)状态、USB 和 CLKOUT 选择。
5.7.1.5 外部中断控制寄存器(EXTINTN)
- 外部中断控制寄存器作用:24个 外部中断源 可用各种信号来请求。外部中断寄存器为外部中断请求设置了信号 触发方法 ,包括:低电平触发、高电平触发、上升沿触发、下降沿触发和双边沿触发。8个外部中断引脚 有一个 数字滤波器(见EINTFLTn),16个引脚EINT[15:0]用作唤醒源。
5.7.1.6 掉电模式 和 I/O口
主要是谈论一些GPIO口的注意点
- 所有的 GPIO寄存器 的值在掉电模式下 被保存。这在时钟功率管理模块中的掉电模式下提到。
- EINTMSK 不能禁止从掉电模式唤醒,但是如果 EINTMSK 屏蔽了 EINT[15:4] 中的对应位,系统可以被唤醒,但是 SRCPND 中的 EINT47位 和 EINT823 位 不会 在唤醒后被 置1。
5.7.2 I/O端口 寄存器及引脚配置
5.7.2.1 端口A寄存器(GPACON/GPADAT)
- 端口A寄存器注意点
- 端口A为25位输出端口
- 当 A口 引脚配置为 非输出功能时,其输出无意义
- 从引脚输入 没有意义(因为A只能用于输出)
- 端口A寄存器GPACON地址等信息与位描述如下:
这里 的 ADDR0,也就是 第0位,为什么 可以作为 输出引脚 使用? 因为 对于 16位、或 32位的 存储芯片,其 寻址,是按 半字 或 字 为 单位 进行的,大家还 记得 前面 讲 存储系统 的 时候,对于 16位 的 系统,ADDR0 是 没有 使用的。如果 需要对 字节 进行 操作,有 专门的 控制 信号线,用于 对 字节 进行寻址。
- 端口A寄存器GPADAT地址等信息与位描述如下(地址信息见GPACON):
GPADAT每一位对应了一个引脚
5.7.2.2 端口B寄存器(GPBCON、GPBDAT、GPBUP)
- 端口B寄存器注意点
- 端口B为11位 输入/输出端口
- 当端口B引脚配置为 非输入/输出功能时,其GPBDAT寄存器中的值没有意义(DAT寄存器只在输入输出时有效)
- 端口B寄存器GPBCON地址等信息以及位描述如下:
- 端口B寄存器GPBDAT地址等信息以及位描述如下(地址信息见GPBCON):
GPBDAT 为准备输出或输入的数据,其值为 11位[10:0]。(一位对一个引脚)
- 端口B寄存器GPBUP地址等信息以及位描述如下(地址信息见GPBCON):
GPBUP 为 端口B 上拉寄存器,位 [10:0]有意义
5.7.2.3 端口C寄存器(GPCCON、GPCDAT、GPCUP)
- 端口C寄存器注意点
- 端口C为16位输入/输出端口
- 当端口C 引脚配置为非输入/输出功能时,其GPCDAT寄存器中的值没有意义(DAT只在输入输出时有意义)
- 端口C寄存器GPCCON地址等信息及位描述如下:
- 端口C寄存器GPCDAT地址等信息及位描述如下(地址信息见GPCCON):
GPCDAT 为准备输出或输入的数据,其值为 16位[15:0]。(一位对应一个引脚)
- 端口C寄存器GPCUP地址等信息及位描述如下(地址信息见GPCCON):
GPCUP 为端口C上拉寄存器,位 [15:0]有意义。
5.7.2.4 端口D寄存器(GPDCON、GPDDAT、GPDUP)
- 端口D寄存器注意点
- 端口D为16位输入/输出端口
- 当端口D引脚配置为非输入/输出功能时,GPDDAT寄存器中的值没有意义(GPDDAT的值仅在输入输出时有效)
- 端口D寄存器GPDCON地址等信息及位描述如下:
- 端口D寄存器GPDDAT地址等信息及位描述如下(地址信息见GPDCON):
GPDDAT 为准备输出或输入的数据,其值为 16位[15:0]。(一位对应一个引脚)
- 端口D寄存器GPDUP地址等信息及位描述如下(地址信息见GPDCON):
GPDUP 为端口D上拉寄存器,位 [15:0]有意义。初始化时,[15:12]无上拉功能,而[11:0]有上拉。
5.7.2.5 端口E寄存器(GPECON、GPEDAT、GPEUP)
- 端口E寄存器注意点
- 端口E为16位输入/输出端口
- 当端口E引脚配置为非输入/输出功能时,其GPEDAT寄存器中的值没有意义(只有为输入输出时GPEDAT才有意义)
- 端口E寄存器GPECON地址等信息及位描述如下:
- 端口E寄存器GPEDAT地址等信息及位描述如下(地址信息见GPECON):
GPEDAT 为准备输出或输入的数据,其值为 16位[15:0](一位对应一个引脚)
- 端口E寄存器GPEUP地址等信息及位描述如下(地址信息见GPECON):
GPEUP 为端口E上拉寄存器,位 [15:0]有意义。初始化时各个引脚都有上拉功能。
5.7.2.6 端口F寄存器(GPFCON、GPFDAT、GPFUP)
- 端口F寄存器注意点
- 端口F为8位输入/输出端口
- GPF0~GPF7 用作 POWER_OFF 模式中的唤醒信号,那么必须要将其配置为外部中断。
- 当端口F引脚配置为非输入/输出功能时,其GPFDAT寄存器中的值没有意义(只有为输入输出时GPFDAT的值才有效)
- 端口F寄存器GPFCON地址等信息及位描述如下(地址信息见GPFCON):
- 端口F寄存器GPFDAT地址等信息及位描述如下(地址信息见GPFCON):
GPFDAT 为准备输出或输入的数据,其值为 8位[7:0]
- 端口F寄存器GPFUP地址等信息及位描述如下(地址信息见GPFCON):
GPFUP 为端口F上拉寄存器,位 [7:0]有意义。初始化时各个引脚都有上拉功能
5.7.2.7 端口G寄存器(GPGCON、GPGDAT、GPGUP)
- 端口G寄存器注意点
- 端口G为16位输入/输出端口
- GPG0~GPG7 用作 POWER_OFF 模式中的 唤醒信号,那么必须要将其配置为外部中断。
- 当端口G引脚配置为非输入/输出功能时,其GPGDAT寄存器中的值没有意义(GPGDAT的值仅在输入输出时有效)
- 端口G寄存器GPGCON地址等信息及位描述如下(地址信息见GPGCON)
注意点就跟上面的图片中所说的一样:在NAND引导方式时,GPG[15:13]必须选择输入
- 端口G寄存器GPGDAT地址等信息及位描述如下(地址信息见GPGCON)
GPGDAT 为准备输出或输入的数据,其值为 16位[15:0](一位对应一个引脚)
- 端口G寄存器GPGUP地址等信息及位描述如下(地址信息见GPGCON)
GPGUP 为端口G上拉寄存器,位 [15:0]有意义。初始化时[15:10]引脚无上拉功能(对应bit位值为1),其它bit位值为0。
5.7.2.8 端口H寄存器(GPHCON、GPHDAT、GPHUP)
- 端口H寄存器注意点
- 端口H为11位输入/输出端口
- 当端口H引脚配置为非输入/输出功能时,其GPHDAT寄存器中的值没有意义(GPHDAT只在为输入输出的时候有效)
- 端口H寄存器GPHCON地址等信息及位描述如下(地址信息见GPHCON)
- 端口H寄存器GPHDAT地址等信息及位描述如下(地址信息见GPHCON)
GPHDAT 为准备输出或输入的数据,其值为 11位[10:0](一位对应一个引脚)
- 端口H寄存器GPGUP地址等信息及位描述如下(地址信息见GPHCON)
GPHUP 为端口H上拉寄存器,位 [10:0]有意义
5.7.2.9 端口J寄存器(GPJCON、GPJDAT、GPJUP)
- 端口J寄存器注意点
- 端口J为13位输入/输出端口
- 当端口J引脚配置为非输入/输出功能时,其GPJDAT寄存器中的值没有意义(GPJDAT只在为输入输出的时候有效)
- 端口J寄存器GPJCON地址等信息及位描述如下(地址信息见GPJCON)
- 端口J寄存器GPJDAT地址等信息及位描述如下(地址信息见GPJCON)
GPJDAT 为准备输出或输入的数据,其值为 13位[12:0](一位对应一个引脚)
- 端口J寄存器GPGUP地址等信息及位描述如下(地址信息见GPJCON)
GPJUP 为端口J上拉寄存器,位 [12:0]有意义
5.2.7.10 外部中断控制寄存器(EXTINTn)
- 外部中断控制寄存器作用:24个外部中断 可以有不同的信号方式请求。EXTINTn 为外部中断请求,配置信号的方式为:电平触发 或者 边沿触发,也可以配置信号极性。为了能检测出电平触发中断,不受噪声滤波器的影响,EXTINTn引脚的有效逻辑电平 至少 要维持 40ns
- 外部中断控制寄存器地址等信息及位描述如下:
EXTINT0——使用3位设置
EXTINT1——使用4位设置(多一位用于滤波设置)
EXTINT2——使用4位设置(多一位用于滤波设置)
边沿触发就是双边触发
5.2.7.11 外部中断过滤寄存器(EINTFLTn)(-)
- 外部中断过滤寄存器作用:要确认中断等级,在 EXTINTn 引脚上正确的逻辑电平必须保留 40ns 噪音滤波。
- 外部中断过滤寄存器地址等信息及位描述
5.2.7.12 外部中断屏蔽寄存器(EINTMASK)
- 外部中断屏蔽寄存器作用:针对20个外部中断(EINT[23:4])的中断屏蔽寄存器。用于实现次级中断的屏蔽。(0-3不需要是因为可以直接使用总的中断屏蔽寄存器进行屏蔽)
- 外部中断屏蔽寄存器地址等信息以及位描述如下
5.2.7.13 外部中断挂起寄存器(EINTPENDn)
- 外部中断挂起寄存器作用:外部中断挂起寄存器 EINTPENDn 是针对 20个 外部中断(EINT[23:4])的,可以通过向此 EINTPEND 寄存器相应位 写1来清除比特位(与总的挂起寄存器相同,只不过这个是针对次级中断的。实际上就是前面提到的次级挂起寄存器,只不过前面并没有单独介绍外部中断的次级挂起和次级屏蔽)
- 外部中断挂起寄存器地址等信息及位描述如下:
5.8 PWM定时器
5.8.0 PWM定时器简介
- S3C2440 定时器的主要特性
- 5个16 位定时器
- 2个8位预分频器 和 2个4位分频器(时钟除法器);
- 输出波形的占空比可编程控制(PWM)
- 自动加载模式 或 单触发脉冲模式;
- 死区产生器
- 死区,通常 也 叫做 死区时间,deadtime,常用于 功率开关 的 控制信号 翻转时 避免 发生 误触发。很多 电源 管理 类 芯片 都会 通过 检测 反馈 电流 或 反馈电压,对 一个 或 多个 外部 功率 器件 进行 控制,这些 反馈 电流 或 电压 信号,常常 会被 功率器件 开关时 产生 的 噪声 所 影响,输出 错误 的 控制信号。为了 避免 噪声的 影响,通常在 控制信号 翻转后 到 反馈信号 稳定的 一段 时间内,对 反馈信号 的 运算电路 进行 屏蔽,这段 时间 就是 死区时间。实现 相关 功能 的 电路 就是 死区 电路。而 在 2440 芯片 中,死区 用于 电源设备 的 PWM 控制。该 功能 是 使能 后 将 在 关闭 一个 开关设备 和 开启 另一个 开关设备 之间 插入 一个 时间 间隙。该 时间 间隙 禁止 两个 开关 设备 在 这样 一个 较短的 时间 内 同时 开启。
- S3C2440 定时器功能简介
- 定时器0、1、2、和3 具有PWM功能(脉宽调制)
- 定时器4 是一个内部定时器,不具有对外输出口线
- 定时器0 具有死区发生器,通常用于大电流设备应用
- 定时器0和1 公用 一个8位预分频器
- 定时器2、3和4 公用 另一个8位预分频器
- 每一个定时器通过除法器(每一个定时器都有一个除法器)可以得到5种不同的信号(1/2、1/4、1/8、1/16和TCLK 。只能是这五种选择,不能任意) 。
- 每一个时钟模块 从其时钟除法器中 接收时钟信号,时钟除法器 从其相应的 8位预分频器 中接收时钟信号。8位预分频器 是可编程的,并根据存储在 TCFG0 和 TCFG1 的值来对 PCLK信号 进行分频。
也 就是 每个 定时器,所使用 的 时钟信号 是 把 PCLK 先 经过 预分频器 分频后,再 经过 除法器 分频,所 得到 的。通过 这种 方式,我们 可以 设置 时钟 信号 的周期。
5.8.1 PWM 概念
- PWM 概念(脉宽调制):就是只对 一方波序列信号的占空比 按要求进行调制,而不是 改变方波信号的其它参数,即不改变 幅度和周期,因此脉宽调制信号的产生和传输,都是数字式的。
- 占空比:是指 在 一个 脉冲 信号(也就是 时钟 信号) 的周期 内,高电平 相对于 总时间 所占 的 比例
- PWM作用:用脉宽调制技术 可以 实现模拟信号。如果调制信号的 频率远远大于 信号接受者的分辨率,则接受者获得的是信号平均效果,不能感知数字信号的 0和1 ,其信号大小的平均值与信号的占空比有关,信号的占空比越大,平均信号越强,其平均值与占空比成正比。只要带宽足够(频率足够高或周期足够短),任何模拟信号都可以使用 PWM 来实现。
- 即通过对一系列脉冲的宽度进行调制,等效出所需要的波形(含形状和幅值) 。
- PWM调制的思想
- 理论基础:
- 调制思想
- PWM 技术的应用:借助于微处理器,使用脉宽调制方法实现模拟信号是一种非常有效的技术,广泛应用在:从测量、通信到功率控制与变换的许多领域中。
5.8.2 PWM 定时器结构(**)
5.8.2.0 PWM定时器结构简述
- 缓冲寄存器:TCNTBn 和 TCMPBn 双重缓冲器的特性使 定时器频率 和 占空比改变时,确保产生稳定的输出。(所谓的 缓冲,是指 减法计数器 在进行 减法 计数操作的 时候,并没有 直接 对这 两个 寄存器 进行 操作。只是 把这 两个 寄存器的 值,分别装入 减法计数器 和 比较寄存器 中,在做 减法计数 时,实际 使用的 是 那两个 寄存器的 值。这样做 的 好处 就是,你可以在 一次 减法计数操作的 过程中,随时 修改 定时器计数缓冲寄存器(TCNTBn)和 定时器比较缓冲器(TCMPBn)的 值,而 不会 对 当前 的计数 操作 有 任何 影响,只有 当一次 计数操作 完成,也就是 减法计数器 中的 值,被 减到 了0 以后,计数器 会重新 装载 初值 和 比较值,这个时候,新的值 才起作用。这样 可以 避免在 减法计数的 时候,直接修改 初值 和 比较值 而 导致的 混乱,因此说 确保 产生 稳定的 输出)
- 定时器计数缓冲寄存器(TCNTBn)的值 是当定时器使能时装载到减法计数器的 初值;(周期)
- 定时器比较缓冲器(TCMPBn)的值 将被装载到比较寄存器并与减法计数器的值进行比较;(占空比)
- 减法器与自动重载:每个计数器都有自己的 16位减法器,由定时器时钟驱动。当定时器计数器值 达到0时,定时器发出中断请求,通知 CPU 定时工作已经完成,相应的 TCNTBn 将自动装入计数器,以继续下一个操作。但是,如果,定时器控制寄存器TCONn中的自动重装载开/关被清除, 则 TCNTBn 中的值将不会被装载到计数器。
- 也就是,关闭了 自动重载 功能,则一次 计数 结束后,不会 自动 重载 初值,也就 不会 自动 执行 下一次的 减法 计数 操作。
- TCMPBn与脉宽调节:当该计数器值与定时器控制逻辑中的比较寄存器值相等时,定时控制逻辑改变输出电平。因此,比较寄存器决定 PWM 输出的高电平时间(或低电平时间)。
5.8.2.1 预分频器 和 时钟除法器
- 预分频器 和 时钟除法器效果:一个 8位 的预分频器和一个 4位 时钟除法器作用下的输出频率如下所示:
5.8.2.2 定时器基本操作
- 定时器(定时器4除外)寄存器:TCNTBn、TCNTn、TCNTOn、TCMPBn和TCMPn几个寄存器(TCNTn和TCMPn是减法计数器内部寄存器的名称,TCNTn的值可以通过读TCNTOn得到)
- 定时器(定时器4除外)执行过程:当定时器达到 0时 ,TCNTBn 和 TCMPBn的值将 自动加载 到 TCNTn 和 TCMPn 中。当 TCNTn到0且中断使能时,定时器将 产生一个中断请求。
5.8.2.3 双缓冲模式与自动加载
- 双缓冲模式:脉宽调制定时器 有一个 双缓冲功能,在这种情况下,改变下次加载值的同时 不影响 当前定时周期。因此,尽管设置一个 新的定时器值,当前定时器的操作将会继续完成而不受影响
- 即修改 两个 缓冲器,不影响 当前 的周期。只有 当前 周期 执行完成,把 两个 缓冲器的 值,加载到 对应的 寄存器 中后,才开始 影响 下一个 周期。
双缓冲功能时序图如下:
由于定时器具有双缓冲功能,则在当前周期的任何时间都可以通过 ISR 和其它程序改变 TCMPBn 的值。
- 自动加载:当 TCNTn 的值到 0时,自动加载操作复制 TCNTBn 的值到 TCNTn 中。但是如果 自动加载模式 没有使能, TCNTn 将不进行任何操作
5.8.2.4 用手动更新位和反相器位对定时器进行初始化
当递减计数器的值 到0时,自动加载操作才能进行。所以,用户必须预先对 TCNTn 定时一个起始值。因此,起始值必须由手动更新位载入
- 初始化定时器步骤(启动一次定时器应该采取的步骤)
- 将初始值写入到 TCNTBn 和 TCMPBn中
- 设置相应定时器的手动更新位(也就是 把 手动更新位 置1。这将 使得 TCNTBn 和 TCMPBn 的值,装载到 计数器中)推荐同时配置反相器位开关位(同时是指将这两个bit同时写入。不管反相器用与否)
- 设置相应定时器的起始位(也就是把定时器的起始控制位 置1,从而启动定时器 ),从而启动一个定时器(同时清除手动更新位。同时的意思与上面相同)
- 注意事项
- 如果定时器被迫停止,TCNTn将保留计数器的值且不重载TCNTBn。如果用户需要设置一个新值,必须执行手动更新。
- 无论何时 TOUT 反相器开关位的值改变。TOUTn 的逻辑值将随之改变(也就是电平极性立即改变)。因此,推荐反相器开关位的配置与手动更新位 同时进行。
5.8.2.5 定时器操作步骤举例
这里就直接截图了
- 起始位 置1 后,不会 立即 启动 计数,而是 在 下一个 定时器 时钟信号的 周期 开始的 时候,开始 递减计数,因为 计数操作 需要 和 定时器 时钟信号 同步,在 定时器 时钟信号 的 上升沿 或 下降沿 (前面并没有提到什么寄存器能配置上升沿或者下降沿)进行 递减计数。
- 执行中断服务程序时,计数器的 初值 和 比较寄存器 的初值为80 和 40
- 此时低电平的持续时间为20。(因为计数器的初值 和 比较寄存器 的初值为80和60)
5.8.2.6 脉宽调制
- 脉宽调制原理:脉宽调制功能可以通过改变 TCMPBn 的值实现。PWM 的频率由 TCNTBn 决定(实际上就是调整占空比)
- 脉宽调制示例
如果想得到一个 高的PWM值 ,则要 增加TCMPBn的值。相反,如果想要得到一个 低的PWM值 ,则要 减少TCMPBn的值。如果反相器使能,则情况正好相反(反相器反的是输出的电平)
5.8.2.7 输出电平控制
- 反相器:反相器关闭的情况下,如果 TCNTn≤TCMPn,则输出高;如果 TCNTn>TCMPn,输出为低;如果反相器开启,情况恰好相反
- 反相器应用:以下步骤描述了如何在反相器关闭的情况下,控制 TOUT 的值的高或低:
- 关闭自动加载位。然后,TOUT 变高且在 TCNTn 为 0 后定时器停止运行(此时TOUT 输出高电平,定时器还是运行状态,但是并没有进行有效操作了)
- 通过定时器开始位清零来停止定时器运行(此时TOUT 输出高电平,定时器关闭)
- 如果打开反向器再执行以上操作,那么TOUT 将输出低电平
- 如下图:
5.8.2.8 死区发生器
- 死区是为了功率器件中的 PWM控制。这一功能 使能 在一个关键器件关闭和另一个开关器件开启的 间隔时间。这一时间间隔 禁止 了两个开关器件同时处于开启状态,即使是一段非常短的时间内。
- 也就是,在一个器件 关闭 和 另外 一个 器件 开启的 这 两个 动作 间,插入 一个 时间 间隔,不允许 两个 事件 同时 发生,或 在 间隔 很短 的 时间内 连续 发生。这 主要 是 为了 避免 大功率 器件,同时 开关,所导致 的 电流的 剧烈 扰动,以及 其 所 带来的 干扰
- 死区示例
- TOUT0 是一个 PWM输出。nTOUT0 是 TOUT0 的反向。如果死区使能,则 TOUT0 和 nTOUT0 的输出波形将是 TOUT0DZ 和 nTOUT0DZ 。nTOUT0DZ 由 TOUT1 脚输出。在**死区间隔,TOUT0DZ 和 nTOUT0_DZ 将不会同时开启**。下图为死区使能后的输出波形:
从上图可以 看出,两个 波形中,由低电平,转向高电平的时间,都被延后了(以为只需要预防大电流就好了,所以要小心上升沿)。特别的,中间的小波形被延迟后,还没有来得及开启,就关闭了,所以,这个开启 就没有被执行。
5.8.2.9 DMA请求模式
- PWM 定时器能在每个特定时间间隔产生 一个DMA请求。定时器保持 DMA请求信号(nDMA_REQ)为低 直到 定时器接收到ACK信号。当定时器接收到 ACK信号时,定时器将使请求信号无效。产生DMA请求的 定时器由设置 DMA模式位(TCFG1)决定。如果一个定时器配置成 DMA请求模式,则此定时器将不能产生中断请求,而其他定时器将正常产生中断请求。
- PWM DMA请求模式注意点
- 这里 定时器 只 起到 DMA 请求源 的 作用,它 既不是 数据源 也 不是 目的地,比如 通过 定时器 产生 一个 固定 时间间隔 的 DMA 请求,但是 ,这个 DMA 传输 可能 是 内存 到 LCD 显存 的DMA 传输,也可能 是 内存 到 DA转换的 数据 传输。
- 上面介绍了PWM的中断和DMA模式。PWM还可以用于查询模式
- DMA模式配置
- DMA 模式 控制位,是 定时器 配置寄存器1 TCFG1 的 [23:20]位,用于 设置 哪个 定时器 用于 DMA模式,通过 该 表 可以 看出,同一时刻,只能 有一个 定时器,可以 配置为 DMA 传输模式。就是 INT 为 OFF的 所 对应的 那个 定时器,因为 开启 DMA模式 后,INT 是被 禁止 的。 DMA 模式 为 0000 或0110 的 时候,所有 定时器,都不 使用 DMA模式。
- 定时器4 的DMA模式操作时序图
- INCLK:经过 预分频 和 4位 分频器 以后,进入定时器4的时钟信号。
- INT4tmp:这里,有一个 tmp,表示 的是 它不是 一个 实际 的 信号线,这里 只是 为了 说明, 而 放在 这里,用于 表明,一次 计数周期 结束,如果 是 使用 中断 模式,则 这里 将会 发生 一个 中断。但 实际 的 中断 INT4 没有 发生,因为 它 配置 成 了 DMA 模式。
- DMAreq_en,就是 定时器 配置寄存器1 TCFG1 的 DMA 模式 配置位:为0101. 定时器4 配置 为 DMA模式。
当 定时器4 的 当前 计数器递减到0的时候,在 原本应该产生中断的地方(INT4tmp所示),由于被配置为 DMA模式,因此,没有产生中断,而是 产生 了 DMA 请求。对应的 DMA请求线被拉低,直到收到 DMA 应答信号 DMA ACK。再把请求信号清除。
5.9 人机交互设备
截图
5.10 综合应用
截图
一些重点
- 作者:Noah
- 链接:https://imnoah.top/article/ARMReview/Chapter5
- 声明:本文采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。