DSP 用定时器实现数字振荡器程序详解1

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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

相关文档
最新文档