Мелкие вопросы по МК и ПЛИС.

Если ваш вопрос не влез ни в одну из вышеперечисленных тем, вам сюда.
Аватара пользователя
smalcom
Встал на лапы
Сообщения: 128
Зарегистрирован: Пн фев 08, 2016 10:57:14

Re: Мелкие вопросы по МК и ПЛИС.

Сообщение smalcom »

1.
[uquote="VladislavS",url="/forum/viewtopic.php?p=3697189#p3697189"]Нет, так не прокатит. Регистр SPI_DR чувствителен к разрядности команды записи в него. Правая часть автоматом из uint32_t во время записи командой STRH или STRB обрежется до необходимых 16 и 8 бит.[/uquote]
Там будет не обрезание, а неявное приведение типа. Что ваш, что мой код скомпилируется в одно и то же на STM32. Только это не тот случай когда нужна работа с указателями. И при переносе на BigEndian-систему можно отловить трудновыявимых граблей.

Код: Выделить всё

/**
  * @brief  Transmits a Data through the SPIx/I2Sx peripheral.
  * @param  SPIx: where x can be
  *   - 1, 2 or 3 in SPI mode 
  *   - 2 or 3 in I2S mode
  * @param  Data : Data to be transmitted.
  * @retval None
  */
void SPI_I2S_SendData(SPI_TypeDef* SPIx, uint16_t Data)
{
  /* Check the parameters */
  assert_param(IS_SPI_ALL_PERIPH(SPIx));
  
  /* Write in the DR register the data to be sent */
  SPIx->DR = Data;
}
Тупая библиотека, на помойку её.

2.
IAR делает 9 операций записи, GCC три. Комментарии излишни.
Сначала "убить" volatile приведением типа, а потом геройски найти решение. *КРУТОЧЁ*
В данном случае себя верно ведёт GCC, т. к. данные нигде не используются и результат не нужен.

3.
обрежется до необходимых 16 и 8 бит.
25.5
SPI and I2S registers
Refer to Section 2.1 on page 46 for a list of abbreviations used in register descriptions.
The peripheral registers can be accessed by half-words (16-bit) or words (32-bit).
Хм-м-м... Тупая документация, на помойку её.
Аватара пользователя
VladislavS
Собутыльник Кота
Сообщения: 2562
Зарегистрирован: Вт май 01, 2018 19:44:47

Re: Мелкие вопросы по МК и ПЛИС.

Сообщение VladislavS »

Не кипятись. Если ты чего-то не знаешь, то это не значит что этого нет.
Изображение
111.png
(66.84 КБ) 892 скачивания
Доступ к SPI_DR командой STRH или STRB даёт РАЗНОЕ поведение блока SPI. Ну и конечно же, скомпилированный код будет разный.

Код: Выделить всё

        LDR.N    R0,??DataTable1  ;; 0x4001300c
