diff options
Diffstat (limited to 'Bachelor/Mikroprozessorsysteme2/mi2/Termin2/Termin2Aufgabe4a2.c')
| -rw-r--r-- | Bachelor/Mikroprozessorsysteme2/mi2/Termin2/Termin2Aufgabe4a2.c | 67 |
1 files changed, 67 insertions, 0 deletions
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<<PIOB_ID);
+ // Enable Interrupt for PIOB in AIC
+ myAIC->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<<PIOB_ID); // Enable Interrupt for PIOB
+
+ // enable PIOB Interrupt
+ myPIOB->PIO_IER = KEY1|KEY2; // what to put here?
+
+ myPMC->PMC_PCER = (1<<PIOB_ID); // Clock PIO B
+ // loop to infinity
+ while(1)
+ {
+ }
+
+ return 0;
+}
|
