Změřil jsem fungování rutiny přerušení, která tiskne na standardní výstup. Měření frekvence je provedeno datovým analyzátorem, fungování rutiny přerušení pomocí funkce printf na standarní výstup.
Měřený program
#include <stdio.h>
#include "pico/stdlib.h"
uint64_t t;
void MyIRQHandler( uint gpio, uint32_t events )
{
t = time_us_64();
printf("GPIO %d %X %d \n", gpio, events, t);
}
int main()
{
stdio_init_all();
gpio_set_function( 22, GPIO_FUNC_SIO );
gpio_set_dir( 22, false );
gpio_pull_down( 22 );
gpio_set_irq_enabled_with_callback( 22, GPIO_IRQ_EDGE_RISE | GPIO_IRQ_EDGE_FALL, true, &MyIRQHandler );
while( 1 )
{
printf("delam cosi\n\r");
};
return 0;
}
Zdroj vstupního signálu
/* pwm.c
* Zdroj signalu obdelnikoveho pruberu pomoci PWM
*/
#include "pico/stdlib.h"
#include "hardware/pwm.h"
uint32_t pwm_set_freq_duty( uint slice_num, uint chan, uint32_t f, int d)
{
uint32_t clock = 125000000;
uint32_t divider16 = clock / f / 4096 + (clock % (f * 4096) != 0);
if( divider16 / 16 == 0) {
divider16 = 16;
}
uint32_t wrap = clock * 16 / divider16 / f - 1;
pwm_set_clkdiv_int_frac( slice_num, divider16/16, divider16 & 0xf );
pwm_set_wrap( slice_num, wrap );
pwm_set_chan_level( slice_num, chan, wrap * d/100 );
return wrap;
}
uint8_t pin = 16;
int main()
{
gpio_set_function(pin, GPIO_FUNC_PWM);
uint slice = pwm_gpio_to_slice_num (pin);
uint channel = pwm_gpio_to_channel (pin);
pwm_set_freq_duty(slice, channel, 8000, 50); (1)
pwm_set_enabled (slice, true);
return 0;
}
| 1 | Nastavení frkvence a duty, zde 8000 Hz a 50% |
Zapojení obvodu
Detail zapojení
50 Hz vstup
Vstupní frekvence 50 Hz

Čtení standardního výstupu (minicom -b 115200 -D /dev/ttyACM0)
delam cosi
delam cosi
delam cosi
delam cosi
delam cosi
delam cosi
delam cosi
delam cosi
delam cosi
delam cosi
delam cosi
delam cosi
delam cosi
delam cosi
delam cosi
delam cosi
delam cosi
delam cosi
delam cosi
delam cosi
delam cosi
delam cosi
delam cosi
delam cosi
delam cosi
delam cosi
delam cosi
delam cosi
delam cosi
delam cosi
delam cosi
delam cosi
delam cosi
delam cosi
delam cosi
delam cosi
delam cosi
delam cosi
delam cosi
GPIO 22 8 1308664
delam cosi
delam cosi
delam cosi
delam cosi
delam cosi
delam cosi
delam cosi
delam cosi
delam cosi
delam cosi
delam cosi
delam cosi
delam cosi
delam cosi
delam cosi
delam cosi
delam cosi
delam cosi
delam cosi
delam cosi
delam cosi
delam cosi
delam cosi
delam cosi
delam cosi
delam cosi
delam cosi
delam cosi
delam cosi
delam cosi
delam cosi
delam cosi
delam cosi
delam cosi
400 Hz vstup
Vstupní frekvence 400 Hz

minicom -b 115200 -D /dev/ttyACM0
delam cosi
delam cosi
delam cosi
GPIO 22 4 33792546
delam cosi
delam cosi
delam cosi
delam cosi
delam cosi
delam cosi
delam cosi
delam cosi
delam cosi
delam cosi
delam cosi
delam cosi
delam cosi
delam cosi
delam cosi
delam cosi
delam cosi
delam cosi
delam cosi
GPIO 22 8 33793796
delam cosi
delam cosi
delam cosi
delam cosi
delam cosi
delam cosi
delam cosi
delam cosi
delam cosi
delam cosi
delam cosi
delam cosi
delam cosi
delam cosi
delam cosi
delam cosi
delam cosi
delam cosi
delam cosi
delam cosi
GPIO 22 4 33795046
delam cosi
delam cosi
delam cosi
delam cosi
delam cosi
delam cosi
delam cosi
delam cosi
delam cosi
delam cosi
delam cosi
delam cosi
delam cosi
delam cosi
delam cosi
delam cosi
delam cosi
delam cosi
GPIO 22 8 33796296
delam cosi
delam cosi
delam cosi
delam cosi
delam cosi
delam cosi
delam cosi
delam cosi
1 kHz vstup
Vstupní frekvence 1 kHz

