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

📄 pmp_mcu810_diver.asm

📁 .ifnz I2C_SUPPORT ************************************************************** Function : fPro
💻 ASM
字号:
.ifnz PMP_MCU810_DRIVER
fProcessPMP_MCU810:                     
               ;;get the cmd value  
               lda  IOP_DATA0_L
               and  #VFD_DAT_LN_MASK
               sta  rDataLen_spl10          
               lda  rDataLen_spl10
               cmp  #4
               bcc  OnlySentCmd              
fSentCmdData:                      
               rmb  0,rSpl10CtrlFlag              
               jsr  fspl10synch  
               bbs  0,rSpl10CtrlFlag,fDataNotWrite
               lda  IOP_DATA2_H        ;;send cmd     
               sta  rOutBuffer
               jsr  fSentOneByte
               bbs  0,rSpl10CtrlFlag,fDataNotWrite
               lda  IOP_DATA2_L        ;;send data
               sta  rOutBuffer
               jsr  fSentOneByte
               bbs  0,rSpl10CtrlFlag,fDataNotWrite              
               bra  fDataIsWrite

OnlySentCmd:                   
               rmb  0,rSpl10CtrlFlag             
               jsr  fspl10synch
               bbs  0,rSpl10CtrlFlag,fDataNotWrite
               lda  IOP_DATA2_H        ;;send cmd
               sta  rOutBuffer
               jsr  fSentOneByte
               bbs  0,rSpl10CtrlFlag,fDataNotWrite

fDataIsWrite:
fDataNotWrite:         
                smb     VFD_DATA_bit,VFD_DATA_PORT  ;;DATA=1		       
                smb     VFD_CLK_bit,VFD_PORT    ;;CLK=1		                
                rts
;;*************************************************************
;;Function    : spl10 fProcessReadKey
;;Description : process read key data from MCU810
;;Input       : parameter on memory 
;;Output      : data memory
;;**************************************************************
fProcessReadKey:
               lda  ReadKeyCmd
               sta  rOutBuffer
               rmb  0,rSpl10CtrlFlag
               jsr  fspl10synch
               bbs  0,rSpl10CtrlFlag,PMPReadkeyfail 
               jsr  fSentOneByte
               bbs  0,rSpl10CtrlFlag,PMPReadkeyfail   
               jsr  fReceiveOneByte
               bbs  0,rSpl10CtrlFlag,PMPReadkeyfail
               lda  rOutBuffer
               sta  IOP_DATA3_L              
lSkipUpVfdData:
PMPReadkeyfail:            
               smb     VFD_DATA_bit,VFD_DATA_PORT  ;;DATA=1		       
               smb     VFD_CLK_bit,VFD_PORT    ;;CLK=1		                
               rts
             
;;*************************************************************
;;Function    : spl10 fProcessReadBat
;;Description : process read bat from  MCU810
;;Input       : parameter on memory 
;;Output      : data memory
;;**************************************************************
fProcessReadBat:
               lda  ReadBatCmd
               sta  rOutBuffer
               rmb  0,rSpl10CtrlFlag
               jsr  fspl10synch
               bbs  0,rSpl10CtrlFlag,PMPReadBATfail 
               jsr  fSentOneByte
               bbs  0,rSpl10CtrlFlag,PMPReadBATfail              
               
               jsr  fReceiveOneByte
               bbs  0,rSpl10CtrlFlag,PMPReadBATfail
               lda  rOutBuffer
               sta  IOP_DATA7_H  ;;for MP4 not correct
              
PMPReadBATfail:            
                smb     VFD_DATA_bit,VFD_DATA_PORT  ;;DATA=1		       
                smb     VFD_CLK_bit,VFD_PORT    ;;CLK=1		                
                rts
                          
;;**************************************************************
;;Function     : spl10 synchronization
;;Description  : if rSpl10CtrlFlag=1,indication spl10 not ready
;;Input        : NONE
;;Output       : NONE
;;**************************************************************
fspl10synch:
              ;;data=0             
              rmb     VFD_DATA_bit,VFD_DATA_PORT
		     
              jsr  fCheckAckLow
              bbs  0,rSpl10CtrlFlag,fspl10synchfail
              ;;data=1                 
              smb     VFD_DATA_bit,VFD_DATA_PORT		    
              jsr  fCheckAckHigh
              bbs  0,rSpl10CtrlFlag,fspl10synchfail
