第7章 TMS320C54x片内外设
合集下载
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
加 成 器 T12))S立载0S按期减域SS=即Too0此。中1ffItt计开M定==分当的01数,始时,,频P数FF器以定S器rr系加Cee,时Tee启减数载==D当。00动到D对到::§定 定P工R0CPS中后时时S作CL7CK的,减.器器3,O数以到立在TU定TT值0即计ITS或MD进S加时停数D=减定行载1R止器1器时中定分P。工减器S的时频作到C复数器。,0位时加停T以时R停载止改B,止P工变总ST工作定是CD作。D时读R周位
3)定S时o器ft=主x要,F由re3e个=1存:不储考器映虑象So寄ft存位器,组定成时:器继续运行
保总为留定定0 时时器器周寄存期器寄(存器TIM(,PR地D址,:地0址0:240H0)25,H减)1为计T数IM器提;供初值;
定时器控制寄存器(TCR,地址0026H)控制定时器状态。
定时器
图7-4 定时器组成框图
;执行Next代码段,然后返回;
;若AR1=0,则执行下一条指令
STM #9,
AR1 ;为AR1赋初值
BITF AR2, #1 ;(AR2)&1→TC
BC ResetXF, TC ;若TC=1,则PC执行ResetXF
;代码段,否则执行下一条指令
SSBX XF
STM #1,
B
Next
;XF置为高电平 AR2
定时器 定时器的定时周期:
T定时周期 TCLKOUT TDDR 1 PRD 1
TCLKOUT: CPU时钟周期;TDDR: 定时器的分频系数; PRD: 计数周期。
定时器的主要作用: 用于定时控制、延时及外部事件的计数; 产生外围电路所需的采样时钟信号。
采样时钟信号的产生方法: 一是直接利用TOUT信号; 二是利用中断,周期地读一个寄存器。
根据图7-2,当C5416的输出时钟频率为30MHz时, PLL的锁定时间约为22µs,根据式7.2可得PLL锁定 定时器的初值为:
时钟发生器
PLLCOUNT(十进制)
Lockup TCLKIN
Time
16
1
22
1016
13.75
14
由于PLL锁定定时器减到0后,PLL才开始为C54x提供 时钟信号,为了安全起见,可以适当增大PLLCOUNT的数值, 本例中将其设定为18。所以,时钟方式寄存器(CLKMD) 的数值设定为:
;自定义已初始化段,段名为.vector ;引用主程序入口地址 ;引用中断服务程序入口地址
;定义复位中断标号 ;定义内部定时中断标号 ;复位中断,跳转到主程序的 ;入口地址 ;NMI中断,开中断返回
定时器
中断向量表如下: .sect ".vector“ .ref _c_int00 .ref TINT_ISR .mmregs
.def IV_RESET .def IV_TINT
IV_RESET: IV_NMI: IV_SINT17:
BD _c_int00 NOP NOP RETE NOP NOP NOP RETE NOP NOP NOP
PLL时钟发生器选择位。决定时钟发生器的工作方式,并与PLLMUL以 及PLLDIN一道定义频率的乘数 1)PLLNDIV=0:采用分频(DIV)方式 2)PLLNDIV=1:采用PLL方式
PLL的状态位。指示时钟发生器的工作方式(只读); 1)PLLSTATUS=0:分频(DIV)方式 2)PLLSTATUS=1:PLL方式
时钟发生器
§7.2 时钟发生器
TMS320C54x的外部参考时钟输入方式: (1)与内部振荡器共同构成时钟振荡电路 将晶体跨接于TMS320C54x的两个时钟输入引脚X1与 X2/CLKIN之间,构成内部振荡器的反馈电路。 (2)直接利用外部时钟 将一个外部时钟信号直接连接到X2/CLKIN引脚,X1 引脚悬空,此时内部振荡器不起作用。
0010 0000 1001 0111B=2097H
定用两序来 于时位 遇定定复停时器结 到时器位止重停合断器片 或新止使点分预内 启加状用时定 动频先载态,定时 定系标器时控位以时数定,器制决 器计当,位定 的数复T在 工R器位B用 作时=1高 状,时级 态T,S编 :以S位P程R清语D0中,言的定调数时试值程
第七章 TMS320C54x 的片内外设
§7.1 通用I/O引脚 §7.2 时钟发生器 §7.3 定时器 §7.4 主机接口 §7.5 串口 §7.6 外部总线 §7.7 TMS320C54x外部引脚 §7.8 小结
【重点难点】
★ 时钟发生器的实现方式 ★ 可编程定时器的原理和应用 ★ 主机接口的原理和使用方法 ★ 串口的四种形式及其使用方法 ★ 可编程分区转换逻辑 ★ 软件可编程等待状态发生器
107 24 216
104.86 103 (ms)
105ms
定时器
显然,最大定时周期(105ms)小于所需定时时间(500ms), 故一次定时无法满足题目要求。
所以,可以将定时周期设定为50ms,通过编写中断服务程序, 使得每10次内部定时中断改变一次输出信号的电平,即可达到题目 产生1s方波的要求。
RSBX XF STM #0,
;XF置为低电平 AR2
POPM ST0 RETE .end
;恢复现场(ST0) ;开中断并返回主程序
定时器
链接命令文件: -o ex7_2.out -stack 400H MEMORY {
PAGE 0: PRAM: origin=1800H, len=0800H PPPRAM: origin=0FF80H, len=0080H
通用I/O引脚
§7.1 通用I/O 引脚
通用I/O引脚
专用
名称:分支转移控制输入引脚
_____
BIO 作用:监控外部设备的状态 例如:XC 2, BIO
名称:外部标志引脚 XF 作用:为外部设备提供输出信号
例如:SSBX XF RSBX XF
18个多通道缓冲串行口(McBSP)引 非专用 脚
8个主机接口(HPI)双向并行数据引脚
XF
引脚产生周期为1s的方波。 分析:欲输出周期为1s的方波,则定时时间应为0.5s=500ms。
CPU时钟频率为 fCLKOUT 10 ,10故6 HCz PU时钟周期为:
TCLKOUT
1 f CLKOUT
10 7 s
所以,定时器的最大定时周期为:
T定时周期 TCLKOUT TDDR 1 PRD 1
PLL计数器值。PLL计数器是一个减法计数器,每16个输入时钟CLKIN 到来后减1。对PLL开始工作之后到PLL成为处理器时钟之前的一段时间 进行计数定时。PLL计数器能够确保在PLL锁定之后以正确的时钟信号 加到处理器
PLL开关位。与PLLNDIV位一起使能/禁止时钟发生器的PLL部件 1)PLLON/OFF=0,PLLNDIV=0:关PLL; 2)PLLON/OFF=0,PLLNDIV=1:开PLL; 3)PLLON/OFF=1,PLLNDIV=x:开PLL;
PAGE 1: DRAM:
} SECTIONS { .text: > PRAM .vector: > PPPRAM .stack: > DRAM .data: > DRAM .bss: > DRAM }
origin = 2000H, len=0800H
PAGE 0 PAGE 0 PAGE 1 PAGE 1 PAGE 1
图7-1 CLKMD 结构示意图
时钟发生器
时钟方式寄存器(CLKMD)各位域的功能
位
15~12 11
10~3
2
1
0
名称
PLLMUL PLLDIV PLLCOUNT
PLLON/OFF
PLLNDIV
PLLSTATUS
功能
PLL乘数。与PLLDIV、PLLNDIV一起定义频率的乘系数
PLL除数。与PLLMUL、PLLNDIV一起定义频率的乘系数
此时,指定TDDR=9,根据式7.3可得:
50 10 3 10 7 10 (PRD 1) PRD 49999
定时器
解:
汇编源程序:
.title "ex7_2.asm " ;为汇编源程序取名
.mmregs
.def _c_int00
;定义主程序入口地址的标号
.def TINT_ISR
;定义中断服务程序入口地址的标号
时钟发生器 1、硬件配置PLL
硬件时钟配置方法
引脚状态
时钟模式
CLKMD1 CLKMD2 CLKMD3
选择方案1
选择方案2
0
0
0
外部时钟源,PLL×3
外部时钟源,PLL×5
1
1
0
外部时钟源,PLL×2
外部时钟源,PLL×4
1
0
0
内部振荡器,PLL×3
内部振荡器,PLL×5
0
1
0
外部时钟源,PLL×1.5
STM #0008H, IMR ;开内部定时中断
RSBX INTM
; 开放所有可屏蔽中断
STM #0,
AR2 ;为AR2赋初值
End:
NOP
B
End
定时器
TINT_ISR:
setXF: ResetXF: Next:
;中断服务程序入口地址
PSHM ST0
;因要改变TC,故需保护ST0
BANZ Next, *AR1- ;若AR1≠0,则AR1减1,并
PERIOD .set 49999
;定义定时器周期寄存器的计数初值
_c_int00:
STM #9H,
AR1 ;定义中断次数
STM #0010H, TCR ;停止计数器
STM #PERIOD, PRD ;用计数初值49999加载PRD
STM #0E69H, TCR ;启动定时器
STM #0008H, IFR ;清除尚未处理完的内部时器中断
时钟发生器
例7-1 已知C5416的输入时钟频率FCLKIN=10MHz,现欲 从DIV模式转换为PLL×3模式,如何设置时钟方式 寄存器。
解:根据表7-4可知:当时钟模式配置成×3时: PLLPLLNDIV=1,PLLDIV=0,PLLMUL=2。 根据式7.1可得输出时钟频率为:
FCLKOUT FCLKIN 乘系数 10 3 30 MHz
定时器
3、使能定时器中断的操作步骤如下(假定INTM=1): 1)向中断标志寄存器IFR中的TINT位写0或1,以清除尚
未处理完(挂起)的内部定时中断。 2)将中断屏蔽寄存器IMR中的TINT位置l,以使能内部定
时中断。 3)将状态寄存器ST1中的INTM位清0,使能全局中断。
定时器 例7-2 设CPU时钟频率为10MHz,试利用内部定时中断在
1/2(PLL无效) 1/4(PLL无效)
停止方式
两种时钟配置模式:
(1)锁相环(PLL)模式:输入时钟乘以从0.25~15共31档 系数之一;
(2)分频(入时钟的关系:
FCLKOUT FCLKIN 乘系数
PLLNDIV
0 0 1 1 1 1
时钟发生器
复位时设置的时钟方式
引脚状态 CLKMD寄存器复位值
CLKMD1 CLKMD2 CLKMD3
0
0
0
0000h
0
0
1
9007h
0
1
0
4007h
1
0
0
1007h
1
1
0
F007h
1
1
1
0000h
1
0
1
F000h
0
1
1
-
时钟方式
1/2(PLL无效) PLL×10 PLL×5 PLL×2 PLL×1
外部时钟源,PLL×4.5
0
0
1
外部时钟源,频率除以2
外部时钟源,频率除以2
1
1
1
内部振荡器,频率除以2
内部振荡器,频率除以2
1
0
1
外部时钟源,PLL×1
外部时钟源,PLL×1
0
1
1
停止模式
停止模式
时钟发生器 2、软件配置PLL
软件配置PLL是通过对时钟方式寄存器(CLKMD)编程 而完成PLL方式下时钟配置的一种高度灵活的时钟控制方式。 CLKMD是一个16位的存储器影像寄存器,位于数据空间的 0058H单元。
PLL的乘法系数
PLLDIV
x x 0 0 1 1
PLLMUL
0~14 15
0~14 15
0或偶数 奇数
乘系数
0.5 0.25 PLLMUL+1
1 (PLLMUL+1)÷2
PLLMUL÷4
时钟发生器
PLLCOUNT的数值:
PLLCOUNT(十进制)
Lockup TCLKIN
Time
16
PLL锁定时间和CLKOUT频率的关系
定时器
定时器应用编程
1、计算计数初值 两个计数初值需要计算:TDDR和PRD 。一般应该先 指定一个TDDR的值,然后根据定时器的定时周期公式求 得PRD的值。
2、初始化定时器可采用如下步骤: 1) 将TCR中的TSS位置1,以停止定时器。 2) 加载PRD。 3) 加载TCR,以重新启动定时器 (1) 用第1步中指定的定时器分频系数加载TDDR。 (2) 设置TSS=0,以启动定时器。 (3) 设置TRB=1,以便为PSC和TIM赋初值。
3)定S时o器ft=主x要,F由re3e个=1存:不储考器映虑象So寄ft存位器,组定成时:器继续运行
保总为留定定0 时时器器周寄存期器寄(存器TIM(,PR地D址,:地0址0:240H0)25,H减)1为计T数IM器提;供初值;
定时器控制寄存器(TCR,地址0026H)控制定时器状态。
定时器
图7-4 定时器组成框图
;执行Next代码段,然后返回;
;若AR1=0,则执行下一条指令
STM #9,
AR1 ;为AR1赋初值
BITF AR2, #1 ;(AR2)&1→TC
BC ResetXF, TC ;若TC=1,则PC执行ResetXF
;代码段,否则执行下一条指令
SSBX XF
STM #1,
B
Next
;XF置为高电平 AR2
定时器 定时器的定时周期:
T定时周期 TCLKOUT TDDR 1 PRD 1
TCLKOUT: CPU时钟周期;TDDR: 定时器的分频系数; PRD: 计数周期。
定时器的主要作用: 用于定时控制、延时及外部事件的计数; 产生外围电路所需的采样时钟信号。
采样时钟信号的产生方法: 一是直接利用TOUT信号; 二是利用中断,周期地读一个寄存器。
根据图7-2,当C5416的输出时钟频率为30MHz时, PLL的锁定时间约为22µs,根据式7.2可得PLL锁定 定时器的初值为:
时钟发生器
PLLCOUNT(十进制)
Lockup TCLKIN
Time
16
1
22
1016
13.75
14
由于PLL锁定定时器减到0后,PLL才开始为C54x提供 时钟信号,为了安全起见,可以适当增大PLLCOUNT的数值, 本例中将其设定为18。所以,时钟方式寄存器(CLKMD) 的数值设定为:
;自定义已初始化段,段名为.vector ;引用主程序入口地址 ;引用中断服务程序入口地址
;定义复位中断标号 ;定义内部定时中断标号 ;复位中断,跳转到主程序的 ;入口地址 ;NMI中断,开中断返回
定时器
中断向量表如下: .sect ".vector“ .ref _c_int00 .ref TINT_ISR .mmregs
.def IV_RESET .def IV_TINT
IV_RESET: IV_NMI: IV_SINT17:
BD _c_int00 NOP NOP RETE NOP NOP NOP RETE NOP NOP NOP
PLL时钟发生器选择位。决定时钟发生器的工作方式,并与PLLMUL以 及PLLDIN一道定义频率的乘数 1)PLLNDIV=0:采用分频(DIV)方式 2)PLLNDIV=1:采用PLL方式
PLL的状态位。指示时钟发生器的工作方式(只读); 1)PLLSTATUS=0:分频(DIV)方式 2)PLLSTATUS=1:PLL方式
时钟发生器
§7.2 时钟发生器
TMS320C54x的外部参考时钟输入方式: (1)与内部振荡器共同构成时钟振荡电路 将晶体跨接于TMS320C54x的两个时钟输入引脚X1与 X2/CLKIN之间,构成内部振荡器的反馈电路。 (2)直接利用外部时钟 将一个外部时钟信号直接连接到X2/CLKIN引脚,X1 引脚悬空,此时内部振荡器不起作用。
0010 0000 1001 0111B=2097H
定用两序来 于时位 遇定定复停时器结 到时器位止重停合断器片 或新止使点分预内 启加状用时定 动频先载态,定时 定系标器时控位以时数定,器制决 器计当,位定 的数复T在 工R器位B用 作时=1高 状,时级 态T,S编 :以S位P程R清语D0中,言的定调数时试值程
第七章 TMS320C54x 的片内外设
§7.1 通用I/O引脚 §7.2 时钟发生器 §7.3 定时器 §7.4 主机接口 §7.5 串口 §7.6 外部总线 §7.7 TMS320C54x外部引脚 §7.8 小结
【重点难点】
★ 时钟发生器的实现方式 ★ 可编程定时器的原理和应用 ★ 主机接口的原理和使用方法 ★ 串口的四种形式及其使用方法 ★ 可编程分区转换逻辑 ★ 软件可编程等待状态发生器
107 24 216
104.86 103 (ms)
105ms
定时器
显然,最大定时周期(105ms)小于所需定时时间(500ms), 故一次定时无法满足题目要求。
所以,可以将定时周期设定为50ms,通过编写中断服务程序, 使得每10次内部定时中断改变一次输出信号的电平,即可达到题目 产生1s方波的要求。
RSBX XF STM #0,
;XF置为低电平 AR2
POPM ST0 RETE .end
;恢复现场(ST0) ;开中断并返回主程序
定时器
链接命令文件: -o ex7_2.out -stack 400H MEMORY {
PAGE 0: PRAM: origin=1800H, len=0800H PPPRAM: origin=0FF80H, len=0080H
通用I/O引脚
§7.1 通用I/O 引脚
通用I/O引脚
专用
名称:分支转移控制输入引脚
_____
BIO 作用:监控外部设备的状态 例如:XC 2, BIO
名称:外部标志引脚 XF 作用:为外部设备提供输出信号
例如:SSBX XF RSBX XF
18个多通道缓冲串行口(McBSP)引 非专用 脚
8个主机接口(HPI)双向并行数据引脚
XF
引脚产生周期为1s的方波。 分析:欲输出周期为1s的方波,则定时时间应为0.5s=500ms。
CPU时钟频率为 fCLKOUT 10 ,10故6 HCz PU时钟周期为:
TCLKOUT
1 f CLKOUT
10 7 s
所以,定时器的最大定时周期为:
T定时周期 TCLKOUT TDDR 1 PRD 1
PLL计数器值。PLL计数器是一个减法计数器,每16个输入时钟CLKIN 到来后减1。对PLL开始工作之后到PLL成为处理器时钟之前的一段时间 进行计数定时。PLL计数器能够确保在PLL锁定之后以正确的时钟信号 加到处理器
PLL开关位。与PLLNDIV位一起使能/禁止时钟发生器的PLL部件 1)PLLON/OFF=0,PLLNDIV=0:关PLL; 2)PLLON/OFF=0,PLLNDIV=1:开PLL; 3)PLLON/OFF=1,PLLNDIV=x:开PLL;
PAGE 1: DRAM:
} SECTIONS { .text: > PRAM .vector: > PPPRAM .stack: > DRAM .data: > DRAM .bss: > DRAM }
origin = 2000H, len=0800H
PAGE 0 PAGE 0 PAGE 1 PAGE 1 PAGE 1
图7-1 CLKMD 结构示意图
时钟发生器
时钟方式寄存器(CLKMD)各位域的功能
位
15~12 11
10~3
2
1
0
名称
PLLMUL PLLDIV PLLCOUNT
PLLON/OFF
PLLNDIV
PLLSTATUS
功能
PLL乘数。与PLLDIV、PLLNDIV一起定义频率的乘系数
PLL除数。与PLLMUL、PLLNDIV一起定义频率的乘系数
此时,指定TDDR=9,根据式7.3可得:
50 10 3 10 7 10 (PRD 1) PRD 49999
定时器
解:
汇编源程序:
.title "ex7_2.asm " ;为汇编源程序取名
.mmregs
.def _c_int00
;定义主程序入口地址的标号
.def TINT_ISR
;定义中断服务程序入口地址的标号
时钟发生器 1、硬件配置PLL
硬件时钟配置方法
引脚状态
时钟模式
CLKMD1 CLKMD2 CLKMD3
选择方案1
选择方案2
0
0
0
外部时钟源,PLL×3
外部时钟源,PLL×5
1
1
0
外部时钟源,PLL×2
外部时钟源,PLL×4
1
0
0
内部振荡器,PLL×3
内部振荡器,PLL×5
0
1
0
外部时钟源,PLL×1.5
STM #0008H, IMR ;开内部定时中断
RSBX INTM
; 开放所有可屏蔽中断
STM #0,
AR2 ;为AR2赋初值
End:
NOP
B
End
定时器
TINT_ISR:
setXF: ResetXF: Next:
;中断服务程序入口地址
PSHM ST0
;因要改变TC,故需保护ST0
BANZ Next, *AR1- ;若AR1≠0,则AR1减1,并
PERIOD .set 49999
;定义定时器周期寄存器的计数初值
_c_int00:
STM #9H,
AR1 ;定义中断次数
STM #0010H, TCR ;停止计数器
STM #PERIOD, PRD ;用计数初值49999加载PRD
STM #0E69H, TCR ;启动定时器
STM #0008H, IFR ;清除尚未处理完的内部时器中断
时钟发生器
例7-1 已知C5416的输入时钟频率FCLKIN=10MHz,现欲 从DIV模式转换为PLL×3模式,如何设置时钟方式 寄存器。
解:根据表7-4可知:当时钟模式配置成×3时: PLLPLLNDIV=1,PLLDIV=0,PLLMUL=2。 根据式7.1可得输出时钟频率为:
FCLKOUT FCLKIN 乘系数 10 3 30 MHz
定时器
3、使能定时器中断的操作步骤如下(假定INTM=1): 1)向中断标志寄存器IFR中的TINT位写0或1,以清除尚
未处理完(挂起)的内部定时中断。 2)将中断屏蔽寄存器IMR中的TINT位置l,以使能内部定
时中断。 3)将状态寄存器ST1中的INTM位清0,使能全局中断。
定时器 例7-2 设CPU时钟频率为10MHz,试利用内部定时中断在
1/2(PLL无效) 1/4(PLL无效)
停止方式
两种时钟配置模式:
(1)锁相环(PLL)模式:输入时钟乘以从0.25~15共31档 系数之一;
(2)分频(入时钟的关系:
FCLKOUT FCLKIN 乘系数
PLLNDIV
0 0 1 1 1 1
时钟发生器
复位时设置的时钟方式
引脚状态 CLKMD寄存器复位值
CLKMD1 CLKMD2 CLKMD3
0
0
0
0000h
0
0
1
9007h
0
1
0
4007h
1
0
0
1007h
1
1
0
F007h
1
1
1
0000h
1
0
1
F000h
0
1
1
-
时钟方式
1/2(PLL无效) PLL×10 PLL×5 PLL×2 PLL×1
外部时钟源,PLL×4.5
0
0
1
外部时钟源,频率除以2
外部时钟源,频率除以2
1
1
1
内部振荡器,频率除以2
内部振荡器,频率除以2
1
0
1
外部时钟源,PLL×1
外部时钟源,PLL×1
0
1
1
停止模式
停止模式
时钟发生器 2、软件配置PLL
软件配置PLL是通过对时钟方式寄存器(CLKMD)编程 而完成PLL方式下时钟配置的一种高度灵活的时钟控制方式。 CLKMD是一个16位的存储器影像寄存器,位于数据空间的 0058H单元。
PLL的乘法系数
PLLDIV
x x 0 0 1 1
PLLMUL
0~14 15
0~14 15
0或偶数 奇数
乘系数
0.5 0.25 PLLMUL+1
1 (PLLMUL+1)÷2
PLLMUL÷4
时钟发生器
PLLCOUNT的数值:
PLLCOUNT(十进制)
Lockup TCLKIN
Time
16
PLL锁定时间和CLKOUT频率的关系
定时器
定时器应用编程
1、计算计数初值 两个计数初值需要计算:TDDR和PRD 。一般应该先 指定一个TDDR的值,然后根据定时器的定时周期公式求 得PRD的值。
2、初始化定时器可采用如下步骤: 1) 将TCR中的TSS位置1,以停止定时器。 2) 加载PRD。 3) 加载TCR,以重新启动定时器 (1) 用第1步中指定的定时器分频系数加载TDDR。 (2) 设置TSS=0,以启动定时器。 (3) 设置TRB=1,以便为PSC和TIM赋初值。