1 | //main.c
|
2 |
|
3 | #include <AT91SAM7X256.H>
|
4 | #include "AT91SAM7X-EK.h"
|
5 |
|
6 | #define INTTAST = AT91B_SW1;
|
7 |
|
8 | void ex_int_handler (void){
|
9 | volatile unsigned int dummy;
|
10 | dummy = AT91C_BASE_PIOA->PIO_ISR;
|
11 | AT91C_BASE_AIC->AIC_EOICR=AT91C_BASE_TC0->TC_SR;
|
12 | AT91C_BASE_AIC->AIC_ICCR=(1<<AT91C_ID_TC0);
|
13 | *AT91C_AIC_EOICR=0;
|
14 | AT91C_BASE_PIOB->PIO_CODR=AT91B_LED1;// LED1 hier zum Int.-Test anmachen
|
15 | AT91C_BASE_AIC->AIC_EOICR = 0;
|
16 | }
|
17 |
|
18 | int main(void){
|
19 | int io_status;
|
20 | // Enable the Clock of the PIO
|
21 | AT91C_BASE_PMC->PMC_PCER = 1 << AT91C_ID_PIOA;
|
22 | AT91C_BASE_PMC->PMC_PCER = 1 << AT91C_ID_PIOB;
|
23 | AT91C_BASE_PMC->PMC_PCER = 1 << AT91C_ID_SYS;
|
24 |
|
25 | // Configure the PIO Lines corresponding to LED1..LED4 as Outputs
|
26 | AT91C_BASE_PIOB->PIO_PER = AT91B_LED_MASK;
|
27 | AT91C_BASE_PIOB->PIO_OER = AT91B_LED_MASK;
|
28 |
|
29 | // Clear the LED's. On the Board we must apply a "1" to turn off LEDs
|
30 | AT91C_BASE_PIOB->PIO_SODR = AT91B_LED_MASK;
|
31 |
|
32 | //Init Interrupt
|
33 | AT91C_BASE_PIOA->PIO_PER=AT91B_SW1;
|
34 | AT91C_BASE_PIOA->PIO_ODR =AT91B_SW1;
|
35 | AT91C_BASE_PIOA->PIO_CODR=AT91B_SW1;
|
36 | AT91C_BASE_PIOA->PIO_PPUER=AT91B_SW1;
|
37 | AT91C_BASE_PIOA->PIO_ASR=AT91B_SW1;
|
38 | AT91C_BASE_PIOA->PIO_OWDR=AT91B_SW1;
|
39 | AT91C_BASE_AIC->AIC_SMR[AT91C_ID_PIOA]=AT91C_AIC_SRCTYPE_INT_POSITIVE_EDGE | 0;
|
40 | AT91C_BASE_AIC->AIC_SVR[AT91C_ID_PIOA]=(unsigned int)ex_int_handler;
|
41 | AT91C_BASE_PIOA->PIO_IFER=AT91B_SW1;
|
42 | io_status = AT91C_BASE_PIOA->PIO_ISR;
|
43 | AT91C_BASE_AIC->AIC_IECR=(1 << AT91C_ID_PIOA);
|
44 | AT91C_BASE_AIC->AIC_ISCR=(1 << AT91C_ID_PIOA); //Test
|
45 | AT91C_BASE_AIC->AIC_ICCR=0;
|
46 | AT91C_BASE_PIOA->PIO_IER=AT91B_SW1;
|
47 |
|
48 | for(;;){
|
49 | if ((AT91C_BASE_PIOA->PIO_PDSR & AT91B_SW3) == 0) { /* Check if SW3 is pressed */
|
50 | AT91C_BASE_PIOB->PIO_CODR = AT91B_LED2; /* Turn On LED2 */
|
51 | }
|
52 | if ((AT91C_BASE_PIOA->PIO_PDSR & AT91B_SW4) == 0) { /* Check if SW4 is pressed */
|
53 | AT91C_BASE_PIOB->PIO_SODR = AT91B_LED2; /* Turn Off LED2 */
|
54 | }
|
55 | }
|
56 | }
|