00001 #include "pio.h" 00002 00003 int pioGetHandle(int port) 00004 { 00005 switch (port) { 00006 case 0: 00007 return AVR32_PIOA_ADDRESS; 00008 case 1: 00009 return AVR32_PIOB_ADDRESS; 00010 case 2: 00011 return AVR32_PIOC_ADDRESS; 00012 case 3: 00013 return AVR32_PIOD_ADDRESS; 00014 case 4: 00015 return AVR32_PIOE_ADDRESS; 00016 default : 00017 break; 00018 } 00019 return PIO_INVALID_ARGUMENT; 00020 } 00021 00022 int pio_enable_module(avr32_piomap_t piomap, int size) 00023 { 00024 int i,status=PIO_SUCCESS; 00025 00026 for(i=0; i<size; i++){ 00027 status |= pio_enable_module_pin(**piomap, *(*piomap+1) ); 00028 piomap++; 00029 } 00030 00031 return status; 00032 } 00033 00034 int pio_enable_module_pin(int pin, int function) 00035 { 00036 avr32_pio_t *pio = (void *) pioGetHandle(pin/32); 00037 00038 00039 /* Disable pio control */ 00040 pio->pdr |= (1<<(pin%32)); 00041 00042 /* Enable the correct function */ 00043 switch(function){ 00044 case 0: 00045 pio->asr |= (1<<(pin%32)); 00046 break; 00047 case 1: 00048 pio->bsr |= (1<<(pin%32)); 00049 break; 00050 default: 00051 return PIO_INVALID_ARGUMENT; 00052 } 00053 return PIO_SUCCESS; 00054 } 00055 00056 00057 00058 int pio_enable_pio(avr32_piomap_t piomap, int size) 00059 { 00060 int i,status=PIO_SUCCESS; 00061 00062 for(i=0; i<size; i++){ 00063 status |= pio_enable_pio_pin(**piomap); 00064 piomap++; 00065 } 00066 00067 return status; 00068 } 00069 00070 int pio_enable_pio_pin(int pin) 00071 { 00072 avr32_pio_t *pio = (void *) pioGetHandle(pin/32); 00073 00074 pio->per |= (1<<(pin%32)); 00075 00076 return PIO_SUCCESS; 00077 } 00078 00079 00080 00081 int pio_disable_module(avr32_piomap_t piomap, int size) 00082 { 00083 int i,status=PIO_SUCCESS; 00084 00085 for(i=0; i<size; i++){ 00086 status |= pio_disable_pio_pin(**piomap); 00087 piomap++; 00088 } 00089 00090 return status; 00091 } 00092 00093 int pio_disable_pio_pin(int pin) 00094 { 00095 avr32_pio_t *pio = (void *) pioGetHandle(pin/32); 00096 00097 pio->pdr |= (1<<(pin%32)); 00098 00099 return PIO_SUCCESS; 00100 }
1.5.1