реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> Atxmega32A4 прерывания по переполнению Т/С
nppel
сообщение Feb 7 2011, 08:41
Сообщение #1





Группа: Новичок
Сообщений: 5
Регистрация: 11-02-09
Пользователь №: 44 678



Доброго времени суток!
Изучаю МК Atxmega32A4, необходимо сделать прерывания по переполнению Т/С, вот исходник:
CODE
.include "ATxmega32A4def.inc"
.include "Def.asm"
//******************************************************************************
.LISTMAC
.CSEG
.org PROGMEM_START
rjmp RESET ;Reset Handler
......
.org TCC0_OVF_vect
rjmp TCC0_OVF ; Overflow Interrupt
......
; прописана таблица прерываний

RESET:
ldi TMP_1, high(RAMEND)
out CPU_SPH, TMP_1
ldi TMP_1, low(RAMEND)
out CPU_SPL, TMP_1
ldi TMP_1,0xAA
sts LAST_ADDR,TMP_1

; Инициализация Т/С

ldi TMP_Y,0x00
sts TCC0_CTRLA,TMP_Y


ldi TMP_Y,0xAF ;
sts TCC0_CNT,TMP_Y
ldi TMP_Y,0x3C
sts TCC0_CNT+1,TMP_Y

ldi TMP_Y,0x01
sts TCC0_INTCTRLA,TMP_Y ;

ldi TMP_Y,0x04
sts TCC0_CTRLA,TMP_Y

; программа
MAIN:
........
rjmp MAIN

;п/п Прерывания
TCC0_OVF:
//--------------------------
lds TMP_Y,CPU_SREG
//---------------------------
ldi TMP_1,0xFF
//---------------------------
sts CPU_SREG,TMP_Y
//---------------------------
reti

При переполнении счетного регистра CNT, программа не заходит в обработчик прерываний, подскажите пожалуйста где ошибся?
Go to the top of the page
 
+Quote Post
Палыч
сообщение Feb 7 2011, 11:16
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 2 399
Регистрация: 10-05-06
Из: г. Новочеркасск
Пользователь №: 16 954



Забыли прерывания разрешить
Go to the top of the page
 
+Quote Post
nppel
сообщение Feb 8 2011, 04:37
Сообщение #3





Группа: Новичок
Сообщений: 5
Регистрация: 11-02-09
Пользователь №: 44 678



Цитата(Палыч @ Feb 7 2011, 16:16) *
Забыли прерывания разрешить


Спасибо! Исправился, но обработка прерываний так и не происходит, флаг OVFIF регистра TСC0_INTFLAGS при переполнении счетного регистра не устанавливается, что то еще не так.

CODE
.include "ATxmega32A4def.inc"
.include "Def.asm"
//******************************************************************************
.LISTMAC
.CSEG
.org PROGMEM_START
rjmp RESET ;Reset Handler
......
.org TCC0_OVF_vect
rjmp TCC0_OVF ; Overflow Interrupt
......
; прописана таблица прерываний

RESET:
ldi TMP_1, high(RAMEND)
out CPU_SPH, TMP_1
ldi TMP_1, low(RAMEND)
out CPU_SPL, TMP_1
ldi TMP_1,0xAA
sts LAST_ADDR,TMP_1

; Инициализация Т/С

ldi TMP_Y,0x07
sts PMIC_CTRL,TMP_Y

ldi TMP_Y,0x00
sts TCC0_CTRLA,TMP_Y

ldi TMP_Y,0xAF ;
sts TCC0_CNT,TMP_Y
ldi TMP_Y,0x3C
sts TCC0_CNT+1,TMP_Y

ldi TMP_Y,0x01
sts TCC0_INTCTRLA,TMP_Y ;

ldi TMP_Y,0x04
sts TCC0_CTRLA,TMP_Y

; программа
MAIN:
........
rjmp MAIN

;п/п Прерывания
TCC0_OVF:
//--------------------------
lds TMP_Y,CPU_SREG
//---------------------------
ldi TMP_1,0xFF
//---------------------------
sts CPU_SREG,TMP_Y
//---------------------------
reti


Спасибо! разобрался!!! все работает!!! Забыл глобально разрешить прерывания!
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 20th June 2025 - 21:00
Рейтинг@Mail.ru


Страница сгенерированна за 0.01364 секунд с 7
ELECTRONIX ©2004-2016