
Applications Information
MOTOROLA
MC68307 USER’S MANUAL
10-19
MBBUSY
BTST
#5,MBSR
; Test MBB bit,
BNE
MBBUSY
; and wait until it is clear
RTS
*––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––
*
Generation first byte of data transfer
*––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––
WRITE1
BTST
#5,MBSR
; Test MBB bit,
BNE
WRITE1
; and wait until it is clear
TXSTART
BSET
#4,MBCR
; Set TRANSMIT Mode
BSET
#5,MBCR
; Set Master Mode (Generate START)
BSET
#6,MBCR
; Enable M-bus Interrupts
MOVE.W
#$2000,SR
; Enable interrupts – set to level 0
MBFREE
BTST
#5,MBSR
; Test MBB bit,
BEQ
MBFREE
; If bus is still free, wait until busy
RTS
*––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––
*
Post Byte Transmission/Reception Software Response
*––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––
ORG
MBUSHAN
; Start of Interrupt Handler
ISR
BCLR
#1,MBSR
; Clear the MIF Flag
MOVE.L
D0,-(A7)
; Push D0 Register to Stack
MOVE.L
D1,-(A7)
; Push D1 Register to Stack
MOVE.L
#0,D0
; Clear general data reg
MOVE.L
#0,D1
; Clear general data reg
BTST
#5,MBCR
; Check the MSTA Flag
BEQ
SLAVE
; Branch if Slave Mode
BTST
#4,MBCR
; Check the MODE Flag
BEQ
MASTRX
; Branch if Receive Mode
*––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––
*
Master TRANSMIT caused Interrupt
*––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––
MASTX
BTST
#0,MBSR
; Check ACK From Receiver,
BNE
ENDMASTX
; If no ACK, End Transmission
TXADDR
MOVE.B
V_ATXCNT,D1
; Check Address TX COUNT
BEQ
TXDATA
; If address complete go to data
SUBQ.B
#1,V_ATXCNT
; Decrement Address Tx Count
TXDATA
MOVE.B
V_WRITE,D1
; Check if writing or reading slave
BEQ
SETMASTRX
; If reading set to Master receive
MOVE.B
V_DTXCNT,D1
; CHECK Data TX COUNT
BEQ
ENDMASTX
; If no more data then STOP bit
SUBQ.B
#1,V_DTXCNT
; Reduce Tx Count
MOVE.B
(A0)+,MBDR
; Transmit next byte
BRA
END
; Exit
ENDMASTX
BCLR
#5,MBCR
; Generate STOP Condition