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

 
 
 
Reply to this topicStart new topic
> ATMEGA64 глюк с UASR1, нет прерывания по приему
arttab
сообщение Sep 5 2005, 07:55
Сообщение #1


Профессионал
*****

Группа: Свой
Сообщений: 1 432
Регистрация: 7-12-04
Из: Новосибирск
Пользователь №: 1 371



перенес проект с меги8 (отлажиный - рабочий) на 64. но нет прерывания по приему в usart1
fuse - запрограм. только SUT0
настройка
// USART1

UCSR1A = 0x00; // U2X нет, MPCM нет

UCSR1B = 0x98; // RXCIE,TXCIE,UDRIE,RXEN,TXEN,UCSZ2,RXB8,TXB8
// 1, 0, 0, 1, 1, 0, 0, 0
// включ. приемник и передач.

UCSR1C = 0x0E; // xxx,UMSEL,UPM1:0:, USBS, UCSZ1:0, UCPOL
// 0, 0, 00, 1, 11, 0
// рез.,ас., без парит., 2 стопа, 8 бит

UBRR1H = 0x00; //URSEL,UBRR11:8:
//

UBRR1L = 0x19; // 19200 bod

преревание
#pragma vector=USART1_RXC_vect
__interrupt void my_USART1_RXC_vect(void)
{
temp=UDR1;
UDR1='s';
my_FLAGS_A.FEF2 = 1;
if (my_FLAGS_A.FRST==0)
{
if (count_res==255)
{count_res=0;}
Resiv(temp);
}//if (my_FLAGS_A.FRST==0)


ответа нет, в прерывание не заходит, но передатчик работает (вставлял переобически посылать байт по прерыванию таймера 1). Флаг по приему выставляется (опять же вставлял код для проверки)
Ни чего не понимаю. Ну чего ей надо?
Хелп...!!!!


--------------------
OrCAD, Altium,IAR, AVR....
Go to the top of the page
 
+Quote Post
MALLOY2
сообщение Sep 5 2005, 09:08
Сообщение #2


Знающий
****

Группа: Validating
Сообщений: 838
Регистрация: 31-01-05
Пользователь №: 2 317



Да вроде все правельно, а какая частота проца ?, может трабл с 2 стоп битами, я всегда использую 1 стоп бит и все работает нормально.
Блин а глобальные прерывание разрешено ? с стеками все нормально ?
Go to the top of the page
 
+Quote Post
damir2
сообщение Sep 5 2005, 09:09
Сообщение #3


Участник
*

Группа: Свой
Сообщений: 47
Регистрация: 12-07-05
Пользователь №: 6 725



А в другие прерывания входит? ( ...глобальное прерывание установлено?)
Go to the top of the page
 
+Quote Post
arttab
сообщение Sep 5 2005, 09:45
Сообщение #4


Профессионал
*****

Группа: Свой
Сообщений: 1 432
Регистрация: 7-12-04
Из: Новосибирск
Пользователь №: 1 371



кварц на 8 МГц (передатчик передает. я в терминале принемаю).
2 стоп бита? флаг ставит, а в прерывание не входит!?
глобальное прерывание вкл. за стеком IAR следит
прерывание по таймеру1 входит

колдунство требуется...


--------------------
OrCAD, Altium,IAR, AVR....
Go to the top of the page
 
+Quote Post
Alex11
сообщение Sep 5 2005, 19:36
Сообщение #5


Гуру
******

Группа: Свой
Сообщений: 2 106
Регистрация: 23-10-04
Из: С-Петербург
Пользователь №: 965



Два дурацких вопроса: вектор изменен правильно при переносе на Mega64? - он там другой. И что там с битиком IVSEL в MCUCR?
Go to the top of the page
 
+Quote Post
arttab
сообщение Sep 6 2005, 01:30
Сообщение #6


Профессионал
*****

Группа: Свой
Сообщений: 1 432
Регистрация: 7-12-04
Из: Новосибирск
Пользователь №: 1 371



Цитата(Alex11 @ Sep 6 2005, 02:36)
Два дурацких вопроса: вектор изменен правильно при переносе на Mega64? - он там другой. И что там с битиком IVSEL в MCUCR?
*


Дык, ИАР. файлик определений цеплять не забываю по конкретный мк. да и ругаться он без него будет.
А битик не трогаю. прерывания по таймеру1 есть.... вектора не прыгнули

Вчера мучил мк и мозги. Вот к чему пришел:

#define ENABLE_BIT_DEFINITIONS
//#define IAR_SYSTEMS_ASM__

#include "inavr.h"
#include "iom64.h"
#include "stdio.h"

void main(void);

unsigned char temp = 0;
/*
#pragma vector=RESET_vect
__interrupt void my_RESET_vect()
{
}
*/
#pragma vector=USART1_RXC_vect
__interrupt void my_USART1_RXC_vect(void)
{
temp=UDR1;
UDR1='s';

__enable_interrupt();
}//#pragma vector=USART_RXC_vect

void main(void)
{


__disable_interrupt(); //CLI

__watchdog_reset(); //сброс дога

WDTCR |= (1<<WDCE) | (1<<WDE); // Write logical one to WDCE and WDE
WDTCR = 0x00;

// USART1

UCSR1A = 0x00; // U2X нет, MPCM нет

UCSR1B = 0x98; // RXCIE,TXCIE,UDRIE,RXEN,TXEN,UCSZ2,RXB8,TXB8
// 1, 0, 0, 1, 1, 0, 0, 0
// включ. приемник и передач.

UCSR1C = 0x06; // xxx,UMSEL,UPM1:0:, USBS, UCSZ1:0, UCPOL
// 0, 0, 00, 0, 11, 0
// рез.,ас., без парит., 1стопа, 8 бит, полярн

UBRR1H = 0x00; //URSEL,UBRR11:8:
//

UBRR1L = 0x19; // 33 - 9600 bod

UDR1='k';
met:

//||||||||||||||||\\\\\\\\\\\\\\//
if (UCSR1A_Bit7) //& 0x80)//(1<<RXC1))
{
// temp=UDR1;
UDR1='z';
}//if (UCSRA & (1<<RXC))
/////////////|||||||||||||\\\\\\\\\\\\//


goto met;
}//void main(void)

сначала отсылает 'k' , а по приему 'z'. Значит прерывание не работает.
пробовал в сою прогу вставить по флагу - фиг вам.


--------------------
OrCAD, Altium,IAR, AVR....
Go to the top of the page
 
+Quote Post
arttab
сообщение Sep 6 2005, 02:01
Сообщение #7


Профессионал
*****

Группа: Свой
Сообщений: 1 432
Регистрация: 7-12-04
Из: Новосибирск
Пользователь №: 1 371



Есть у кого отлаженый код на М64 с уарт1? может сомпил. глючит. EWR3.10C


--------------------
OrCAD, Altium,IAR, AVR....
Go to the top of the page
 
+Quote Post
ValeraVi
сообщение Sep 6 2005, 15:06
Сообщение #8


Участник
*

Группа: Свой
Сообщений: 44
Регистрация: 30-07-05
Из: Kyiv, Ukraine
Пользователь №: 7 211



2 arttab
че-то не совсем ясно smile.gif, выше вы говорили что глобальные прерывания вы разрешили, а в примере они у вас запрещаются при инициализации:
void main(void)
{


__disable_interrupt(); //CLI
и больше нигде не разрешаются кроме как в прерывании по получению байта из ком порта, которое никогда не произойдет smile.gif
Поставте перед
UDR1='k';
разрешение прерываний:
__enable_interrupt();
и все должно заработать.
Go to the top of the page
 
+Quote Post
arttab
сообщение Sep 7 2005, 01:26
Сообщение #9


Профессионал
*****

Группа: Свой
Сообщений: 1 432
Регистрация: 7-12-04
Из: Новосибирск
Пользователь №: 1 371



Цитата(ValeraVi @ Sep 6 2005, 22:06)
2 arttab
че-то не совсем ясно :), выше вы говорили что глобальные прерывания вы разрешили, а в примере они у вас запрещаются при инициализации:
*


в проге было разрешение - при копировании в форум ложанулся

Загадку вчера разгадал - программно-аппаратная фигня:
по RXD1 поставил защитный резистор 20к и включил резистор подтяжки... Уровня сигнала не хватало, а оссилом не собрался глянкть.
И опыт, сын ошибок трудных....
Всем спасибо за участие


--------------------
OrCAD, Altium,IAR, AVR....
Go to the top of the page
 
+Quote Post
IgorKossak
сообщение Sep 7 2005, 08:06
Сообщение #10


Шаман
******

Группа: Модераторы
Сообщений: 3 064
Регистрация: 30-06-04
Из: Киев, Украина
Пользователь №: 221



Оказывается, что программирование - это наука о контактах! wink.gif
Go to the top of the page
 
+Quote Post
arttab
сообщение Sep 8 2005, 01:18
Сообщение #11


Профессионал
*****

Группа: Свой
Сообщений: 1 432
Регистрация: 7-12-04
Из: Новосибирск
Пользователь №: 1 371



Программирование на железо это наука и о контактах, о задержках, о сигналах и их обработки....
Есть на что напороться.


--------------------
OrCAD, Altium,IAR, AVR....
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 10th July 2025 - 18:27
Рейтинг@Mail.ru


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