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

 
 
 
Reply to this topicStart new topic
> Передача через UART
eracer
сообщение May 24 2010, 15:35
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 17
Регистрация: 24-05-10
Пользователь №: 57 488



Доброго времени суток!)
Недавно начал изучать IAR. Требуется передать массив символов через UART.
Бит UDRE регистра USR всегда равен 0, хотя должен устанавливаться в 1 сразу же после отправки символа.
Код
#include <io8515.h>
#define bit(n) (1<<(n))
#pragma vector = TIMER1_OVF1_vect
__interrupt void T1_OVF_Handler();
void Init();
bool Put_Text_UART(const char* text, const unsigned int n);
const unsigned char GText[] = "Proverka";
int main()
{
  Init();
  while(1){ }
  return 0;
}

void Init()
{
  TCCR1A = 0x01; //PWM mode, TOP=255,
  TCCR1B = 0x01;
  DDRB = 0x00;
  DDRD = 0x00;
  PORTD = 0;
  PORTB = 0;
  UBRR = 12; //9600 Baud
  OCR1A  = 0xFF
  UCSRB = bit(3);
  TIMSK = bit(7); //TIMSK = (1<<TOIE1)
  asm("sei");
}

void Put_Text_To_UART(const unsigned char* text, const unsigned int n)
{
  for (unsigned int i=0; i<n; i++)
  {
    //Если в этом месте ввести цикл отслеживания готовности, прога виснет, USR = 0x00
    UDR = text[i];
  }
}
__interrupt void T1_OVF_Handler()
{
    
    Put_Text_To_UART(GText, sizeof(GText));
}

Также есть проблемы с прогрузкой. Пробовал загрузить hex файл через AVR ISP, в результате вылезает ошибка "Programming Error(s) occured", "Failed to verify device". Более простые программы идут замечательно.

Сообщение отредактировал eracer - May 24 2010, 15:40
Go to the top of the page
 
+Quote Post
mrKirill
сообщение May 24 2010, 19:38
Сообщение #2


Местный
***

Группа: Свой
Сообщений: 283
Регистрация: 13-06-07
Из: Челябинск
Пользователь №: 28 391



Цитата
Также есть проблемы с прогрузкой. Пробовал загрузить hex файл через AVR ISP, в результате вылезает ошибка "Programming Error(s) occured", "Failed to verify device". Более простые программы идут замечательно.

Это у Вас проблемы со схемой или программатором...а вовсем не в hex.
Черным по белому написано же "Произошли ошибки при программировании", "Не прошла верификация".
Самое простое - проверьте кабель от программатора до схемы.

При маленьком размере hex прошивка может происходить нормально, а при большем уже вызывать ошибки программирования...было подобное, уменьшил длину соединительного ISP кабеля и все стало стабильно.

Цитата
//Если в этом месте ввести цикл отслеживания готовности, прога виснет, USR = 0x00

Вот так проверяете?
Цитата
while ( !( UCSRA & (1<<UDRE)) )
Go to the top of the page
 
+Quote Post
eracer
сообщение May 24 2010, 21:15
Сообщение #3


Участник
*

Группа: Участник
Сообщений: 17
Регистрация: 24-05-10
Пользователь №: 57 488



Цитата(mrKirill @ May 24 2010, 23:38) *
Это у Вас проблемы со схемой или программатором...а вовсем не в hex.
Черным по белому написано же "Произошли ошибки при программировании", "Не прошла верификация".
Самое простое - проверьте кабель от программатора до схемы.

При маленьком размере hex прошивка может происходить нормально, а при большем уже вызывать ошибки программирования...было подобное, уменьшил длину соединительного ISP кабеля и все стало стабильно.


Hex файл действительно вряд ли создался "неправильный". Пользовался проводом STK300, загружал с помощью проги AVR ISP. На кафедре вроде бы есть AVR ISP mkll, если дело именно в этом, можно будет попробовать. Насколько я знаю в IARe есть возможность создавать файлы .bat, но пока что я такой опции не нашел.

