Перейти к содержанию
    

Twen

Участник
  • Постов

    160
  • Зарегистрирован

  • Посещение

Репутация

0 Обычный

Информация о Twen

  • Звание
    Частый гость
    Частый гость
  • День рождения 15.09.1988
  1. AT91SAM7S загрузчик Sam-ba

    Добрый день. Эти микроконтроллеры выпускаются уже достаточно давно, по этому я надеюсь получить какой-нибудь полезный совет от форумчан. У меня следующая проблема, восстонавлюю загрузчик и подаю команду 0x80 0x80 '#, но ответ '>' получаю от МК, после процедуры восстановленния, где-то после 20-40 посылке комманды, в зависимости от таймаута. Таймауты ожидания ставил разные, если посилаю комманду с частотой 2 посылки в секунду, то есть отправил комманду - подождал 500 мс ответа, то где-то после 30 посылке отвечает, если подавать команду каждые 10 мс, то вообще ничего не отвечает. У меня ревизия МК - B. У загрузчика есть блок автоопределенния скорости, неужели он так долго ее определяет. Самое интересное, что у AT91SAM7X загрузчик отвечает после 3-4 запроса...
  2. Итог сегодняшней работы таков: - в иаре для аvr создал проект с асемблерным файлом, в котором я инициализировал spi и дергал пином с интервалом 1с., скомпилил у иаре файл raw-bin, зашил его через spi, зашилось...пин дергается все работает и spi тоже. - создал в иаре сишный проект с асмб. файлом и сишным, у асемблерном просто иниц. стек и прыгнул на main, у main дергал пином(задержку делал без переменные, с помощью __delay_cycles()) и иниц. spi., скомпилил, зашил работает тоже... - создал в иаре сишный проект без асемблерного файла с переменной в качестве реализации задержки дерганния пином. В начальных адресах иар записывает ассемблерный код по умолчанию: иниц. переменных, стека...Зашил не работает!!! Итог: Бинарные файлы для прошивки не работают те, которые я создавал на С с переменными и компилил в иаре и winAvr , виной всему я думаю, то как компилятор оперирует с переменными! В avr гарвардская архитектара, разные адрессные шины и шины данных для разных типов памяти...может здесь кроется проблема? Если вы компилили бинарнык дляпрошивки с сишного кода, с переменными, отпишитесь пожалуйста. То есть не понятно, как писать бинарные файлы для прошивки на Си, если они не работают.
  3. Зашил программу написанную на ассемблере, в которой я оперировал только с регистрами общего назначения и портами ввода-вывода, заработала только тогда кода я проинициализировал указатель стека в начале программы на 1FF(конец RAM). В иаре стек чего-то по умолчанию иницилизируется 13F. Программа на с скомпилированная в иаре не работает при объявлении хотябы одной переменной...не пойму. А почему вы говорите, что без оптимизации будет много? 1000000 тактов с частотой 1Mhz = 1 s. Вот код и вложенные файлы(см. ниже) сделанные у WinAVR, без оптимизации(0 - стоит, оптимизация выкл.): #define DDRA(x) (*(unsigned char *) 0x2D) = x #define PORTA(x) (*(unsigned char *) 0x2E) = x #define SPL(x) (*(unsigned char *) 0x3D) = x; #define SPH(x) (*(unsigned char *) 0x3E) = x; int main(void) { SPL(0xFF); SPH(0x01); unsigned int i; while(1) { for(i = 0; i < 200; i++); PORTA(0); for(i = 0; i < 200; i++); PORTA(8); } } Это код у отладчике работает, а когда зашиваю - то нет. main_map.txt main_bin.txt main_lss.txt Makefile.txt
  4. Я прикрепил make файл, настройки для ATtiny48. Я поменял расширение, чтобы можно было загрузить файл. Makefile.txt
  5. Частота по умолчанию 1Mhz, разную задержку ставил. Когда объявляю переменную и компилю не работает, а без переменных все отлично пашет, когда в программе только : DDRA = 0x08; PORTA = 0x08; Генерировал bin файл у WinAVR и y IAR for AVR, писал на ассемблере и на С маленькие программки и ничего, порт устанавливает, а сам алгоритм не работает...то ли он виснет, толи я не знаю уже... Может нужно установить какие-то фьюзы после прошивки ATtiny48 или watch-dog может сбрасывает, так он выкл. по умолчанию...кто-то прошивал по spi ATtiny48 ?
  6. Когда я объявляю хотям бы одну переменную и компилирую файл, а потом его заливаю у Attiny48 он не работает... У авр разное адресное пространство для flash и ram...А бинарник я заливаю у флешь...Вообщем не понятно почему не работает код залитый через spi в котором есть переменные ОЗУ. Код генерил у WinAVR.
  7. Ребята, заработало, я скомпилировал bin файл у WinAVR и заработало ), пин поднялся. Смотрите, есть такой вопрос, я не совсем понимаю... я скомпилировал код, в котором я просто включаю пин порта, прошил бинарный файл и все заработало, но когда я например скомпилирую такой код: void main (void) { uint8_t state = 0; while (1) { for (uint32_t long i =0; i < 1000000; i++) { if ( state == 0) { DDRA = 0; PORTA = 0; } else { DDRA = 1; PORTA = 1; } } state =~ state; } } Переменные i и state должны быть размещены у RAM. Сами инструкции, код, будет прошиваться у Flash, а переменные... Компилятор сгенерирует когд, с инструкциями которые могут работать с RAM?
  8. Ребята, заработало, я скомпилировал bin файл у WinAVR и заработало ), пин поднялся. Смотрите, есть такой вопрос, я не совсем понимаю... я скомпилировал код, в котором я просто включаю пин порта, прошил бинарный файл и все заработало, но когда я например скомпилирую такой код: while (1) { for (unsigned int i =0; i < 1000; i++) { } }
  9. Да, я так и сделал, WinAVR скомпилил то что нужно...интересно, что когда у WinAVR изменяю выходной файл hex или bin, на выходе не меняется расширение файла, всегда hex )), но главное что в нем меняется содержимое). Спасибо.
  10. Понял, а потом мне нужно скопировать то что был makefile+ добавить вот это ? # Output format. (can be srec, ihex, binary) FORMAT = binary avr-objcopy $(FORMAT) А в какую строку или не важно?
  11. Кстати, а куда эту строчку то добавлять ? У новой студии 5.1 таких пунктов нету. Я прописую у makefile, который находится у меня у папке Debug, после компиляции он переписывается по своему...
  12. Прошить получилось! Прошил бинарный файл, считал, значения сошлись, но после ресета програмного не стартует зашитая программа...возможно проблемы у бинарнике, которого я компилил у iar для AVR. Код программы, которая зашивалась: #define DDRA(x) (*(unsigned char *) 0x2D) = x #define PORTA(x) (*(unsigned char *) 0x2E) = x int main(void) { DDRA(8); PORTA(8); while(1); } Пин порта A3 должен был подняться в "1", а там 0... Возможно нужно посмотреть на карту памяти... Ниже, показаны настройки iar-а для компиляции bin файла.
  13. У меня Attiny48, но суть таже, спасибо, завтра буду пробовать. Выходит аргумент, который будет передан функции как адрес всегда будет кратен 16-ти словам: 0, 16, 32... PRG_WriteProgramMemoryPage(u16 ByteAddr).
×
×
  • Создать...