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

📄 iop.asm

📁 .ifnz I2C_SUPPORT ************************************************************** Function : fPro
💻 ASM
📖 第 1 页 / 共 2 页
字号:
	.endif		
.endif

.ifnz   UART_SUPPORT
        ;;initizlize timer A for UART and clear counter
		;;check IOP_DATA7_H for incoming UART value
        lda     IOP_DATA7_H
		bne		lUseOuterUart
        lda     #.low. UART_TIME			;;use default value
        sta     TimerA_Lo
        lda     #.high.UART_TIME
        sta     TimerA_Hi
		jmp		lInitUartIO

lUseOuterUart:
        lda     IOP_DATA7_L
        sta     TimerA_Lo
        lda     IOP_DATA7_H
        sta     TimerA_Hi

lInitUartIO:
        ;;initalize I/O port
        lda     #UART_TXD_OUT
        sta     UART_PORT_CFG        
.endif
        ;;initizlize timer B ( 112 us ), and clear counter
		;;check IOP_DATA7_H for incoming UART value
        lda     IOP_DATA7_H
		cmp		#0
		bne		lUseOuterIR

.ifnz  PCA9564
        lda     #.low. PCA9564_SCAN_TIME	
        sta     TimerB_Lo
        lda     #.high.PCA9564_SCAN_TIME
        sta     TimerB_Hi

.else
        lda     #.low. IR_SCAN_TIME	;;use default
        sta     TimerB_Lo
        lda     #.high.IR_SCAN_TIME
        sta     TimerB_Hi
.endif
        
		jmp		lEndIRTimer

lUseOuterIR:
        lda     IOP_DATA6_L
        sta     TimerB_Lo
        lda     IOP_DATA6_H
        sta     TimerB_Hi
		;;Reset IOP_DATA6_L & IOP_DATA6_H for later using
		lda		#0
		sta		IOP_DATA6_L
		sta		IOP_DATA6_H
lEndIRTimer:

        ;;enable INTR mask
.ifnz   UART_SUPPORT
        lda     #(INT_TIMER_A .or. INT_TIMER_B)
        sta     IntMask
.else
        lda     #INT_TIMER_B
        sta     IntMask
.endif

		;;set VFD read polling time
		lda		#100
		sta		rVfdPollingTm
		
.ifnz   IOP_RESET_RISC
        lda   #0
        sta   awakeup_time_1
        lda    #0
        sta    awaken_flag       
.endif		
.ifnz IR_THOMSON		
		stz     markcount          
        stz     spacecount          
        stz     synccount          
        stz     bit01count   
        stz     repeattimes          
		stz     datacount		
		stz     IrStateFlag
.endif	

.ifnz IR_M50560		
		stz     IrStateFlag		
        stz     RepTimes
        stz     DataCode
        stz     CustomCode
        stz     BitsCounter 
        stz     Flag4Ms          
.endif	

.ifnz IR_AS1213	
        lda     #BEGIN_FROM_HEAD	
		sta     IrStateFlag		
        stz     RepRate
        stz     Repdata
        stz     rReceive1 
        stz     rReceive2  
        stz     rReceive3 
        stz     rReceive4  
        stz     BitsCounter              
.endif				
        
.ifnz IR_M3004
        lda     #IR_IDLE_STATE
        sta     IrStateFlag            
        stz     First_pulse_flag       
        stz     Idle_counter           
        stz     Bit01_counter   
        stz     Level_high_flag      
        stz     Data_bit_counter  
        stz     First_5bit_data
        stz     Last_8bit_data   
        stz     Prev_last8bit           
        stz     Prev_first5bit          
        stz     DataRepeatCounter    
.endif			
.ifnz IR_KONKA
        stz     IrStateFlag
        stz     IO_high_counter
        stz     IO_low_counter
        stz     Data_Customer_Code     
        stz     Data_IR_Code 
        stz     First_send_data_flag    
        stz     Repeat_counter   
        stz     Prev_ir_data 
        stz     Idle_counter 
