/*------------------------------------------------------------------- ** ** Soluciones del examen de Programación de Sistemas y Dispositivos ** Curso 2023-24, Primera Convocatoria, 15 de enero de 2024 ** **-----------------------------------------------------------------*/ #include #include #include #include /*------------------------------------------------------------------- ** Ejercicio 1 **-----------------------------------------------------------------*/ #define FS (16000) void isr_timer0( void ) __attribute__ ((interrupt ("IRQ"))); uint32 numSamples; void iis_buzz_ms( uint16 ms ) { numSamples = ms*FS/1000; timer0_open_tick( isr_timer0, FS ); } void isr_timer0( void ) { static int16 sample = MAX_INT16; static int16 sampleCnt = FS / (2*800); if( numSamples-- ) { if( !sampleCnt-- ) { sampleCnt = FS / (2*800); sample = -sample; } iis_putSample( sample, sample ); } else timer0_close(); I_ISPC = BIT_TIMER0; } /*------------------------------------------------------------------- ** Ejercicio 2 **-----------------------------------------------------------------*/ #include #include #include #include #include #include #define DOT (60) #define DASH (3*DOT) void send_s( void ) { led_on( LEFT_LED ); iis_buzz_ms( DOT ); sw_delay_ms( DOT ); led_off( LEFT_LED ); sw_delay_ms( DOT ); led_on( LEFT_LED ); iis_buzz_ms( DOT ); sw_delay_ms( DOT ); led_off( LEFT_LED ); sw_delay_ms( DOT ); led_on( LEFT_LED ); iis_buzz_ms( DOT ); sw_delay_ms( DOT ); led_off( LEFT_LED ); } void send_o( void ) { led_on( LEFT_LED ); iis_buzz_ms( DASH ); sw_delay_ms( DASH ); led_off( LEFT_LED ); sw_delay_ms( DOT ); led_on( LEFT_LED ); iis_buzz_ms( DASH ); sw_delay_ms( DASH ); led_off( LEFT_LED ); sw_delay_ms( DOT ); led_on( LEFT_LED ); iis_buzz_ms( DASH ); sw_delay_ms( DASH ); led_off( LEFT_LED ); } void send_sos( void ) { send_s(); sw_delay_ms( 3*DOT ); send_o(); sw_delay_ms( 3*DOT ); send_s(); sw_delay_ms( 9*DOT ); } void main( void ) { sys_init(); timers_init(); leds_init(); uda1341ts_init(); iis_init( IIS_POLLING ); while( 1 ) send_sos(); }