实验3TMS320C55x定时器的汇编LED实现.docx

上传人:b****6 文档编号:3824396 上传时间:2022-11-25 格式:DOCX 页数:15 大小:1.06MB
下载 相关 举报
实验3TMS320C55x定时器的汇编LED实现.docx_第1页
第1页 / 共15页
实验3TMS320C55x定时器的汇编LED实现.docx_第2页
第2页 / 共15页
实验3TMS320C55x定时器的汇编LED实现.docx_第3页
第3页 / 共15页
实验3TMS320C55x定时器的汇编LED实现.docx_第4页
第4页 / 共15页
实验3TMS320C55x定时器的汇编LED实现.docx_第5页
第5页 / 共15页
点击查看更多>>
下载资源
资源描述

实验3TMS320C55x定时器的汇编LED实现.docx

《实验3TMS320C55x定时器的汇编LED实现.docx》由会员分享,可在线阅读,更多相关《实验3TMS320C55x定时器的汇编LED实现.docx(15页珍藏版)》请在冰豆网上搜索。

实验3TMS320C55x定时器的汇编LED实现.docx

实验3TMS320C55x定时器的汇编LED实现

实验3TMS320C55x定时器的汇编LED灯实现

一、实验目的

1.通过实验熟悉TMS320VC5509A的定时器;

2.掌握VC5509A定时器的使用方法;

3.掌握VC5509A的中断结构和对中断的处理流程;

4.学会在汇编条件下编写中断程序,以及运用中断控制程序 流程。

二、实验设备

计算机,ICETEK-VC5509-A实验箱(或ICETEK 仿真器+ICETEK–VC5509-A评估板+相关连线及电源)。

三、实验内容

1.VC5509A的初始设置,包括堆栈设置和时钟设置;

2.VC5509A中断向量表的建立;

3.定时器中断服务程序的编写。

四、实验原理

为了实现定时器的正确定时,首先需要设置VC5509A的时钟,以下分别说明“时钟”、“中断”和“定时器”3个部分的原理。

4.1时钟部分

VC5509A芯片内的时钟发生器从CLKIN引脚接受输入时钟信号,将其变换为CPU及其外设所需要的工作时钟;工作时钟经过分频通过引脚CLKOUT输出,可供其他器件使用。

时钟发生器内有一个数字锁相环DPLL和一个时钟模式寄存器CLKMD。

VC5509A的时钟发生器有3种工作模式,即旁路模式、锁定模式和Idle模式。

时钟模式寄存器(CLKMD)中的PLLENABLE为控制旁路模式和锁定模式。

可以通过关闭CLKGENIdle模块使时钟发生器工作在Idle模式。

在本实验中设置时钟工作在锁定模式。

设置PLLENABLE=1,PLL工作于锁定模式,则输出的时钟频率由下式确定,即

      

(1)

图 1 锁定模式用到的CLKMD位(参考TMS320C55xDSP PeripheralsReferenceGuide.pdf)

VC5509A系统的晶振时钟振荡频率为12MHz。

通过设置DPLL,使系统时钟的时钟频率为144MHz。

由图1知具体设置如下:

(1)PLL ENABLE=1b

(2)由公式

(1),得

ﻩ取PLLDIV=0,PLLMULT=12,即:

D6D5(PLLDIV)=00b,D11-D7(PLL MULT)=1100b

(3)CLKMD取值为:

001011000010011b。

汇编语言实现:

MOV#001011000010011b,port(#CLKMD)

注:

CLKMD .set  1C00H(CLKMD的地址为1C00H)

4.2中断部分

中断是由硬件或软件驱动的信号,使DSP将当前的程序挂起,执行另一个称为终端服务子程序(ISR)的任务。

VC5509A支持32个ISR。

图2为VC5509A的中断向量表。

图2 VC5509A的中断向量表

参考TMS320VC5509AFixed-PointDigital SignalProcessor(Rev.K).pdf

中断向量的初始化可由.ivec命令完成。

具体参考图3。

图3 .ivec命令ﻫ参考TMS320C55xAssemblyLanguageToolsUser's Guide(Rev.H).pdf

由图2和图3编写汇编文件vectors.asm:

.sect ".vectors"

ﻩﻩ.refﻩstart,tint0_isr

rsvﻩﻩ.ivecﻩstart,use_reta

