SONIX单片机有没有中断优先顺序?如何设置?
SONIX MCU系统,硬体没有设计中断的优先顺序。但实际应用的过程中,可能需要应用中断优先顺序,可以根据SONIX MCU的特点用软体来实现。
对各中断进行优先权的设置,并根据IEN和IRQ的状态决定系统是否回应中断请求。用户必须在中断向量里检查中断控制位元和中断请求标志位元,因此可将具有高优先顺序的中断控制位元和中断请求标志位元放在前面检测。
举例说明:
ISR: | |||
;------------Save ACC-------------------------- | |||
b0xch | A,AccBuf | ;B0xch instruction do not change C,Z flag | |
b0mov | A,PFLAG | ||
B0MOV | PflagBuf,A | ||
;---------interrupt first------------------------- | |||
INT0CHK: | |||
B0BTS1 | FT0IEN | ||
JMP | INTTC0CHK | ||
B0BTS0 | FT0IRQ | ||
JMP | INTT0 | ||
INTTC0CHK: | ; Check TC0 interrupt request | ||
B0BTS1 | FTC0IEN | ; Check TC0IEN | |
JMP | ISR90 | ; Jump to exit of IRQ | |
B0BTS0 | FTC0IRQ | ; Check TC0IRQ | |
JMP | INTTC0 | ; Jump to TC0 interrupt service routine | |
;-------------exit interrupt------------------------- | |||
ISR90: | |||
B0MOV | A, PflagBuf | ||
B0MOV | PFLAG,A | ;Restore the PFlag | |
B0XCH | A,AccBuf | ;Restore the Reg. A | |
;B0xch instruction do not change C,Z flag | |||
RETI | ;Exit the interrupt routine | ||
;---------------------t0----------------------------- | |||
INTT0: | |||
B0BCLR | FT0IRQ | ||
INTT090: | |||
JMP | ISR90 | ||
;---------------------tc0----------------------------- | |||
INTTC0: | |||
B0BCLR | FTC0IRQ | ||
INTTC090: | |||
JMP | ISR90 |