minicom -b 115200 -D /dev/ttyACM0
delam cosi
delam cosi
delam cosi
GPIO 22 8 48505490
delam cosi
delam cosi
delam cosi
delam cosi
delam cosi
delam cosi
delam cosi
delam cosi
delam cosi
delam cosi
delam cosi
delam cosi
delam cosi
delam cosi
delam cosi
delam cosi
delam cosi
delam cosi
delam cosi
GPIO 22 4 48506991
delam cosi
delam cosi
delam cosi
delam cosi
delam cosi
delam cosi
delam cosi
delam cosi
GPIO 22 8 48507491
delam cosi
delam cosi
delam cosi
delam cosi
delam cosi
delam cosi
delam cosi
delam cosi
delam cosi
delam cosi
delam cosi
delam cosi
delam cosi
delam cosi
delam cosi
delam cosi
delam cosi
delam cosi
delam cosi
delam cosi
delam cosi
delam cosi
delam cosi
delam cosi
delam cosi
delam cosi
delam cosi
delam cosi
GPIO 22 8 48509491
delam cosi
delam cosi
delam cosi
delam cosi
delam cosi
delam cosi
delam cosi
delam cosi
delam cosi
delam cosi
delam cosi
delam cosi
delam cosi
2 kHz vstup

minicom -b 115200 -D /dev/ttyACM0
delam cosi
delam cosi
delam cosi
delam cosi
delam cosi
delam cosi
delam cosi
delam cosi
GPIO 22 4 62669965
delam cosi
delam cosi
delam cosi
delam cosi
delam cosi
GPIO 22 4 62670464
delam cosi
delam cosi
delam cosi
delam cosi
GPIO 22 8 62670715
delam cosi
delam cosi
delam cosi
delam cosi
delam cosi
GPIO 22 8 62671219
delam cosi
delam cosi
GPIO 22 4 62671464
delam cosi
delam cosi
delam cosi
delam cosi
delam cosi
delam cosi
delam cosi
delam cosi
delam cosi
delam cosi
GPIO 22 8 62672214
delam cosi
delam cosi
delam cosiGPIO 22 4 62672463
delam cosi
delam cosi
delam cosi
delam cosi
delam cosi
delam cosi
delam cosi
delam cosi
delam cosi
delam cosi
delam cosi
delam cosi
GPIO 22 4 62673468
delam cosi
delam cosi
delam cosi
delam cosi
delam cosi
delam cosi
delam cosi
delam cosi
delam cosi
delam cosi
delam cosi
4 KHz vstup
Vstupní frekvence 4 kHz

minicom -b 115200 -D /dev/ttyACM0
delam cosi
delam cosi
GPIO 22 4 16927371
GPIO 22 8 16927503
delam cosi
delam cosi
delam cosi
GPIO 22 4 16927876
delam cosi
delam cosi
delam cosi
delam cosi
delam cosi
GPIO 22 8 16928265
GPIO 22 4 16928372
delam cosi
delam cosi
delam cosi
delam cosi
delam cosi
delam cosiGPIO 22 8 16928992
delam cosi
delam cosi
delam cosi
delam cosi
GPIO 22 4 16929371
delam cosiGPIO 22 8 16929501
GPIO 22 4 16929620
delam cosiGPIO 22 8 16929747
GPIO 22 4 16929870
delam cosi
delam cosi
delam cosi
delam cosi
delam cosi
GPIO 22 8 16930247
delam cosi
GPIO 22 8 16930496
delam cosi
delam cosiGPIO 22 8 16930747
GPIO 22 4 16930874
delam cosi
GPIO 22 8 16930994
delam cosi
delam cosi
GPIO 22 4 16931118
delam cosi
delam cosi
GPIO 22 4 16931370
delam cosi
delam cosi
delam cosi
delam cosi
delam cosi
GPIO 22 8 16931995
delam cosi
delam cosi
delam cosi
GPIO 22 8 16932251
delam cosi
delam cosi
delam cosi
GPIO 22 4 16932624
GPIO 22 8 16932754
delam cosiGPIO 22 4 16932870
delam cosi
delam cosi
delam cosi
delam cosi
8 KHz vstup
Vstuppní frekvence 8 kHz

