pio.c

Go to the documentation of this file.
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 }

Generated on Thu May 10 14:14:48 2007 for AVR321000 Communication with the AVR32 USART by  doxygen 1.5.1