//*(volatile uint16_t *)&SPI1->DR = 0xAABB;        
        MOVW     R1,#+43707
        STRH     R1,[R0, #+0]
//*(volatile uint8_t *)&SPI1->DR = 0xAA;  
        MOVS     R2,#+170
        STRB     R2,[R0, #+0]
Индусские библиотеки можешь засунуть сам знаешь куда.
Аватара пользователя
smalcom
Встал на лапы
Сообщения: 128
Зарегистрирован: Пн фев 08, 2016 10:57:14

Re: Мелкие вопросы по МК и ПЛИС.

Сообщение smalcom »

РАЗНОЕ поведение блока SPI
При использовании очереди. Да, не знал такой особенности.
Неужели я ошибся.jpg
(18.81 КБ) 362 скачивания
Наверное подсознательно берёгся от этого подблока с такой глупой логикой.
Тем не менее, я бы не использовал один класс для работы с разными подблоками, логичнее использовать наследника, который заточен на работу с очередью.

Хотя вот индусы с тобой согласны

Код: Выделить всё

      if (hspi->TxXferCount > 1U)
      {
        /* write on the data register in packing mode */
        hspi->Instance->DR = *((uint16_t *)pData);
        pData += sizeof(uint16_t);
        hspi->TxXferCount -= 2U;
      }
      else
      {
        *((__IO uint8_t *)&hspi->Instance->DR) = (*pData++);
        hspi->TxXferCount--;
      }
....
  /* Set the Rx Fifo threshold */
  if (hspi->Init.DataSize > SPI_DATASIZE_8BIT)
  {
    /* Set RX Fifo threshold according the reception data length: 16bit */
    CLEAR_BIT(hspi->Instance->CR2, SPI_RXFIFO_THRESHOLD);
  }
  else
  {
    /* Set RX Fifo threshold according the reception data length: 8bit */
    SET_BIT(hspi->Instance->CR2, SPI_RXFIFO_THRESHOLD);
  }
Аватара пользователя
VladislavS
Собутыльник Кота
Сообщения: 2562
Зарегистрирован: Вт май 01, 2018 19:44:47

Re: Мелкие вопросы по МК и ПЛИС.

Сообщение VladislavS »

Но ведь библиотека может сама решать какие методы использовать в конкретном случае. Мне недавно посчастливилось участвовать/примазаться к разработке/тестированию одной библиотеки. Вот одна функция из неё как раз в тему. Запись в регистр по маске. Игра на скипе наложения маски при определённых счастливых значениях маски.

Код: Выделить всё

  template<uint32_t dmask>
  static _inline_ void writeReg32(volatile uint32_t* reg, uint32_t value)
  {    
    if constexpr (dmask == 0xFFFFFFFF) 
      *reg = value;
    else if constexpr (dmask == 0x0000FFFF) 
      *(volatile uint16_t*)reg = value;
    else if constexpr (dmask == 0xFFFF0000) 
      *((volatile uint16_t*)reg + 1) = value >> 16;
    else if constexpr (dmask == 0x000000FF)
      *(volatile uint8_t*)reg = value;
    else if constexpr (dmask == 0x0000FF00)
      *((volatile uint8_t*)reg + 1) = value >> 8;
    else if constexpr (dmask == 0x00FF0000)
      *((volatile uint8_t*)reg + 2) = value >> 16;
    else if constexpr (dmask == 0xFF000000)
      *((volatile uint8_t*)reg + 3) = value >> 24;
    else
      *reg = (*reg & ~dmask) | value;
  }
На другом дружественном форуме её охарактеризовали как "чудовище". Но когда она компилируется в пару ассемблерных команд чувства совсем другие посещают.
Аватара пользователя
smalcom
Встал на лапы
Сообщения: 128
Зарегистрирован: Пн фев 08, 2016 10:57:14

Re: Мелкие вопросы по МК и ПЛИС.

Сообщение smalcom »

Минус чтение регистра - это плюс, но выглядит действительно... не чувствуется красоты. Наверное просто придирка.
Аватара пользователя
*Trigger*
Друг Кота
Сообщения: 3059
Зарегистрирован: Пн май 11, 2009 14:15:00
Откуда: СПб

Re: Мелкие вопросы по МК и ПЛИС.

Сообщение *Trigger* »

СпойлерVladislavS, разве в последней строчке не нужно так написать?

Код: Выделить всё

*reg = (*reg & ~dmask) | (value & dmask);
Иначе могут установиться некоторые биты в тех местах, где в маске 0, а в value 1.
Этот пост оказался полезен? Не поленись, нажми Изображение слева!
:) :)) :)))
Куплю индикаторы ИТС-1А, ИТС-1Б, ИГВ1-8х5Л, ИГПС1-222/7, ИГПС1-111/7 и подобные.
Аватара пользователя
VladislavS
Собутыльник Кота
Сообщения: 2562
Зарегистрирован: Вт май 01, 2018 19:44:47

Re: Мелкие вопросы по МК и ПЛИС.

