From 33613a85afc4b1481367fbe92a17ee59c240250b Mon Sep 17 00:00:00 2001 From: Sven Eisenhauer Date: Fri, 10 Nov 2023 15:11:48 +0100 Subject: add new repo --- .../mi2/Termin2/Termin2Aufgabe4a2.c | 67 ++++++++++++++++++++++ 1 file changed, 67 insertions(+) create mode 100644 Bachelor/Mikroprozessorsysteme2/mi2/Termin2/Termin2Aufgabe4a2.c (limited to 'Bachelor/Mikroprozessorsysteme2/mi2/Termin2/Termin2Aufgabe4a2.c') diff --git a/Bachelor/Mikroprozessorsysteme2/mi2/Termin2/Termin2Aufgabe4a2.c b/Bachelor/Mikroprozessorsysteme2/mi2/Termin2/Termin2Aufgabe4a2.c new file mode 100644 index 0000000..86c839e --- /dev/null +++ b/Bachelor/Mikroprozessorsysteme2/mi2/Termin2/Termin2Aufgabe4a2.c @@ -0,0 +1,67 @@ +// Lösung zu Termin2 +// Aufgabe 4 +// Namen: __________; ___________ +// Matr.: __________; ___________ +// vom : __________ +// +#include "../mi2/h/pio.h" +#include "../mi2/h/pmc.h" +#include "../mi2/h/aic.h" + +StructPMC* myPMC = PMC_BASE; +StructAIC* myAIC = AIC_BASE; +StructPIO* myPIOB = PIOB_BASE; + +void taste_irq_handler (void) __attribute__ ((interrupt)); + +void taste_irq_handler (void) +{ + + volatile int keyPressed = myPIOB->PIO_ISR; + + if (!(keyPressed & KEY1)) + myPIOB->PIO_SODR = 0x100; + //if (!(myPIOB->PIO_PDSR & KEY2)) + if (!(keyPressed & KEY2)) + myPIOB->PIO_CODR = 0x100; + + myAIC->AIC_EOICR = 0x01; + // to signal end of Interrupt Service Routine +} + +int main(void) +{ + myAIC->AIC_EOICR = myPIOB->PIO_ISR; + myPIOB->PIO_IDR = 0xFFFFFFFF; + + + // Initialize PIOB + myPIOB->PIO_PER = KEY1|KEY2|LED1|LED2; // Enable PIO for SW1,SW2,LED1,LED2 + //myPIOB->PIO_OER = LED1|LED2; // Set LED1 and LED2 as output + myPIOB->PIO_OER = LED1; // Set LED1 and LED2 as output + myPIOB->PIO_CODR = 0x000000FF; // Clear Output Data Register + + + // Enable Interrupts in CPU + // done by OS + + // disable PIOB Interrupt in AIC + myAIC->AIC_IDCR = (1<AIC_SMR[PIOB_ID] = AIC_SRCTYPE_EXT_LOW_LEVEL; // which register? what to put in it? 0x1 for low + myAIC->AIC_SVR[PIOB_ID] = (volatile unsigned int)&taste_irq_handler; // Address of Interrupt handling routine... + + // enable PIOB Interrupt in AIC + myAIC->AIC_IECR = (1<PIO_IER = KEY1|KEY2; // what to put here? + + myPMC->PMC_PCER = (1<