|
Передача через UART |
|
|
|
May 24 2010, 15:35
|
Участник

Группа: Участник
Сообщений: 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
|
|
|
|
|
 |
Ответов
|
May 24 2010, 19:38
|
Местный
  
Группа: Свой
Сообщений: 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)) )
|
|
|
|
|
May 24 2010, 21:15
|
Участник

Группа: Участник
Сообщений: 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 далек от совершенства, но проверить врет ли он возможности не было, по отмеченной выше причине.
|
|
|
|
|
May 25 2010, 06:43
|
Частый гость
 
Группа: Свой
Сообщений: 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 мс - перенастройте таймер.
|
|
|
|
Сообщений в этой теме
eracer Передача через UART May 24 2010, 15:35   eracer Цитата(swisst @ May 25 2010, 10:43) включ... May 25 2010, 07:40    Сергей Борщ Цитата(eracer @ May 25 2010, 10:40) в сим... May 25 2010, 09:32   eracer (удалено) May 25 2010, 07:40 eracer Огромное спасибо всем кто ответил! Кучу времен... May 26 2010, 04:54 eracer Если, может быть, кто-то столкнется с аналогичной ... May 28 2010, 07:27
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|