Hw interrupt a assembler
Napsal: 23 bře 2022, 12:48
Ahoj
potřeboval bych, jak jinak, radu.
Vyrobil jsem si odměřování k soustruhu, dva 7 seg. displeje s MAX7912, nějaká tlačítka a numerická klávesnice.
Bastlířská hrdost mi nedovolila nákup v Číně...
Vše zašroubováno v krabici a pěkně pohromadě, protože když nechám hw nakonec, tak to nikdy nedopadne...
Vstupem jsou od dvou senzorů, dvakrát dva kvadraturní TTL signály zavedené přes 74LS14 na čtyři hw INT vstupy Arduina.
Proto jsem použil Arduino Micro.
V programu čtu přes čtyři přerušení každou hranu a podle stavu na druhém pinu počítám dráhu.
Problém je, že přeložený kód Arduina krutě nestíhá.
V ISR mám zjištění stavu pinů, inkrement registru a návrat.
Pomocí avr-objdump jsem v zoufalství disassembloval projekt a tolik tun vaty nejen kolem interruptu, ale i třeba zápisu na port jsem nečekal...
Otázka je, jak do projektu Arduina vpašovat nastavení INT0 až INT3 mimo režii kompilátoru na úrovni práce s registry, jak definovat osm jednoduchých ISR v Assembleru a jak (kde) mít dvě styčné globální proměnné DWORD (32bitů) ?
Už jsem byl nachystán na berličku na straně hardware, ale když jsem viděl co leze z kompilátoru, tak
Popravdě přepisovat celý projekt ze sketche do asm se mi vůbec nechce.
Díky
potřeboval bych, jak jinak, radu.
Vyrobil jsem si odměřování k soustruhu, dva 7 seg. displeje s MAX7912, nějaká tlačítka a numerická klávesnice.
Bastlířská hrdost mi nedovolila nákup v Číně...
Vše zašroubováno v krabici a pěkně pohromadě, protože když nechám hw nakonec, tak to nikdy nedopadne...
Vstupem jsou od dvou senzorů, dvakrát dva kvadraturní TTL signály zavedené přes 74LS14 na čtyři hw INT vstupy Arduina.
Proto jsem použil Arduino Micro.
V programu čtu přes čtyři přerušení každou hranu a podle stavu na druhém pinu počítám dráhu.
Problém je, že přeložený kód Arduina krutě nestíhá.
V ISR mám zjištění stavu pinů, inkrement registru a návrat.
Pomocí avr-objdump jsem v zoufalství disassembloval projekt a tolik tun vaty nejen kolem interruptu, ale i třeba zápisu na port jsem nečekal...
Otázka je, jak do projektu Arduina vpašovat nastavení INT0 až INT3 mimo režii kompilátoru na úrovni práce s registry, jak definovat osm jednoduchých ISR v Assembleru a jak (kde) mít dvě styčné globální proměnné DWORD (32bitů) ?
Už jsem byl nachystán na berličku na straně hardware, ale když jsem viděl co leze z kompilátoru, tak
Popravdě přepisovat celý projekt ze sketche do asm se mi vůbec nechce.
Díky