Цитата
Вот так проверяете?
while ( !( UCSRA & (1<<UDRE)) )

Именно так, только у меня регистр USR. В этом месте получается бесконечный цикл. На форуме вроде отмечали, что дебаггер IARa далек от совершенства, но проверить врет ли он возможности не было, по отмеченной выше причине.
Go to the top of the page
 
+Quote Post
swisst
сообщение May 25 2010, 06:43
Сообщение #4


Частый гость
**

Группа: Свой
Сообщений: 163
Регистрация: 16-02-07
Из: Харьков
Пользователь №: 25 425



Цитата(eracer @ May 25 2010, 00:15) *
Hex файл действительно вряд ли создался "неправильный". Пользовался проводом STK300, загружал с помощью проги AVR ISP. На кафедре вроде бы есть AVR ISP mkll, если дело именно в этом, можно будет попробовать. Насколько я знаю в IARe есть возможность создавать файлы .bat, но пока что я такой опции не нашел.


Именно так, только у меня регистр USR. В этом месте получается бесконечный цикл. На форуме вроде отмечали, что дебаггер IARa далек от совершенства, но проверить врет ли он возможности не было, по отмеченной выше причине.


включите подтяжку на PD0 и PD1 - когда заработает, то будет работать стабильнее...

1. Ваша частота 2 МГц ? - если ответ - нет, 1 МГц, то в UBRR надо писать 6.
2. На частоте 1 МГц 1 тик таймера равен 1 мкс, 1 цикл - 255 мкс...время отправки одного символа по УАРТ на скорости 9600 - 1 мс - перенастройте таймер.
Go to the top of the page
 
+Quote Post
eracer
сообщение May 25 2010, 07:40
Сообщение #5


Участник
*

Группа: Участник
Сообщений: 17
Регистрация: 24-05-10
Пользователь №: 57 488



Цитата(swisst @ May 25 2010, 10:43) *
включите подтяжку на PD0 и PD1 - когда заработает, то будет работать стабильнее...

1. Ваша частота 2 МГц ? - если ответ - нет, 1 МГц, то в UBRR надо писать 6.
2. На частоте 1 МГц 1 тик таймера равен 1 мкс, 1 цикл - 255 мкс...время отправки одного символа по УАРТ на скорости 9600 - 1 мс - перенастройте таймер.

Спасибо, поставил коэффициент деления CK/1024. Со скоростью я напутал - 19200 Бод/с, частота 4 МГц.
Проблема тем не меннее осталась - в симуляторе регистр USR = 0x00 независимо от состояния регистра UDR.
Go to the top of the page
 
+Quote Post
eracer
сообщение May 25 2010, 07:40
Сообщение #6


Участник
*

Группа: Участник
Сообщений: 17
Регистрация: 24-05-10
Пользователь №: 57 488



(удалено)

Сообщение отредактировал eracer - May 25 2010, 07:42
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение May 25 2010, 09:32
Сообщение #7


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



Цитата(eracer @ May 25 2010, 10:40) *
в симуляторе регистр USR = 0x00 независимо от состояния регистра UDR.
В симуляторе периферия не симулируется. Никак. Только ядро. Так что отлаживаться вам придется на реальном железе.


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
eracer
сообщение May 26 2010, 04:54
Сообщение #8


Участник
*

Группа: Участник
Сообщений: 17
Регистрация: 24-05-10
Пользователь №: 57 488



Огромное спасибо всем кто ответил! Кучу времени потратил, застряв на этой проблеме. angry.gif Надеюсь дальше будет попроще unsure.gif
Go to the top of the page
 
+Quote Post
eracer
сообщение May 28 2010, 07:27
Сообщение #9


Участник
*

Группа: Участник
Сообщений: 17
Регистрация: 24-05-10
Пользователь №: 57 488



Если, может быть, кто-то столкнется с аналогичной проблемой, в итоге воспользовался программой AVReal для загрузки.
Go to the top of the page
 
+Quote Post

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

 


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


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