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

VladislavS

Свой
  • Постов

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

  • Посещение

  • Победитель дней

    9

Весь контент VladislavS


  1. AT91RM9200 ST interrupt

    Через его родной BootLoader по протоколу DFU не проблема - загружается. Я хотел XModem через USB пропустить.
  2. Есть опыт SDRAM на 100 Мгц на AT91RM9200. Плата шестислойка со средним слоем полностью залитым GND. Без резисторов, длины линий специально не выравнивал, но по возможности короткими делал. ЗЫ: Знаю что так делать нехорошо, просто эксперимент на стабильность.
  3. Ну блин, когда BMS=0, то FLASH с адреса 0x00000000 начинается, а SRAM с 0x200000. -DRAMSTART=200040 -DRAMEND=203FFF -DSDRAMSTART=20000000 -DSDRAMEND=21FFFFFF -DROMSTART=40 -DROMEND=1FFFFF Вот с таким XCL сможешь из FLASH стартануть, только не забудь в low_level_init SDRAM инициализировать. // INTVEC -- Exception vector table. // SWITAB -- Software interrupt vector table. // ICODE -- Startup (cstartup) and exception code. // DIFUNCT -- Dynamic initialization vectors used by C++. // CODE -- Compiler generated code. // CODE_I -- Compiler generated code declared __ramfunc (executes in RAM) // CODE_ID -- Initializer for CODE_I (ROM). // ------------- // Data segments - may be placed anywhere in memory. // ------------- // CSTACK -- The stack used by C/C++ programs (system and user mode). // IRQ_STACK -- The stack used by IRQ service routines. // SVC_STACK -- The stack used in supervisor mode // (Define other exception stacks as needed for // FIQ, ABT, UND). // HEAP -- The heap used by malloc and free in C and new and // delete in C++. // INITTAB -- Table containing addresses and sizes of segments that // need to be initialized at startup (by cstartup). // CHECKSUM -- The linker places checksum byte(s) in this segment, // when the -J linker command line option is used. // DATA_y -- Data objects. // // Where _y can be one of: // // _AN -- Holds uninitialized located objects, i.e. objects with // an absolute location given by the @ operator or the // #pragma location directive. Since these segments // contain objects which already have a fixed address, // they should not be mentioned in this linker command // file. // _C -- Constants (ROM). // _I -- Initialized data (RAM). // _ID -- The original content of _I (copied to _I by cstartup) (ROM). // _N -- Uninitialized data (RAM). // _Z -- Zero initialized data (RAM). -carm -DRAMSTART=200040 -DRAMEND=203FFF -DSDRAMSTART=20000000 -DSDRAMEND=21FFFFFF -DROMSTART=40 -DROMEND=1FFFFF -Z(CODE)INTVEC=00-3F -Z(CODE)ICODE,DIFUNCT=ROMSTART-ROMEND -Z(CODE)SWITAB=ROMSTART-ROMEND -Z(CODE)CODE=ROMSTART-ROMEND -Z(CONST)CODE_ID=ROMSTART-ROMEND -Z(CONST)INITTAB,DATA_ID,DATA_C=ROMSTART-ROMEND -Z(CONST)CHECKSUM=ROMSTART-ROMEND //************************************************ // Data segments. //************************************************ -Z(DATA)DATA_I,DATA_Z,DATA_N=SDRAMSTART-SDRAMEND //************************************************ // __ramfunc code copied to and executed from RAM. //************************************************ -Z(DATA)CODE_I=SDRAMSTART-SDRAMEND -QCODE_I=CODE_ID //************************************************************************* // Stack and heap segments. //************************************************************************* -D_CSTACK_SIZE=800 // -D_SVC_STACK_SIZE=10 -D_IRQ_STACK_SIZE=300 -D_HEAP_SIZE=4000 -Z(DATA)CSTACK+_CSTACK_SIZE=RAMSTART-RAMEND // -Z(DATA)SVC_STACK+_SVC_STACK_SIZE=RAMSTART-RAMEND -Z(DATA)IRQ_STACK+_IRQ_STACK_SIZE=RAMSTART-RAMEND -Z(DATA)HEAP+_HEAP_SIZE=SDRAMSTART-SDRAMEND
  4. Ну из твоих постов не было очевидно, что ты проверяешь то что в SDRAM лежит. А что значит "прыжок" в твоем понимании? Почему ты переход по адресу 0x20000000 делаешь? Там ведь вектора прерываний в начале. А в нулевом стоит команда перехода на __program_start. Ты уверен что у тебя код скомпилирован так, что __program_start в SDRAM попадает? Посмотри Memory map, там все видно будет. Возможно, тебе нужно делать "прыжок", как ты говоришь, по адресу 0x20000040. А лучше написать XCL правильно и загружать код в соответствии с этим XCL.
  5. JTAG по тебе плачет. Недавно только на дружественном этому форуме кто-то спрашивал: "И что вы там JTAGом отлаживаете?". Мне кажется что это как раз тот случай. А SDRAM А.C.Пушкин инициализирует? Ну хоть убейте, но никогда не поверю, что можно вслепую это сделать.
  6. Метценгерштейн Не надо сразу лезть в дебри, возьмите простой проект на чистом С без всяких asm, подрыгайте ножками, поопределяйте прерывания. Как освоите - будете извращаться дальше. Вот у меня лет эдак за 8 так и не возникло желания что-то на ASM вставлять.
  7. AT91RM9200 ST interrupt

    Кропаю тут мегалоадер с выбором варианта загрузки через DBGU, другие USART и очень хотелось бы с USB. XModem через DBGU запустил. Прикрутил к проекту атмеловский BasicUSB - теперь в системе появляется модем с COM-портом, к которому могу подключиться терминалом. А как теперь XModem через USB пустить. В даташите написано, что можно, а вот как что-то не очень.
  8. Может просто неправильно инициализируешь клоки? Не забудь, что SCM для флэшки надо инициализировать до того как переходишь на высокие тактовые MCK - флэшка то поди 70 нс? А то что из SDRAM работает это заслуга загрузчика, который за тебя уже все инициализировал.
  9. Как и обещал выкладываю новую версию FlashLoader-а для IAR+AT91RM9200. Добавлена поддержка DataFlash AT45DB321 и AT45DB642. Остальные легко добавляются по аналогии. Обратите внимание на параметры, которые надо передать при запуске - они орсаны в файле !Parameters.txt. FL_AT91RM9200_AM29_AT45.RAR
  10. Ребят, давайте мух от котлет отделять. 1. vvj, Если у тебя 29LV160 в 16-разрядном режиме, то забей на Bootloader. Тебе достаточно прошить код, перевести BMS в 0 и он стартанет прямо с флэшки. Только не забывай про ремэпы и что внутренняя SRAM проца будет по адресу 0x200000 и это надо указать в XCL-файле. Для 8-разрядного режима будет работать механизм Bootloader, только почитай Errata пункт 37. 2. Насчет cstartup.s79 и векторов. Все вектора, которые используются в приложении, будут вкомпилены в выходной файл. Если часть векторов не используется, как в вашем случае, на их местах будут нули. Для обычного приложения это штатная ситуация. Если мы хотим чтобы BootLoader признал наш код за валидное приложение, то должны прописать все вектора, а шестой еще и специальной информацией. Проще всего это сделать в cstartup.s79. Пример такого cstartup.s79 прикрепляю. Обратить внимание на код по адресу 0x14. 3. Насчет XCL-файла. Смею вас огорчить, но запрограммировать ARM в IAR не прописав руками XCL нереально. Справедливости ради надо отметить, что в настройках линкера есть кнопочка Command line configuration tool, но я как-то попробовал ей законфигурить и плюнув просто написал все в XCL. А необходимо это все по очень простой причине. ВЫ ДОЛЖНЫ СКАЗАТЬ КОМПИЛЯТОРУ СКОЛЬКО КАКОЙ ПАМЯТИ ПО КАКИМ АДРЕСАМ ЕСТЬ В СИСТЕМЕ И КУДА РАЗМЕЩАТЬ ВЕКТОРА ПРЕРЫВАНИЙ, СТЭКИ, СЕГМЕНТЫ КОДА И ДАННЫХ, КУЧУ. Ведь ARM может иметь довольно богатый набор различных типов памяти на борту и за бортом. Плюс тот же REMAP надо учесть. При этом, в отличии напримр от AVR, адресное пространство данных не отделено от адресного пространства программ, что дает множество возможных вариантов построения проекта. На этом месте советую почитать про сегменты в IAR-вском хэлпе. 4. Более того, один проект обычно содержит несколько XCL. Например, для отладки совсем не обязательно прошивать флэшки, а можно использовать для размещения кода SDRAM. При финальной же компиляции все переносится во flash. И примеров, когда надо использовать разную память в проекте, может быть множество. 5. Насчет Wiggler. Он хорош, если ARM для вас хобби. Но если это ваша работа, то я не понимаю как можно экономить на инструменте. Сравните стоимость фирменного J-Link и более чем вдвое дешевого MT-Link со стоимостью изготовления опытной четырех-шестислойной печатной платы для AT91RM9200 со всей его периферией !!! После подписания счета на печатные платы мой директор счет на J-Link подмахнул даже не спросив что это. Кстати, Flashloader для DataFlash уже работает. Так что, сегодня-завтра еще обкатаю на предмет ошибок и в понедельник выложу. cstartup.rar
  11. Еще раз внимательно прочти страницу 88 и особенно 89 даташита doc1768.pdf. Лучше чем там написано объяснить трудно. Вкратце - шестрой вектор содержит ИНФОРМАЦИЮ О ТИПЕ МИКРОСХЕМЫ Flash и РАЗМЕР КОДА для загрузки. А остальные вектора команды LDR или B. И все будет грузится. Кстати, эти 32 байта не добавляются, а являются частью кода, так что лучше скомпилировать код сразу как надо. Только не советую проводить опыты без JTAG, а то как только оно начнет грузиться из SPI, то про загрузку по XModem можно забыть. Разве что NPCS0 отключить джампером. Ну или предварительно загрузчик в параллельную флэш прописать и дергать BMS в случае чего. Ну и про Embedded Services - все работает. Причем, точно так как написано в даташите. Надо только не забывать проверять статус занятости микросхемы перед выполнением каких-либо действий с ней.
  12. Вопрос не в том чтобы загрузиться, это я как раз умею и без hex-редактора. Вопрос в том чтобы FlashLoader делал поправки на автомате. Для того чтобы прошивка загрузилась из SPI надо выполнить два условия: 1) Шестой вектор содержит информацию о размере кода и типе Flash 2) Все остальные вектора команду перехода. Если с первым все понятно - никаких вольностей, все до бита определено, то ко второму вопросу можно подойти творчески. - ничего не менять. Это правильней всего, пусть программист сам все определит в программе. - если какие-то вектора пустуют, то их можно насильно прописать. Это упростит жизнь новичкам, которые еще не весь даташит наизусть знают. Только хочется сделать это максимально правильно.
  13. 2Гб протому что пытаешься данные для разных типов памяти, которые естественно чисто по адресации разнесены на километры, поместить в один файл. В жизни так не бывает. Правь xcl файл твоего проекта чтобы разместить все в одном чипе (в том где это должно быть, а не по всему адресному пространству). Более подробно читать про сегменты.
  14. Команда чтения из UDR влияет на конечный автомат USARTа и там что-то сбрасывается при этом. Читай даташит - там английским по белому написано, что признаком приема байта является флаг и генерируемое им прерывание. Зачем изобретать другой механизм, если разработчики чипа тебе все написали. AVR еще очень простой кристалл. Если такие вольности позволять себе на более сложном железе, то ничего никогда не заработает! А сосвсем "попацановски" будет поместить код считывания UDR и дергания ноги в прерывание и освободить проц от опроса USR.
  15. В меню настройках Debuger надо указать Use macro file на файл .mac, а на вкладке Download галку Use flashloader. И потом добавить запись с указанием файлв d79. В параметрах указать стартовый адрес flash. Дополнительно можно задать параметры --erasechip чтобы стереть весь чип перед записью или --eraseonly чтобы только стереть чип без записи. Кстати, на подходе новая версия с поддержкой DataFlash на SPI. На выходных дотестирую и выложу. В связи с этим вопрос к спецам возник. Я хочу сделть команду, которая позволит прописать в вектора прерываний данные, чтобы BootLoader распознал прошивку как загрузочную. Что делать с 6-м вектором понятно - там рамер прошивки и параметры flash, которые определяются на автомате. А как бытьс остальными векторами? Если они не прописаны, что туда записать? Есть идея просто 0-й продублировать. Прокатит ли?
  16. bootloader

    prottoss прав, в IAR размещение сегментов в памяти надо ручками в xcl править. В примере с Atmel лежит экселевский скрипт, который это xcl генерит. Но мне кажется лучше это сделать ручками для полного контроля и понимания.
  17. Для того чтобы использовать этот FlashLoader надо подключиться по J-TAG. Не важно чем Wiggler подойдет. С его помощью можно flash прошить. Подробнее смотри EWARM User Guide страницу 232. Там все подробно. Для X-Modem это решение не идет. Подойдет вот это http://www.ucrouter.ru/download/AT91RM9200-29lv160d.bin Собственно там еще много чего интересного есть.
  18. Выходной формат поставь raw-binary и будет тебе обычный бинарник. Кстати, EWARM 4.31 это опечатка или я отстал от жизни?
  19. Кусок работающего кода #include <iom8.h> #include <ina90.h> #pragma vector=TIMER1_COMPA_vect __interrupt void TIMER1CM() { } int main() { TCCR1B=(1<<WGM12)|(1<<CS12)|(1<CS10); OCR1AH=0; OCR1AL=1; TIMSK=(1<<OCIE1A); __enable_interrupt(); while(1); }
  20. Чем ставить 3 ЦАП, шустрый проц и извращаться с софтом лучше шмальнуть из пушки по воробьям и поставить 3 DDS и самый простой проц c примитивной программой загрузки частоты и фазы. Что-то мне подсказывает что это будет быстрее всего, а по цене на то же и выйдет.
  21. Законное дополнение. Однако, когда объем написанного кода превышает 64 кб, то выбор выходного формата уже не вызывает таких затруднений. И редкая птица в первом же своем проекте превысит 64 кб. :)
  22. intel-standard. На расширение файла .a90 не обращай внимание - внутри будет HEX. Можешь просто переименовать, если душа от этого неспокойна.
  23. Если ты почитаешь Errata, то увидишь, что установка нужных битов еще не гарантирует переключение на нужный генератор. Я бы посоветовал контролировать какие клоки у тебя РЕАЛЬНО выводя их (с деленнием) на PCK0 и контролируя осциллографом. А клоки подавать надо на всю периферию которой пользуешься.
  24. Кэш включить можно вот так: ;------------------------------------------- ; Read/modify/write CP15 Register 1, Control ;------------------------------------------- MRC p15, 0, r0, c1, c0, 0 ; read cp15 control registre (cp15 r1) in r0 ldr r4, =0x00001004 ; Set bit : DCache Enable | ICache enable ORR r0, r0, r4 MCR p15, 0, r0, c1, c0, 0; write r0 in cp15 control registre (cp15 r1) Я это прописал в cstartup.s79. Если писать то же на С, то смотри описание __intrinsic void __MCR( __ul coproc, __ul opcode_1, __ul src, __ul CRn, __ul CRm, __ul opcode_2 ); __intrinsic unsigned long __MRC( __ul coproc, __ul opcode_1, __ul CRn, __ul CRm, __ul opcode_2 ); Выигрыш в скорости большой получишь. Но и без кэша 1/3 МГц что-то маловато. Проверь все ли клоки куда надо переключились. А почему от PLLB заводишься? PLLB обычно на 96 МГц заводят, чтобы на USB 48 МГц подать.
  25. Bender Кэш включи - пошустреет. При условии что все клоки правильно расставил. Что значит "я настроил ПЛЛ на 180/60 МГц" PLLA =180 , MCK = 60? А на процессор солько?
×
×
  • Создать...