- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
void timer0_init() { TCR=sbit1(TCR,b4_msk); PRD=0x2710; TCR=0x003f; TCR=sbit0(TCR,b4_msk); /*定时器0提供系统时钟,10ms per tick */ } /*系统初始化*/ void system_init() { PMST=0x00e0; /*中断向量指向0080单元*/ asm (" ssbx INTM "); IFR=0xffff; IMR=0x0089; //使能定时器0中断 asm (" rsbx INTM "); BSCR=0x6002; } (2)中断向量表 中断向量表是DSP程序的重要组成部分,当有中断发生并且处于允 许状态时,程序指针跳转到中断向量表中对应的中断地址。由于中断服 务程序一般较长,通常中断向量表存放的是一个跳转指令,指向实际的 中断服务程序。下面是5416中断向量表的一个范例,可以作为模板,使 用时稍作修改就行: .sect ".vectors" .ref _c_int00 .ref _tint0 .align 0x80 ; must be aligned on page boundary RESET: ; reset vector BD _c_int00 ; branch to C entry point STM #200,SP ; stack size of 200 nmi: RETE ; enable interrupts and return
NOP (3)中断向量指针 中断向量表的位置并没有强制的位置,可以在内部存贮器,也可以 在外部存贮器。但有一个要求:中断量表必须放在80H字长存贮块的起 始处,即中断向量表的首地址的低7位必须全为0。DSP 的寄存器PMST 的高9位是中断向量表的指针IPTR。其上电时默认是在FF80H处,这是 为了运行固化在内部ROM的上电加载程序(见实验五的程序加载部分)。 由于FF80H是只读的,加载用户自定义的中断向量表时会报错。这样需 要重新设置IPTR的值,一般把它重定义到0080H(也可以用自定义的地 址),并在程序开头重新设置一下IPTR的值: ;改变中断向量表位置 K_IPTR .set 0080h ;指向0080H,默认是 FF80 LDM PMST,A AND #7FH,A ;保留低7位,清掉高 位 OR #K_IPTR,A ;将新值传到高9位 STLM A,PMST ;修改PMST寄存器 (4)实验调试 1. 将DSP仿真器与计算机连接好。 2. 将DSP仿真器的JTAG插头和HK_DSP实验箱的DSP—JTAG相连。 3. 启动计算机,当计算机启动后,打开HK_DSP实验箱的电源,确保计 算机和HK_DSP实验箱连接成功。 4. 启动CCS,在“Project”下的“Open”打开一个工程项目文件timer.pjt。调 试运行后观察实验现象:CPU核心板左下角XFD1定时器灯闪烁。并注 意定时器3个寄存器的的变化与中断运行情况。
NOP NOP xint0: RETE NOP NOP NOP dmac0: RETE NOP NOP NOP tint1: RETE NOP NOP NOP int3: RETE NOP NOP NOP hpint: RETE NOP NOP NOP rint1: RETE NOP NOP NOP xint1: RETE NOP NOP NOP dmac4: RETE NOP NOP NOP dmac5: RETE NOP NOP ;dma通道5中断 ;dma通道4中断 ;mcbsp1发送中断 ;mcbsp1接收中断 hpi中断 ;外部中断3 ;定时器1中断 ;dma通道0中断 ;mcbsp0发送中断
实验四:定时器Fra Baidu bibliotek断实验
一、实验目的 1. 学习定时器中断的设计方法; 2. 熟悉在汇编和C语言条件下如何编写中断服务程序; 3. 掌握长时间间隔的定时器的处理。 二、实验内容 控制核心板上的指示灯闪烁,频率为1Hz。使用DSP芯片的定时器0, 定时周期为10ms,中断100次后,对指示灯的状态改变一次。 三、实验原理 中断指的是当某个事件发生时,暂停当前的操作,转向中断服务程 序,执行完后再返回继续原来的操作。这使得DSP能够处理多个任务。 DSP有许多中断源,可以设置中断控制寄存器来确定响应哪些中断而不 理会哪些中断。本实验介绍最常用的定时器中断的使用方法,并介绍中 断向量表和中断向量指针。 TMS320VC5416的定时器的说明。Vc5416片上有一个可编程的定时 器,总共包含有三个可由用户设置的寄存器,并可以申请主机的中断。 这3个寄存器分别为TIM、PRD、TCR。 时间寄存器(TIM)是一个16的存储器映像寄存器,它的值由周期 寄存器来进行装载,并且做减一操作。 周期寄存器(PRD)是一个16的存储器映像寄存器,它是用来重装 时间寄存器(TIM)的值的。 定时器控制寄存器(TCR)是一个16的存储器映像寄存器,包含了 定时器的控制和状态信息。
from one nmi NOP NOP NOP ; software interrupts sint17 .space 4*16 ;软件中断使用较少,简单起见用0填 充 sint18 .space 4*16 sint19 .space 4*16 sint20 .space 4*16 sint21 .space 4*16 sint22 .space 4*16 sint23 .space 4*16 sint24 .space 4*16 sint25 .space 4*16 sint26 .space 4*16 sint27 .space 4*16 sint28 .space 4*16 sint29 .space 4*16 sint30 .space 4*16 int0: RETE ;外部中断0 NOP NOP NOP int1: RETE ;外部中断1 NOP NOP NOP int2: RETE ;外部中断2 NOP NOP NOP tint0: bd _tint0 ;定时器0中断 NOP NOP rint0: RETE ;mcbsp0接收中断 NOP
定时中断周期=CLKOUT×(TDDR+1)×(PRD+1)
四、实验步骤 (1)使用定时器首先要对它初始化,基本步骤如下: 1、关掉中断 2、停止定时器运行。 3、设定时器的定时长度 4、允许定时器中断 5、运行定时器 6、打开中断 本实验的部分程序代码如下: #include "vc5416.h" #include "usr.h" //载入头文件 unsigned int count=0,temp=0; main() { system_init(); //系统初始化 timer0_init(); //定时器0初始化,使定时器每 10ms中断一次 while(1) { if(count==0x0064) { ST1=sbit_reverse(ST1,b13_msk); //改变XF引脚的状态, 使指示灯闪烁 count=0x0000; //对计数值清0 } } } /*interrupt serve program*/ void interrupt tint0() //中断服务程序,每次中断到来 时对计数值加一 { count++; } /*定时器0初始化*/