[an error occurred while processing this directive]
2407А/композитор221. Работа с портами. Многих удивит, помогите до конца разобраться +
(«Телесистемы»: Конференция «Цифровые сигнальные процессоры (DSP) и их применение»)

миниатюрный аудио-видеорекордер mAVR

Отправлено Ушаков Михаил 15 марта 2005 г. 11:37

Программирую на С, ассемблер не знаю. Но то, что обнаружил - интересно всем.
Долго бился, проблема состояла в самопроизвольном переключении битов порта В (то же могло
случиться и с другими портами). В программе отдельные биты порта устанавливаются и сбрасываются
разными прерываниями.
Проблема полностью решилась после исключения изменения состояния порта при разрешенных
прерываниях. Если я прав, то при разрешенных прерываниях и неудачном уходе на запрос
прерывания с изменением состояния этого порта, портится предыдущее состояние каких-то
регистров.
Вопрос. Почему композитор при уходе на прерывание не сохраняет содержимое нужных регистров.
В чем я прав, а может нет?

При сбросе бита порта B PBDATDIR &= 0xFFDF;
контроллер выполняет аж 5 команд:
BF0B LAR AR3, #709Ah
BF80 LACC #0FFDF, 0
8B8B MAR *,AR3
6E80 AND *
908C SACL 8,0,AR4
При установке бита порта B PBDATDIR |= 0x0010;
контроллер выполняет тоже 5 команд:
BF0B LAR AR3, #709Ah
B910 LACL #10h
8B8B MAR *,AR3
6D80 OR *
908C SACL *,0,AR4
При вызове int2()
7A80 CALL I$$SAVE, *
8180 SAR AR1, *
B002 LAR AR0, #2h
00EB LAR AR0,*0,AR3
BF0B LAR AR3,#701Eh
6988 LACL *,AR0
BA30 SUB #30h
E304 BCND 1757h,GT
B80F ADD #0Fh
E344 BCND 1757h,LT
BF90 ADD #128h,0
A680 TBLR *
1080 LACC *,0
BE20 BACC
I$$SAVE
8B89
7801
8FA0
8EA0
98A0
90A0
BE42
BF00
8DA0
8CA0
C001
8CA0
80A0
82A0
83A0
84A0
85A0
86A0
87A0
8A80
1080 LACC *,0
BB06
8AA0
BE20 BACC

Составить ответ  |||  Конференция  |||  Архив

Ответы


Отправка ответа

Имя (обязательно): 
Пароль: 
E-mail: 

Тема (обязательно):
Сообщение:

Ссылка на URL: 
Название ссылки: 

URL изображения: 


Перейти к списку ответов  |||  Конференция  |||  Архив  |||  Главная страница  |||  Содержание  |||  Без кадра

E-mail: info@telesys.ru