Перейти к содержанию
    

1867ВЦ5т и проблема с прерываниями

Пишу программу под отечественный клон TMS320F240.

По каждому периоду таймера вырабататывается прерывание .Вектора прерываний находятся начиная с адреса 0. Прерывание INT3. После первого включения питания и формирования прерывания, процессор в обработчик заходит только один раз, всё выполняет и больше не заходит, хотя флаг прерывания устанавливается. Если дать принудительный сброс процессору, то проц начинает заходить в прерывание каждый раз и в дальнейшем программа работает верно до следующего выключения питания. Кто нибудь с таким сталкивался или это особенность отечественного клона ? Причем ведет себя одинаково как при работе из Flash, так и из RAM.

 

 

Вот кусок кода.

 

.sect "vectors"

 

.global RESET

.global NMI

.global INT3

.global _c_int0

 

_c_int0 b RESET ; Переход по вектору RESET

 

INT1: B INT1

INT2: B INT2

b INT3

INT4: B INT4

INT5: B INT5

INT6: B INT6

.....

.....

.....

 

 

 

;==============================================================

.....

 

.text

 

INT3: ;Обработка прерывания;

push_

 

PC7_ON

 

ldp #7433h>>7 ;PM=*PIVR

lacl 7433h ; EVIMRB

xor #002Bh ;Определение T2PINT

 

bcnd T2CMP_FINT, EQ

zzz: b zzz ; Halt if int not valid

T2CMP_FINT:

 

.....

.....

.....

 

EXIT_INT:

clrc INTM

PC7_OFF

pop_

ret

 

--------------------------------------------------------------

 

file.cmd

 

 

 

 

MEMORY

{

PAGE 0 : VECS: origin = 0x0, length = 0x40

PAGE 0 : PROG: origin = 0x40, length = 0x3d00

PAGE 0 : Bootloader: origin=0x3E00 length = 0x200

 

PAGE 0 : B0prg: origin = 0xFE00, length = 0x100

PAGE 0 :

PAGE 1 : B1: origin = 0x300, length = 0x100

PAGE 1 : B2: origin = 0x60, length = 0x20

PAGE 1 : B0data: origin = 0x200, length = 0x100

PAGE 1 : DATA: origin = 0x8000, length = 0x7FFF

 

}

 

 

SECTIONS

{

vectors : {} > VECS PAGE 0

.text : {} > PROG PAGE 0

.bss : {} > B1 PAGE 1

.edata : {} > DATA PAGE1

stack : {} > B2 PAGE1

}

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Работаю с данным микроконтроллером:

Вот код настройки прерывания и работа с ним:

 

asm-файл

.include "wc5reg_asm.h"

.sect "vectors"

 

b 03E00h ;вектор сброса

_c_int1 b _c_int1 ;

b _c_int2 ; обработчик прерывания таймера

_c_int3 b _c_int3 ;

_c_int4 b _c_int4 ;

_c_int5 b _c_int5 ;

_c_int6 b _c_int6 ;

 

.space 16*6

.text

...

ldp #DP_EV

splk #04207h,COMCON

splk #0C207h,COMCON

splk #Tduty,T1PER

splk #0,T1CNT

splk #0A800h,T1CON

 

lar ar4,#60h

...

ldp #DP_EV

; Очистка EV IFR и IMR регистров

splk #07FFh,IFRA

splk #00FFh,IFRB

splk #000Fh,IFRC

; Разрешение прерывание по обнулению таймера 1

splk #0200h,IMRA

splk #0000h,IMRB

splk #0000h,IMRC

;Установка IMR для прерывания INT2

ldp #0h

;Очистка флагов прерываний

lacc #0FFh

sacl IFR

lacc #0000010b

sacl IMR

 

ldp #DP_EV

lacc T1CON

or #0040h

sacl T1CON

 

clrc INTM

 

main

...

b main

 

 

*******************************************************

*Прерывание INT2 от таймера 1

*******************************************************

_c_int2:

larp ar4

mar *-

sst #1,*-

sst #0,*-

sach *-

sacl *-

 

...

Программа обработки прерывания

...

ldp #DP_EV

lacc IVRA

larp ar4

mar *+

lacl *+

add *+,16

lst #0,*+

lst #1,*+

clrc INTM

ret

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Спасибо ОГРОМНОЕ !!! Проблема у меня была в сохранении регристров при входе в прерывание. Ваш код помог обнаружить ошибку.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...