打印

DSP正弦波发生器实验代码

[复制链接]
1106|1
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
jxmzzr|  楼主 | 2014-10-29 15:37 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
************************************************
* 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

相关帖子

沙发
小木欧尼| | 2014-10-29 15:48 | 只看该作者
这是楼主做的实验吗

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

460

主题

2188

帖子

12

粉丝