.endif	
.ifnz IR_TDP101
		stz		IrStateFlag
		stz     IO_high_counter       
		stz		IO_low_counter  
		stz		Data_bit_counter  
		stz		Repeat_counter	
		stz		Separate_flag
		stz		Separate_counter
.endif
        
.ifnz GT1128
        jsr     init_gt1128
.endif
.ifnz AD7312        
        jsr     init_ad7312 
.endif  
.ifnz  NEC16312
        jsr     init_16312    ;;for solve cs16312 don't display when power on     
.endif
.ifnz  STANDBY_6313
        stz     standby_flag_first      
        stz     standby_flag_end       
.endif  

.ifnz PCA9564        
        lda     PCA9564_beginning_state
        sta     pca9564_state
        stz     rx_buffer_full_flag
        stz     tx_buffer_empty_flag          
        stz     pca9564_rx_in_ptr        
        stz     pca9564_tx_out_ptr    
        stz     stop_timeout_counter        
        jsr     PCA9564_Init  ;;enable PCA9564 normal work
.endif  
        ;;enable IRQ
        cli 
        jmp     lToMainLoop

        .org    (($+31)/32)*32
;;===================================================================
  ;;main loop
;;===================================================================	        
lToMainLoop:
.ifnz   STANDBY_6313
        lda    standby_flag_end
        cmp    #1
        beq    lToMainLoop
.endif
.ifnz   IOP_RESET_RISC
        lda     IOP_DATA0_H
        and     #$f0
        cmp     #0
        bne     bagain
        lda    #1
        sta    awaken_flag
        lda    awakeup_time_1
        cmp    #100
        bne    check_end
        lda    #0
        sta    awakeup_time_1
        inc    awakeup_time_2
        cmp    #50
        bne    check_next
        jmp    reset_risc
check_next:        
        lda    #0
        sta    awakeup_time_2
check_end:
        bra    ProcessStart
        
bagain:
        lda    #0
        sta    awaken_flag
        
ProcessStart:      
.endif    

.ifnz   UART_SUPPORT
		jsr     fCheckUart             
.endif	

.ifz PCA9564
.ifz HT1621		
		lda		rVfdPollingTm
		bne		lRunOthersFun					
.ifnz  PMP_MCU810_DRIVER
        jsr     fProcessReadKey
        jsr     fProcessReadBat
.else		
		jsr		fProcessVfdRead
.endif
		lda		#100
		sta		rVfdPollingTm
.endif

lRunOthersFun:
.ifnz NEC16312_SW
        jsr    fProcessVfdReadsw
.endif
.ifnz SPL10         ;;if spl10 write fail,we write one time again
        bbs     0,rSpl10CtrlFlag,lSpl10WriteAgain
        ;;bra     lSpl10WriteOk
        jmp       lSpl10WriteOk
lSpl10WriteAgain:
        jsr     fDelay1
        jsr     fProcessVfdWrite
lSpl10WriteOk:
.endif

.endif ;;pca9564
        ;;check request function
        lda     IOP_DATA0_H
        and     #FUN_MASK
        beq     lToMainLoop
        tax
        and     #FUN_MAIN_MASK
        bne     lChkMainFun01
        
        lda     IOP_DATA0_H
        and     #FUN_SUB_MASK
        cmp     #FUN_VFD_REQ_W
        bne	    lToMainLoop
.ifz (HC164+PCA9564+PMP_MCU810_DRIVER)  
        jsr		fProcessVfdWrite
.endif
lFunComplete:
        ;;clear function request ( free )
        lda     IOP_DATA0_H
        and     #!FUN_MASK
        sta     IOP_DATA0_H
        jmp     lToMainLoop

lChkMainFun01:
        txa
        cmp     #FUN_GPAD_READ         ;;1001 = read game pad
        bne     lCheckNext01

