Микроконтролери и електроника
http://mcu-bg.com/mcu_site/

18F и Hardware Stack
http://mcu-bg.com/mcu_site/viewtopic.php?f=3&t=1030
Страница 1 от 1

Автор:  Bezmozachen [ Пон Сеп 19, 2005 3:32 pm ]
Заглавие:  18F и Hardware Stack

Един интересен проблем на който се натъкнах и за когото трябва да се внимава. По принцип в datasheets на Microchip изрично е споменато, когато се пипа TOS всички прекъсвания трябва да са забранени. Ако рагледаме работата на процесора на теория, това не би трябвало да е необходимо. И аз не го правя, но забелязах следното:
Ако се изпълнява следния код за запазване на стека (в нископриоритено прекъсване):
movff POSTDEC2,TempRegister1
Restore_Stack_Loop:
push
movff POSTDEC2,TOSH
movff POSTDEC2,TOSL
decfsz TempRegister1,F
bra Restore_Stack_Loop
и настъпи високо приоритено прекъсване по време на изпълнение на инструкция movff
Резултатът записан в TOSL или TOSH няма да е този който очакваме (Не съм изследвал проблема в подробности, но за това което пиша съм почти напълно обеден).
Едното решение е да се добавят инструкции bcf INTCON,GIEH след push и bsf INTCON,GIEH след последния movff.
Другото и по-добро според мен е movff инструкциите да се заменят с:
movf POSTDEC2,W
movwf TOSH
movf POSTDEC2,W
movwf TOSL
Някой може ли да допълни нещо по въпроса или да ме коригира, ако смята че в нещо греша.
p.s. Бях чел някъде из форомите за проблем с movff на 18-ки с extended instruction set и по специално movff FS,FD, където FD e WREG,STATUS, BSR и Fast Context Saving.

Страница 1 от 1 Часовете са според зоната UTC + 2 часа [ DST ]
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
http://www.phpbb.com/