dsp正弦波发生器

************************************************
* FileName:     ex11.asm                       *
* Description:  正弦波发生器实验               *
* Copyright(C) SanZhi Electronic, Author Zpin  *
************************************************

       .title "ex11"

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
      

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, AR0
       RPT *AR0
       NOP
       .endm         

       .mmregs
       .global _c_int00


       .sect ".vectors"
RESET  bd _c_int00
       stm #3000h,SP
       .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
      
       .data
       .word 8000h,0db23h,8000h,0e1e7h,8000h,0fb47h,8000h,15e5h,8000h,252fh,8000h,2879h,8000h,1b1fh,8000h,0155h
       .text
_c_int00
       ld #0h,DP
       stm #37ffh,SP
       ssbx INTM
       ssbx SXM
        st #2491h,SWWSR
        st #0ffe0h,PMST
        st #0f007h,CLKMD
       
        stm #4100h,AR2
        stm #4000h,AR1
       stm #10h,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 0104H          ;二次通讯初始化AD50
       ;PROGREG 02C0H
       PROGREG 0301h
       PROGREG 0400h
       ;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采样值以清除中断标志
       ld *AR1+%,A          ;读正弦波表
       and #0fffeh,A
       stlm A,RDXR          ;输出到DAC通道
       rete

trans  rsbx XF
       rete
       .end
      
      
      

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