1假设时钟频率为 4M 赫兹,要在 XF 端输出周期为 8ms, 占空比为 50%的方波, 试用 C54x 的定时器 0结合中断编程实现。要求用汇编语言编写,程序中有较详细的注解。( 20分) 解: 输出周期为 8ms ,所以定时中断为 4ms ,每中断一次,输出端电平取反一次。程序如下: ;方波发生器 TIM0 .set 0024H PRD0 .set 0025H TCR0 .set 0026H ;设置定时器 0控制寄存器的内容 TCR0 ; K_TCR0_SOFT .set 0b ;Soft=0 K_TCR0_FREE .set 0b ;Free=0 K_TCR0_PSC .set 1001b ;PSC=9H K_TCR0_TRB .set 1b ;TRB=1 K_TCR0_TSS .set 0b ;TSS=0 K_TCR0_TDDR .set 1001b ;TDDR=9 K_TCR0 .set K_TCR0_SOFT|K_TCR0_FREE| K_TCR0_PSC|K_TCR0_TRB| K_TCR0_TSS| K_TCR0_TDDR ; 根据公式 Tr=T*(TDDR+1)*(PRD+1) 时钟频率 f=4M , T=250ns ,取 TDDR= 9 则 4000000(ns)=250*(9+1)*(PRD+1) 得 PRD=1599 ; STM #1599,TIM0 STM #1599,PRD0 STM #K_TCR0,TCR0 ;启动定时器 0中断 t0 _flag .uset “ vars ”,1;当前 XF 输出电平标志位;若 t0_flag=1, 则 XF=1 ;若 t0_flag=0, 则 XF=0 time0 _rev: ;保护现场 PSHM TRN PSHM T PSHM ST0 PSHM ST1 BITF t0_flag,#1 ;测试 t0_flag 是否为 1 BC xf_out,NTC ;当 TC=0 时跳转到 xf_out SSBX XF;置位 XF ST#0, t0 _flag ;将 t0_flag 置为 0 B next xf _out: RSBX XF;复位 XF ST#1, t0_flag ;将 t0_flag 置 1 next : POPM ST1 POPM ST0 POPM T POPM TRN RETE 2 使用具有 40dB 波纹的 Chebyshev 窗,用汇编语言设计一个 32 阶的低通 FIR 滤波器,其截止频率为 ,并用循环缓冲区法编程实现对采样的 256 个采样数据( x0-x255 )的 FIR 滤波。要求程序中有较详细的注解。( 40分) 解: 由 MATLAB 求得滤波器系数 b= : >> window=chebwin(32,40); >> f=[0 1]; >> m=[1 10 0]; >> b=fir2(31,f,m,window) b= Columns 1 through - - - - - - Columns 10 through 18 - - -
DSP作业 来自淘豆网m.daumloan.com转载请标明出处.