Сообщение VladislavS »

В общем случае да, но в библиотеке на вход этой функции приходят подготовленные данные, в них нет лишних бит. Подготовка этих данных как раз и есть основная сложность библиотеки, а это уже финальная мелкая оптимизация.
Аватара пользователя
*Trigger*
Друг Кота
Сообщения: 3059
Зарегистрирован: Пн май 11, 2009 14:15:00
Откуда: СПб

Re: Мелкие вопросы по МК и ПЛИС.

Сообщение *Trigger* »

Ну, если за этим внимательно следить, то и так можно, конечно.
А вообще, неужели при оптимизации подобное выражение:

Код: Выделить всё

*reg = (*reg & ~((uint32_t)0x0000FFFF)) | (value & 0x0000FFFF)
достаточно умный компилятор сам не заменит на запись в 16-битный регистр? Что-то я сомневаюсь в полезности такой "ручной" обработки всех 8-ми и 16-ти битных случев... :dont_know:
Этот пост оказался полезен? Не поленись, нажми Изображение слева!
:) :)) :)))
Куплю индикаторы ИТС-1А, ИТС-1Б, ИГВ1-8х5Л, ИГПС1-222/7, ИГПС1-111/7 и подобные.
Аватара пользователя
VladislavS
Собутыльник Кота
Сообщения: 2562
Зарегистрирован: Вт май 01, 2018 19:44:47

Re: Мелкие вопросы по МК и ПЛИС.

Сообщение VladislavS »

Не заменит. Если регистр определён как _IO uint32_t *reg; то запись будет всегда 32-битная. И оптимизация то не ручная, её компилятор на этапе компиляции сам делает.

Добавлено after 14 minutes:
Трудно удержаться, чтобы не похвастаться. Вот тут конфигурация трёх GPIO контроллера.

Код
Спойлер

Код: Выделить всё

ConfigList<
  PinMode::PushPull_MediumSpeed<0>, 
    PA3, PA5, PA7, PA12, 
    GpioB<0x3F>, PB13, PB14, PB15, 
    GpioC<0xF>, PC5, PC6, PC8, PC9, PC15, 
  PinMode::Floating,               
    PA0, PA1, PA2, PA4, PA6, PA10, PA11, 
    PB6, PB12, PC4, PC7, 
  PinMode::PullDown, PA13, PA14, 
  PinMode::AF_PushPull_MediumSpeed,
    PA8, PA9, PA15, 
  PinMode::AF_OpenDrain_MediumSpeed, 
    PB8, PB9, PB10, PB11, 
  PinMode::AF_PushPull_HighSpeed, PB7,
  PinMode::Floating, CfgCmd::AllUnusedPins
>::mode();
Листинг. Всё просчитал компилятор сам на этапе компиляции!
Спойлер

