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

 
 
> Прием данных по USART при нахождении программы в области бутлоадера.
IVN2013
сообщение Jan 27 2014, 20:36
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 27
Регистрация: 12-08-13
Пользователь №: 77 889



Доброго всем времени суток! Пишу bootloader (загрузчик) для m128 на AVR GCC. В данном варианте начальный старт обязательно происходит в части приложения и только потом по определнному сигналу - переход в область бутлоадера и все остальное. Так вот - столкнулся с трудностью принятия массива байтов при нахождении программы в области бутлоадера(насколько я понимаю здесь прием долже быть не по прерыванию).
Не получается вызвать функцию приема из следующей функции (при размещении в области приложения все хорошо работало) :

__attribute__((section(".bootloader"))) unsigned char USART_Receive(void)
{
while( !(UCSR1A & _BV(RXC1)) );
return UDR1;
}


__attribute__((section(".bootloader"))) void boot_program_page(void)

{
//стирание application сектора из flash памяти
while (0x01cf00 > addr)
{
boot_page_erase(addr); // стирание страницы
boot_spm_busy_wait(); // задержка на время стирания
addr += SPM_PAGESIZE;
}
boot_rww_enable();
UBRR1L = 0x03;
UBRR1H = 0x00;
UCSR1A = 0x00;
UCSR1B = (1<<RXEN1)|(1<<TXEN1)|(1<<RXCIE1)|(1<<TXCIE1);
UCSR1C = (0<<UCSZ12)|(1<<UCSZ11)|(1<<UCSZ10)|(0<<USBS1)|(0<<UPM11)|(0<<UPM10);

uint8_t buf1;
while (1)
{
buf1 = USART_Receive();
UDR1 = buf1;
}


Пробовал также принимать в цикле : while (1) { while( !(UCSR1A & _BV(RXC1)) ) {buf = UDR1; и отправляю для проверки:UDR1 = buf1;} }, но правильного результата так и не получил.

Подскажите, как можно организовать прием байтов в пределах 1-й функции и без прерываний. Спасибо!
Go to the top of the page
 
+Quote Post



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

 


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


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