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

📄 spl10.asm

📁 .ifnz I2C_SUPPORT ************************************************************** Function : fPro
💻 ASM
字号:
.ifnz SPL10
fProcessVfdWrite:                       
               lda  IOP_DATA0_L
               and  #VFD_DAT_LN_MASK
               sta  rDataLen_spl10
               ;;lda  #0
               ;;cmp  rDataLen
               ;;beq  OnlySentCmd
               ldx  #0
               lda  IOP_DATA1_L
               and  #VFD_FIRST_DATA_ADDR
               sta  rAddress
fSentDataloop:
               ;;sent cmd and address,address evry time sent!
               lda  IOP_DATA1_L;;#$A0
               and  #F0H
               ora  rAddress
               sta  rOutBuffer
               rmb  0,rSpl10CtrlFlag               ;;first clear err flag
               jsr  fspl10synch   ;;
               bbs  0,rSpl10CtrlFlag,fDataNotWrite
               jsr  fSentOneByte
               bbs  0,rSpl10CtrlFlag,fDataNotWrite
               lda  IOP_DATA2_L,x
               sta  rOutBuffer
               jsr  fSentOneByte
               bbs  0,rSpl10CtrlFlag,fDataNotWrite
               inc  rAddress
               inx
               cpx  rDataLen_spl10
               bne  fSentDataloop
               ;;jmp  fDataIsWrite
               bra  fDataIsWrite

OnlySentCmd:
               lda  IOP_DATA1_L
               sta  rOutBuffer
               rmb  0,rSpl10CtrlFlag             ;;it first clear err flag
               jsr  fspl10synch
               bbs  0,rSpl10CtrlFlag,fDataNotWrite
               jsr  fSentOneByte
               bbs  0,rSpl10CtrlFlag,fDataNotWrite

fDataIsWrite:
fDataNotWrite:  
                            
             
                smb     VFD_DATA_bit,bPortBuff_data
		lda		bPortBuff_data
		sta		VFD_DATA_PORT
                
                 smb     VFD_CLK_bit,bPortBuff_clk
		lda		bPortBuff_clk
		sta		VFD_PORT
              
              
              
               rts
;;*************************************************************
;;Function    : spl10 fProcessVfdRead
;;Description : process VFD read function 
;;Input       : parameter on memory 
;;Output      : data memory
;;**************************************************************
fProcessVfdRead:
               lda  VfdScanCode
               sta  rOutBuffer
               rmb  0,rSpl10CtrlFlag
               jsr  fspl10synch
               bbs  0,rSpl10CtrlFlag,VfdReadfail 
               jsr  fSentOneByte
               bbs  0,rSpl10CtrlFlag,VfdReadfail
               ;;now chang data input
               ;;lda  rPort7Cfg
               ;;and  #VFD_DATA_IN
               ;;sta  rPort7Cfg
               rmb  VFD_DATA_bit,VFD_DATA_PORT_CFG
               
               jsr  fReceiveOneByte
               bbs  0,rSpl10CtrlFlag,VfdReadfail
               lda  rOutBuffer
               sta  VfdResponse
               beq  lSkipUpVfdData
lUpVfdData:    sta  VfdResponse1           ;;it only one byte!
               ;;jmp  VfdReadfail  ;;because in VfdReadfail it only chang port output
               
lSkipUpVfdData:
VfdReadfail:
               ;;lda  rPort7Cfg
               ;;ora  #VFD_DATA_OUT
               ;;sta  rPort7Cfg
               smb  VFD_DATA_bit,VFD_DATA_PORT_CFG
               ;;smb  VFD_DATA_bit,VFD_DATA_PORT
               ;;smb  VFD_CLK_bit,VFD_PORT
               
                smb     VFD_DATA_bit,bPortBuff_data
		lda		bPortBuff_data
		sta		VFD_DATA_PORT
                
                 smb     VFD_CLK_bit,bPortBuff_clk
		lda		bPortBuff_clk
		sta		VFD_PORT
               rts
;;**************************************************************
;;Function     : spl10 synchronization
;;Description  : if rSpl10CtrlFlag=1,indication spl10 not ready
;;Input        : NONE
;;Output       : NONE
;;**************************************************************
fspl10synch:
             ;;data=0
             
              rmb     VFD_DATA_bit,bPortBuff_data
		lda		bPortBuff_data
		sta		VFD_DATA_PORT
             
             jsr  fCheckAckLow
             bbs  0,rSpl10CtrlFlag,fspl10synchfail
             ;;data=1
           
            
             smb     VFD_DATA_bit,bPortBuff_data
		lda		bPortBuff_data
		sta		VFD_DATA_PORT
             jsr  fCheckAckHigh
             bbs  0,rSpl10CtrlFlag,fspl10synchfail
fspl10synchok:
             
fspl10synchfail:
             ;;smb  0,rSpl10CtrlFlag
             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,bPortBuff_data
		lda		bPortBuff_data
		sta		VFD_DATA_PORT
                bra   DataIsSet
lDataIsHigh:
                
                smb     VFD_DATA_bit,bPortBuff_data
		lda		bPortBuff_data
		sta		VFD_DATA_PORT
DataIsSet:
               ;;spl10 clk=0
             jsr   fDelay1
             jsr   fDelay1
                rmb     VFD_CLK_bit,bPortBuff_clk
		lda		bPortBuff_clk
		sta		VFD_PORT
              
              jsr   fCheckAckLow
              bbs  0,rSpl10CtrlFlag,SentOneBytefail ;;flag come from fCheckAckLow
            
                
                smb     VFD_CLK_bit,bPortBuff_clk
		lda		bPortBuff_clk
		sta		VFD_PORT
		
		
             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:
               ldy  #8
lReceiveOneBit:
               
               ;;clk=0
              ;; rmb  VFD_CLK_bit,VFD_PORT   
               rmb     VFD_CLK_bit,bPortBuff_clk
		lda		bPortBuff_clk
		sta		VFD_PORT
              
              
              
               jsr  fCheckAckLow
               bbs  0,rSpl10CtrlFlag,lRecvIsfail
               bbs  VFD_DATA_bit,VFD_DATA_PORT,lRevDataIsHigh
lRevDataIsLow:
               clc
               rol  rOutBuffer
               ;;jmp  lRevOk
               bra  lRevOk
lRevDataIsHigh:
               sec
               rol  rOutBuffer
lRevOk:
               
               ;;clk=1
               ;;smb  VFD_CLK_bit,VFD_PORT
               jsr   fDelay1;;;;;;;;;========================
                smb     VFD_CLK_bit,bPortBuff_clk
		lda		bPortBuff_clk
		sta		VFD_PORT
               jsr  fCheckAckHigh
               bbs  0,rSpl10CtrlFlag,lRecvIsfail
               dey 
               bne  lReceiveOneBit
lRecvIsOk:
               
lRecvIsfail:   
               ;;smb  0,rSpl10CtrlFlag
               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
           clc
          dec    rCounter
           bne     checkloopfirst
      
           

           smb      0,rSpl10CtrlFlag     ;;it's ack fail flag
           bra      hackreturn             
           ;;jmp      lspl10ackfail
           ;;bra      lspl10ackfail
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
           clc
           dec      rCounter
         bne      checkloop1first
  
         
           ;;jmp      lspl10ackfail

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

⌨️ 快捷键说明

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