Код: Выделить всё

        LDR.N    R2,??__low_level_init_0+0x2C  ;; 0x40010004
        LDR.N    R3,??__low_level_init_0+0x30  ;; 0x14141444
        LDR.N    R4,??__low_level_init_0+0x34  ;; 0x98814499
        LDR.N    R5,??__low_level_init_0+0x38  ;; 0x836f0000
        STR      R3,[R2, #+2044]
        STR      R4,[R2, #+2048]
        LDR.N    R3,??__low_level_init_0+0x3C  ;; 0x70a80000
        LDR.N    R4,??__low_level_init_0+0x40  ;; 0xb4111111
        STR      R3,[R2, #+2060]
        STR      R4,[R2, #+3068]
        LDR.N    R3,??__low_level_init_0+0x44  ;; 0x1114dddd
        LDR.N    R4,??__low_level_init_0+0x48  ;; 0xe03f0000
        STR      R3,[R2, #+3072]
        STR      R4,[R2, #+3084]
        LDR.N    R3,??__low_level_init_0+0x4C  ;; 0x41141111
        LDR.N    R4,??__low_level_init_0+0x50  ;; 0x14444411
        STR      R3,[R2, #+4092]
        LDR.N    R3,??__low_level_init_0+0x54  ;; 0x40011004
        STR      R4,[R3, #+0]
        STR      R5,[R3, #+12]
Убрал комментарии, а то за ними на мобильных экранах кода не видно.
Аватара пользователя
Dmitriy70
Встал на лапы
Сообщения: 96
Зарегистрирован: Пт сен 08, 2017 16:54:41

Re: Мелкие вопросы по МК и ПЛИС.

Сообщение Dmitriy70 »

появилась необходимость прошить флешь 25Q32 телевизора. Есть в наличии программатор, я им atmega тестер транзисторов прошивал Изображение названия на нем нет - подойдёт ли он для моих целей? или надо другой брать?
Аватара пользователя
baron_P
Нашел транзистор. Понюхал.
Сообщения: 183
Зарегистрирован: Вт сен 14, 2010 23:07:10
Откуда: Ростов

Re: Мелкие вопросы по МК и ПЛИС.

Сообщение baron_P »

Доброго дня.
Есть у меня привод ELL 12030 на котором периодически сбоит АЦП. В качестве АЦП используется микросхема AD7927, а общается с ней микроконтроллер ADSP2181. Схема их соединения выглядит так:
СпойлерИзображение
Осциллографом я просмотрел сигналы. На SCLK идет частота 16 МГц, на остальных - разные последовательности импульсов. Когда я касаюсь щупом контакта DI0, тут же появляется сбой АЦП. Понятно, вношу помеху, но меня смущает форма импульсов на этом контакте. Выглядят они так:
СпойлерИзображение
Тоже самое в большем разрешении:
СпойлерИзображение
В начале каждого импульса (перепад 1-0) появляется какой-то странный всплеск длительностью 100 нс. Как будто дребезг контакта, но там же транзисторы на выходе, а не реле. Вопрос: нормально ли такое поведение? Это какие-то помехи или специально сгенерированный контроллером сигнал?
We do what we must because we can (c) GLaDOS
jcxz
Мудрый кот
Сообщения: 1717
Зарегистрирован: Вт авг 15, 2017 10:51:13

Re: Мелкие вопросы по МК и ПЛИС.

Сообщение jcxz »

[uquote="baron_P",url="/forum/viewtopic.php?p=3740728#p3740728"]нормально ли такое поведение? Это какие-то помехи или специально сгенерированный контроллером сигнал?[/uquote]Нормально. Эти артефакты вносит ваш щуп. Покрутите подстроечник в своём щупе. А также - землю для SCLK берите как можно ближе к точке, откуда берёте SCLK и подавайте её на металлическое колечко вокруг острия щупа.
Аватара пользователя
baron_P
Нашел транзистор. Понюхал.
Сообщения: 183
Зарегистрирован: Вт сен 14, 2010 23:07:10
Откуда: Ростов

Re: Мелкие вопросы по МК и ПЛИС.

Сообщение baron_P »

[uquote="jcxz",url="/forum/viewtopic.php?p=3740733#p3740733"]Нормально. Эти артефакты вносит ваш щуп. Покрутите подстроечник в своём щупе. А также - землю для SCLK берите как можно ближе к точке, откуда берёте SCLK и подавайте её на металлическое колечко вокруг острия щупа.[/uquote]
Спасибо за информацию. Увы, у меня не настолько продвинутый щуп - нет на нем ни подстроечника ни колечка вокруг острия)
We do what we must because we can (c) GLaDOS
Аватара пользователя
Ivanoff-iv
Друг Кота
Сообщения: 7077
Зарегистрирован: Пт ноя 11, 2016 05:48:09
Откуда: Сердце Пармы

Re: Мелкие вопросы по МК и ПЛИС.

Сообщение Ivanoff-iv »

[uquote="Dmitriy70",url="/forum/viewtopic.php?p=3729878#p3729878"]появилась необходимость прошить флешь 25Q32 телевизора.[/uquote]надо разобраться что за программатор... для USBasp ов и их клонов есть спецпрошивка, позволяющая шить и эти микры (сам так делал)... со стандартной прошивкой и стандартным совтом этот программатор скорее всего не подойдет...
Для тех, кто не учил магию мир полон физики :)
Безграмотно вопрошающим про силовую или высоковольтную электронику я не отвечаю, а то ещё посадят за участие в (само)убиении оболтуса...
Аватара пользователя
Shumadan
Встал на лапы
Сообщения: 106
Зарегистрирован: Вт июл 25, 2017 22:47:08
Откуда: KAZAN

Re: Мелкие вопросы по МК и ПЛИС.

Сообщение Shumadan »

В МК новичок, поэтому не пинайте за вопросы.
Нужно реализовать многоразрядный параллельный регистр в одном корпусе. Составлена даже схема на простых логических элементах (где то 300 элементов). Что лучше использовать ПЛИС или МК?
Есть некоторое количество GAL16, GAL20, PIC16F628. Хватит ли их ресурсов?
Аватара пользователя
Мурик
Друг Кота
Сообщения: 3383
Зарегистрирован: Пн окт 11, 2010 19:00:08

Re: Мелкие вопросы по МК и ПЛИС.

Сообщение Мурик »

Shumadan писал(а):Нужно реализовать многоразрядный параллельный регистр в одном корпусе.
В одной микросхеме?
Тогда PIC16F628 не подойдет. У него выводов мало.
Уточните сколько выводов должно быть у регистра.
Аватара пользователя
Shumadan
Встал на лапы
Сообщения: 106
Зарегистрирован: Вт июл 25, 2017 22:47:08
Откуда: KAZAN

Re: Мелкие вопросы по МК и ПЛИС.

Сообщение Shumadan »

[uquote="Мурик",url="/forum/viewtopic.php?p=3742046#p3742046"]
Shumadan писал(а):Нужно реализовать многоразрядный параллельный регистр в одном корпусе.
В одной микросхеме?
Тогда PIC16F628 не подойдет. У него выводов мало.
Уточните сколько выводов должно быть у регистра.[/uquote]
Вроде должно хватить. Если нет каких то ограничений.
5 входов и 5 выходов, 1 вход тактирующий
Аватара пользователя
Shumadan
Встал на лапы
Сообщения: 106
Зарегистрирован: Вт июл 25, 2017 22:47:08
Откуда: KAZAN

Re: Мелкие вопросы по МК и ПЛИС.

Сообщение Shumadan »

так никто не поможет? стою и думаю с чего начать изучение - МК или ПЛИС?
Аватара пользователя
recyclebin
Встал на лапы
Сообщения: 116
Зарегистрирован: Ср май 14, 2014 20:44:56
Откуда: Республика Карелия

Re: Мелкие вопросы по МК и ПЛИС.

Сообщение recyclebin »

Парни, привет. Может кто подсказать каким простеньким (желательно из тех что есть на Али) программатором можно прочитать и перезаписать память 95640? В наличии имеется ПикКит3 и USBasp 2.0 но они как я понял не умеют читать и шить память да?
Бубоник
Мучитель микросхем
Сообщения: 449
Зарегистрирован: Вс авг 16, 2015 13:08:53

Re: Мелкие вопросы по МК и ПЛИС.

Сообщение Бубоник »

Всем привет! Ребята подскажите почему stm8 нагинает stm32? Брал одинаковый кусок кода (переменные 32 бит) ставил оба мк на 8МГц, в итоге в итоге stm8 шуршит быстрее раза в 4. По дизасемблеру смотрел код разница незначительная, но не на столько чтобы в 4 раза медленнее работал
recyclebin SPI флешки перепрошивал extrapic-oм. Но я под него софт еще пилил.
Ответить

Вернуться в «Разные вопросы по МК»