DSP滤波器实验

************************************************
* FileName:     ex10.asm                       *
* Description:  滤波器实验                     *
* Copyright(C) SanZhi Electronic, Author Zpin  *
************************************************

       .title "ex10"

BSP       .set     1     ;当前使用McBsp1

;McBsp 内存映射寄存器
SPSA0     .set    038h
SPSD0     .set    039h
DRR10     .set    021h
DRR20     .set  020h
DXR10     .set    023h
DXR20     .set  022h

SPSA1     .set    048h
SPSD1       .set    049h
DRR11       .set   041h
DRR21       .set    040h
DXR11       .set    043h
DXR21       .set   042h

SPSA2       .set    034h
SPSD2       .set    035h
DRR12       .set    031h
DRR22       .set   030h
DXR12       .set    033h
DXR22       .set   032h

;McBsp Subaddressed Registers
SPCR1     .set  00h
SPCR2     .set  01h
RCR1      .set  02h
RCR2      .set  03h
XCR1      .set  04h
XCR2      .set  05h
SRGR1     .set  06h
SRGR2     .set  07h
MCR1      .set  08h
MCR2      .set  09h
RCERA     .set  0ah
RCERB     .set  0bh
XCERA     .set  0ch
XCERB     .set  0dh
PCR       .set  0eh

       .if BSP = 0
SPSA   .set  SPSA0
SPSD   .set  SPSD0
RDRR   .set  DRR10
RDXR   .set  DXR10
IMASK  .set  0010h
       .endif
      
       .if BSP = 1
SPSA   .set  SPSA1
SPSD   .set  SPSD1
RDRR   .set  DRR11
RDXR   .set  DXR11
IMASK  .set  0400h
       .endif
      
;fin_flag    .set  64h

    .asg AR0,FIR_INDEX_P
    .asg AR4,FIR_DATA_P
    .asg AR5,FIR_COFF_P

WR_SUB_REG   .macro val,addr         ;写McBsp控制寄存器
          stm addr,SPSA
          nop
          stm val,SPSD
          nop
          .endm
         
RD_SUB_REG   .macro addr,acc         ;读McBsp控制寄存器
          stm #:addr:,SPSA
          nop
          ldm SPSD,acc
          nop
          nop
          nop
          .endm

WAITTRX   .macro               ;等待串口中断
WAITR?
        RD_SUB_REG SPCR1,A
        and #1<<1, A
        bc   WAITR?, AEQ
          .endm

PROGREG   .macro progword         ;与AD50二次通讯
    
       stm  #01h,RDXR
        WAITTRX
        stm     #:progword:,RDXR
        WAITTRX
          .endm              


wait   .macro
       STM #0008h, AR2
       RPT *AR2
       NOP
       .endm         

       .mmregs
       .global _c_int00


       .sect ".vectors"
RESET  b _c_int00
       nop
       nop
       .space 19*4*16
BRINT0 b recv
       nop
       nop
BXINT0 b trans
       nop
       nop
       .space 4*4*16
BRINT1 b recv
       nop
       nop
BXINT1 b trans
       nop
       nop
       .space 4*4*16
      
K_FIR_BFFR      .set 16

coff_fir_table  .sect "coff_fir"
    .word 6fh,0f3h,269h,50dh,8a9h,0c99h,0ff8h,11ebh,11ebh,0ff8h,0c99h,8a9h,50dh,269h,0f3h,64h
    ;.word 42,0,-78,0,142,0,-235,0,357,0,-235,0,142,0,-78,0 
d_data_buffer   .usect "fir_bfr",40

       .text
_c_int00
       ld #0h,DP
       stm #7ffh,SP
       ssbx INTM
       ssbx SXM
        st #2491h,SWWSR
        st #0ffe0h,PMST
        ;st #0f287h,CLKMD
       
       ST #0h,CLKMD
tst:   BITF CLKMD,#1h
       BC tst,TC
       ST #1087h,CLKMD
       BITF CLKMD,#1h
       RPT #0FFh
       NOP
       
       
        stm #5000h,ar7
        stm #5000h,ar6
      
fir_init
       stm #1,AR0
       stm #coff_fir_table,FIR_COFF_P
       stm #d_data_buffer,FIR_DATA_P
       rptz A,#K_FIR_BFFR
       stl A,*FIR_DATA_P
       stm #(d_data_buffer+K_FIR_BFFR-1),FIR_DATA_P
       stm #K_FIR_BFFR,BK

       
mcbsp_init                     ;初始化McBsp串口
        rsbx CPL
       nop                 ; cpl latency
       nop                 ; cpl latency
       nop                 ; cpl latency

       ld #0,DP
       ssbx INTM
       ssbx SXM

       WR_SUB_REG #0000H,SPCR1
       WR_SUB_REG #0200H,SPCR2
       WR_SUB_REG #000CH,PCR
      
       WR_SUB_REG #0000H,SPCR1
       WR_SUB_REG #0000H,SPCR2
      
       WR_SUB_REG #0040H,RCR1     ;16 BITs
       WR_SUB_REG #0004H,RCR2     ;Ignore FS after the first
       WR_SUB_REG #0040H,XCR1     ;16 BITs
       WR_SUB_REG #0004H,XCR2     ;Ignore FS after the first

       ld 100,A
       wait

       andm #0ff3fh, 54h       ;set interrupts to come from serial ports not DMA
                            ;by clearing bits 6 and 7 in DMPREC
       stm #0,RDXR
      
       WR_SUB_REG #0001H,SPCR1    ;启动McBsp串口
       WR_SUB_REG #0201H,SPCR2
      
       ld 100,A
       wait
      

aic_init
       stm #0h,IMR
       orm IMASK,IMR
       stm #0ffffh,IFR

       ;PROGREG 0180H          ;二次通讯初始化AD50
       ;PROGREG 02C0H
       PROGREG 0301h
       PROGREG 0410h
       ;PROGREG 0000001100000001b
        ;               876543210
        ;PROGREG 0000010000010000b
        ;            876543210

       ld RDRR,A
       ld RDRR,A
      
       stlm A,RDXR
       stlm A,RDXR
      
       rsbx INTM
       nop
       nop
       nop
      
js     nop
       nop
       nop
       b js

recv   ldm RDRR,A           ;ADC采样数据经滤波后发送到DAC输出
       stl A,*FIR_DATA_P+0%
       rptz A,(K_FIR_BFFR-1)
       mac *FIR_DATA_P+0%,*FIR_COFF_P+0%,A
       andm #0fffeh,ah
       sth A,RDXR
       rsbx XF
       rete
      
trans  rsbx XF
       rete
       .end
      
      
      

posted @ 2010-12-28 23:15  ARM与DSP  阅读(493)  评论(0)    收藏  举报