/*------------------------------------------------------------------- ** ** Soluciones del examen de Programación de Sistemas y Dispositivos ** Curso 2015-16, Convocatoria de Septiembre, 14 de septiembre de 2016 ** **-----------------------------------------------------------------*/ /*------------------------------------------------------------------- ** Ejercicio 1 **-----------------------------------------------------------------*/ #include #include #include #include #include #include #include void pbs_rti( void ) __attribute__ ((interrupt ("IRQ"))); volatile boolean flag; void main( void ) { sys_init(); leds_init(); pbs_init(); timers_init(); flag = FALSE; PCONG &= ~(3<<14); // Pulsador derecho: Desconectado del controlador de interrupciones EXTINT = (EXTINT & ~(0xf<<24)) | (7<<24); // Pulsador izquierdo: Both edge triggered pbs_open( pbs_rti ); while( 1 ) if( flag ) { led_toggle( LEFT_LED ); sw_delay_ms( PB_KEYDOWN_DELAY ); while( pb_status( PB_LEFT ) ); sw_delay_ms( PB_KEYUP_DELAY ); flag = FALSE; } } void pbs_rti( void ) { flag = TRUE; EXTINTPND = BIT_LEFTPB; I_ISPC = BIT_PB; } /*------------------------------------------------------------------- ** Ejercicio 2 **-----------------------------------------------------------------*/ #include #define QM 8 ufix16 area( ufix16 perimeter ) { const ufix16 quadruplePi = TOFIX( ufix16, 4*3.141592654, QM ); return FDIV( FMUL( perimeter, perimeter, QM ), quadruplePi, QM ); } /*------------------------------------------------------------------- ** Ejercicio 3 **-----------------------------------------------------------------*/ #include #include #define MCLK ((uint32)64000000U) void uart0_putBaudRate( void ) { uart0_puts( "La velocidad exacta de transmisión de esta UART es de " ); uart0_putint( (MCLK/(UBRDIV0 + 1)) >> 4 ); uart0_puts( " baudios.\n" ); }