00001
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038
00039
00040
00041
00042
00043
00044
00045
00046
00047
00048
00049
00050
00051
00052
00053
00054
00055
00056
00057
00058
00059
00060 #include "twi.h"
00061
00062
00063
00064
00065
00066
00067
00068 #define CPU_HZ 20000000
00069
00070
00071 #ifdef __ICCAVR32__
00072 #define AVR32_TWI_SCL_0_PIN 7
00073 #define AVR32_TWI_SCL_0_FUNCTION 0
00074 #define AVR32_TWI_SDA_0_PIN 6
00075 #define AVR32_TWI_SDA_0_FUNCTION 0
00076 #endif
00077
00078 #define WRITE 0
00079 #define READ 0
00080 #define SUCCESS 0
00081 #define ERROR -1
00082
00083 typedef unsigned char avr32_piomap_t[][2];
00084
00085
00086 int pio_enable_module(avr32_piomap_t piomap, unsigned int size);
00087
00088
00089 int main ( void )
00090 {
00091 struct twi_options_t opt;
00092 struct twi_package_t package;
00093
00094 int bytes;
00095 char buf_out[32] = "testing_testing\0";
00096 char buf_in[32];
00097
00098
00099 avr32_piomap_t twi_piomap = { \
00100 {AVR32_TWI_SCL_0_PIN, AVR32_TWI_SCL_0_FUNCTION}, \
00101 {AVR32_TWI_SDA_0_PIN, AVR32_TWI_SDA_0_FUNCTION} \
00102 };
00103
00104 pio_enable_module(twi_piomap, 2);
00105
00106
00107 opt.cpu_hz = CPU_HZ;
00108 opt.speed = 200000;
00109 opt.twi_addr = 0x42;
00110
00111 if( twi_init(&opt) != TWI_SUCCESS )
00112 return ERROR;
00113
00114
00115 if (WRITE){
00116 package.chip = 0x34;
00117 package.addr = package.chip;
00118 package.addr_length = 0;
00119 package.length = 4;
00120 package.buffer = buf_out;
00121
00122 bytes = twi_write(&package);
00123 if(bytes != package.length)
00124 return ERROR;
00125 }
00126
00127
00128 if (READ){
00129 package.chip = 0x34;
00130 package.addr = package.chip;
00131 package.addr_length = 0;
00132 package.length = 13;
00133 package.buffer = buf_in;
00134
00135 bytes = twi_read(&package);
00136 if(bytes != package.length)
00137 return ERROR;
00138 }
00139
00140 return SUCCESS;
00141 }
00142
00143
00153 int pio_enable_module(avr32_piomap_t piomap, unsigned int size)
00154 {
00155 int i;
00156 volatile struct avr32_pio_t *pio;
00157
00158
00159 switch (**piomap/32) {
00160
00161 case 0:
00162 pio = &AVR32_PIOA;
00163 break;
00164 case 1:
00165 pio = &AVR32_PIOB;
00166 break;
00167 case 2:
00168 pio = &AVR32_PIOC;
00169 break;
00170 case 3:
00171 pio = &AVR32_PIOD;
00172 break;
00173 case 4:
00174 pio = &AVR32_PIOE;
00175 break;
00176 default :
00177 return ERROR;
00178
00179 }
00180
00181 for(i=0; i<size; i++){
00182
00183 pio->pdr |= ( 1<<( (**piomap) % 32) );
00184 pio->pudr |= ( 1<<( (**piomap) % 32) );
00185
00186 switch( *(*piomap+1) ){
00187 case 0:
00188 pio->asr |= ( 1<<( (**piomap) % 32) );
00189 break;
00190 case 1:
00191 pio->bsr |= ( 1<<( (**piomap) % 32) );
00192 break;
00193 default:
00194 return ERROR;
00195 }
00196
00197 ++piomap;
00198
00199 }
00200
00201 return SUCCESS;
00202 }