nmi.ivecﻩno_isr

int0.ivecﻩno_isr

int2.ivecno_isr

tint0ﻩ.ivecﻩtint0_isr

rint0.ivecﻩno_isr

rint1.ivecﻩno_isr

xint1.ivecno_isr

usb.ivecﻩno_isr

dmac1ﻩ.ivecﻩno_isr

dspint.ivecno_isr

int3ﻩ.ivecno_isr

rint2ﻩ.ivecﻩno_isr

xint2.ivecﻩno_isr

dmac4ﻩ.ivecﻩno_isr

dmac5ﻩ.ivecno_isr

int1ﻩ.ivecﻩno_isr

xint0ﻩ.ivecﻩno_isr

dmac0.ivecﻩno_isr

int4ﻩ.ivecno_isr

dmac2.ivecﻩno_isr

dmac3ﻩ.ivecﻩno_isr

tint1.ivecﻩno_isr

iic.ivecno_isr

berr.ivecﻩno_isr

dlogﻩ.ivecno_isr

rtos.ivecﻩno_isr

sint27ﻩ.ivecﻩno_isr

sint28ﻩ.ivecﻩno_isr

sint29ﻩ.ivecno_isr

sint30ﻩ.ivecﻩno_isr

sint31.ivecno_isr

 

 .text

    .defno_isr

no_isr:

b#no_isrﻩ

本实验捡回用到定时器0,其中断服务程序(tint0_isr)如下:

tint0_isr:

ﻩnop

ﻩnop

  ADD#1,AR2

ﻩBCC L2,AR2!

=#100