.ifnz GAMEPAD_SUPPORT
        jsr     fReadGamePad
        .ifnz  SPHE8202R_128PIN
        smb		VFD_STB_bit,VFD_PORT_CFG
		smb		VFD_CLK_bit,VFD_PORT_CFG
		smb		VFD_DATA_bit,VFD_DATA_PORT_CFG
		rmb		VFD_STB_bit,VFD_PORT
		smb		VFD_CLK_bit,VFD_PORT
		rmb		VFD_DATA_bit,VFD_DATA_PORT   
        .endif
.endif
        
        jmp     lFunComplete

lCheckNext01:
        cmp     #FUN_UART_TXD
        bne     lCheckNext02

.ifnz   UART_SUPPORT
        jsr     fSendByUart             ;;0110 = transform data by UART
.endif
        jmp     lFunComplete

lCheckNext02:
        cmp     #FUN_I2C_WRITE
        bne     lCheckNext03

.ifnz I2C_SUPPORT
        jsr     fProcessI2cWrite        ;;0111 = I2C write
.endif
        jmp     lFunComplete

lCheckNext03:
        cmp     #FUN_I2C_READ
        bne     lCheckNext04
.ifnz I2C_SUPPORT
        jsr     fProcessI2cRead         ;;1000 = I2C read
.endif  
        jmp     lFunComplete
lCheckNext04:  
.ifnz PMP_MCU810_DRIVER      
        cmp     #FUN_PMP_MCU810
        bne     lFunComplete
        jsr     fProcessPMP_MCU810        
.endif
        jmp     lFunComplete
;;===================================================================
;;UART interface function
;;===================================================================	

.ifnz   UART_SUPPORT
;;===================================================================
;;Function    : fCheckUart
;;Description : Send data to UART port
;;Input       : IOP_DATA1_L
;;Output      : NONE
;;===================================================================

fCheckUart:

        lda     rUartSendLen
        bne     lUartBusy

		        
        ldx		TxdPointR       
        cpx		TxdPointW        
        beq		lUartBusy		;;nothing to send       
    
        ;;set tranfrom data
        lda     TxdBuffer,x
        clc                     ;;insert start bit
        rol     a
        sta     rTxdRegister

        lda     rTxdRegister+1
        rol     a
        ora     #$fe            ;;insert 1 stop bit
        sta     rTxdRegister+1

        ;;lda     #10
        lda     #13				;;10 bit + 3 dummy bit
        sta     rUartSendLen
                       
        inc		TxdPointR

lUartBusy:        
        rts
	
;;===================================================================
;;Function    : fSendByUart
;;Description : Send data to UART port
;;Input       : IOP_DATA1_L
;;Output      : NONE
;;===================================================================	
fSendByUart:                
        ldx		TxdPointW
        ;;set tranfrom data
        lda		IOP_DATA1_L
        sta     TxdBuffer,x        
        inx		
        
lWaitBufferEmpty:  
		cpx		TxdPointR
        bne		lUartSendNextByte        
        phx
		jsr		fCheckUart	
		plx      
		bra		lWaitBufferEmpty

lUartSendNextByte:
	    stx		TxdPointW        
        rts       
        
.endif
;;--------------------------------------------------------------
;;I2C interface function
;;--------------------------------------------------------------
.ifnz I2C_SUPPORT
  .include I2C.asm
.endif 


;;--------------------------------------------------------------
;;VFD interface function
;;--------------------------------------------------------------

.ifnz NEC16312
  .include .\VFD\NEC16312.asm
.endif       


;;--------------------------------------------------------------
.ifnz HT1621
 .include .\VFD\HT1621.asm
.endif

;;--------------------------------------------------------------

.ifnz SPL10
  .include .\VFD\SPL10.asm                 
.endif

;;--------------------------------------------------------------

.ifnz PMP_MCU810_DRIVER
  .include .\VFD\pmp_mcu810_diver.asm                 
.endif
;;--------------------------------------------------------------
.ifnz HC164
  .include .\VFD\HC164.asm                      
