Merge pull request #408 from DrDoof/fix/isr-no-console-write

Do not call write_char() from the external interrupt handlers
This commit is contained in:
René van Dorst authored and GitHub committed 2026-09-06 18:11:30 +00:00
commit 00ee3d1325
1 file changed
-6
-6
View File
@@ -493,7 +493,6 @@ void print_cmd_prompt(void)
void isr_ext0(void) __interrupt(0) void isr_ext0(void) __interrupt(0)
{ {
EX0 = 0; // Disable interrupt for the moment EX0 = 0; // Disable interrupt for the moment
write_char('X');
IT0 = 1; // Trigger on falling edge of external interrupt IT0 = 1; // Trigger on falling edge of external interrupt
EX0 = 1; // Re-enable interrupt EX0 = 1; // Re-enable interrupt
} }
@@ -501,14 +500,11 @@ void isr_ext0(void) __interrupt(0)
/* /*
* External IRQ 1 Service Routine, triggered by the NIC recieving a packet * External IRQ 1 Service Routine, triggered by the NIC recieving a packet
* Note that all registers are being put on the STACK because of calling
* a subroutine (write_char), we shold do better...
*/ */
void isr_ext1(void) __interrupt(2) void isr_ext1(void) __interrupt(2)
{ {
// This flag should only be reset after all packets have been read // This flag should only be reset after all packets have been read
EX1 = 0; EX1 = 0;
write_char('Y');
EX1 = 1; EX1 = 1;
} }
@@ -519,7 +515,6 @@ void isr_ext1(void) __interrupt(2)
void isr_ext2(void) __interrupt(8) void isr_ext2(void) __interrupt(8)
{ {
EXIF &= 0xef; // Clear IRQ flag (bit 7) in EXIF EXIF &= 0xef; // Clear IRQ flag (bit 7) in EXIF
write_char('Z');
PCON |= 1; // Enter Idle mode until interrupt occurs PCON |= 1; // Enter Idle mode until interrupt occurs
} }
@@ -530,7 +525,6 @@ void isr_ext2(void) __interrupt(8)
void isr_ext3(void) __interrupt(9) void isr_ext3(void) __interrupt(9)
{ {
EXIF &= 0xdf; // Clear IRQ flag (bit 6) in EXIF EXIF &= 0xdf; // Clear IRQ flag (bit 6) in EXIF
write_char('W');
} }
// Timer2: handles system tick. // Timer2: handles system tick.