⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 main.asm

📁 DSP关于F240的实例程序
💻 ASM
字号:
      
      
adc_buf        .usect    ".data0",300
adc_buf_ptr    .usect    ".data0",1
    
     .include  "f2407.h"
     .def  _c_int0, ADC_ISR
     
         
     .text
_c_int0:     
     SETC  INTM
     CLRC  SXM
     CLRC  OVM
     CLRC  CNF
     LDP   #DP_PF1
     SPLK  #83FEH,SCSR1             ;30MHz
     SPLK  #0E8H, WDCR
     LDP   #0H
     SPLK  #0FFFFH, IFR
     SPLK  #00001H, IMR
     CALL  ADINIT
     
     CLRC  INTM
     CALL  AD
     
WAIT: 
     NOP
     B     WAIT
     
     
    ;初始化ADC
ADINIT:
     LDP   #DP_EVA
     SPLK  #0000H, T2CNT
     SPLK  #170CH, T2CON             ;连续增记数模式,128分频,立即重装载
     SPLK  #075H,  T2PR              
     SPLK  #00400H, GPTCONA           ;周期中断标志位启动ADC
     SPLK  #0FFFFH, EVAIFRB
     SPLK  #00000H, EVAIMRB
     LDP   #DP_PF2
     SPLK  #0000H, ADCTRL1           ;ADC的转换逻辑时钟为30M
     SPLK  #0500H, ADCTRL2           ;中断模式(立即中断)
     SPLK  #0000H, MAXCONV
     SPLK  #0000H, CHSELSEQ1
     LAR   AR0,   #adc_buf           ;pointer to results buffer
     SAR   AR0,   adc_buf_ptr        ;initialize adc_buf_ptr
     RET  
     
     ;启动模数转换
AD:  
     LDP   #DP_EVA
     LACL  T2CON
     OR    #40H
     SACL  T2CON
     RET
     
     
    ;中断程序
ADC_ISR:
        CLRC    SXM
        LDP     #DP_PF2             ;set data page
        LACL    ADCTRL2             ;read and write ADCTRL2
        OR      #4200H              ;reset SEQ1
        SACL    ADCTRL2             ;to clear the INT_FLAG_SEQ1
;        SPLK    #4000H, ADCTRL2
;        SPLK    #0700H, ADCTRL2
        LACC    RESULT0,10          ;read ADC RESULT0

;store the data value to the buffer
        LDP     #adc_buf_ptr
        LAR     AR2, adc_buf_ptr    ;AR2 points to the buffer
        MAR     *, AR2              ;set ARP
        SACH    *+                  ;store result
        SAR     AR2, adc_buf_ptr    ;store updated pointer
 
;brute-force the circular buffer
        LAR     AR0, #(adc_buf+299) ;AR0 points to last buffer entry
        CMPR    2                             ;TC set if AR(ARP) > AR0
        BCND    adc_isr1, TC                  ;branch if TC not set
        B       ZLC                           ;re-init the pointer;




;context restore
adc_isr1:
        LDP     #adc_buf_ptr
        LAR     AR0, #adc_buf     ;pointer to results buffer
        SAR     AR0, adc_buf_ptr  ;initialize adc_buf_ptr 
         
        LDP     #DP_EVA
        SPLK    #0000H, T2CNT     ;clear timer2 counter
        SPLK    #174CH, T2CON     ;init T2CON register
        
        
ZLC:   
        CLRC    INTM              ;re-enable global interrupts
        RET
        END

     

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -