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

📄 ad.asm

📁 max125采集芯片在tms320vc33上的联合应用汇编原创代码
💻 ASM
📖 第 1 页 / 共 2 页
字号:
         .if .BIGMODEL
                PUSH DP
                LDP  max1251
         .endif
              AND 0,IE
              PUSH AR1
              PUSH R1
              PUSHF R1
              LDI @adstate,AR1
              LDI *+AR1(8),R0
;              BNZ adfin
;              b   $
              LDI 0,R1
              STI R1,*+AR1(8)
              POPF R1
              POP R1
              POP AR1
              OR (EINT0_CPU+EINT1_CPU),IE       
	     .if .BIGMODEL
              POP DP
         .endif
         .if .REGPARM = 0                      ;standard runtime model 
              POP FP                                ;restore FP
         .endif	 
              RETS
*********************************************************************************
*										                    *
* 函数定义:Max125_end  					   		              *
* 功  能:结束在定时状下的连续采样                                            *
*										                                        *
* 出口参数:AD的工作状态                                                        *
*		      						                                            *
* 资源使用:AR0,R1								                                *
*										                                        *
*********************************************************************************                 	     
_Max125_end:
			.if .REGPARM = 0        ;standard runtime model
                PUSH FP          ;save the old FP
                LDI  SP,FP       ;point to top of stack
         .endif                  ;both runtime models 
         .if .BIGMODEL
                PUSH DP
                LDP  max1251
         .endif
          
          PUSH ST
          PUSH AR1
          PUSH R1
          PUSHF R1
          ;停止定时器
          LDI @vc33mmr,AR1                
          LDI 0,R1
          STI  R1,*+AR1(TIM0_CTRL)
          
          POPF R1
          POP R1
          POP AR1
          POP ST
         
         .if .BIGMODEL
              POP DP
         .endif
         .if .REGPARM = 0                      ;standard runtime model 
              POP FP                           ;restore FP
         .endif
         RETS	 
              
                      

*********************************************************************************
*										                    *
* 函数定义:c_init01					   		                  *
* 功  能:AD中断服务程序				                                        *
*										                                        *
*										                                        *
*********************************************************************************
_c_int01:
               PUSH  ST
               PUSH  FP       ;save old FP
               LDI   SP,FP     ;set up new Fp
               PUSH  DP
               PUSH  AR1
               PUSH  AR2
               PUSH  AR0
               PUSH  R0
               PUSHF R0
               PUSH  R1               
               PUSHF R1
               PUSH  R2
               PUSHF R2
               PUSH  R3
               PUSHF R3
               PUSH  AR7
               
               LDP @MAX125
               LDI @vc33mmr,AR0
               ;保存系统等待
               LDI *+AR0(STRB0),R3
               PUSH R3
               ;为系统加入1个等待
               LDI (INT_RDY+WAIT_1+BANK_8M),R1
               STI R1,*+AR0(STRB0)
                            
               LDI @adstate,AR1
               LDI *+AR1(5),AR2                ;读ADdata_Buffer的首地址
               LDI *+AR1(6),R0                 ;中断一次,标识一次采样
               ADDI 01,R0
               STI R0,*+AR1(6)

               LDI *AR1,R0                    ;读第一个AD的通路数
               LDI *+AR1(1),R1
               PUSH R1                        ;读第二个AD的通路数
               LDI *+AR1(2),R2                ;读第三个AD的通路数
               LDI *+AR1(3),R3                ;读第四个AD的通路数

               LDI @MAX125,AR1
               LDI @dac11,AR7 				  ;第一片DA的第一通道                
read_ad:       LDI @vc33mmr,AR0
               LDI (INT_RDY+WAIT_4+BANK_8M),R1
               STI R1,*+AR0(STRB0)             ;为系统加入4个等待

               SUBI 0,R0
               BZ  ad1
               LDI R0,RC                       ;读第一个AD的通路数
               SUBI 1,RC
               RPTB ad1
			   LDI *AR1,R0                     ;读第一个AD设定的各个通路
               AND @mask14l,R0
               STI R0,*AR2++
ad1:           NOP    
                        
               POP R1
               SUBI 0,R1
               BZ  ad2
               LDI R1,RC                      ;读第二个AD的通路数
               SUBI 1,RC
               RPTB ad2
               LDI *+AR1(1),R0                 ;读第二个AD设定的各个通路
               AND @mask14l,R0
               STI R0,*AR2++ 
ad2:           NOP
                        
               SUBI 0,R2
               BZ  ad3
               LDI R2,RC                      ;读第三个AD的通路数
			   SUBI 1,RC
			   RPTB ad3
			   LDI *+AR1(2),R0                 ;读第三个AD设定的各个通路
               AND @mask14l,R0
               STI R0,*AR2++
