SearchUser loginSyndicate |
Neo1973 GTA01B4: API para los timer PWM del s3c2410 (es)
Presentamos en este artículo la primera aportación práctica de kernel-labs.org al proyecto OpenMoko. La aportación ha consistido en dotar de soporte genérico a los timers PWM del microcontrolador, que dirige al teléfono Neo1973 y modificar algunos drivers, ya existentes, para el uso de este API genérico.
Los parches han sido aceptados por el líder técnico del proyecto,Harald Welte, por tanto, el equipo de kernel-labs.org puede considerarse en estos momentos como contribuidor voluntario del kernel Linux del proyecto OpenMoko. IntroducciónEl enfoque del artículo es púramente técnico y conciso, no profundizaremos en ningún aspecto, pues el objetivo es proporcionar una descripción breve del desarrollo acometido. El objetivo del desarrollo ha sido crear un API genérico para los timer PWM del microcontrolador de Samsung. Con este API modificar dos drivers exsitentes, el driver encargado de la iluminación del LCD del Neo1973 y el driver que produce la vibración del móvil.ProcesadorLa cabeza pensante del teléfono Neo1973 en su versión GTA01Bv4 es un microcontrolador SAMSUNG SoC Mobile S3C2410 RISC 16/32 bits. Es implementado con un core ARM920T RISC 16/32 bits. Entre otras cosas, se caracteriza por disponer de MMU, bus AMBA (Adavanced Microcontroller Bus Architecture), arquitectura de cache Hardvard con 16KB para instrucciones y 16KB para datos de cache, cada una con una palabra de 8 bits, etcétera.
GPIO: General Purpose Input/OutputEl General Purpose Input/Output o Bus Expander, es una técnica hardware muy usada en microcontroladores que adecuadamente cableada por el diseño de la electrónica del componente y adecuadamente programada mediante software, permite el control de distintos componentes del sistema. Su objetivo es expandir los puertos de entrada y salida del microcontrolador. Se conectan los pines del GPIO a diversos componentes, como LEDs, timers, etc, y de esta forma un pin del GPIO puede ser usado como pin de entrada para leer un switch, otro puede ser usado como pin de salida para escribir en una EEPROM, para activar un LED. En definitiva, cualquier uso para escribir/leer en los componentes que el diseñador del hardware haya considerado. El S3C2410A tiene 117 puertos de E/S multifuncionales. Son los siguientes:
Especialmente nos iteresan el puerto GPIO GPB0 y el puerto GPB3, que son pines configurados para escribir en el controlador backlight del LCD del Neo1973, y para escribir en el controlador del motor de vibración, respectivamente. PWM: Pulse Width ModulationComo hemos dicho, el objetivo del desarrollo, es la creación de un API genérico para el uso de los timer con capacidad PWM del microcontrolador. De esta forma, este API puede ser usado por los drivers que necesiten configurar dichos timers, actualmente los drivers gta01-backlight y gta01-vibrator. Describimos a continuación que es el PWM o Modulación por Anchura de Pulsos.Pulse Width Modulation (PWM) es una técnica usada para controlar circuitos analógicos con las salidas digitales de un procesador. Los circuitos analógicos presentan estados no discretos, tanto en valores como en el tiempo. Por ejemplo una batería de nueve voltios (9 V) raramente dará estados de nueve voltios, su valor cambiará con el tiempo y su rango de valores puede ser infinito, es decir, el conjunto de valores que puede presentar la señal analógica de la barería no es finito. Por el contrario las señales digitales siempre presentan un conjunto de valores predeterminado y finito, como por ejemplo 0 V o 5 V. Los voltajes analógicos son con frecuencia usados para controlar elementos electrónicos directamente, como el volumen de un reproductor, la frecuencia de una emisora de radio analógica, etc. El esquema habitual es un selector conectado a un resistor que aumenta o disminuye la resistencia, de forma que el voltaje es aumentado o disminuido, presumiblemente aumentando o disminyendo el volumen. El volumen es el elemento electrónico analógico cuya salida es linealmente proporcional a la entrada. Los circuitos analógicos suelen perder la precision (sus propiedades) con el tiempo y son muy vulnerables al ruido. Para lograr precisión es necesario circuitos analógicos de precisión que suelen ser muy caros y propensos a generar calor, que hacen necesario grandes disipadores. Existe una solución que consiste en controlar dispositivos analógicos con señales digitales, que reducen el coste y el consumo de potencia al mínimo. Es habitual que los microcontroladores y DSP actuales tengan elementos digitales para tal propósito, son los PWM. Con un PWM se pueden codificar niveles de señal analógica digitalmente. Mediante contadores de alta resolución el ciclo de servicio (duty cicle) de una onda cuadrada es modulado para codificar niveles de señal analógica específicos. El ciclo de servicio o rendimiento de cualquier forma de onda rectangular se refiere al porcentaje del ciclo de la señal que permanece alto, en lógica 1. Si la señal pasa la mitad de su tiempo en lógica 1 y la otra mitad en lógica 0, tenemos una forma de onda con un ciclo de servicio o rendimiento del 50%. Esto describiría una onda perfecta, una onda simétrica cuadrada. El voltaje es proporcionado a la carga analógica mediante una serie de repetiones de pulsos ON y OFF (o pulsos en lógica 1 y 0). El tiempo del pulso en lógica 1 es el voltaje aplicado al dispositivo analógico, el tiempo en lógica negativa es el tiempo del voltaje a cero. Dado un ancho de banda adecuado se puede suministrar cualquier valor de voltaje analógico.
Los timer PWM del S3C2410El MCU s3c2410 tiene cinco timers programables, 4 de ellos tienen la función PWM (timer0, timer1, timer2, timer3) , y el quinto (timer4) no tiene linea de salida, es para uso interno.La labor del equipo de kernel-labs.org para este desarrollo, ha sido la habitual para el desarrollo de dispositivos empotrados: lectura exahustiva de la especificación del microcontrolador del fabricante. Hay que entender perfectamente el modo de operar del dispositivo en cuestion. Registros, bytes, palabras, DMAs, modos de operación son los elementos en juego para hacer funcionar el dispositivo; entender la especificación del fabricante no siempre es una tarea sencilla. No profundizaremos en la especificación del fabricante, para lectores interesados pueden proceder a su descarga en: um_s3c2410a_rev11.pdf Compilar el kernel para desarrolloBrevemente enumeramos los pasos dados para perparar el entorno de desarrollo y la creación de la imagen del kernel para las pruebas.
El códigoNo entraremos en la descripción del código aportado y/o modificado, para no extendernos. Los parches se enumeran a continuación:
login to post comments
|