/*------------------------------------------------------------------- ** ** Soluciones del examen de Programación de Sistemas y Dispositivos ** Curso 2018-19, Primera Convocatoria, 16 de enero de 2019 ** **-----------------------------------------------------------------*/ /*------------------------------------------------------------------- ** Ejercicio 1 **-----------------------------------------------------------------*/ #include #include #include #include #include #include void isr_timer0( void ) __attribute__ ((interrupt ("IRQ"))); volatile boolean flag; volatile int16 ch0, ch1; void main( void ) { sys_init(); timers_init(); uda1341ts_init(); iis_init( IIS_POLLING ); flag = FALSE; timer0_open_tick( isr_timer0, 16000 ); while( 1 ) if( flag ) { IISFIF = ch0; IISFIF = ch1; flag = FALSE; } } void isr_timer0( void ) { ch0 = IISFIF; ch1 = IISFIF; flag = TRUE; I_ISPC = BIT_TIMER0; } /*------------------------------------------------------------------- ** Ejercicio 2 **-----------------------------------------------------------------*/ #include #include #include #include #include uint8 pbs_behavior( uint8 scancode ) { while( PDATG & scancode ); timer3_start_timeout( 10000 ); sw_delay_ms( PB_KEYDOWN_DELAY ); while( !(PDATG & scancode) && !timer3_timeout() ); if( timer3_timeout() ) return 0; sw_delay_ms( PB_KEYUP_DELAY ); return 1; } /*------------------------------------------------------------------- ** Ejercicio 3 **-----------------------------------------------------------------*/ #include #include extern uint8 font[]; void lcd_putchar_wider( uint16 x, uint16 y, uint8 color, char ch ) { uint8 row, col; uint8 *bitmap; bitmap = font + ch*16; for( row=0; row<16; row++) for( col=0; col<16; col++) if( bitmap[row] & (0x80 >> col/2) ) lcd_putpixel( x+col, y+row, color ); else lcd_putpixel( x+col, y+row, WHITE ); } /*------------------------------------------------------------------- ** Ejercicio 4 **-----------------------------------------------------------------*/ #include #include #include #define MCLK ((uint32)64000000U) void uart0_setBaudRate( uint16 baudRate ) { UBRDIV0 = ((MCLK >> 4) / baudRate) - 1; // UBRDIV0 = (MCLK / (baudRate << 4)) - 1; // (MCLK/(baudRate*16)) - 1 }