DSP 用定时器实现数字振荡器程序详解1
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
汇编源程序====================================================================== ======*/
;/* Copyright (C) 2004 YINXING TECHNOLOGY CO., LTD */
;/* All Rights Reserved. */ ;/* ----------------------------------------------------------------------------*/
;/*
======================================================================
.title "for test INT service program ...(25 us) "
.mmregs 定义存储器影响寄存器,这样就可以用AR0,PMST等助记符替换实际的存储器地址.global_c_int00,_tint,vector标明一个或多个全局符号
OFF_INTIMER .set 04Ch ; TIMER的向量初始化入口地址
VECTOR+OFF_INTIMER
INIT_A .set 079bch ; A/2=0.9510498
INIT_B .set 0c000h ; B/2=-0.5
INIT_C .set 013c7h ; C/2=0.1545105
.bss y0,1 ;为结果y0分配一个存储单元
.bss y1,1
.bss y2,1
.bss temp,1
.bss AA,1
.bss BB,1
.bss CC,1
.text ;定义可可执行代码段
_c_int00:
ld #0,dp;设置DP页指针
ssbx intm ; 关闭所有中断
st #1fffh,sp
ld #vector, a ; 读出中断向量地址
and #0FF80h, a ;保留高9位(IPTR:中断向量指针
andm #007Fh, pmst ;保留pmst的低7位
or pmst, a
stlm a, pmst ; 设置IPTR
stm #10h,TCR ; 初始化定时器TCR为定时器控制寄存器
stm #2499,PRD ; f=100M/(2499+1)=40kHz PRD 为计数器周期寄存器stm #20h,TCR ; 重新装入TIM和PSC,然后启动定时器
ldm IMR,a ; 重新返回中断屏蔽寄存器
or #08h,a ; 启动定时器中断
stlm a,IMR ; 设置中断屏蔽寄存器
ld #temp,dp ; 设置DP页指针
ssbx FRCT ; prepare for fraction mpy FRCT为ST1中的小数方式位;(Ssbx 状态寄存器复位,即对状态寄存器ST0,ST1特定位置1)
st #INIT_A,AA ; init AA,BB,CC 即初始化AA BB CC
st #INIT_B,BB ;将常数B装入变量BB
st #INIT_C,CC ;
pshd CC ;将变量CC压入堆栈
popd y2 ; init y2,y2=CC
ld AA,T ; T=AA装载AA到T寄存器
mpy y2,a ; y2*AA放入a中
sth a,y1 ; y2*AA -> y1(将A寄存器的高十六位放入变量y1)stm #0h,TCR ; 定时器复位
nop
rsbx intm ;复位所有的中断(状态寄存器复位STN (SBIT)=0)
again:
nop
b again
nop
nop
nop
nop
nop
nop
;-------------------------------------------------------------
; interrupt for INT_TIMER ! 中断服务程序
;-------------------------------------------------------------
_tint:
ld#BB,DP
ld BB,T ; T=BB
mpy y2,a ; a=y2*BB
ltd y1 ; T=y1,y2=y1
mac AA,a ; a=a+y1*AA
sth a,1,y1 ; new cos data -> y1
sth a,1,y0 ; new cos data -> y0
nop ; set breakpoint in CCS !!!
int1_end:
nop
rete
.end
连接命令文件
/*
====================================================================== ======*/
/* Copyright (C) 2004 YINXING TECHNOLOGY CO., LTD */
/* All Rights Reserved. */ /* ----------------------------------------------------------------------------*/
/*
====================================================================== ======*/
MEMORY;描述系统的硬件资源,用来定义用户设计的系统中所包含的的各种形式的存储器
{
PAGE 1:
INT_D : ORIGIN=80h, LENGTH=1F80h
PAGE 0:
EXT_P : ORIGIN=2000h, LENGTH=2000h
}
SECTIONS ;描述段如何定位到家当的硬件资源上,将输出段定位到所定义的存储器中
{
.text : > EXT_P PAGE 0
.int_table : > (EXT_P ALIGN (128) PAGE (0))
.data : > INT_D PAGE 1
}
中断向量表:
;/*
====================================================================== ======*/
;/* Copyright (C) 2004 YINXING TECHNOLOGY CO., LTD