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

 
 
> Передача через 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
 
Start new topic
Ответов
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



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

 


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


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