




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、Chapter 8 C54x 的片内外设,2,主要内容,C54x 的时钟发生器 C54x 的中断系统 C54x 的定时器及应用 C54x 的主机接口和串行口(略) C54x 的外部总线 (略),3,片内外设概述,片内外设是指集成在 DSP 芯片内部的扩展功能模块,包括时钟发生器、中断、定时器、主机接口、串行口等 片内外设主要用于与外部器件进行数据交换和通信,其优势在于: 对片外设备进行访问一般需要借助外部总线和中断机制,而对片内外设的访问直接通过片内总线就可以完成,无需插入等待状态,效率更高; 将模数/数模转换、定时器等常用模块集成在芯片中简化了电路板设; 可以实现一些特殊功能,如 JTAG、
2、等待状态发生器等 CPU 通过读写相应的控制寄存器来访问和控制片内外设 片内外设寄存器被映射到数据存储空间的第0页 (地址 20h5Fh),4,时钟发生器,时钟发生器为 C54x 提供时钟信号, 其结构包括内部振荡器和 PLL 锁相环电路 时钟发生器有两种驱动方式 使用内部振荡电路产生时钟信号 在 Xl 和 X2/CLKIN 引脚之间接入一个晶体, 用于启动内部振荡器 驱动能力弱, 频率范围小 (20K60MHz) 使用外部时钟源驱动 将外部时钟信号直接加到DSP芯片的X2/CLKIN引脚, 而X1引脚悬空 驱动能力强, 频率范围大 (1200MHz),5,硬件配置 PLL,C541/C542
3、/C543/C545/C546 等 DSP 支持通过硬件设置来配置 PLL, 不同芯片支持不同配置方案; 停止工作等效于 IDLE3 省电模式,6,C545A/C546A/C548 等芯片支持用软件编程的方法控制 PLL 锁相环 软件可编程 PLL 提供两种形成时钟信号的方式 PLL 方式 (倍频方式) 工作频率 = 输入时钟 (CLKIN) 系数 系数的范围为 0.2515, 共有 31 个系数可供选择 DIV 方式 (分频方式) 工作频率 = 输入时钟 (CLKIN) 系数, 系数为 2或4 在DIV 方式下, 包括 PLL 在内的所有模拟电路都会被关断, 以降低功耗 PLL 的行为通过设
4、置时钟方式寄存器 CLKMD 来定义 (STM 指令),软件可编程 PLL,7,PLLSTATUS: PLL 状态位; 为 0/1 表明时钟发生器处于 DIV/PLL 模式 PLLNDIV: 决定时钟发生器的工作方式; 为 0/1 表明要采用 DIV/PLL 方式 PLLON/OFF: 与 PLL_NDIV 一起决定 PLL 工作与否; 两标志位都为 0 时, PLL 关闭 PLLCOUNT: 设定 PLL 为 CPU 提供时钟信号前需要的牵引时间; 为一减法计数器, 以 16 倍的输入时钟周期作为递减周期 (即每 16 个时钟周期减 1) PLLDIV: 与 PLL_MUL 和 PLL_ND
5、IV 一起决定频率扩大或缩小的系数 PLLMUL: 与 PLL_DIV 和 PLL_NDIV 一起决定频率扩大或缩小的系数,时钟方式寄存器,CLKMD 的结构, 牵引时间: PLL 锁定频率 (提供稳定时钟信号) 所需要的时间,8,频率缩放系数,可编程 PLL 的频率缩放系数,由上表可以推知, 可编程 PLL 共有 31个可供选择的系数, 分别是: 0.25, 0.5, 0.75, 1, 1.25, 1.5, 1.75, 2, 2.25, 2.5, 2.75, 3, 3.25, 3.5, 3.75, 4, 4.5, 5, 5.5, 6, 6.5, 7, 7.5, 8, 9, 10, 11, 1
6、2, 13, 14, 15,例如: STM #0 xF7FF, CLKMD ; CLKMD=1111011111111111B, 系数为 1,9,C54x 根据引脚 CLKMD1CLKMD3 的状态来决定芯片复位之后如何设置时钟方式寄存器 CLKMD, 以及如何产生时钟信号,CLKMD的复位,10,若要改变 PLL 的倍频系数, 必须先将 PLL 的工作方式从倍频 (PLL 方式) 切换到分频 (DIV 方式); 具体步骤如下:,倍频切换,复位 PLLNDIV, 选择 DIV 方式; 检测 PLLSTATUS 标志位, 以确定 PLL 工作方式是否已顺利切换; 根据所需时钟频率, 确定倍频系数
7、; 根据时钟频率确定牵引时间, 即PLLCOUNT; 重新设定 CLKMD 寄存器,倍频切换例程 STM #00H, CLKMD status: LDM CLKMD, A AND #01H, A BC status, ANEQ STM #03EFH, CLKMD,PLL_NDIV= 1, PLL_DIV= 0, PLL_NUL =0, 倍频系数为 1,若要在二分频和四分频之间进行切换, 则必须先将 PLL 切换到整数倍频方式,11,牵引时间的确定,PLLCOUNT Lockup_Time / (16T_CLKIN),12,中断系统概述,C54x 的中断类型 按照中断源的性质, 可分为软件中断和
8、硬件中断 软件中断: 利用 INTR, TRAP, RESET 指令发出; 无优先级之分 硬件中断: 由片内外设中断信号或外部中断信号触发; 有优先级之分 按照处理方式, 可分为可屏蔽中断和不可屏蔽中断 可屏蔽中断: 能用软件屏蔽或开放; C54x 最多支持 16 个可屏蔽中断 不可屏蔽中断: 不能用软件屏蔽; 包括所有软件中断和两个外部硬件中断, 即 RS 和 NMI (注意: 硬件中断服务程序也可以用软件方式启动),中断就是 CPU 暂时中止当前操作, 转而去处理某个特殊事件的过程; 引发中断的事件称为中断源, 中断源发出的处理请求称为中断请求, 处理中断源的程序称为中断处理程序或中断服务
9、程序,13,中断寄存器,中断标志寄存器 IFR (Interrupt Flag Register) IFR 中保存的是各种可屏蔽硬件中断的即时状态; 当且仅当某一硬件中断被触发时, IFR 中相应的标志位才会被置为 1; IFR 标志位不会被清零, 除非中断请求得到处理, 或者出现下列三种情况之一: 将 1 写入该标志位 (将该标志位清 0), 相应的尚未处理完的中断被清除; 利用对应的中断号执行 INTR 指令, 同样可将相应标志位清 0 中断屏蔽寄存器 IMR (Interrupt Mask Register) IMR 用来屏蔽或开放可屏蔽中断; 每个二进制码对应一种中断 状态寄存器 ST
10、1 中的 INTM 标志位为 0 时, 若某一屏蔽位为 0, 则屏蔽对应的中断, 若为 1, 则解除屏蔽 ( INTM 相当于所有可屏蔽中断的总开关),14,C541 只支持 9 种可屏蔽硬件中断 INT0 INT3 : 外部硬件中断 RINT0, XINT0, RINT1, XINT1 : 串行口中断和内部硬件中断 TINT : 定时器中断和内部硬件中断 寄存器标志位与硬件中断的对应关系一致 IFR 中的标志位代表是否有该类硬件中断请求等待处理 IMR 中的标志位代表是否要将该类硬件中断屏蔽,C541 的中断寄存器的结构,15,接收中断请求,接收中断请求 中断请求可以来自于硬件器件或者软件指
11、令 硬件中断请求由外部接口信号或片内外设信号自动产生; 每接收到一个硬件中断请求, 不管这个请求最终是否会被应答, 与之对应的 IFR 寄存器中的标志位都会被置为 1, 并将维持到请求被应答或标志位被重置 软件中断请求来自于程序中的 INTR, TRAP 或者是 RESET 指令 INTR : 可以启动任意中断服务程序; 当 CPU 响应 INTR 发出的中断请求时, 会将 INTM 标志位置为 1, 屏蔽其它可屏蔽中断 TRAP : 功能与 INTR 相同, 但不改变 INTM 标志位 RESET : 执行软件复位, 令 CPU 返回某一预定状态 (INTM 1),C54x 的中断处理过程可
12、以大概划分为三个步骤: 接收中断请求, 应答中断, 和执行中断服务程序,16,中断应答,接收到中断请求后, CPU 必须首先决定是否要响应这一请求; 若响应, CPU 会暂停当前操作, 执行中断服务程序 (ISR), 发出中断响应信号 IACK (外部可见的引脚信号), 并清除 IFR 标志位 不可屏蔽的中断请求 (软件 + RS ST1 中的 INTM 标志位为 0 INTM 为 1 意味着所有可屏蔽中断均被屏蔽 中断屏蔽寄存器 IMR 中的对应位为 1 IMR 中的屏蔽标志为 1 表明该中断未被单独屏蔽,17,执行中断服务程序,CPU 响应中断请求后, 会顺序执行以下操作 保护现场, 将程
13、序计数器 PC 的当前值压入堆栈; 将中断向量的地址加载到 PC; 从中断向量指定地址开始取指; 执行分支转移, 进入中断服务程序 ; 执行中断服务程序直到遇到返回指令; 从堆栈中弹出返回地址, 加载到PC中; 返回被中断的程序继续执行,保护和恢复现场时要注意: 必需保护所有会被 ISR 改变的寄存器; 恢复和保护现场时的方向相反; 如果需要保护块重复参数, 那么在恢复时应先恢复块重复计数器 BRC, 再恢复 ST1中的块重复标志位 BRAF (BRC为 0 时, BRAF 会被自动清零),中断操作流程,中断向量 跳转指令 B + 对应的 ISR 的地址,中断向量表 中断向量表示所有中断向量的
14、集合 每个中断向量在向量表中占四个字 各中断向量在向量表中的相对位置固定, 或者说序号 INDEX 固定 5 位序号 INDEX 由指令 (INTR/TRAP) 或 CPU (RESET/硬件中断) 提供 向量表起始地址由状态寄存器 PMST 中的 9 位 IPTR 决定 (基地址) 中断向量地址: IPTR7 + INDEX2,19,配置中断向量表,定义中断向量表 .title vectors.asm * RESET * .refstart .sect.RESET Bstart * INT2 * .refINT2 .sect.INT2 BINT2 .end,定义中断处理函数 .title t
15、est.asm .mmregs .def start, INT_2 . start: . RSBX INTM . end: B end INT2: SFTA A, 8 RETE .end,装载中断向量表 . MEMORY PAGE 0: vec: org = 0FF80H, len = 04H vec1: org = 0FFC8H, len = 04H SECTIONS .RESET : vec PAGE 1 .INT2 : vec1 PAGE 1 ,20,定时器的结构和工作流程,PSC 在 CPU 时钟 CLKOUT 作用下进行减 1 计数;,PSC 减至 0 后, 产生借位信号, 并将 T
16、DDR 重新加载到 PSC;,在 PSC 借位信号作用下, TIM 进行减 1 计数;,TIM 减至 0 后, 产生定时中断 TINT 和定时输出 TOUT, 同时将 PRD 重新加载到 TIM,定时器的工作流程,PMST中的CLKOFF标志位控制TOUT输出与否,21,定时器的寄存器,C54x 的片内定时器包括三个 MMR, 分别是 TIM (Timer Register): 存储定时器的当前值 PRD (Timer Period Register): 存储 TIM 的初始值, TIM 递减归零后, CPU 会自动将 PRD 的值加载到 TIM; 可用来调整 TINT/TOUT 周期 TCR
17、 (Time Control Register): 包含定时器的控制位和状态位,保留位,软件调试控制位,预定标计数器,重新 加载位,停止 状态位,分 频 系 数,决定调试过程中遇到断点时定时器的工作状态,减1计数器, 不可写入,置1时定时器复位, TDDR PSC, PRD TIM,置 1/0 时定时器停止 / 启动,对CPU时钟进行分频, 用来加载PSC,22,定时器的初始化,定时器初始化步骤及对应指令如下 根据需要, 决定 TINT 的周期, 相应选择 PDR 和 TDDR 的数值 将 TCR 中的停止状态位 TSS 置 1, 以暂时关闭定时器 STM #0010H, TCR ; TCR
18、的第四位为停止状态位 设置周期寄存器 PRD STM #0100H, PRD ; TINT 的周期 = T_CLK * (TDDR+1)*(PRD+1) 重置 TCR, 以启动定时器; 除相应设置 TDDR 外, 还要将 TSS 位清零, 以接通 CLKOUT, TRB 位置 1, 以重新加载 TIM 和 PSC STM #0C20H, TCR ; TDDR = 0, TSS =1, TRB = 1 重置 TCR 之后, 也许需要执行以下步骤以打开定时器中断: 先将 IFR 中的 TINT 位置 1, 以清除之前未处理完的定时器中断; 再将 IMR 中的 TINT 位置为 1, 以开放定时器中
19、断; INTM 置为 0, 以开放所有可屏蔽中断,23,; abc1.asm ; 定时器0寄存器地址 TIM0 .set 0024H PRD0 .set 0025H TCR0 .set 0026H ; K_TCR0:设置定时器控制寄存器的内容 K_TCR0_SOFT .set 0b ; Soft=0 K_TCR0_FREE .set 0b ; Free=0 K_TCR0_PSC .set 1001b ; PSC=9H K_TCR0_TRB .set 1b ; TRB=1 K_TCR0_TSS .set 0b ; TSS=0 K_TCR0_TDDR .set 1001b ; TDDR=9 K_T
20、CR0 .set K_TCR0_SOFT| K_TCR0_FREE| K_TCR0_PSC| K_TCR0_TRB| K_TCR0_TSS| K_TCR0_TDDR,定时器应用举例,方波发生器例程,方波周期为定时中断周期的两倍; 每中断一次, 输出端电平取一次反,24,cont.,; 初始化定时器 0 ; 根据定时长度计算公式: ; Tt=T* (TDDR+1) * (PRD+1) ; TDDR=9, PRD=1599, CLKOUT主频=4MHz, ; Tt=250*(9+1)*(1599+1)=4,000,000(ns)=4(ms) STM #1599,TIM0 STM #1599,PRD0 STM #K_TCR0,TCR0 ; 启动定时器0中断 RET ; 定时器0的中断服务子
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
评论
0/150
提交评论