[an error occurred while processing this directive]
ADuC 7024 пробиваем головой стену (пока еще не пробил)
(«Телесистемы»: Конференция «Микроконтроллеры и их применение»)

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

Отправлено Алексей 07 апреля 2006 г. 07:06

Либо я тупой до безобразия, либо AD "греет руки" на ADuC. Ушел полностью в ASM шаг за шагом подобрался к прерыванию, и обещанного чуда не получилось. Собрал все вектора в кучу, на единственную и желанную строчку кода - блин елочка гори! Не доверяя себе перепроверил простым бранчем на код IRQ - загорелось. Ставлю таймер, разрешаю прерывания, 1 секунду в цикле давлю на кнопку вижу как 1 секунду цикл успешно работает и пытается гасить светодиод (яркость снижается, по сравнению с тем когда гашение не производится) потом "пшик" и все на этом "кабздец" ADuC ушел гулять видимо далеко и надолго. Пробую возмутить ядро нецивильной иснтрукцией (закоментарена) возмущается, опять же без последствий для светодиода (никаких шевелений) и полным ввисанием. Пробую разрешить FIQ на таймер - результат тот же, точнее полное отсутствие результатов. Без разрешения прерываний по маске все работает - при нажатии на кнопку загорается светодиод, портом таймер его тушит). Код ниже. Столько вкусно в кристалле, но без прерываний все равно что нарисованными фруктами наслаждаться. Проффесионалы ткните же мне в глаза пальцем где чего не так, ибо сам не могу остановить этот половой акт, во что то верю (правда остается одно верить в свою тупость). Куда это ядро гулять может уходить? В вечный аборт по данным или коду, такое разве бывает? Запускаться в режиме interrupt? Дайте хоть наметку, как его поднять то можно?

AREA start, CODE, AT 0x00000000
BUTTON_ADDR SET 0420h
T1LD SET 0320h
T1VAL SET 0324h
T1CON SET 0328h
T1CLRI SET 032Ch
IRQEN SET 0008h
FIQEN SET 0108h

Mode_USR equ 10h
Mode_FIQ equ 11h
Mode_IRQ equ 12h
Mode_SVC equ 13h
Mode_ABT equ 17h
Mode_UNDEF equ 1Bh
Mode_SYS equ 1Fh

I_Bit equ 80h /* when I bit is set, IRQ is disabled */
F_Bit equ 40h /* when F bit is set, FIQ is disabled */

POWKEY1_OFFSET equ 0404h
POWCON_OFFSET equ 0408h
POWKEY2_OFFSET equ 040Ch
PLL_SETUP equ 1
PLLCFG_Val equ 00000001h

b reset ;0
b Undef ;1
b vec_SWI_vec ;2
b PAbt ;3
b DAbt ;4
b Undef ;5
b IRQ ;6
b FIQ ;7

reset:

mov r3, #-2147483648
mov r4, r3, asr #15 ; r4 = 0xFFFF0000
mov r3, r3, asr #19 ; r3 = 0xFFFFF000
mov r1, r3, asr #12 ; r1 = 0xFFFFFFFF

MSR CPSR_c, #Mode_SVC;|I_Bit|F_Bit
;undefcmd: DD 0DE000001h

STR r3,[r3,#460h]
STRB r3,[r3,#462h]
mov r5,#10h
STR r5,[r4,#FIQEN]
add r5,r1,#2
STR r5,[r4,#T1LD]
mov r5,#2D0h
sub r5,r5,#1
add r4,r4,#T1CON
STRH r5,[r4,#0h]
sub r4,r4,#T1CON
L2:
LDRB r2,[r3,#BUTTON_ADDR]
ands r2,r2,#01h
STREQB r1,[r3,#462h]
LDR r5,[r4,#T1VAL]
ands r5,r5,r5
STREQB r3,[r3,#462h]
b L2

ORG 0x100
Undef:
vec_SWI_vec:
PAbt:
DAbt:
FIQ:
IRQ:
mov r3, #-2147483648
mov r4, r3, asr #15 ; r4 = 0xFFFF0000
mov r3, r3, asr #19 ; r3 = 0xFFFFF000
mov r1, r3, asr #12 ; r1 = 0xFFFFFFFF
;STRB r3,[r4,#T1CLRI]
;STR r3,[r4,#IRQEN]
STR r3,[r3,#460h]
and r1,r1,#02h
STRB r1,[r3,#462h]
irq_loop:
b irq_loop

END

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

Ответы


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

Имя (обязательно): 
Пароль: 
E-mail: 
NoIX ключ Запомнить

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

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

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


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

E-mail: info@telesys.ru