/*------------------------------------------------------------------- ** ** Soluciones del examen de Programación de Sistemas y Dispositivos ** Curso 2024-25, Primera Convocatoria, 20 de diciembre de 2024 ** **-----------------------------------------------------------------*/ /*------------------------------------------------------------------- ** Ejercicio 1 **-----------------------------------------------------------------*/ Podría ser cualquier dirección de la forma 010X.XXXX.XXXX.XXXX.XXXX.XXXX.XXXX #define SEGS (*(volatile uint8 *)0x4000000) /*------------------------------------------------------------------- ** Ejercicio 2 **-----------------------------------------------------------------*/ Podría conectarse a cualquier pin libre (PA0, PB7, PC7, PC6, PC5, etc) No es necesario hacer ningun cambio en port_init() porque los puertos libres los configura como salidas /*------------------------------------------------------------------- ** Ejercicio 3 **-----------------------------------------------------------------*/ ULCON0 = (0 << 6) | (4 << 3) | (0 << 2) | (3); // normal (no infrarojos), paridad impar, 1 bit de stop, 8 bits de datos UBRDIV0 = 1666; // 2400 baudios asumiendo 64MHz /*------------------------------------------------------------------- ** Ejercicio 4 **-----------------------------------------------------------------*/ INTMSK |= BIT_TICK; // Enmascara la interrupción por TICK TICNT &= ~(1<<7); // Deshabilita la generación de ticks /*------------------------------------------------------------------- ** Ejercicio 5 **-----------------------------------------------------------------*/ 300 ms /*------------------------------------------------------------------- ** Ejercicio 6 **-----------------------------------------------------------------*/ 682.625 /*------------------------------------------------------------------- ** Ejercicio 7 **-----------------------------------------------------------------*/ create_task( Task, 5 ); timer0_open_tick( scheduler, 100 ); /*------------------------------------------------------------------- ** Ejercicio 8 **-----------------------------------------------------------------*/ OS_EVENT *mbox; /* Declara el buzón */ void main( void ) { ... mbox = OSMboxCreate( NULL ); /* Crea el buzón */ ... } void Task1( void *id ) { int32 num; num = 0; while( 1 ) { OSMboxPost( mbox, (void *) &num ); num = (num + 1) % 100; OSTimeDly( 5 ); } } void Task2( void *id ) { INT8U err; num = *((int32 *) OSMboxPend( mbox, 0, &err )); OSTimeDly( 5 ); } /*------------------------------------------------------------------- ** Ejercicio 9 **-----------------------------------------------------------------*/ void iis_playWawFileFrom( int16 *wav, uint32 from, uint32 to ) { uint32 size; char *p; p = (char *) wav; while ( !(p[0] == 'd' && p[1] == 'a' && p[2] == 't' && p[3] == 'a') ) // busca el chunck data p++; p += 4; // extrae el tamaño little endian size = p[0] + (p[1] << 8) + (p[2] << 16) + (p[3] << 24); // los datos de cabecera están en little-endian p += 4; if( from