Está en la página 1de 3

ExiiJun2018comentado-4.

pdf

PEPA_P_I_G

Informática Industrial

3º Grado en Ingeniería de Tecnologías Industriales

Escuela Superior de Ingeniería


Universidad de Cádiz

Reservados todos los derechos.


No se permite la explotación económica ni la transformación de esta obra. Queda permitida la impresión en su totalidad.
Examen Informática Industrial
Convocatoria Junio 2018
PROBLEMA 1.
Realizar un programa de C para el LPC4088 que continuamente lea un halfword binario natural por el puerto P0[15..0] cuando se
reciba un flanco de subida por el pin P1.0. De este halfword deben obtenerse los caracteres ASCII que representan sus dígitos
decimales y enviarlos por P2[7..0]. Usar el algoritmo de división por 10 y cálculo del resto.
Ejemplo: hw: 2_[0100,1100,1001,1010] -> hw:10_[19610] -> 5_ASCIIBCD [0x31][0x39][0x36][0x31][0x30]

Entradas: P0[15..0] un halfword hw: 2_[0100,1100,1001,1010]


P1.0 flanco de subida
Salidas: P2[7..0] 5 bytes por P2, 5_ASCIIBCD [0x31][0x39][0x36][0x31][0x30]
Funciones: Solo función main
Pasos función main:
-Definir variables
-Declarar pines de salida
-Bucle while indefinido
-Flanco de subida
-Lectura de un hw por P0
-Cálculo del digito BCD y envío del ASCIIBCD por P2. Aquí es donde se aplica el algoritmo de división por 10 y cálculo del
resto dentro de un bucle que se repite 5 veces

PROBLEMA 2.
Realizar un programa de C para el LPC4088 que lea un carácter ASCII-hex por P0 cada 500ms (timer1). Cuando ha recibido 8
caracteres debe convertirlo a número y enviarlo por P1, escribiendo un flanco de subida en P0.15 de 10ms el período. Se debe
definir una función de C para la conversión de una cadena ASCII-hex (8 caracteres) a un número.
Crear una función en ensamblador para convertir el código ASCII en un valor hexadecimal: uint32_t ascii_hex (uint32_t codascii,
uint32_t valor_a_restar). Ejemplo: 8_ASCII:16_[0x31][0x46]…[0x31][0x30] -> w: [0001, 1111,…, 0001,0000]
Para configurar el timer:
1. Resetear el timer 1
2. Activar el bit de interrupción del match 0 en el registro MCR
3. Programar el temporizador para que cuente ms, es decir poner PR a la preescala correspondiente a un PCLK de 60MHz
4. Poner el registro match del timer1 (MR0) a las milésimas de segundo que correspondan.
5. Borrar el indicador de interrupción del MR0 en el IR.
6. Poner en marcha el timer 1 (TCR a 1)
7. Esperar a que se cuenten las milésimas indicadas, testeando el bit IR de MR0.

Entradas: P0[7..0] 8 bytes por P0, 8_ASCII:16_[0x31][0x46]…[0x31][0x30]


Salidas: P0.15 flanco de subida
P1[31..0] un word w: [0001, 1111,…, 0001,0000]
Funciones: (4) main y tres prototipos, retardo, conversión cadena ASCIIhex a número y ensamblador código ASCII a valor numérico
Pasos función main:
-Declaración variables
-Declaración pines de salida
-Bucle while indefinido
-Bucle 8 veces para adquisición de los 8 ASCII con su retardo entre ellos
-Llamada a función conversión cadena a número
-Envío de número por P1
-Envío de flanco de subida, primer semiperíodo a 0
Pasos función retardo: ídem practicas
Pasos función conversión cadena a número:
-Declaración de variables
-Bucle 8 veces para cada carácter
-Bifurcación alternativa para asignar valor a restas (número o letra)
-Llamar a función código ASCII a valor numérico
-Desplazar y acumular
-retornar numero
Pasos función ensamblador: restar al dato (parámetro 1) el número (parámetro 2). Manejar los registros adecuados según el
AAPCS.

