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

Flexz

Свой
  • Постов

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

  • Посещение

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


  1. Прелесть СФ1 в том, что в одном корпусе и проц, и плис, и довольно богатая аналоговая часть. В СФ2 аналоговой части нет.

    Кстати, для написания софта под СФ Актель тоже предлагает Эклипс.

  2. Раздел System architecture, почти вся периферия, кроме GPIO, сидит на одном AHB-APB мосту.

    Пересылка с помощью DMA занимает минимум пять тактов, а цикл из первого поста, если не ошибаюсь, выполняется за три. Вот и выходит, что ядро и DMA почти постоянно заняты дележкой шины.

  3. Тут еще другое интересно - в других процессорах серии (F1/2/4) в регистре статуса АЦП присутствует бит Overflow, который устанавливается в 1 в случае если DMA не успевает забрать данные из DR. При этом АЦП останавливается, что защищает от получения перепутанных данных (при преобразовании последовательности каналов).

    В F37x такого бита нет, и что происходит, если DMA не успевает забрать данные - мануал умалчивает. Видимо, данные по-тихому теряются.

  4. Какая у вас скорость поступления данных с датчика? Может достаточно будет SPI-флешки?

     

    Для USB, в качестве отправной точки, можно взять пример Mass Storage, который идет с библиотекой. И либо общаться с устройством как с RAW диском, тогда приложению потребуются админские привилегии (в win7) и система при подключении устройства будет предлагать отформатировать диск. Последнее обходится созданием фиктивной файловой системы - в начале диска, на десяток килобайт, лишь бы система увидела что раздел есть и не паниковала. Либо заюзать libusb.

  5. Актелевский софт это просто нечто.. Зависоны и вылеты - норма жизни. Иногда Libero начинает упорно падать при запуске, ребутнешь комп - вроде помогло.

    "Удобство" использования - отдельная песня. Как раз сегодня начал разбираться со SmartFusion (cortex-m3 и плис в одном флаконе) и просто выпал в осадок.. для изменения прошивки процессора требуется пересобрать весь проект, начиная с синтеза и т.д.

    Или вот как выглядит сам процесс прошивки: из программы программтора мы сначала экспортируем файлик, а потом в нее же его загружаем :wacko:

  6. А обычные линейки по что забыли-то?

    Полный список из stm32f10x.h

      /* #define STM32F10X_LD */     /*!< STM32F10X_LD: STM32 Low density devices */
      /* #define STM32F10X_LD_VL */  /*!< STM32F10X_LD_VL: STM32 Low density Value Line devices */  
      /* #define STM32F10X_MD */     /*!< STM32F10X_MD: STM32 Medium density devices */
      /* #define STM32F10X_MD_VL */  /*!< STM32F10X_MD_VL: STM32 Medium density Value Line devices */  
      /* #define STM32F10X_HD */     /*!< STM32F10X_HD: STM32 High density devices */
      /* #define STM32F10X_HD_VL */  /*!< STM32F10X_HD_VL: STM32 High density value line devices */  
      /* #define STM32F10X_XL */     /*!< STM32F10X_XL: STM32 XL-density devices */
      /* #define STM32F10X_CL */     /*!< STM32F10X_CL: STM32 Connectivity line devices */

  7. Вот в этом месте у меня во всех проектах немного по-другому - тело цикла вынесено в функцию, которая кладет в буфер один единственный байт (изначально делалось для putchar).

    uint16_t VCP_ByteTx (uint8_t dataByte)
    {
      APP_Rx_Buffer[APP_Rx_ptr_in] = dataByte;
      APP_Rx_ptr_in++;
    
      /* To avoid buffer overflow */
      if(APP_Rx_ptr_in == APP_RX_DATA_SIZE)
      {
        APP_Rx_ptr_in = 0;
      }
    
      return USBD_OK;
    }

    В том проекте, на который я выше ссылку давал, перемещение массива в буфер дополнительно обернуто в запрет прерываний, и там тоже по байту кладется.

    Возможно, это имеет значение, по-другому я даже не пробовал.

  8. Может у вас проблема в другом месте? Кабель плохой, например..

    У меня с USB на STшных процессорах никогда проблем не было - просто брал пример, заменял верхнюю часть и оно просто работало. (если не учитывать некоторых косяков в HS режиме, с которыми я так и не взялся разобраться)

  9. Да, пример из этого архива.

    Пачки уходят вплоть до 24кб за раз. Правда на каком-то этапе они разбиваются на блоки размером не более 4кб (видно в USBTrace). Подробно не вникал где именно, но это явно больше чем 32 байта.

    Один из проектов есть в открытом доступе https://code.google.com/p/logicdiscovery/so...FLogicDiscovery

    PS а вы случайно не в HS режиме его запускаете? У меня в HS режиме с внешней физикой этот код тоже тупил.

  10. Насколько я понял, DMA из портов не работает. Это верно?

    С чего вы взяли? Замечательно работает.

    По времени, замерял на F4, пересылка через DMA в режиме M2M занимает 4 такта. F1 архитектурно почти такой же в плане DMA, шины и портов, так что скорости должны быть аналогичными.

    Но с портами 4 байта за раз не прокатит, они же 16-битные.

  11. Большую часть времени съедает вычитывание команд:

    FLASH_SetLatency(FLASH_Latency_2);

    На каждое обращение к флешу тратится два лишних такта. Или разместите код в озу или снизте частоту процессора так что бы работать без дополнительных циклов ожидания.

  12. 1) Когда использую регистры, не работают конструкции с assign. Так и должно быть ?

    2) У меня сейчас синхронизация по отрицательному фронту clk. Как правильнее - по отрицательному или по положительному фронту, или без разницы ?

    1 - Все правильно, assign это, грубо-говоря, подключение провода (wire) к комбинаторной конструкции. А если данные записываются в регистр - нужно указать по какому фронту какого клока это делать.

    2 - Если абстрактно - то правильно по тому фронту, по которому у вас весь дизайн построен. Однако, в большинстве случаев работают по положительному.

  13. Был у нас проект как раз на L151, данные снимались с SPI-датчика и сливались в SPI-флешку. Процессор работал на своих полных 32МГц, флешка вроде бы 16, датчики медленнее, точно скорости не помню уже.. зато помню забавный момент - заменили кварц на вдвое более быстрый, а инициализацию PLL я исправить забыл :) в итоге проц вполне успешно работал на частоте вдвое выше номинала.

     

    PS а вы не пробовали работать по второму SPI? их же два в этих процах.

  14. P.S. Не умеет STM32 махать ногами с большой скоростью.

    Неправда ваша. Замечательно махает на частоте 1/2 системной, без использования таймера. Правда на младших моделях (без акселератора и кеша, stm32f1 и ниже) я не замерял, но думаю если разместить код в озу - замахает.

     

    А настройки порта определяют крутизну фронтов.

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