;ﻩMOV *(#LBDS),AR2

;ﻩ XOR#1,AR2

ﻩ AMAR*(#LBDS),XAR3

ﻩXOR#1,*AR3

ﻩﻩnop

ﻩnop

;ﻩMOVAR3,*(#LBDS)

ﻩMOV#0,AR2

L2:

ﻩﻩ

ﻩnop

ﻩﻩnop

ﻩnop

ﻩnop

ﻩnop

nop

ﻩﻩRETI

由以下语句设置中断向量的地址。

ﻩMOV#00d0h,mmap(IVPH)

ﻩMOV #00d0h,mmap(IVPD) ﻩ 

ﻩﻩMOV #0010h,mmap(IER0)

MOV  #0xffff,mmap(IFR0)

ﻩﻩMOV  #0010h,mmap(DBIER0)

4.3定时器0部分

VC5509A芯片内提供了2个20位通用定时器,可向CPU产生周期性中断或向DSP芯片外的器件提供周期信号。

每个定时器由2部分组成:

一个4位的预定标计数寄存器(PSC)和一个16位主计数器(TIM),如图4。

图4定时器结构框图

TMS320VC5503/5507/5509/5510 DSPTimersReferenceGuide.pdf

ﻩ定时器发送中断信号或同步时间的频率信号的频率可用下式计算

      

(2)

汇编语言实现:

ﻩMOV#0x04f0,PORT(#TCR0)

 MOV#0x0000,PORT(#TIM0)

  MOV#0x1fff,PORT(#PRD0)     

  MOV#0x000f,PORT(#PRSC0)

   MOV #0x00e0,PORT(#TCR0)

4.4 程序清单

程序主要由3个文件工程:

4.4.1vectors.asm中断向量表

ﻩﻩﻩ.sect".vectors"

ﻩﻩ.refstart,tint0_isr

rsvﻩ.ivecstart,use_reta

nmi  .ivecﻩno_isr

int0ﻩ.ivecno_isr

int2ﻩ.ivecﻩno_isr

tint0.ivectint0_isr

rint0.ivecno_isr

rint1.ivecno_isr

xint1.ivecﻩno_isr

usbﻩﻩ.ivecﻩno_isr

dmac1.ivecno_isr

dspintﻩ.ivecﻩno_isr

int3ﻩ.ivecﻩno_isr

rint2.ivecno_isr

xint2.ivecno_isr

dmac4ﻩ.ivecno_isr

dmac5ﻩ.ivecﻩno_isr

int1.ivecno_isr

xint0.ivecﻩno_isr

dmac0.ivecﻩno_isr

int4ﻩ.ivecﻩno_isr

dmac2ﻩ.ivecno_isr

dmac3ﻩ.ivecno_isr

tint1.ivecno_isr

iic.ivecﻩno_isr

berr.ivecﻩno_isr

dlog.ivecﻩno_isr

rtos.ivecﻩno_isr

sint27.ivecno_isr

sint28ﻩ.ivecﻩno_isr

sint29ﻩ.ivecﻩno_isr

sint30ﻩ.ivecno_isr

sint31ﻩ.ivecno_isr

 

  .text

 .defno_isr

no_isr:

   b#no_isr

4.4.2timer.asm主程序

ﻩﻩ.mmregs

ﻩ.data

stack_len.setﻩ 200

sysstack_len.setﻩ    200

stackﻩﻩﻩ.usectﻩ".stack",stack_len

sysstackﻩ.usect".sysstack",sysstack_len

TIM0ﻩ.setﻩ0x1000

PRD0.set0x1001

TCR0ﻩ.set0x1002

PRSC0.setﻩ0x1003

CLKMD .set0x1C00

LBDSﻩ.set0x400001

ﻩ.text

ﻩ.defstart,tint0_isr

start:

ﻩBSETARMS

ﻩﻩ.arms_on

ﻩBCLRC54CM

ﻩ.c54cm_off

ﻩBCLRAR0LC

  BCLRAR1LC

 BCLRAR2LC

ﻩBCLRAR3LC

ﻩﻩBSET INTM

ﻩAMOV #(stack+stack_len),xsp

AMOV#(sysstack+sysstack_len),xssp

ﻩMOV#001011000010011b,port(#CLKMD)

ﻩﻩ

;ﻩAMAR*(#400001h),XAR3

ﻩMOVﻩ#1,*(#LBDS)

ﻩﻩMOV #0,AR2

ﻩMOV#00d0h,mmap(IVPH)  

MOV #00d0h,mmap(IVPD)   ﻩ 

ﻩMOV#0010h,mmap(IER0)

ﻩMOV#0xffff,mmap(IFR0)

ﻩMOV#0010h,mmap(DBIER0)

 

ﻩMOV #0x04f0,PORT(#TCR0)

  MOV#0x0000,PORT(#TIM0)

   MOV#0x1fff,PORT(#PRD0)          

  MOV#0x000f,PORT(#PRSC0)

   MOV#0x00e0,PORT(#TCR0)

ﻩBCLRINTM

L1:

ﻩnop

nop

ﻩnop

nop

BL1

 

tint0_isr:

ﻩnop

ﻩnop

  ADD#1,AR2

  BCCL2,AR2!

=#100

;ﻩ MOV*(#LBDS),AR2

;XOR#1,AR2

ﻩAMAR *(#LBDS),XAR3

XOR#1,*AR3

ﻩnop

ﻩnop

;ﻩﻩMOVAR3,*(#LBDS)

ﻩMOV #0,AR2

L2:

ﻩﻩnop

ﻩnop

nop

ﻩnop

nop

ﻩnop

RETI

ﻩﻩ.end

4.4.3 .cmd链接命令文件

-stack200

-sysstack200

-lrts55x.lib

-estart

MEMORY

{

DARAM:

ﻩo=0x100,ﻩl=0x07f00

  VECT:

 o=0x0d000,ﻩl=0x100

  DARAM2:

o=0x0d100,ﻩl=0x1f00

 SARAM:

o=0x10000,ﻩl=0x30000

SDRAM:

o=0x40000,l=0x3e0000

}

SECTIONS

{

ﻩ.data:

 {}>SARAM

  .text:

 {} >DARAM

 .vectors:

{} >VECT

  .sysstack:

 {}>DARAM

.stack:

{}>DARAM 

}

实验程序流程图如下:

五、实验步骤ﻩ

(1) 在CCS下建立工程“timer”,分别将上述三个文件加入工程

(2) 连接试验箱,运行程序,可见,试验箱的最下面一个LED灯1周期性的闪烁。

如图5

图 5 实验现象

六、实验心得

●在对程序编译时,总出现“Remarks”错误,这是CCS中最轻级别的提示,不影响程序的正常运行。

●在汇编语言中写入.mmregs语句后,就可以省去对存储器映射寄存器的定义,而且在TI的文档中也有寄存器名和对应地址的表,用的时候直接用即可。

●汇编指令不能直接顶头写,需要与行首有一定间隔。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高中教育 > 理化生

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1