a64b0469ff35958ef4ab887a898bd50bdfbbe91a-1673623
Reservados todos los derechos. No se permite la explotación económica ni la transformación de esta obra. Queda permitida la impresión en su totalidad.
PROBLEMA 3.
En una aplicación, un microcontrolador LPC4088 recibe datos desde un convertidor A/D por el canal 2, sincronizado con el flanco
negativo de una señal de reloj que se recibe por el pin P2.0. La entrada analógica corresponde con un sensor de presión que tiene
una precisión de 10 mv/bar. Se debe calcular la presión en unidades físicas (bar) y enviar el word desde el microcontrolador hacia
el exterior a través del puerto P0.
Escribir un programa para el microcontrolador, que funcione como se ha descrito. La recepción de cada dato de entrada
(adquisición analógica) y el envío de cada dato de salida debe hacerse dentro de una función de interrupción que se ejecutará
cada vez que llegue un flanco negativo al pin P2.0. Recuerda que:
1. Las interrupciones de los pines de los puertos P0 y P2 se gestionan a través de la función de servicio de interrupción
GPIO_IRQHandler.
2. Hay que habilitar la interrupción del GPIO (GPIO_IRQn) y programar la prioridad en el NVIC y borrar peticiones pendientes
por seguridad.
3. Para habilitar una interrupción por flanco de bajada en un pin del puerto P2 hay que poner a 1 el bit correspondiente del
registro ENF2. Borrar en el CLR2 algún posible aviso de interrupción.
4. Hay que habilitar las interrupciones en el procesador __enable_irq().
5. Dentro de la función de interrupción, para saber cuál de los pines del puerto P2 ha generado la interrupción, debe
consultarse el registro STATF2 (Es mejor consultarlo siempre, aunque como en este caso sólo un pin del puerto P2 pueda
provocar interrupción).
6. La función de interrupción debe borrar el flag de petición de interrupción del NVIC.

Para la adquisición analógica tener en cuenta:


a) Para configurar el convertidor AD:
1. Seleccionar la función de entrada para P0.25/AD0.2, es decir poner a 1 el bit del P0_25 del IOCON.
2. Activar la alimentación del convertidor, es decir poner el bit 12 de PCONP a 1.
3. Poner el bit 21 de CR a 1 para activar el bit PDN y a partir del bit 8 el valor 59 para programar el reloj del convertidor.
b) Para realizar la adquisición:
1. Seleccionar el canal 2 poniendo el bit 2 de AD0CR a 1
2. Disparar la conversión poniendo el bit 24 de AD0CR a 1
3. Esperar el fin de la conversión testeando el bit AD0GDR_DONE del registro AD0GDR

Entradas: canal 2 ADC


P2.0 flanco de bajada
Salidas: P0[31..0]
Funciones: (2) main y prototipo rutina de servicio de interrupción
Pasos función main:
-Declaración pines de salida
-Configurar pines para interrupciones por flanco de bajada
-Configurar el NVIC
-Configurar el ADC
-Habilitar globalmente las interrupciones
-Bucle indefinido vacío
Pasos función interrupción:
-Comprobación interrupción del correspondiente pin del puerto 2
-Indicar canal y arrancar el ADC
-Esperar a que acabe el convertidor
-Obtener las unidades físicas de la conversión y enviar por P0
-Borrar flag de interrupción en el micro y en el NVIC

PROBLEMA 4.
Realizar un subprograma en ensamblador para el LPC4088, que a partir de un halfword en binario natural, obtenga sus caracteres
hexadecimales. Estos caracteres deben agruparse en un word. La subrutina tiene dos parámetros el dato a convertir y el resultado
de la conversión. Esta subrutina debe cumplir el estándar AAPCS.
Ejemplo: hw:2_[0100,0000,1111,0010] -> w:16_[0x34,0x30,0x46,0x32]

Entrada: dato a convertir (R0) hw:2_[0100,0000,1111,0010]


Salida: resultado de la conversión (R0) w:16[0x34,0x30,0x46,0x32]
Funciones: solo una, el PROC de la conversión (Solo se pide el subprograma)
Pasos: -Preparar contador 4 veces
-Poner a 0 el registro resultado
-Bucle 4 veces, filtrar la entrada para seleccionar los 4 bits deseados y desplazar la entrada para la siguiente pasada
-Sumar valor en función de si es número o letra
-Acumular resultado y rotar para la siguiente pasada
-Comprobar contador y salir de subrutina

a64b0469ff35958ef4ab887a898bd50bdfbbe91a-1673623
Reservados todos los derechos. No se permite la explotación económica ni la transformación de esta obra. Queda permitida la impresión en su totalidad.

También podría gustarte