PS/2 interface a PIC
Napsal: 28 říj 2011, 15:16
Zdravím v tento sváteční den.
Testuju interface počítačové klávesnice PS/2 a mám problém co se týče implementace do PICu.
Prostudoval jsem různé zdroje (zejm. http://www.computer-engineering.org/) ohledně způsobu příjmu dat.
Napsal jsem jednoduchý program, který v přerušení obsluhuje příjem bajtu z klávesnice. V hlavní smyčce se potom přijatý bajt odesílá na UART (přitom se upraví z binární podoby do ASCII, ať můžu zobrazovat data na terminálu).
Pokud by došlo k chybě při přenosu mezi klávesnicí a procesorem, je program vybaven detekcí chyby. Když vznikne chyba, program odešle do terminálu Err, chybu vynuluje a jede dál.
Takhle by to mělo podle kódu fungovat. Jenže program funguje zcela náhodně, odesílá si data, jaká chce a už vůbec to nejsou data z klávesnice. Občas se to i sekne (jen to odešle Err a nějaké nesmysly) a pak pomůže jen reset.
Já už nevím, kde mám hledat chybu. Program jsem prošel instrukci za instrukcí...
Na závěr ještě připojím dotaz, že klávesnice sama o sobě neposílá to, co by měla. V příloze jsou dva scany z osciloskopu. Jeden je při stisku klávesy G. Tento kód neodpovídá ani po negaci žádné z tabulek znakových sad na http://www.computer-engineering.org/ps2 ... odes2.html. Druhý je kód, který klávesnice vyšle, dojde-li k puštění klávesy. Tento kód odpovídá, ale pouze po jeho negaci. Nevím, co si o tom mám myslet. Kde mám chybu?
Testuju interface počítačové klávesnice PS/2 a mám problém co se týče implementace do PICu.
Prostudoval jsem různé zdroje (zejm. http://www.computer-engineering.org/) ohledně způsobu příjmu dat.
Napsal jsem jednoduchý program, který v přerušení obsluhuje příjem bajtu z klávesnice. V hlavní smyčce se potom přijatý bajt odesílá na UART (přitom se upraví z binární podoby do ASCII, ať můžu zobrazovat data na terminálu).
Pokud by došlo k chybě při přenosu mezi klávesnicí a procesorem, je program vybaven detekcí chyby. Když vznikne chyba, program odešle do terminálu Err, chybu vynuluje a jede dál.
Takhle by to mělo podle kódu fungovat. Jenže program funguje zcela náhodně, odesílá si data, jaká chce a už vůbec to nejsou data z klávesnice. Občas se to i sekne (jen to odešle Err a nějaké nesmysly) a pak pomůže jen reset.
Já už nevím, kde mám hledat chybu. Program jsem prošel instrukci za instrukcí...
Na závěr ještě připojím dotaz, že klávesnice sama o sobě neposílá to, co by měla. V příloze jsou dva scany z osciloskopu. Jeden je při stisku klávesy G. Tento kód neodpovídá ani po negaci žádné z tabulek znakových sad na http://www.computer-engineering.org/ps2 ... odes2.html. Druhý je kód, který klávesnice vyšle, dojde-li k puštění klávesy. Tento kód odpovídá, ale pouze po jeho negaci. Nevím, co si o tom mám myslet. Kde mám chybu?