AVR & ATmega
Atmegaxx Micom Interrupt 처리에 따른 주의사항.
EP 기술연구소
2016. 7. 25. 15:19
Atmega128, 64 등 Micon 인터럽트 루틴에서 가끔 오류가 발생한다. 그것은 레지스트리의 값이
일부 바뀌는 경우가 종종 발생한다. 따라서 인터럽트 루틴에서 께산식이 들어 갈째는 반드시
레지스트리 특히 Status Resist 는 백업해 놓고 인터럽트 루틴읗 처리 하는 것이 좋다.
인터럽트 루틴의 처리가 완료되면 Re-Store 한다음 인터럽트 루틴을 종료 한다. 뭐 어셈블러에서는 당연히 하는건데...
interrupt [USART_TXC] void uart_tx_isr(void)
{
#asm
push r26
push r27
push r30
push r31
in r26,sreg
push r26
#endasm
if(++TX_Counter < TX_Buffer_Size){
UDR = TX_Buffer[TX_Counter];
UCSRB |= TX_ENABLE;
}
else TX_buffer_overflow = 1;
#asm
pop r26
out sreg,r26
pop r31
pop r30
pop r27
pop r26
#endasm
}