Микроконтроллеры, АЦП, память и т.д Темы касающиеся микроконтроллеров разных производителей, памяти, АЦП/ЦАП, периферийных модулей... |
27.12.2010, 11:27
|
|
Прописка
Регистрация: 06.03.2007
Сообщений: 144
Сказал спасибо: 22
Сказали Спасибо 10 раз(а) в 10 сообщении(ях)
|
Программа сбрасывается при включении sei()
Подскажите, что можно сделать по такому вопросу:
в GCC:
//инициализирую таймер0:
Код:
|
TCCR0A=0x83;
TCCR0B=0x02;
TCNT0=0x00;
OCR0A=0x00;
OCR0B=0x00; |
//включаю прерывания:
Программа сбрасывается и снова начинает инициализацию.
В чем проблема?
|
|
|
|
27.12.2010, 11:55
|
|
Прописка
Регистрация: 11.10.2008
Сообщений: 132
Сказал спасибо: 8
Сказали Спасибо 35 раз(а) в 30 сообщении(ях)
|
Re: программа сбрасывается при включении sei()
Ну дык, а где ваш код обработчика прерывания?
|
|
|
|
27.12.2010, 12:37
|
|
Прописка
Регистрация: 06.03.2007
Сообщений: 144
Сказал спасибо: 22
Сказали Спасибо 10 раз(а) в 10 сообщении(ях)
|
Re: программа сбрасывается при включении sei()
Вот обработчик прерывания:
[CODE]#define Ntap 8
unsigned char dataOut[Ntap];
Код:
|
ISR (TIM0_OVF_vect){
OCR0A=dataOut[0];
} |
|
|
|
|
27.12.2010, 13:29
|
|
Супер-модератор
Регистрация: 13.03.2004
Адрес: Minsk
Сообщений: 2,378
Сказал спасибо: 1,955
Сказали Спасибо 1,328 раз(а) в 578 сообщении(ях)
|
Re: Программа сбрасывается при включении sei()
Неплохо бы еще знать, для какого МК написано это все.
И видеть всю программу, а не кусочки
Я, например,не вижу - где разрешено прерывание таймера (TIMSK) и не вижу, как инициализируется WDT
И как все проверялось - в железе, в эмуляторе каком-нибудь?
__________________
[ жизнь приятна и красива, если выпить литр пива ]
|
|
|
|
27.12.2010, 13:51
|
|
Вид на жительство
Регистрация: 03.06.2010
Сообщений: 452
Сказал спасибо: 35
Сказали Спасибо 168 раз(а) в 133 сообщении(ях)
|
Re: Программа сбрасывается при включении sei()
Такое поведение может быть, если код компилится для одного МК, а заливается в другой, где не совпадают номера векторов прерываний.
|
|
|
|
27.12.2010, 14:09
|
|
Прописка
Регистрация: 06.03.2007
Сообщений: 144
Сказал спасибо: 22
Сказали Спасибо 10 раз(а) в 10 сообщении(ях)
|
Re: Программа сбрасывается при включении sei()
Вот весь код:
Код:
|
#include ‹avr/io.h›
#include ‹avr/interrupt.h›
/************************************************** ***
Project :
Version :
Date : 17.11.2010
Chip type : ATmega48
Clock frequency : 8,000000 MHz
Memory model : Small
External RAM size : 0
Data Stack size : 128
************************************************** ***/
#define Ntap 8
char temp;
unsigned char dataIn[Ntap]; //output samples
// Timer 0 overflow interrupt service routine
ISR (TIM0_OVF_vect){
OCR0A=dataIn[0]; // out[0]
}
void init(){
char n;
for(n=Ntap-1;n›0;n++){
dataIn[n]=0;
}
}
// Declare your global variables here
void main(void){
// Declare your local variables here
// Crystal Oscillator division factor: 1
// #pragma optsize-
CLKPR=0x80;
CLKPR=0x00;
// #ifdef _OPTIMIZE_SIZE_
// #pragma optsize+
// #endif
// Input/Output Ports initialization
// Port B initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=Out Func0=Out
// State7=T State6=T State5=T State4=T State3=T State2=T State1=0 State0=0
PORTB=0x00;
DDRB=0x03;
// Port C initialization
// Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTC=0x00;
DDRC=0x00;
// Port D initialization
// Func7=In Func6=Out Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=T State6=0 State5=T State4=T State3=T State2=T State1=T State0=T
PORTD=0x00;
DDRD=0x40;
// Timer/Counter 0 initialization
// Clock source: System Clock
// Clock value: 1250,000 kHz - ÷àñòîòà äëÿ ñèíõðîíèçàöèè ñ ÀÖÏ (4883)
// Mode: Fast PWM top=FFh
// OC0A output: Non-Inverted PWM
// OC0B output: Disconnected
TCCR0A=0x83;
TCCR0B=0x02;
TCNT0=0x00;
OCR0A=0x00;
OCR0B=0x00;
TIMSK0=0x01;
sei();// Global enable interrupts
init();
while (1)
{
PORTD=0x23;
}
} |
|
|
|
|
27.12.2010, 14:26
|
|
Супер-модератор
Регистрация: 13.03.2004
Адрес: Minsk
Сообщений: 2,378
Сказал спасибо: 1,955
Сказали Спасибо 1,328 раз(а) в 578 сообщении(ях)
|
Re: Программа сбрасывается при включении sei()
Код:
|
for(n=Ntap-1;n›0;n++){
dataIn[n]=0; |
Может, тут поставить n-- ?
__________________
[ жизнь приятна и красива, если выпить литр пива ]
|
|
|
|
27.12.2010, 14:42
|
|
Прописка
Регистрация: 06.03.2007
Сообщений: 144
Сказал спасибо: 22
Сказали Спасибо 10 раз(а) в 10 сообщении(ях)
|
Re: Программа сбрасывается при включении sei()
Да, тут действительно ошибка ![Улыбка](images/smilies/icon_smile.gif) , но ничего не изменилось:
Код:
|
#include ‹avr/io.h›
#include ‹avr/interrupt.h›
unsigned char dataIn[8]; //output samples
ISR (TIM0_OVF_vect){
OCR0A=0x56; // out[0]
}
void main(void){
CLKPR=0x80;
CLKPR=0x00;
PORTB=0x00;
DDRB=0x03;
PORTD=0x00;
DDRD=0x40;
TCCR0A=0x83;
TCCR0B=0x02;
TCNT0=0x00;
OCR0A=0x00;
OCR0B=0x00;
TIMSK0=0x01;
sei();// Global enable interrupts
while (1){
PORTD=0x23;
}
} |
Вообще все удалил ненужное. Результат прежний.
|
|
|
|
27.12.2010, 14:51
|
|
Супер-модератор
Регистрация: 13.03.2004
Адрес: Minsk
Сообщений: 2,378
Сказал спасибо: 1,955
Сказали Спасибо 1,328 раз(а) в 578 сообщении(ях)
|
Re: Программа сбрасывается при включении sei()
Та ошибка вызывала бы полную очистку ОЗУ, но прикинул - в том месте, наверное, не смертельно. Правда, фиг знает, как ваш компилятор строит код и память распределяет. У ИАРа бы не порушило.
В чем проверяете-то? В исправленном - не пойму, где определяется тип МК - куда вектор будет определен?
__________________
[ жизнь приятна и красива, если выпить литр пива ]
|
|
|
|
27.12.2010, 15:04
|
|
Вид на жительство
Регистрация: 03.06.2010
Сообщений: 452
Сказал спасибо: 35
Сказали Спасибо 168 раз(а) в 133 сообщении(ях)
|
Re: Программа сбрасывается при включении sei()
для меги48 нет прерывания TIM0_OVF_vect, а есть TIMER0_OVF_vect.
Внимательней читайте документацию. (avr-libc-user-manual.pdf)
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 22:02.
|
|