Регистрация | Вход
[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
Страница 1 из 11
Модератор форума: ivan_fd 
Форум Picbasic.ru » Программирование МК » PicBasicPro » Не работают прерывания в прошитой бутлоадером прошивке. (А если записать прошивку без бутлоадера, то всё работает.)
Не работают прерывания в прошитой бутлоадером прошивке.
INTERBAS Дата: Вт, 25.10.2011, 19:43  |                                                                                                                Сообщение # 1
Группа: Проверенные
Ранг:  Новенький
Сообщений: 2
Репутация: 0   ±
Замечания:   ±
На сайте с 20.10.2011

Статус: Offline

Code
DEFINE RESET_ORG 2500h
DEFINE INTERRUPT_ORG 2508h
Define  OSC     48

ADCON1=$FF
TRISA=0
porta.5=0
TRISB=$FF

porta.4 = 1  
pause 1000
porta.4 = 0  
pause 20

On Interrupt Goto maini

INTCON = %10010000  
ENABLE
main:
porta.4 = 1  
pause 20
porta.4 = 0  
pause 20
goto main:

DISABLE
maini:
porta.5 = 1  
pause 100
porta.5 = 0  
pause 100
INTCON = %10010000
resume
ENABLE
end


Прерывание должно срабатывать от изменения сигнала на ноге портб.0
Но это не работает, такое ощущение что мк просто сбрасывается,
недоходя даже до
porta.4 = 1
pause 1000
porta.4 = 0
pause 20
Менял местами ENABLE, DISABLE, INTCON и On Interrupt Goto maini - не помогает...

Бутлоадер самодельный, который просто записывает то что получил по юбс
в область с адресом от 2500 до 7FFF.
Бутлоадер работает нормально, так как любые программы в которых нет прерываний
всё работает замечательно. Записывал даже прошивальщик который перепрошивает бутлоадер
по юсб.
Но прерывания это ... =(
Надеюсь на вашу помощь, чтобы разобраться.

Добавлено (25.10.2011, 19.43.16)
---------------------------------------------
Дополнительно.
Попробовал
DEFINE RESET_ORG 2000h
DEFINE INTERRUPT_ORG 2008h
Результат тотже.
Посмотрел в симмуляторе пик12 симулятор иде, он там показывает что переносится в адрес 0008.
Тоесть там где обычно распологается прерывание.
Но я ведь указал ему что DEFINE INTERRUPT_ORG 2008h.

Можете написать пример на ассемблере, дабы они быстрее работают.
Мне хоть простой пример, я просто должен понять как это работает.

Без бутлоадера всё работает как часы.
Если в адресе 0008 поставить ссылку на адрес 2008 то не работает бутлоадер (((.

ЯНДЕКС Дата: 25.10.2011
ivan_fd Дата: Вт, 25.10.2011, 21:41  |                                                                                                                Сообщение # 2
Группа: Модераторы
Ранг:  Специалист
Сообщений: 899
Репутация: 47   ±
Замечания:   ±
На сайте с 12.01.2009

Статус: Offline

Почитайте вот эту тему, может она Вам поможет.
Удачи!


Меня все время преследуют умные мысли...но я быстрее!!!
INTERBAS Дата: Пт, 28.10.2011, 08:39  |                                                                                                                Сообщение # 3
Группа: Проверенные
Ранг:  Новенький
Сообщений: 2
Репутация: 0   ±
Замечания:   ±
На сайте с 20.10.2011

Статус: Offline

Спасибо большое что тыкнули носом в нужное место, проходился и по этому сайту раньше но использовать поиск не пробовал.
Решение проблемы там в пердпоследнем посте.
Но судя по переведённому тексту это работать будет.

Для пик бейсика

DEFINE RESET_ORG 800h ' User code starts at 800h for USB Boot-Loader
DEFINE INTHAND my_high_isr ' High priority int handler
DEFINE INTLHAND my_low_isr ' Low priority int handler

и затем использовать это

ASM
my_high_isr
; обработчик здесь
RETFIE FAST
ENDASM

ASM
my_low_isr
; обработчик здесь
RETFIE
ENDASM

В ближайшее время проверю это всё и отпишусь.

Добавлено (28.10.2011, 03.59.50)
---------------------------------------------
Хотелось конешно написать "Ура получилось", но нет.
Возможно я не могу понять что там в предпоследнем посте, но у меня ничего не работает.
Компилирую это дело в MicroCode...

Code
DEFINE RESET_ORG 50h ' User code starts at 800h for USB Boot-Loader
DEFINE INTHAND my_high_isr ' High priority int handler
DEFINE INTLHAND my_low_isr ' Low priority int handler  
Define  OSC     48

ADCON1=15
TRISA=%00000000
porta=%00000000
TRISB=%00000001
portb=%00000000

main:
intcon = %10010000
porta.4 = 1  
pauseus 5
porta.4 = 0  
pauseus 5
goto main

ASM
     my_high_isr
     goto 0x0058
     RETFIE FAST
ENDASM

ASM
     my_low_isr
     goto 0x0068
     RETFIE
ENDASM


В микрокоде после компиляции, жалоба варнинг на ассемблерные метки my_high_isr и my_low_isr.
По сути программы(смотрел breakpoint в симуляторе) прога должна уйти в вечные переходы от 0058 в 00А4 и обратно.

А в симуляторе как и обычно при возникновении прерывания переходит не в 0х0058 а как всегда в 0х0008.
Тоесть опятьже, DEFINE RESET_ORG 50h и другие компилятору до лампочки, или ему чтото конкретно ещё надо.
Тоесть по адресу 0058 расположен гото в 00А4(в обработчик прерывания) а там гото 0058, всё какбы должно работать я думаю...
Помогите разобраться ((((
Может это особенность самого симулятора ?

если что, вот дизассемблер с адреса 0050
Code
000050  EF42     GOTO L1
000052  F000
000054  FFFF     NOP
000056  FFFF     NOP
000058  EF52    L9:    GOTO L2
00005A  F000
00005C  FFFF     NOP
00005E  FFFF     NOP
000060  FFFF     NOP
000062  FFFF     NOP
000064  FFFF     NOP
000066  FFFF     NOP
000068  EF55    L10:    GOTO L3
00006A  F000
00006C  6A13    L7:    CLRF 0x013,A
00006E  0FFE     ADDLW 0xFE
000070  6E12     MOVWF 0x012,A
000072  0004    L6:    CLRWDT
000074  6AE8     CLRF WREG,A
000076  5A13     SUBWFB 0x013,F,A
000078  A0D8     BTFSS STATUS,C,A
00007A  0012     RETURN
00007C  0612     DECF 0x012,F,A
00007E  D000     BRA L4
000080  D000    L4:    BRA L5
000082  D7F7    L5:    BRA L6
000084  0E0F    L1:    MOVLW 0x0F
000086  6EC1     MOVWF ADCON1,A
000088  6A92     CLRF TRISA,A
00008A  6A80     CLRF PORTA,A
00008C  0E01     MOVLW 0x01
00008E  6E93     MOVWF TRISB,A
000090  6A81     CLRF PORTB,A
000092  0E90    L8:    MOVLW 0x90
000094  6EF2     MOVWF INTCON1,A
000096  8880     BSF PORTA,4,A
000098  0E05     MOVLW 0x05
00009A  DFE8     RCALL L7
00009C  9880     BCF PORTA,4,A
00009E  0E05     MOVLW 0x05
0000A0  DFE5     RCALL L7
0000A2  D7F7     BRA L8
0000A4  EF2C    L2:    GOTO L9
0000A6  F000
0000A8  0011     RETFIE FAST
0000AA  EF34    L3:    GOTO L10
0000AC  F000
0000AE  0010     RETFIE

Добавлено (28.10.2011, 08.39.50)
---------------------------------------------
Так, прошил бутлоадер микрочиповский.
Как оказалось возможно всё дело было в моём бутлоадере, который частично пропускал некоторые куски прошивки.

Форум Picbasic.ru » Программирование МК » PicBasicPro » Не работают прерывания в прошитой бутлоадером прошивке. (А если записать прошивку без бутлоадера, то всё работает.)
Страница 1 из 11
Поиск: