//---------------------------------------
.macro ENDIRQSTATUS
ldrb r7,[r6,SET_OPERM]
orr r7,r8
strb r7,[r6,SET_OPERM]
ldr r7,=EXTI_ADM
EXTICLEARFLAG r7,r8,EXTI_LINE_6
pop {r5-r8,lr}
bx lr
.endm
//----------------------------------------------
// EXTI9_5_IRQHandler //RSN o177130
//----------------------------------------------
.section .text.EXTI9_5_IRQHandler
.global EXTI9_5_IRQHandler
.type EXTI9_5_IRQHandler, %function
EXTI9_5_IRQHandler:
push {r5-r8,lr}
ldr r5,=PORT_ADM
ldr r6,=VAR_ADM
ldrh r8,[r6,#RSN_RDM]
irq5_start:
READPORT_R5 r7,PRT_B @
read from port B
tst r7,#(SYNC|DIN)
beq irq5_rsn_din
tst r7,#(SYNC|DOUT)
beq irq5_rsn_dout
tst r7,#(SYNC)
beq irq5_start
//--------------------------------------------
irq5_rsn_din:
RESETGPIO_R5 r7,PRT_B,#(VA87DIR)
SETPORT_R5 r7,PRT_C,MODER,moder_c_o
SETODRPORT_R5 r8,PRT_C
RESETGPIO_R5 r7,PRT_B,#(RPLY)
irq5_din_rsn_h_wait:
READPORT_R5 r7,PRT_B
tst r7,#(DIN)
beq irq5_din_rsn_h_wait
ldrb r8,=0
SETPORT_R5 r7,PRT_C,MODER,moder_c_i
SETGPIO_R5 r7,PRT_B,#(RPLY|VA87DIR)
ENDIRQSTATUS
//--------------------------------------------
irq5_rsn_dout:
RESETGPIO_R5 r7,PRT_B,#(RPLY)
SETPORT_R5 r7,PRT_C,MODER,moder_c_i
irq5_rsn_dout_h_wait:
READPORT_R5 r7,PRT_C
READPORT_R5 r8,PRT_B
tst r8,#(DOUT)
beq irq5_rsn_dout_h_wait
strh r7,[r6,#RSN_WRM]
tst r7,#0x100 //GOR?
ite eq
ldrbeq r8,=1 //cmd
ldrbne r8,=2 //synchro search
beq EXTI9_5_IRQHandler_end
ldrh r7,=0
strh r7,[r6,#RSN_RDM] //RSN_RD=0
strh r7,[r6,#RDN_RDM] //RDN_RD=0
EXTI9_5_IRQHandler_end:
SETGPIO_R5 r7,PRT_B,#(RPLY)
ENDIRQSTATUS
//--------------------------------------------
//--------------------------------------------
//--------------------------------------------
.macro ENDIRQDATA
ldrh r7,[r6,#RSN_RDM]
bic r7,#0x80 // 7 bit (TR)
strh r7,[r6]
//reset exti port
ldr r7,=EXTI_ADM
EXTICLEARFLAG r7,r8,EXTI_LINE_11
pop {r5-r8,lr}
bx lr
.endm
//----------------------------------------------
// EXTI15_10_IRQHandler // RDN o177132
//----------------------------------------------
.section .text.EXTI15_10_IRQHandler
.global EXTI15_10_IRQHandler
.type EXTI15_10_IRQHandler, %function
EXTI15_10_IRQHandler:
push {r5-r8,lr}
ldr r5,=PORT_ADM
ldr r6,=VAR_ADM
ldrh r8,[r6,#RDN_RDM] @load r8 DATA
irq10_start:
READPORT_R5 r7,PRT_B @
read from port B
tst r7,#(SYNC|DIN)
beq irq10_rdn_din
tst r7,#(SYNC|DOUT)
beq irq10_rdn_dout
tst r7,#(SYNC)
beq irq10_start
irq10_rdn_din:
RESETGPIO_R5 r7,PRT_B,#(VA87DIR)
SETPORT_R5 r7,PRT_C,MODER,moder_c_o
SETODRPORT_R5 r8, PRT_C
RESETGPIO_R5 r7,PRT_B,#(RPLY)
irq10_din_rdn_h_wait:
READPORT_R5 r7,PRT_B
tst r7,#(DIN)
beq irq10_din_rdn_h_wait
SETPORT_R5 r7,PRT_C,MODER,moder_c_i
SETGPIO_R5 r7,PRT_B,#(RPLY|VA87DIR)
ENDIRQDATA
irq10_rdn_dout:
RESETGPIO_R5 r7,PRT_B,#(RPLY)
SETPORT_R5 r7,PRT_C,MODER,moder_c_i
irq10_rdn_dout_h_wait:
READPORT_R5 r7,PRT_C
READPORT_R5 r8,PRT_B
tst r8,#(DOUT)
beq irq10_rdn_dout_h_wait
strh r7,[r6,#RDN_WRM]
SETGPIO_R5 r7,PRT_B,#(RPLY)
ENDIRQDATA
[свернуть]