Jump to content

    

Intel4004

Участник
  • Content Count

    64
  • Joined

  • Last visited

Community Reputation

0 Обычный

About Intel4004

  • Rank
    Участник
  • Birthday 11/06/1973

Контакты

  • Сайт
    http://www.gstar.ru/
  • ICQ
    4976219

Информация

  • Город
    Наб.Челны
  1. Аналог __no_init в Keil ?

    Ну, можно в свойствах проекта, на вкладке Target отрезать от IRAM1 нужное количество памяти, вписать его в IRAM2, и поставить на IRAM2 галочку NoInit. Смысл этого действия тот-же, но не требует редактирования scatter.
  2. Буду думать. PS. 24 байта (непонятно(0), указатель на свободное место, указатель на heap, указатель на мутекс, непонятно(0), свободное место(0)).
  3. Тогда второй вопрос: а как к этому отнесется Keil RTX ?
  4. Я бы с удовольствием. Но сторонние библиотеки (JSON например) эту кучу пользуют со страшной силой. И компилять из одного комплекта исходников пару десятков разных бинарников? И иметь геморрой с производством, которое все перепутает и будет, как вы говорите, сношать мне мозги что ничего не работает? Лучше я отмучаюсь один раз, написав универсальную прошивку, чем пару раз в неделю заново объяснять что и в каком случае из этого зоопарка надо прошивать.
  5. Этот вариант я знаю. Проблема в том, что конфигурацию платы я могу прочитать только после запуска RTOS.
  6. Поясняю: на плате могут распаять SRAM разного размера, могут вообще не распаивать. Конфигурация платы будет прошита в EEPROMке. В зависимости от конфигурации настраиваю heap (адрес/размер), и в зависимости от размера блокирую некоторые функции программы, чтобы не выжрать весь heap.
  7. Проблема в том, что на этапе компиляции я еще не знаю какие именно микросхемы SRAM будут распаяны на плате. Достаточно ли для этого по новому адресу прописать пустую HEAP-структуру, и подменить указатель на heap по адресу __user_libspace()+8 ? Или ссылки на heap еще где-то присутствуют?
  8. USBD. Битые пакеты...

    Я же UDP отлаживал, соответственно у меня открыто окно с регистрами UDP (Peripherals->System Viewer->UDP). И галочка "periodic update" стоит. Вот он и портил FIFO. Достаточно убрать галочку или закрыть окошко с регистрами - все нормально.
  9. USBD. Битые пакеты...

    Такого в моей практике еще не было. Больше недели трахался с абсолютно рабочим исходником. Кстати, как оказалось бит DTGLE вполне можно использовать для определения какой банк сбрасывать (RX_DATA_BK0 или RX_DATA_BK1). status = UDP->UDP_CSR[ep_num]; ... if ((status & (UDP_CSR_RX_DATA_BK0 | UDP_CSR_RX_DATA_BK1)) != (UDP_CSR_RX_DATA_BK0 | UDP_CSR_RX_DATA_BK1)) status &= UDP_CSR_RX_DATA_BK0 | UDP_CSR_RX_DATA_BK1; else { if (status & UDP_CSR_DTGLE) status = UDP_CSR_RX_DATA_BK1; else status = UDP_CSR_RX_DATA_BK0; } UDP_CSR_CLEAR(ep_num, status); Интересно, почему во всех фреймворках используют не DTGLE, а программный флаг, полностью эмулирующий поведение DTGLE? Кстати, кейловский CMSIS MSC оказался не таким тормозным как я ожидал. С SD-флешкой 600Kb/s на запись, 750Kb/s на чтение.
  10. USBD. Битые пакеты...

    МамаМиа! Деру себя за волосы! Выдернул JLink, ребутнул железяку. ОНО РАБОТАЕТ!!! Поехал водку пить...
  11. USBD. Битые пакеты...

    Собрал по быстрому MSC пример в Atmel Studio. Оказалось достаточно просто... Он работает! С теми-же настройками PMC, на тех-же частотах. Железо в порядке. Прошелся по обоим проектам от начала и до прихода первого SETUP пакета. Ничем не отличаются (я на ASF и поглядывал, когда писал). Те-же самые записи, в те-же регистры, в том-же порядке. У них работает, у меня пакет регулярно приходит битым. Поставил брейкпоинт в обоих проектах на прерывание SETUP(когда все уже давно отконфигурировано) и сравнил настройки кеша, EFC, PMC. Привел в соответствие, теперь они идентичны. У прерывания UDP - самый высокий приоритет, но на всякий случай завернул все функции в запретить/восстановить. Даже понатыкал __DMB() где надо и где не надо. Пофигу. Ничего не помогает.
  12. USBD. Битые пакеты...

    А их нет. Когда атмел был еще атмелом - примеры были на каждый чих, как он стал микрочипом - примеры исчезли как класс. Есть Atmel Studio и Atmel Software Framework (ASF), на них можно собрать что-то вроде примера, с минимальным написанием собственного кода - но с ними еще разбираться надо...
  13. USBD. Битые пакеты...

    Пишу CMSIS UDBD драйвер для ATSAM4E. Не могу найти источник глюка. SETUP пакет регулярно приходит с потерей байт. Причем размер пакета (RXBYTECNT в UDP_CSR[0]) правильный, 8 байт, но сам пакет считанный из FIFO сдвинут на один/два байта и дополнен мусором до 8 байт. Например должно прийти: 80 06 00 01 00 00 40 00 приходит: -- 06 00 01 00 00 40 00 dd должно прийти: 00 05 01 00 00 00 00 00 приходит: -- 05 01 00 00 00 00 00 eb должно прийти: 02 01 00 00 84 00 00 00 приходит: -- 01 00 00 84 00 00 00 06 или: -- -- 00 00 84 00 00 00 06 1d Глюк проявляется случайным образом примерно на одном пакете из десяти. Исходник проверил, вылизал и практически уверен, что проблема не в нем. Железяка пока в единственном экземпляре, т.ч. проверить на другой возможности нет. Никто с подобным не сталкивался? В чем может быть источник проблемы? UPD. Причем проблема только с SETUP пакетами. Когда дело доходит до CBW - то OUT транзакции с CBW пакетами проблем не имеют... UPD2. Нет, это я поторопился. bulk транзакции так-же корежатся: INQUIRY H TX 55 53 42 43 d0 1b bc 0d 24 00 00 00 80 00 06 12 00 00 00 24 00 00 00 00 00 00 00 00 00 00 00 D RX 55 53 42 43 d0 1b bc 0d 24 00 00 00 80 00 06 12 00 00 00 24 00 00 00 00 00 00 00 00 00 00 00 D TX 00 80 00 02 1f 00 00 00 4b 65 69 6c 20 20 20 20 44 69 73 6b 20 30 20 20 20 20 20 20 20 20 20 20 31 2e 30 20 H RX 00 80 00 02 1f 00 00 00 4b 65 69 6c 20 20 20 20 44 69 73 6b 20 30 20 20 20 20 20 20 20 20 20 20 31 2e 30 20 D TX 55 53 42 53 d0 1b bc 0d 00 00 00 00 00 H RX 55 53 42 53 d0 1b bc 0d 00 00 00 00 00 READ FORMAT CAPACITIES H TX 55 53 42 43 d0 6b b1 0d fc 00 00 00 80 00 0a 23 00 00 00 00 00 00 00 fc 00 00 00 00 00 00 00 D RX 55 53 42 43 d0 6b b1 0d fc 00 00 00 80 00 0a 23 00 00 00 00 00 00 00 fc 00 00 00 00 00 00 00 D TX -- 00 00 00 08 00 ee 20 00 02 00 02 00 H RX 00 00 00 00 08 00 ee 20 00 02 00 02 00 D TX 55 53 42 53 d0 6b b1 0d f0 00 00 00 00 H RX 55 53 42 53 d0 6b b1 0d f0 00 00 00 00 INQUIRY H TX 55 53 42 43 d0 6b b1 0d ff 00 00 00 80 00 06 12 01 80 00 ff 00 00 00 00 00 00 00 00 00 00 00 D RX -- -- 42 43 d0 6b b1 0d ff 00 00 00 80 00 06 12 01 80 00 ff 00 00 00 00 00 00 00 00 00 00 00 62 f3
  14. ATSAM4E16E PDC не запускается

    Стоило сюда написать, как сразу все заработало. Хреново я из asf-master выдирал, невнимательно. Interface->TWI->TWI_PTCR = TWI_PTCR_RXTDIS | TWI_PTCR_TXTDIS; Interface->TWI->TWI_RNPR = (unsigned int)Buffer; Interface->TWI->TWI_RNCR = Size; Interface->TWI->TWI_PTCR = TWI_PTCR_RXTEN | TWI_PTCR_TXTEN; Interface->TWI->TWI_CR = TWI_CR_START; while ((Interface->TWI->TWI_SR & TWI_SR_ENDRX) == 0); Interface->TWI->TWI_PTCR = TWI_PTCR_RXTDIS | TWI_PTCR_TXTDIS; Interface->TWI->TWI_CR = TWI_CR_STOP; while ((Interface->TWI->TWI_SR & TWI_SR_TXCOMP) == 0);