fspl10synchok:
             
fspl10synchfail:
              
              rts 
;;**************************************************************
;;Function     : sent byte to spl10
;;Description  : if rSpl10CtrlFlag=1 ,indication communication fail
;;Input        : rOutBuffer
;;Output       : NONE
;;**************************************************************
fSentOneByte:
               
               ldy    #8          
SentOneBit:
               rol   rOutBuffer
               bcs   lDataIsHigh
               rmb     VFD_DATA_bit,VFD_DATA_PORT   ;; DATA=0
		       
               bra   DataIsSet
lDataIsHigh:
                
               smb     VFD_DATA_bit,VFD_DATA_PORT   ;; DATA=1
		       
DataIsSet:
                
                jsr   fDelay1
                jsr   fDelay1
                rmb     VFD_CLK_bit,VFD_PORT        ;; CLK=0
		       
              
                jsr   fCheckAckLow
                bbs  0,rSpl10CtrlFlag,SentOneBytefail ;;flag come from fCheckAckLow
            
                
                smb     VFD_CLK_bit,VFD_PORT        ;;CLK=1
		        
                jsr   fCheckAckHigh
                bbs  0,rSpl10CtrlFlag,SentOneBytefail           
        
                dey
                bne   SentOneBit
               
SentOneBytefail:
               
               rts               
              
;;**************************************************************
;;Function     : receive one byte from spl10
;;Description  : if rSpl10CtrlFlag=1 indication no receive
;;Input        :NONE
;;Output       :rOutBuffer
;;**************************************************************
fReceiveOneByte:
               rmb  VFD_DATA_bit,VFD_DATA_PORT_CFG   ;;set DATA input
               ldy  #8
lReceiveOneBit:
               
               
               rmb     VFD_CLK_bit,VFD_PORT	     ;; CLK=0     
              
               jsr  fCheckAckLow
               bbs  0,rSpl10CtrlFlag,lRecvIsfail
               bbs  VFD_DATA_bit,VFD_DATA_PORT,lRevDataIsHigh
lRevDataIsLow:
               clc
               rol  rOutBuffer
               
               bra  lRevOk
lRevDataIsHigh:
               sec
               rol  rOutBuffer
lRevOk: 
               
               jsr   fDelay1
               smb     VFD_CLK_bit,VFD_PORT       ;;CLK=1		    
               jsr  fCheckAckHigh
               bbs  0,rSpl10CtrlFlag,lRecvIsfail
               dey 
               bne  lReceiveOneBit
lRecvIsOk:
               
lRecvIsfail:   
               smb  VFD_DATA_bit,VFD_DATA_PORT_CFG     ;;set DATA output
               rts               
;;**************************************************************
;;Function     : check SPL10 ACK 
;;Description  : if rSpl10CtrlFlag=1 ,indication no ack fail
;;Input        : NONE
;;Output       : NONE
;;************************************************************** 
fCheckAckHigh:
           phx
        
           lda    #$ff
           sta    rCounter
checkloopfirst:           
           ldx      #$ff
checkloop: 
           nop
           nop
           bbs      VFD_STB_bit,VFD_PORT,lspl10ackok
           dex
           bne      checkloop           
           dec    rCounter
           bne     checkloopfirst         

           smb      0,rSpl10CtrlFlag     ;;it's ack fail flag
           bra      hackreturn             
           
lspl10ackok:
           rmb      0,rSpl10CtrlFlag     ;;it's ack ok flag
hackreturn:           
           plx           
           rts

fCheckAckLow:
           phx
    
           lda      #$ff
           sta      rCounter
checkloop1first:           
           ldx      #$ff
checkloop1:
           nop
           nop
           bbr      VFD_STB_bit,VFD_PORT,lspl10Lackok
           dex 
           bne      checkloop1           
           dec      rCounter
           bne      checkloop1first          

           smb      0,rSpl10CtrlFlag
           bra      lackreturn
lspl10Lackok:
           rmb      0,rSpl10CtrlFlag
lackreturn:           
           plx
           rts    
.endif

⌨️ 快捷键说明

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