ad3:           NOP
               
               SUBI 0,R3
               BZ  ad4
               LDI R3,RC						;读第四个AD的通路数
               SUBI 1,RC
               RPTB ad4
               LDI *+AR1(3),R0                 ;读第四个AD设定的各个通路
               AND @mask14l,R0
               STI R0,*AR2++
ad4:           NOP
               
               LDI @vc33mmr,AR0
               LDI (INT_RDY+WAIT_1+BANK_8M),R1
               STI R1,*+AR0(STRB0)             ;为系统加入1个等待
               LDI @adstate,AR1
               LDI AR2,R1 
               LDI *+AR1(15),R2                 ;取半満作为判断地址
               SUBI R1,R2                
               BNC store
               LDI AR2,R1
               LDI *+AR1(7),R2                 ;取未地址
               SUBI R1,R2
               BC adall   
               LDI  01,R0
               STI R0,*+AR1(13)                ;设定ADdata_Buffer半満标志         
               LDI AR2,R1 
               LDI *+AR1(7),R2                 ;取未地址
               STI R2,*+AR1(15)                ;取満作为判断地址
               BU  store
adall:         LDI  01,R0
               STI R0,*+AR1(8)                 ;设定ADdata_Buffer満          
               LDI *+AR1(14),R2                ;取半満地址
               STI R2,*+AR1(15)                ;取半満作为判断地址            
               LDI @addata,AR2                 ;重新设定ADdata_Buffer的首地址

store:         LDI AR2,R1
               STI R1,*+AR1(5)                 ;保存当前的ADDATABUFFER的地址
              
               
               LDI *+AR1(6),R1
               LDI *+AR1(4),R2
               BZ exit
               SUBI R1,R2
               BNZ  exit                       ;设定采样次数完成
               
               LDI @vc33mmr,AR0                ;停止定时器
               LDI 0,R1
               STI R1,*+AR0(TIM0_CTRL)

               LDI  01H,R1
               STI R1,*+AR1(8)                 ;采样结束
               LDI 0,R1
               STI R1,*+AR1(6)
               LDI @addata,R1                  ;重新设定ADdata_Buffer的首地址
               STI R1,*+AR1(5)
               b ad_end
                                        
exit:          LDI @adstate,AR1 
               LDI *+AR1(0ah),R1                 
               SUBI 02H,R1
               BNZ ad_end
               LDI @vc33mmr,AR0
               LDI (INT_RDY+WAIT_3+BANK_8M),R1
               STI R1,*+AR0(STRB0)              ;为系统加入3个等待
  
               LDI @adstart,AR1                 ;软件单次启动AD
               STI R1,*AR1
               nop
               nop
               ;恢复系统等待                                         
ad_end:        LDI @vc33mmr,AR0
			   POP R3
               STI R3,*+AR0(STRB0)              
               POP  AR7
               POPF R3
               POP  R3
               POPF R2
               POP  R2
               POPF R1             
               POP  R1
               POPF R0
               POP  R0
               POP  AR0
               POP  AR2
               POP  AR1
               POP  DP
               POP  FP
               POP  ST
               RETI
*********************************************************************************
*										                    *
* 函数定义:c_init01					   		                  *
* 功  能:HOST中断服务程序			                                        *
*										                                        *
*										                                        *
*********************************************************************************               
_c_int02:      PUSH  ST
			   PUSH  FP       ;save old FP
               LDI   SP,FP     ;set up new Fp
               PUSH  DP
               PUSH  AR1
               PUSH  AR2
               PUSH  AR0
               PUSH  R0
               PUSHF R0
               PUSH  R1
               PUSHF R1
               PUSH  R2
               PUSHF R2
                
               LDI @vc33mmr,AR0
               LDI *+AR0(STRB0),R0
               ;保存系统等待
               PUSH R0
               ;为系统加入7个等待
               LDI (INT_RDY+WAIT_7+BANK_8M),R1
               STI R1,*+AR0(STRB0)
               ;获取loacal bus中断寄存器 
               LDI @lint,AR0
               LDI *AR0,R1
               LDI *AR0,R1
               AND 08H,R1
               BZ host_end
               ;读取Mailbox中的命令。  
               LDI @htolmailbox,AR0
               LDI *AR0,R1
               LDI *AR0,R1
               LDI @commandb,AR0
               STI R1,*AR0
               ;恢复系统等待 
               LDI @vc33mmr,AR0
               POP R0
               STI R0,*+AR0(STRB0)
                              
host_end:      POPF R2
			   POP  R2
               POPF R1             
               POP  R1
               POPF R0
               POP  R0
               POP  AR0
               POP  AR2
               POP  AR1
               POP  DP
               POP  FP
               POP  ST
               RETI 


               .end    
               
                                               

⌨️ 快捷键说明

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