[an error occurred while processing this directive]
Вот - дарю полезные макросы для AVR-assma. При отладке программ очень помогают (+)
(«Телесистемы»: Конференция «Микроконтроллеры и их применение»)

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

Отправлено Assm 26 июля 2006 г. 13:51

С их помощью быстро найдя баги в своих программах, настолько воодушевился этим фактом, что возомнил о большой

полезности данных макросов, потому и предлагаю их сообществу - вдруг кому пригодиться :)))

Макросы были написаны быстро, старался без ошибок, но не судите строго, ежели что.

Смысл их такой:
MARKER_NEEDLE - генерит очень короткую иголку на ноге МК
MARKER_PULSE - генерит короткий импульс на ноге МК
MARKER_FLASH - перебрасывает ногу МК в противоположное состояние
DEBUG_PAUSE - выжидает заданную паузу

Техника работы с ними очень проста.

Расставляя нужные маркеры в разных ветках программы, наблюдаем на соответствующих ногах контроллера осцильником

импульсы (т.е. контролируем прохождение по данным веткам)

Чередуя макросы гегнерации иголок/импульсов с макросом паузы, можно задавать пачки импульсов (очень удобно для

контроля ветвлений и т.п.)

Макрос FLASH и NEEDLE/PULSE можно с успехом наблюдать н одной ножке МК (очень удобно для наблюдения синхронности

разных процессов)


В общем - пользуйтесь :))


Естественно в проекте должен быть определен регистр TMP(из r16-r31)

;-------------- MARKERS !!! ----------------------------------------

.macro MARKER_FLASH ;(C) VK 24/VII.06
;Переключение ноги контроллера - FLASH индикатор.
;Синтаксис: MARKER_FLASH PINx,PORTx,PIN (где PIN=0..7, x=A..F).
sbic @0,@2
rjmp MF_RESET_PIN
sbi @1,@2
rjmp MF_EXIT
MF_RESET_PIN:
cbi @1,@2
rjmp MF_EXIT
MF_EXIT:
.endmacro
;----------------------------------
.macro MARKER_NEEDLE ;(C) VK 24/VII.06
;Формирователь строб-иголки (инверсной по отношению к текущему уровню).
;Синтаксис: MARKER_NEEDLE PINx,PORTx,PIN (где PIN=0..7, x=A..F).
push TMP
ldi TMP,5
sbic @0,@2
rjmp MN_inverseNeedle
sbi @1,@2
MN_Pause1:dec TMP
brne MN_Pause1
cbi @1,@2
rjmp MN_EXIT
MN_inverseNeedle:
cbi @1,@2
MN_Pause2:dec TMP
brne MN_Pause2
sbi @1,@2
rjmp MN_EXIT
MN_EXIT:pop TMP
.endmacro
;-------------------------------------------------------------------
.macro MARKER_PULSE ;(C) VK 24/VII.06
;Формирователь строб-импульса (инверсного по отношению к текущему уровню).
;Синтаксис: MARKER_PULSE PINx,PORTx,PIN (где PIN=0..7, x=A..F).
push TMP
ser TMP
sbic @0,@2
rjmp MP_inverseNeedle
sbi @1,@2
MP_Pause1:dec TMP
brne MP_Pause1
cbi @1,@2
rjmp MP_EXIT
MP_inverseNeedle:
cbi @1,@2
MP_Pause2:dec TMP
brne MP_Pause2
sbi @1,@2
rjmp MP_EXIT
MP_EXIT:pop TMP
.endmacro
;--------------------------------------------------------------------
.macro DEBUG_PAUSE ;Формирователь паузы (аргумент - количество прокрутки внутренных циклов).
;Синтаксис: DEBUG_PAUSE 0..65535
push TMP
;
ldi TMP,high(@0)
push TMP
ldi TMP,low(@0)
DP_Cycle:
;--------------\
;----------\
push TMP ;6 тактов
pop TMP ;
dec TMP
brne DP_Cycle
;----------/
pop TMP
dec TMP
push TMP
cpi TMP,0xff
breq DP_Exit
rjmp DP_Cycle
;--------------/
DP_Exit:pop TMP
;
pop TMP
.endmacro

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

Ответы


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

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

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

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

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


Rambler's Top100 Рейтинг@Mail.ru
Перейти к списку ответов  |||  Конференция  |||  Архив  |||  Главная страница  |||  Содержание