.endif

;;--------------------------------------------------------------
.ifnz HC164_2
  .include .\VFD\HC164_2.asm                      
.endif

;;--------------------------------------------------------------
.ifnz PT6554
  .include .\VFD\PT6554.asm      
.endif

;;--------------------------------------------------------------

.ifnz SPL10308
  .include .\VFD\SPL10308.asm
.endif
 
;;--------------------------------------------------------------

.ifnz  AD7312
  .include .\VFD\AD7312.asm
.endif      

;;--------------------------------------------------------------

.ifnz GT1128
  .include .\VFD\GT1128.asm
.endif

.ifnz PCA9564
  .include .\VFD\PCA9564_init.asm
.endif
 
.ifnz IOP_RESET_RISC
reset_risc:		
		lda		#$de
		sta		Reset_RISC_L
		lda		#$ad
		sta		Reset_RISC_H
        rts
.endif 
;;--------------------------------------------------------------
;;Function    : fDelay
;;Description : Null delay
;;Input       : NONE
;;Output      : NONE
;;--------------------------------------------------------------

fDelay:
		phx
		;;check IOP_DATA7_H for deciding delay counter
		lda     IOP_DATA7_H
		cmp		#0
		bne		lDefaultDelay

		clc
		adc		#1
		asl		A
		tax
		bra		lDelayLoop1

lDefaultDelay:
        ldx     #32
        bra		lDelayLoop1

fDelay1:
        phx
        ldx     #2       
        
lDelayLoop1:
        dex
        bne     lDelayLoop1
        plx
        rts
fDelay2:
        phx
        ldx     #20       
        
lDelayLoop2:
        dex
        bne     lDelayLoop2
        plx
        rts        
 .ifnz SPL10308       
 fDelayX10us:
        phx
NextDelay10us:
        ldx     #23
Delay10usLoop:
        nop
        nop
        nop
        nop
        nop
        nop
        nop
        nop
        dex
        bne     Delay10usLoop
        dec     DelayLoopCnt
        lda     DelayLoopCnt
        bne     NextDelay10us
        plx
        rts       
.endif
;;===================================================================
;;vector
;;===================================================================	


Vector: .section        ;;$200
        DW      vReset
        DW      vNmi
        DW      vIrq
        

	.DATA

;;default is key scan
.ifnz NEC16312
VfdScanCode:	db		$42
.endif

.ifnz AD7312
VfdScanCode:	db		$42
.endif

.ifnz SPL10
VfdScanCode:	db		$c0
.endif

.ifnz HT1621
VfdScanCode:	db		$42
.endif
.ifnz HC164
VfdScanCode:	db		$00
.endif
.ifnz SPL10308
VfdScanCode:    db              $20
.endif

.ifnz GT1128
VfdScanCode:    db     $00  ;;NO USE
.endif

.ifnz PMP_MCU810_DRIVER
ReadKeyCmd      db     $c0
ReadBatCmd      db     $60
.endif

.ifnz GET_5BYTES_KEY_DATA
VfdRespLen:	db		5
.else
VfdRespLen:	db		3	
.endif

;;tmp read
VfdResponse:	blkb	6,$0
.ifnz PCA9564
VfdScanCode:	db		$00 ;;no use
Rx_buffer:	    blkb    MAX_RX_BUF_LEN,$0
Tx_buffer:	    blkb    MAX_TX_BUF_LEN,$0
.else
;;the last latch value
.ifnz GET_5BYTES_KEY_DATA
VfdResponse1:	blkb	4,$0
VfdResponse2:	blkb	4,$0
.else
VfdResponse1:	blkb	6,$0
.endif
.endif

.ifnz UART_SUPPORT      	
TxdPointR:	db		0
TxdPointW:	db		0
TxdBuffer:	blkb 	256,66
RxdPointR:	db		0
RxdPointW:	db		0
RxdBuffer:	blkb 	256,66
.endif



⌨️ 快捷键说明

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