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

VladislavS

Свой
  • Постов

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

  • Посещение

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

    9

Сообщения, опубликованные VladislavS


  1. У AT91RM9200 доки совпадают с тем что есть в жизни - можешь им верить. Документ Errata на него смотреть можно уже после того как запустишь проц - там ничего критичного для начала работы нет.

     

    А проверить запустился ли проц наверное и по основному кварцу можно. Когда стартует проц он остановлен. Программа BootLoader его запускает, настраивает периферию под себя и пытается найти откуда грузиться. Если не может загрузиться, то обратно гасит. Осциллографом это легко увидеть. Плюс попытки загрузки по SPI хорошо видно осциллографом. Ну и DBGU соответственно.

  2. Конечно есть и прошли. Потому и советую сначала ознакомиться с даташитом, а потом вопросы по неясностям, неточностям, непоняткам. И никак не наоборот. Кстати, там же еще и Errata лежит. Тоже обязательна для прочтения.

     

    Не обижайся, но если это твой первый проц, то будет очень тяжело. Если нет, то применяй обычный цикл разработки. В любом случае не опускай руки и все получится. На конкретные вопросы тут обычно отвечают грамотно - помогут.

  3. doc1768.pdf

     

    Если хочешь освоить RM9200, это будет твоей настольной книжкой. И даже иногда сниться по ночам будет.

     

    Этот проц не любит внешние клоки на 32768. Там надо кварц вешать. Либо ограничивать размах сигнала до 0.3 В где-то. Но для начала лучше понадежней делать - кварц прямо на ноги проца.

     

    Насчет WIGGLER ничего не скажу - не пользовал.

  4. 1. Найти схему. Без этого никуда. Ну и doc1768.pdf.

    2. Подать и проверить питание.

    3. Проверить генерит ли часовой кварц. Только щупом не шунтируй его.

     

    Все остальное только после подключения J-TAG. Создавай пустой проект, делай настройки отладчика и пытайся запустить на нем "Hello, World!".

     

    Для подключения J-TAG наверняка пригодится этот файл

    AT91RM9200_mac.rar

  5. Ктонибудь когда нибудь организовывал на С на AVR асемблерную операцию сдвига в бит C (Cerry) и возможно ли это вообще на С ???

     

    А какой в этом тайный смысл, если не секрет. Просто пиши на С, а с регистрами, битами, стеками это уже дело компилятора возиться. Сколько пишу для AVR и ARM на С/С++ ни разу не было желания в Cerry что-то задвигать.

  6. IAR действительно позволяет ADC сразу считать.

    unsigned int tmp=ADC;

     

    А вот так, например, у меня от таймера перебирает каналы:

    #pragma vector=TIMER0_OVF_vect
    __interrupt void TIMER0()
    {
     static unsigned char adc_chanel=0;
     unsigned int value=ADC;
     switch(adc_chanel)
     {
       case 0:
         U0=value;
         adc_chanel++;
         break;
       case 1:
         U1=value;
         adc_chanel++;
         break;
       case 2:
         U2=value;
         adc_chanel++;
         break;
       case 3:
         U3=value;
        adc_chanel=6;
         break;
       case 6:
         U6=value;
         adc_chanel++;
         break;
       case 7:
         U7=value;
         adc_chanel=0;
         break;
     }
     //Запустим следующее преобразование
     ADMUX=adc_chanel;
     ADCSR|=(1<<ADSC);
    }

  7. А ты попробуй. Ведь если не использовать __eeprom не возникает e133. При __no_init в сегмент XDATA тоже ничего не попадает и ошибки не будет.

     

    Единственное, это будет работать, если вы не шьете программатором начальные значение EEPROM. Я, например, всегда в код программы включаю проверку содержимого EEPROM и его инициализацию в случае первого старта.

  8. В этом коде заложены два ключевых момента с которыми я возился:

     

    1. LOCK-и PLL-ей не вставали, если писать туда значения, которые уже были записаны. А это частый случай при внутрисхемной отладке, когда питание не снимается. Поэтому пишем туда то что не могло раньше быть и потом нужное значение.

     

    2. Ваш случай в чистом виде. Errata 26. MDIV, PRES и CSS менять надо отдельно.

  9. Минимальная задержка один такт. Компилятор просто вставит NOP, который выполняется один такт. Если больше задержка, то будет подставлен код, выполняющийся указанное количество тактов. Действительно, посмотри листинг и все поймешь.

  10. Лучше Errata 26 смотри. А то что на другой работает - не показатель. Оно даже на одном чипе может раз от раза то работать, то не работать.

     

    Вот этот код всегда включается:

     

    //Настройка генераторов и PLL.Все настройки для кварца 18.432 МГц

    //Включить главный генератор и задать время запуска 6/32768= 0,18 мс

    PMC_MOR = 1 | (6<<8); // MOSCEN | OSCOUNT

    while(!PMC_SR_bit.MOSCS); //Ждем пока генератор стабилизируется

    //Переводим процессор на главный генератор

    PMC_MCKR = 1 | (0<<2) | (0<<8); // MCK = MAIN PRES=0 MDIV=0

    //Настроим PLLA на 196,6 МГц

    //Действуем согласно ERRATA

    PMC_PLLAR = (1<<29) | (32<<16) | (2<<14) | (28<<8) | 4; // MULA | OUTA | PLLACOUNT | DIVA

    while(!PMC_SR_bit.LOCKA); //Ждем пока PLLA захватится

    PMC_PLLAR = (1<<29) | (32<<16) | (2<<14) | (28<<8) | 3; // MULA | OUTA | PLLACOUNT | DIVA

    while(!PMC_SR_bit.LOCKA); //Ждем пока PLLA захватится

    //Настроим PLLB на 95,8464 МГц

    //Действуем согласно ERRATA

    PMC_PLLBR = (1<<28) | (24<<16) | (28<<8) | 5;

    while(!PMC_SR_bit.LOCKB); //Ждем пока PLLB захватится

    PMC_PLLBR = (1<<28) | (25<<16) | (28<<8) | 5; // USB96M | MULB | PLLBCOUNT | DIVB

    while(!PMC_SR_bit.LOCKB); //Ждем пока PLLB захватится

    #ifdef _TEST_

    //Выведем PLLA/64 на 122-ю ногу (PB27)

    PIOB_PDR= (1<<27); // PB27 на Funck A

    PMC_SCER = (1<<8); PMC_PCK0=2 | (6<<2);

    #endif // _TEST_

    //Переключим процессор на PLLA и MCK на PLLA/2

    //Действуем согласно ERRATA

    PMC_MCKR_bit.MDIV=1; //MCK = PCK/2

    PMC_MCKR_bit.PRES=0; PMC_MCKR_bit.CSS=2; //PCK = PLLA

     

    ЗЫ: На частоты не смотри, там превышение по МСК.

  11. Подскажите пожалуйста, как в EWARM 4.30 настроить множители процессора, шины (для LPC2292), и как настроить J-LINK, а то в Keil это было просто, но сейчас пришлось перейти на IAR и не могу разобраться

     

    Как настроить множители смотри в примерах идущих с компилятором.

    \IAR_ARM_4.30a\arm\src\examples\Philips\ По аналогии для своего проца делай.

    Еще в документации IAR это все подробно расписано. А J-Link, по большому счету, и настраиваить не надо, просто выбрать из списка и все.

  12. На самом деле SDRAM как-то по умолчанию инициализируется. Если чудесным образом совпадет конфигурация с вашей, то... Считай повезло.

     

    За mac спасибо, но ведь это не поможет, так как при старте программы, сегмент кода для SDRAM копируется из flash и затирает все точки останова.

  13. Из изменений в интерфейсе сразу бросились в глаза подсветка пар скобок в редакторе и отладчик стал ставить метки расположения сегментов и переменных в памяти.

     

    Теперь можно FlashLoader-ом сегменты в разные участки памяти c разными аргументами шить. То есть, можно в один присест прошить несколько микросхем по разным адресам и даже разного типа. Еще во FlashLoader framework появилась одна новая функция FlExit(), отсутствие которой я заметил еще при написание FlashLoadera.

     

    Для более глубоких исследований времени еще не было. Завтра займусь.

     

    Пока не забыл, задам вопрос по отладке. Сегмент CODE_I находится в SDRAM. SDRAM инициализируется в low_level_init() Естественно, когда IAR загружает код в память и расставляет точки останова SDRAM еще не работает. Более того, потом segment_init копирует CODE_ID в SDRAM все равно без точек останова. Поэтому, расставлять точки останова в редакторе в сегменте CODE_I нет никакого смысла. Приходится ставить брэйк на конец segment_init, а потом в отладчике перерасставлять точки останова на нужные места. Честно говоря, немного затрахивает. Кто как с этим борется?

  14. Да ниче сложного нет. Схемы управления тиристорами массово на 8-ногих пиках делают. Питание прямо от 220 на стабилитроне, определение перехода через ноль - мегомный резистор на вход контроллера. Ну и запуск тиристора через потрон.

  15. При подаче сигнала 50-200mV на Xin32 Xout32 оставался свободен.

    Внешний клок необходим так как сам AT91 потребляет

    слишком много для того чтобы обеспечить сохранение времени на литиевоме

    элементе, приходится ставить внешний RTC например от Epson (потребление меньше 1мкА) со встроеным кврцем.

     

    Если со внешнего RTC подавать сигнал еще и на контроллер, то в пределах 1 мкА не удастся удержаться. Поэтому, не стоит экономить на одном кварце.

  16. А Xout32 пробовали отпустить? Он же в цепи обратной связи стоит и нехорошо её нарушать. У меня часовой кварц 12,5 пФ без емкостей до 300 мВ раскочегаривается. Работает "как часики".

     

    Хотя, не вижу особого смысла подавать внешний клок, если только хочется частоту поменять. Места на плате все равно не выграешь этим.

  17. Обычно действительно работают, но лучше притвориться кварцем :)

     

    Да, часы в этом чипе действительно "не пришей кобыле хвост". Надо все равно ставить отдельно микросхему RTC с батарейкой. Жаль, что такую малость как батарейку на RTC в процессоре не доделали. Получается, что единственная польза от RTC в процессоре это ускорение доступа к часам. Всетаки по i2c быстро время не считать.

×
×
  • Создать...