<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
</head>
<body>
To se tedy omlouvám za nadměrnou obecnost poznámky:-)<br>
... jejíž jediné poselství bylo, že ukládání registrů prostě nemůže
trvat tak dlouho a to s víceřádovou rezervou.<br>
<br>
Jsem zvyklý, že když na AVR zacvičím s portem, dostanu na výstupu
Fosc/2, tedy třeba 10 MHz.<br>
<br>
Ale řekl jsem si, že bych si to přerušení moh taky změřit a třeba to
bude někoho dalšího zajímat:<br>
(ATtiny416 na kitu XNANO)<br>
<br>
int main() {<br>
// ....<br>
while (1) {<br>
PORTA.OUTSET = TEST_int + TEST_main;<br>
PORTA.OUTCLR = TEST_main;<br>
PORTA.OUTSET = TEST_int + TEST_main;<br>
PORTA.OUTCLR = TEST_main;<br>
PORTA.OUTSET = TEST_int + TEST_main;<br>
PORTA.OUTCLR = TEST_main;<br>
PORTA.OUTSET = TEST_int + TEST_main;<br>
PORTA.OUTCLR = TEST_main;<br>
PORTA.OUTSET = TEST_int + TEST_main;<br>
PORTA.OUTCLR = TEST_main;<br>
PORTA.OUTSET = TEST_int + TEST_main;<br>
PORTA.OUTCLR = TEST_main;<br>
PORTA.OUTSET = TEST_int + TEST_main;<br>
PORTA.OUTCLR = TEST_main;<br>
PORTA.OUTSET = TEST_int + TEST_main;<br>
PORTA.OUTCLR = TEST_main;<br>
<br>
PORTA.OUTSET = TEST_int + TEST_main;<br>
PORTA.OUTCLR = TEST_main;<br>
PORTA.OUTSET = TEST_int + TEST_main;<br>
PORTA.OUTCLR = TEST_main;<br>
PORTA.OUTSET = TEST_int + TEST_main;<br>
PORTA.OUTCLR = TEST_main;<br>
PORTA.OUTSET = TEST_int + TEST_main;<br>
PORTA.OUTCLR = TEST_main;<br>
PORTA.OUTSET = TEST_int + TEST_main;<br>
PORTA.OUTCLR = TEST_main;<br>
PORTA.OUTSET = TEST_int + TEST_main;<br>
PORTA.OUTCLR = TEST_main;<br>
PORTA.OUTSET = TEST_int + TEST_main;<br>
PORTA.OUTCLR = TEST_main;<br>
PORTA.OUTSET = TEST_int + TEST_main;<br>
PORTA.OUTCLR = TEST_main; <br>
// celkem 2x8 dvojic<br>
}<br>
}<br>
<br>
ISR (TCA0_OVF_vect) { <br>
PORTA.OUTCLR = TEST_int;<br>
PORTA.OUTSET = TEST_int;<br>
PORTA.OUTCLR = TEST_int;<br>
TCA0_SINGLE_INTFLAGS = TCA_SINGLE_OVF_bm;<br>
PORTA.OUTSET = TEST_int;<br>
PORTA.OUTCLR = TEST_int;<br>
}<br>
<br>
Žlutá je TEST_int, modrá TEST_main:<br>
<br>
<img src="cid:part1.suKvl8Op.mQ40unRH@seznam.cz" alt=""><br>
(1. obrázek je zde)<br>
Je vidět, že od přerušení mainu do prvního PORTA.OUTCLR = TEST_int;
uplyne asi 800 ns a na konci asi 1000, nebo víc, ale ten krám neumí
udělat save bez menu.<br>
A taky je vidět, že TCA0_SINGLE_INTFLAGS = trvá déle než běžné
instrukce<br>
<br>
<img src="cid:part2.JYopO51a.2bY04j6G@seznam.cz" alt=""><br>
(2. obrázek zde)<br>
Tady je vpravo vidět kolik v mainu zabere while a že hned po něm je
nejmíň 1 instrukce pomalejší a pak zas pokračuje 10 MHz signál, tedy
20M instrukcí za sekundu.<br>
A alternativní prodloužená doba, co je schovaná pod menu na prvním
obrázku. Rozdíl cca odpovídá tomu zubu od while, tedy předpokládám,
že když se int trefí do JMP, tak obnovení trvá déle.<br>
<br>
Takže jestli má PIC instrukce 4x pomalejší a běží na 2,5x menší
frekvenci, tak se z necelých 2 µs celkové režije stane 20 +nějaké
další možnosti na zpomalení, ale 350 je prostě moc:-)<br>
V každém případě jsem zvědav na finální příčinu a tu tipuju v
nějakých věcech s inicializací hodin, přerušení, nebo jeho zdroje.<br>
<br>
(třetí pokus o odeslání, s menšími obrázky a odřízlým menu. 1 a 2
ale nejdou stornovat, chce kód z mailu, který v něm ale není a asi
to souvisí s chováním browseru k nezabezpečeným webům)<br>
<br>
PH<br>
<br>
<div class="moz-cite-prefix">Dne 01.04.2024 v 17:05 Miroslav Draxal
napsal(a):<br>
</div>
<blockquote type="cite"
cite="mid:000601da8445$fe7d5f10$fb781d30$@cz">
<pre class="moz-quote-pre" wrap="">Fyzicky to běží pod 10MHz nebo jádro běží pod 10MHz?
Pokud to běží pod FOSC pod 10MHz, tak jádro to dělí 4.
Takže při 10Mhz je jedna instrukce 400ns. Čili 350 μs je 875 jednocyklových instrukcí. Více jak polovina instrukcí je dvoucyklových a jsou i třícyklové.
Simuloval jste to nějak v MPLABx?
Jelikož neznáme podrobnosti.....
Míra
-----Original Message-----
From: Hw-list [<a class="moz-txt-link-freetext" href="mailto:hw-list-bounces@list.hw.cz">mailto:hw-list-bounces@list.hw.cz</a>] On Behalf Of Pavel Hudeček
Netuším na jaký frekvenci to běží, ale 350 µs, to je na tisíce instrukcí
při 10 MHz, bylo by hodně blbý, kdyby to nestihlo těch 7 registrů uložit
aspoň 100x:-)
</pre>
</blockquote>
</body>
</html>