minicom -b 115200 -D /dev/ttyACM0
GPIO 22 8 23224515
GPIO 22 4 23224572
GPIO 22 8 23224631
GPIO 22 4 23224701
GPIO 22 8 23224760
GPIO 22 4 23224829
GPIO 22 8 23224887
GPIO 22 4 23224956
GPIO 22 8 23225017
GPIO 22 4 23225084
GPIO 22 8 23225142
GPIO 22 4 23225211
GPIO 22 8 23225270
GPIO 22 4 23225338
GPIO 22 8 23225395
GPIO 22 4 23225464
GPIO 22 8 23225515
GPIO 22 4 23225571
GPIO 22 8 23225628
GPIO 22 4 23225696
GPIO 22 8 23225756
GPIO 22 4 23225824
GPIO 22 8 23225881
GPIO 22 4 23225951
GPIO 22 8 23226010
GPIO 22 4 23226079
GPIO 22 8 23226136
GPIO 22 4 23226206
GPIO 22 8 23226264
GPIO 22 4 23226331
GPIO 22 8 23226388
GPIO 22 4 23226455
GPIO 22 8 23226506
GPIO 22 4 23226565
GPIO 22 8 23226641
GPIO 22 4 23226701
GPIO 22 8 23226768
GPIO 22 4 23226827
GPIO 22 8 23226897
GPIO 22 4 23226955
GPIO 22 8 23227025
GPIO 22 4 23227081
GPIO 22 8 23227149
GPIO 22 4 23227206
GPIO 22 8 23227275
GPIO 22 4 23227333
GPIO 22 8 23227400
GPIO 22 4 23227452
GPIO 22 8 23227503
delam cosi
GPIO 22 8 23227753
GPIO 22 4 23227835
GPIO 22 8 23227892
GPIO 22 4 23227964
GPIO 22 8 23228024
GPIO 22 4 23228093
GPIO 22 8 23228152
GPIO 22 4 23228221
GPIO 22 8 23228278
GPIO 22 4 23228347
GPIO 22 8 23228408
GPIO 22 4 23228474
GPIO 22 8 23228529
GPIO 22 4 23228587
GPIO 22 8 23228661
GPIO 22 4 23228749
GPIO 22 8 23228812
GPIO 22 C 23228886
GPIO 22 4 23228949
GPIO 22 8 23229019
GPIO 22 4 23229077
GPIO 22 8 23229148
GPIO 22 4 23229207
GPIO 22 8 23229274
GPIO 22 4 23229333
GPIO 22 8 23229401
GPIO 22 4 23229456
GPIO 22 8 23229506
GPIO 22 4 23229564
GPIO 22 8 23229643
GPIO 22 4 23229702
GPIO 22 8 23229771
GPIO 22 4 23229831
GPIO 22 8 23229902
GPIO 22 4 23229961
GPIO 22 8 23230030
GPIO 22 4 23230087
GPIO 22 8 23230159
GPIO 22 4 23230218
GPIO 22 8 23230286
GPIO 22 4 23230344
GPIO 22 8 23230412
GPIO 22 4 23230464
GPIO 22 8 23230514
GPIO 22 4 23230572
GPIO 22 8 23230630
GPIO 22 4 23230699
GPIO 22 8 23230762
GPIO 22 4 23230832
GPIO 22 8 23230893
GPIO 22 4 23230962
GPIO 22 8 23231022
GPIO 22 4 23231093
GPIO 22 8 23231152
GPIO 22 4 23231225
GPIO 22 8 23231283
GPIO 22 4 23231352
GPIO 22 8 23231414
GPIO 22 4 23231483
GPIO 22 8 23231536
GPIO 22 4 23231593
4KHz a 20% duty
Přerušení přerušuje obsluhu přerušení:
Obsluha preruseni: GPIO 2Obsluha preruseni: GPIO 22 C 43902247
Obsluha preruseni: GPIO Obsluha preruseni: GPIO 22 C 44402417
Obsluha preruseni: GPIO Obsluha preruseni: GPIO 22 C 44902584
Obsluha preruseni: GPIO Obsluha preruseni: GPIO 22 C 45402759
Obsluha preruseni: GPIO Obsluha preruseni: GPIO 22 C 45902929
Obsluha preruseni: GPIO Obsluha preruseni: GPIO 22 C 46403096
Obsluha preruseni: GPIO Obsluha preruseni: GPIO 22 C 46903263
Obsluha preruseni: GPIO Obsluha preruseni: GPIO 22 C 47403429
Obsluha preruseni: GPIO Obsluha preruseni: GPIO 22 C 47903594
Funkce main: delam cosi ...
Obsluha preruseni: GPIO 22 8 47903894
Obsluha preruseni: GPIO 22 4 47903966
Obsluha preruseni: GPIO 22 8 47904063
Obsluha preruseni: GPIO 22 4 47904137
Obsluha preruseni: GPIO 2Obsluha preruseni: GPIO 22 C 48404322
Obsluha preruseni: GPIO Obsluha preruseni: GPIO 22 C 48904504
Obsluha preruseni: GPIO Obsluha preruseni: GPIO 22 C 49404677