Witam.
Zabrałem się za pisanie biblioteki do obsługi interfejsu SCI w ww. kontrolerze w języku C.
Transmisja i odbiór są realizowane w przerwaniach. Tu mam problem. W procedurze obsługi przerwania wywołanego pojawieniem się odebranego znaku w buforze muszę skasować flagę przerwania (RDRF). Skasować ją można sekwencją:
- odczyt SCISR
- odczyt SCIDR
Robię tak, ale po podejrzeniu wygenerowanego pliku asemblerowego rozdziela mi te dwie operacje innymi:
w C robię tak:
temp = SCISR;
temp = SCIDR;
W asm otrzymuję to:
1823 ; 189 temp = SCISR;
1825 01b4 96 ld x,s
1826 01b5 b640 ld a,_SCISR
1827 01b7 d70103 ld (OFST-1,x),a
1828 ; 190 temp = SCIDR; //read data
1830 01ba 96 ld x,s
1831 01bb b641 ld a,_SCIDR
1832 01bd d70103 ld (OFST-1,x),a
Wie ktoś może jak to zrobić prawidłowo ?
Myślałem o wstawce w asemblerze, ale nie wiem jak się odwołać do zmiennych zadeklarowanych przed nią w C.
Zabrałem się za pisanie biblioteki do obsługi interfejsu SCI w ww. kontrolerze w języku C.
Transmisja i odbiór są realizowane w przerwaniach. Tu mam problem. W procedurze obsługi przerwania wywołanego pojawieniem się odebranego znaku w buforze muszę skasować flagę przerwania (RDRF). Skasować ją można sekwencją:
- odczyt SCISR
- odczyt SCIDR
Robię tak, ale po podejrzeniu wygenerowanego pliku asemblerowego rozdziela mi te dwie operacje innymi:
w C robię tak:
temp = SCISR;
temp = SCIDR;
W asm otrzymuję to:
1823 ; 189 temp = SCISR;
1825 01b4 96 ld x,s
1826 01b5 b640 ld a,_SCISR
1827 01b7 d70103 ld (OFST-1,x),a
1828 ; 190 temp = SCIDR; //read data
1830 01ba 96 ld x,s
1831 01bb b641 ld a,_SCIDR
1832 01bd d70103 ld (OFST-1,x),a
Wie ktoś może jak to zrobić prawidłowo ?
Myślałem o wstawce w asemblerze, ale nie wiem jak się odwołać do zmiennych zadeklarowanych przed nią w C.
