Updated part13-interrupts to stop the timers too

This commit is contained in:
Adam Greenwood-Byrne 2021-10-12 17:43:36 +01:00
parent ecce209c5e
commit 3b637a7fe5
3 changed files with 28 additions and 5 deletions

View file

@ -26,6 +26,10 @@ void enable_interrupt_controller() {
REGS_IRQ->irq0_enable_0 = AUX_IRQ | SYS_TIMER_IRQ_1 | SYS_TIMER_IRQ_3; REGS_IRQ->irq0_enable_0 = AUX_IRQ | SYS_TIMER_IRQ_1 | SYS_TIMER_IRQ_3;
} }
void disable_interrupt_controller() {
REGS_IRQ->irq0_enable_0 = AUX_IRQ;
}
void handle_irq() { void handle_irq() {
unsigned int irq = REGS_IRQ->irq0_pending_0; unsigned int irq = REGS_IRQ->irq0_pending_0;

View file

@ -30,11 +30,19 @@ void core0_main(void)
{ {
unsigned int core0_val = 0; unsigned int core0_val = 0;
while (1) { while (core0_val <= 100) {
wait_msec(0x100000); wait_msec(0x100000);
drawProgress(0, core0_val); drawProgress(0, core0_val);
if (core0_val < 100) core0_val++; core0_val++;
} }
debugstr("Core 0 done.");
debugcrlf();
irq_disable();
disable_interrupt_controller();
while(1);
} }
void core1_main(void) void core1_main(void)
@ -43,11 +51,16 @@ void core1_main(void)
clear_core1(); // Only run once clear_core1(); // Only run once
while (1) { while (core1_val <= 100) {
wait_msec(0x3FFFF); wait_msec(0x3FFFF);
drawProgress(1, core1_val); drawProgress(1, core1_val);
if (core1_val < 100) core1_val++; core1_val++;
} }
debugstr("Core 1 done.");
debugcrlf();
while(1);
} }
// TIMER FUNCTIONS // TIMER FUNCTIONS
@ -73,7 +86,12 @@ void handle_timer_1() {
REGS_TIMER->control_status |= SYS_TIMER_IRQ_1; REGS_TIMER->control_status |= SYS_TIMER_IRQ_1;
unsigned int progval = timer1_val / timer1_int; unsigned int progval = timer1_val / timer1_int;
if (progval <= 100) drawProgress(2, progval); if (progval <= 100) {
drawProgress(2, progval);
} else {
debugstr("Timer 1 done.");
debugcrlf();
}
} }
void handle_timer_3() { void handle_timer_3() {

View file

@ -40,6 +40,7 @@ void irq_init_vectors();
void irq_enable(); void irq_enable();
void irq_disable(); void irq_disable();
void enable_interrupt_controller(); void enable_interrupt_controller();
void disable_interrupt_controller();
void handle_timer_1(); void handle_timer_1();
void handle_timer_3(); void handle_timer_3();