![](/media/cache/profiles/fa7518562603d5c4a7ad69e2e5726f5f.50x50_q85.jpg)
Real Time FIR Filter - Distinctive Excellence award winner :)
touchpad.c@0:b3e50e98acac, 2011-08-13 (annotated)
- Committer:
- Gonzakpo
- Date:
- Sat Aug 13 17:35:52 2011 +0000
- Revision:
- 0:b3e50e98acac
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
Gonzakpo | 0:b3e50e98acac | 1 | |
Gonzakpo | 0:b3e50e98acac | 2 | /* Esta rutina de touchpad esta pensada especificamente para la aplicacion del KaossPad */ |
Gonzakpo | 0:b3e50e98acac | 3 | /* Si se quisiera portar a otro proyecto se deber� agregar una configuracion inicial del ADC */ |
Gonzakpo | 0:b3e50e98acac | 4 | /* As� como esta presupone que el ADC ya est� corriendo (modo BURST) */ |
Gonzakpo | 0:b3e50e98acac | 5 | |
Gonzakpo | 0:b3e50e98acac | 6 | #include "touchpad.h" |
Gonzakpo | 0:b3e50e98acac | 7 | |
Gonzakpo | 0:b3e50e98acac | 8 | /* Configuracion del touchpad */ |
Gonzakpo | 0:b3e50e98acac | 9 | /* |
Gonzakpo | 0:b3e50e98acac | 10 | * AD0.4 OPEN-DRAIN OPEN-DRAIN AD0.5 |
Gonzakpo | 0:b3e50e98acac | 11 | * P1[30] P2[0] P2[1] P1[31] |
Gonzakpo | 0:b3e50e98acac | 12 | * | | | | |
Gonzakpo | 0:b3e50e98acac | 13 | * | _____________|______________ | | |
Gonzakpo | 0:b3e50e98acac | 14 | * | | | | | |
Gonzakpo | 0:b3e50e98acac | 15 | * | | | | | |
Gonzakpo | 0:b3e50e98acac | 16 | * |__________| Touchpad |________| | |
Gonzakpo | 0:b3e50e98acac | 17 | * | | | |
Gonzakpo | 0:b3e50e98acac | 18 | * | | | |
Gonzakpo | 0:b3e50e98acac | 19 | * |____________________________| | |
Gonzakpo | 0:b3e50e98acac | 20 | * | | |
Gonzakpo | 0:b3e50e98acac | 21 | * |______________________________________| |
Gonzakpo | 0:b3e50e98acac | 22 | */ |
Gonzakpo | 0:b3e50e98acac | 23 | |
Gonzakpo | 0:b3e50e98acac | 24 | void init_touchpad() { |
Gonzakpo | 0:b3e50e98acac | 25 | /* P2[0] y P2[1] se configuran como GPIO */ |
Gonzakpo | 0:b3e50e98acac | 26 | LPC_PINCON->PINSEL4 &= ~(((unsigned int)0x3 << 0) | ((unsigned int)0x3 << 2)); |
Gonzakpo | 0:b3e50e98acac | 27 | |
Gonzakpo | 0:b3e50e98acac | 28 | /*Deshabilito todas las R de pullup y pulldown (de P2[0], P2[1], P1[30] y P1[31])*/ |
Gonzakpo | 0:b3e50e98acac | 29 | LPC_PINCON->PINMODE4 |= ((unsigned int)0x2 << 0) | ((unsigned int)0x2 << 2); |
Gonzakpo | 0:b3e50e98acac | 30 | LPC_PINCON->PINMODE3 |= ((unsigned int)0x2 << 28) | ((unsigned int)0x2 << 30); |
Gonzakpo | 0:b3e50e98acac | 31 | |
Gonzakpo | 0:b3e50e98acac | 32 | /* P2[0] y P2[1] se configuran como salidas */ |
Gonzakpo | 0:b3e50e98acac | 33 | LPC_GPIO2->FIODIR |= ((unsigned int)0x1 << 0) | ((unsigned int)0x1 << 1); |
Gonzakpo | 0:b3e50e98acac | 34 | |
Gonzakpo | 0:b3e50e98acac | 35 | /* P2[0] y P2[1] se configuran como Open-Drain */ |
Gonzakpo | 0:b3e50e98acac | 36 | LPC_PINCON->PINMODE_OD2 |= ((unsigned int)0x1 << 0) | ((unsigned int)0x1 << 1); |
Gonzakpo | 0:b3e50e98acac | 37 | |
Gonzakpo | 0:b3e50e98acac | 38 | /* Los pines P1[31] y P1[30] funcionaran tanto como ADC como GPIO |
Gonzakpo | 0:b3e50e98acac | 39 | * y por eso no se configuran inicialmente */ |
Gonzakpo | 0:b3e50e98acac | 40 | } |
Gonzakpo | 0:b3e50e98acac | 41 | |
Gonzakpo | 0:b3e50e98acac | 42 | touchpad_position get_position(void) { |
Gonzakpo | 0:b3e50e98acac | 43 | touchpad_position positions; |
Gonzakpo | 0:b3e50e98acac | 44 | int i; |
Gonzakpo | 0:b3e50e98acac | 45 | |
Gonzakpo | 0:b3e50e98acac | 46 | /* Paro Modo Burst y desactivo canal AD0.0 (del audio) */ |
Gonzakpo | 0:b3e50e98acac | 47 | LPC_ADC->ADCR &= ~(((unsigned int)0x1 << 16) | ((unsigned int)0x1 << 0)); |
Gonzakpo | 0:b3e50e98acac | 48 | |
Gonzakpo | 0:b3e50e98acac | 49 | /* Configuro el touchpad para que me indique la posicion de X */ |
Gonzakpo | 0:b3e50e98acac | 50 | |
Gonzakpo | 0:b3e50e98acac | 51 | LPC_PINCON->PINSEL3 |= ((unsigned int)0x3 << 30); /* P1[31] -> AD0.5 */ |
Gonzakpo | 0:b3e50e98acac | 52 | LPC_PINCON->PINSEL3 &= ~((unsigned int)0x3 << 28); /* P1[30] -> GPIO */ |
Gonzakpo | 0:b3e50e98acac | 53 | LPC_GPIO1->FIODIR |= ((unsigned int)0x1 << 30); /* P1[30] es una salida */ |
Gonzakpo | 0:b3e50e98acac | 54 | |
Gonzakpo | 0:b3e50e98acac | 55 | LPC_GPIO2->FIOCLR |= ((unsigned int)0x1 << 1); /* Pongo en 0 el pin P2[1] */ |
Gonzakpo | 0:b3e50e98acac | 56 | LPC_GPIO2->FIOSET |= ((unsigned int)0x1 << 0); /* Pongo en 1 el pin P2[0] */ |
Gonzakpo | 0:b3e50e98acac | 57 | LPC_GPIO1->FIOSET |= ((unsigned int)0x1 << 20); /* Pongo en 1 el pin P1[30] */ |
Gonzakpo | 0:b3e50e98acac | 58 | |
Gonzakpo | 0:b3e50e98acac | 59 | /* Delay de 1uS aprox. para que se estabilizen las lineas */ |
Gonzakpo | 0:b3e50e98acac | 60 | for (i = 0; i < 100; i++); |
Gonzakpo | 0:b3e50e98acac | 61 | |
Gonzakpo | 0:b3e50e98acac | 62 | /* Activo canal AD0.5 (coordenada X) */ |
Gonzakpo | 0:b3e50e98acac | 63 | LPC_ADC->ADCR |= ((unsigned int)0x1 << 5); |
Gonzakpo | 0:b3e50e98acac | 64 | |
Gonzakpo | 0:b3e50e98acac | 65 | /* Comienzo la conversion */ |
Gonzakpo | 0:b3e50e98acac | 66 | LPC_ADC->ADCR |= ((unsigned int)0x1 << 24); |
Gonzakpo | 0:b3e50e98acac | 67 | |
Gonzakpo | 0:b3e50e98acac | 68 | /* Espero a que se complete la conversion */ |
Gonzakpo | 0:b3e50e98acac | 69 | while ( (LPC_ADC->ADDR5 & 0x80000000) == 0x0 ) { |
Gonzakpo | 0:b3e50e98acac | 70 | } |
Gonzakpo | 0:b3e50e98acac | 71 | |
Gonzakpo | 0:b3e50e98acac | 72 | /* Almaceno la posicion X */ |
Gonzakpo | 0:b3e50e98acac | 73 | positions.pos_x = ((LPC_ADC->ADDR5 & ((unsigned int)0x7 << 12)) >> 12 ); |
Gonzakpo | 0:b3e50e98acac | 74 | |
Gonzakpo | 0:b3e50e98acac | 75 | /* Desactivo canal AD0.5 (coordenada X) */ |
Gonzakpo | 0:b3e50e98acac | 76 | LPC_ADC->ADCR &= ~((unsigned int)0x1 << 5); |
Gonzakpo | 0:b3e50e98acac | 77 | |
Gonzakpo | 0:b3e50e98acac | 78 | /* Configuro el touchpad para que me indique la posicion de Y */ |
Gonzakpo | 0:b3e50e98acac | 79 | |
Gonzakpo | 0:b3e50e98acac | 80 | LPC_PINCON->PINSEL3 &= ~((unsigned int)0x3 << 30); /* P1[31] -> GPIO */ |
Gonzakpo | 0:b3e50e98acac | 81 | LPC_PINCON->PINSEL3 |= ((unsigned int)0x3 << 28); /* P1[30] -> AD0.4 */ |
Gonzakpo | 0:b3e50e98acac | 82 | LPC_GPIO1->FIODIR |= ((unsigned int)0x1 << 31); /* P1[31] es una salida */ |
Gonzakpo | 0:b3e50e98acac | 83 | |
Gonzakpo | 0:b3e50e98acac | 84 | LPC_GPIO2->FIOSET |= ((unsigned int)0x1 << 1); /* Pongo en 1 el pin P2[1] */ |
Gonzakpo | 0:b3e50e98acac | 85 | LPC_GPIO2->FIOCLR |= ((unsigned int)0x1 << 0); /* Pongo en 0 el pin P2[0] */ |
Gonzakpo | 0:b3e50e98acac | 86 | LPC_GPIO1->FIOSET |= ((unsigned int)0x1 << 31); /* Pongo en 1 el pin P1[31] */ |
Gonzakpo | 0:b3e50e98acac | 87 | |
Gonzakpo | 0:b3e50e98acac | 88 | /* Delay de 1uS aprox. para que se estabilizen las lineas */ |
Gonzakpo | 0:b3e50e98acac | 89 | for (i = 0; i < 100; i++); |
Gonzakpo | 0:b3e50e98acac | 90 | |
Gonzakpo | 0:b3e50e98acac | 91 | /* Activo canal AD0.4 (coordenada Y) */ |
Gonzakpo | 0:b3e50e98acac | 92 | LPC_ADC->ADCR |= ((unsigned int)0x1 << 4); |
Gonzakpo | 0:b3e50e98acac | 93 | |
Gonzakpo | 0:b3e50e98acac | 94 | /* Comienzo la conversion */ |
Gonzakpo | 0:b3e50e98acac | 95 | LPC_ADC->ADCR |= ((unsigned int)0x1 << 24); |
Gonzakpo | 0:b3e50e98acac | 96 | |
Gonzakpo | 0:b3e50e98acac | 97 | /* Espero a que se complete la conversion */ |
Gonzakpo | 0:b3e50e98acac | 98 | while ( (LPC_ADC->ADDR4 & (unsigned int)0x80000000) == (unsigned int)0x0 ) { |
Gonzakpo | 0:b3e50e98acac | 99 | } |
Gonzakpo | 0:b3e50e98acac | 100 | |
Gonzakpo | 0:b3e50e98acac | 101 | /* Almaceno la posicion Y */ |
Gonzakpo | 0:b3e50e98acac | 102 | positions.pos_y = (((LPC_ADC->ADDR4) & ((unsigned int)0xF << 12)) >> 12 ); |
Gonzakpo | 0:b3e50e98acac | 103 | |
Gonzakpo | 0:b3e50e98acac | 104 | /* Desactivo canal AD0.4 (coordenada Y) */ |
Gonzakpo | 0:b3e50e98acac | 105 | LPC_ADC->ADCR &= ~((unsigned int)0x1 << 4); |
Gonzakpo | 0:b3e50e98acac | 106 | |
Gonzakpo | 0:b3e50e98acac | 107 | /* Restauro configuracion del ADC */ |
Gonzakpo | 0:b3e50e98acac | 108 | |
Gonzakpo | 0:b3e50e98acac | 109 | /* Activo canal AD0.0 (del audio) */ |
Gonzakpo | 0:b3e50e98acac | 110 | LPC_ADC->ADCR |= ((unsigned int)0x1 << 0); |
Gonzakpo | 0:b3e50e98acac | 111 | |
Gonzakpo | 0:b3e50e98acac | 112 | /* Activo modo Burst */ |
Gonzakpo | 0:b3e50e98acac | 113 | LPC_ADC->ADCR |= ((unsigned int)0x1 << 16); |
Gonzakpo | 0:b3e50e98acac | 114 | |
Gonzakpo | 0:b3e50e98acac | 115 | |
Gonzakpo | 0:b3e50e98acac | 116 | return positions; |
Gonzakpo | 0:b3e50e98acac | 117 | } |