|
|
|
|
AnSi: флаги прерываний не сброшены Собственно говоря - да. Имеем в итоге: ловушка для ложных срабатываний прерываний в программе, где они вообще не используются. Ибо при нормальном срабатывании цикл будет вечен (если вочдог не вмешается). Всю программу в студию! Включая конфиг регистры! |
|
|
rfc: Ибо при нормальном срабатывании цикл будет вечен это программный бит и при сбросе ничем не устанавливается кроме программы - если устанавливается самостоятельно без "уважительной" причины - пора менять контроллер. |
|
|
rfc: Всю программу в студию! Вот например: http://www.trash.net/~luethi/microchip/projects/rs232/rs_test/rs_test.asm И сразу всё становится понятно :
|
|
|
AnSi: это программный бит и при сбросе ничем не устанавливается кроме программы - если устанавливается самостоятельно без "уважительной" причины - пора менять контроллер. Уже понял, что сморозил. Судя по исходнику - просто перестраховка. |
|
|
при вхождении в прерывание бит GIE и так сброшен, для предотвращения повторной загрузки в счетчик команд адреса вектора прерываний, и разрешается лишь при выходе из процедуры обратботки прерывания командой RETFIE. Для перестраховки обнуляют флаги всех необрабатываемых в обработчике источников прерываний регистра INTCON |
|
|
rfc: Как это нет RAM? Точно. Видимо мне приснилось, что их нет Точнее, забыл что это назывется рам. |
|
|
Vladikas: А откуда эта картинка? С даташита. Вот например Я-то брал с какого-то польского сайта. Но указанный Peter Luethi там упомянут. Чего-то вы тут наговорили... Битом GIE "ложность" прерывания не проверишь. Я просто проверяю флаги всех используемых прерываний. Если ни одного нету, вот тогда и будет ложное прерывание. Данный бит можно поднять не только командой RETFIE, но и обычной командой типа BSF, и получить прерывание из прерывания. Что из этого получится, не знаю, не пробовал. 176312.asm |
|
|
Gregory: Данный бит можно поднять не только командой RETFIE, но и обычной командой типа BSF, и получить прерывание из прерывания. Что из этого получится, не знаю, не пробовал. ну понятно что получится - на следующем такте счетчик комманд загрузиться вектором прерываний 004h и бит GIE опять аппаратно сброситься и все по новой: до точки bsf INTCON,GIE получишь вечный цикл |
|
|
DDR: получишь вечный цикл Вы всё усложняете. Можно ведь сперва сбросить флаг вызвавшего прерывание события, а уже потом разрешать глобально. |
|
|
я ответил на вопрос что получиться при ситуации возникновения прерывания в процессе обработки прерывания. в случае с пиком - просто текущее выполнение прерывания оборвется и по приоритету начнется прерывание заново. вот и все если сбросить флаг вызвавшего прерывание события, то при разрешении глобального прерывания не возникнет ситуации получения прерывания из прерывания |
|
|
|
|