Например TDA7294

Форум РадиоКот • Просмотр темы - Мелкие вопросы по МК и ПЛИС.
Форум РадиоКот
Здесь можно немножко помяукать :)





Текущее время: Пн июл 14, 2025 06:16:53

Часовой пояс: UTC + 3 часа


ПРЯМО СЕЙЧАС:



Начать новую тему Ответить на тему  [ Сообщений: 12545 ]     ... , , , 605, , , ...  
Автор Сообщение
Не в сети
 Заголовок сообщения: Re: Мелкие вопросы по МК и ПЛИС.
СообщениеДобавлено: Пн сен 09, 2019 15:39:29 
Встал на лапы
Аватар пользователя

Карма: -4
Рейтинг сообщений: -2
Зарегистрирован: Пн фев 08, 2016 10:57:14
Сообщений: 128
Рейтинг сообщения: 0
1.
Нет, так не прокатит. Регистр SPI_DR чувствителен к разрядности команды записи в него. Правая часть автоматом из uint32_t во время записи командой STRH или STRB обрежется до необходимых 16 и 8 бит.

Там будет не обрезание, а неявное приведение типа. Что ваш, что мой код скомпилируется в одно и то же на 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).

Хм-м-м... Тупая документация, на помойку её.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Мелкие вопросы по МК и ПЛИС.
СообщениеДобавлено: Пн сен 09, 2019 16:20:28 
Собутыльник Кота
Аватар пользователя

Карма: 18
Рейтинг сообщений: 428
Зарегистрирован: Вт май 01, 2018 19:44:47
Сообщений: 2529
Рейтинг сообщения: 0
Не кипятись. Если ты чего-то не знаешь, то это не значит что этого нет.
Изображение
Вложение:
111.png [66.84 KiB]
Скачиваний: 867

Доступ к 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]

Индусские библиотеки можешь засунуть сам знаешь куда.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Мелкие вопросы по МК и ПЛИС.
СообщениеДобавлено: Пн сен 09, 2019 17:05:13 
Встал на лапы
Аватар пользователя

Карма: -4
Рейтинг сообщений: -2
Зарегистрирован: Пн фев 08, 2016 10:57:14
Сообщений: 128
Рейтинг сообщения: 0
Цитата:
РАЗНОЕ поведение блока SPI

При использовании очереди. Да, не знал такой особенности.
Вложение:
Неужели я ошибся.jpg [18.81 KiB]
Скачиваний: 352


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

Хотя вот индусы с тобой согласны
Код:
      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);
  }


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Мелкие вопросы по МК и ПЛИС.
СообщениеДобавлено: Пн сен 09, 2019 17:37:20 
Собутыльник Кота
Аватар пользователя

Карма: 18
Рейтинг сообщений: 428
Зарегистрирован: Вт май 01, 2018 19:44:47
Сообщений: 2529
Рейтинг сообщения: 0
Но ведь библиотека может сама решать какие методы использовать в конкретном случае. Мне недавно посчастливилось участвовать/примазаться к разработке/тестированию одной библиотеки. Вот одна функция из неё как раз в тему. Запись в регистр по маске. Игра на скипе наложения маски при определённых счастливых значениях маски.
Код:
  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;
  }
На другом дружественном форуме её охарактеризовали как "чудовище". Но когда она компилируется в пару ассемблерных команд чувства совсем другие посещают.


Вернуться наверх
 
Выбираем индустриальные и медицинские источники питания MEAN WELL в открытом исполнении

Использование модульных источников питания открытого типа широко распространено в современных устройствах. Присущие им компактность, гибкость в интеграции и высокая эффективность делают их отличным решением для систем промышленной автоматизации, телекоммуникационного оборудования, медицинской техники, устройств «умного дома» и прочих приложений. Рассмотрим подробнее характеристики и особенности трех самых популярных вариантов AC/DC-преобразователей MW открытого типа, подходящих для применения в промышленных устройствах - серий EPS, EPP и RPS представленных на Meanwell.market.

Подробнее>>
Не в сети
 Заголовок сообщения: Re: Мелкие вопросы по МК и ПЛИС.
СообщениеДобавлено: Пн сен 09, 2019 18:57:56 
Встал на лапы
Аватар пользователя

Карма: -4
Рейтинг сообщений: -2
Зарегистрирован: Пн фев 08, 2016 10:57:14
Сообщений: 128
Рейтинг сообщения: 0
Минус чтение регистра - это плюс, но выглядит действительно... не чувствуется красоты. Наверное просто придирка.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Мелкие вопросы по МК и ПЛИС.
СообщениеДобавлено: Пн сен 09, 2019 19:40:50 
Друг Кота
Аватар пользователя

Карма: 81
Рейтинг сообщений: 1377
Зарегистрирован: Пн май 11, 2009 14:15:00
Сообщений: 3059
Откуда: СПб
Рейтинг сообщения: 0
Медали: 1
Мявтор 3-й степени (1)
СпойлерVladislavS, разве в последней строчке не нужно так написать?
Код:
*reg = (*reg & ~dmask) | (value & dmask);

Иначе могут установиться некоторые биты в тех местах, где в маске 0, а в value 1.

_________________
Этот пост оказался полезен? Не поленись, нажми Изображение слева!
:) :)) :)))
Куплю индикаторы ИТС-1А, ИТС-1Б, ИГВ1-8х5Л, ИГПС1-222/7, ИГПС1-111/7 и подобные.


Вернуться наверх
 
Распродажа паяльного оборудования ATTEN!
Паяльные станции, паяльники и аксессуары по самой выгодной цене.

По промокоду radiokot скидка 10%
Не в сети
 Заголовок сообщения: Re: Мелкие вопросы по МК и ПЛИС.
СообщениеДобавлено: Пн сен 09, 2019 19:43:32 
Собутыльник Кота
Аватар пользователя

Карма: 18
Рейтинг сообщений: 428
Зарегистрирован: Вт май 01, 2018 19:44:47
Сообщений: 2529
Рейтинг сообщения: 0
В общем случае да, но в библиотеке на вход этой функции приходят подготовленные данные, в них нет лишних бит. Подготовка этих данных как раз и есть основная сложность библиотеки, а это уже финальная мелкая оптимизация.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Мелкие вопросы по МК и ПЛИС.
СообщениеДобавлено: Пн сен 09, 2019 19:52:53 
Друг Кота
Аватар пользователя

Карма: 81
Рейтинг сообщений: 1377
Зарегистрирован: Пн май 11, 2009 14:15:00
Сообщений: 3059
Откуда: СПб
Рейтинг сообщения: 0
Медали: 1
Мявтор 3-й степени (1)
Ну, если за этим внимательно следить, то и так можно, конечно.
А вообще, неужели при оптимизации подобное выражение:
Код:
*reg = (*reg & ~((uint32_t)0x0000FFFF)) | (value & 0x0000FFFF)

достаточно умный компилятор сам не заменит на запись в 16-битный регистр? Что-то я сомневаюсь в полезности такой "ручной" обработки всех 8-ми и 16-ти битных случев... :dont_know:

_________________
Этот пост оказался полезен? Не поленись, нажми Изображение слева!
:) :)) :)))
Куплю индикаторы ИТС-1А, ИТС-1Б, ИГВ1-8х5Л, ИГПС1-222/7, ИГПС1-111/7 и подобные.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Мелкие вопросы по МК и ПЛИС.
СообщениеДобавлено: Пн сен 09, 2019 20:16:21 
Собутыльник Кота
Аватар пользователя

Карма: 18
Рейтинг сообщений: 428
Зарегистрирован: Вт май 01, 2018 19:44:47
Сообщений: 2529
Рейтинг сообщения: 0
Не заменит. Если регистр определён как _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]

Убрал комментарии, а то за ними на мобильных экранах кода не видно.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Мелкие вопросы по МК и ПЛИС.
СообщениеДобавлено: Вс ноя 03, 2019 13:09:53 
Встал на лапы
Аватар пользователя

Зарегистрирован: Пт сен 08, 2017 16:54:41
Сообщений: 96
Рейтинг сообщения: 0
появилась необходимость прошить флешь 25Q32 телевизора. Есть в наличии программатор, я им atmega тестер транзисторов прошивал Изображение названия на нем нет - подойдёт ли он для моих целей? или надо другой брать?


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Мелкие вопросы по МК и ПЛИС.
СообщениеДобавлено: Чт ноя 21, 2019 12:20:37 
Нашел транзистор. Понюхал.
Аватар пользователя

Зарегистрирован: Вт сен 14, 2010 23:07:10
Сообщений: 183
Откуда: Ростов
Рейтинг сообщения: 0
Доброго дня.
Есть у меня привод ELL 12030 на котором периодически сбоит АЦП. В качестве АЦП используется микросхема AD7927, а общается с ней микроконтроллер ADSP2181. Схема их соединения выглядит так:
СпойлерИзображение

Осциллографом я просмотрел сигналы. На SCLK идет частота 16 МГц, на остальных - разные последовательности импульсов. Когда я касаюсь щупом контакта DI0, тут же появляется сбой АЦП. Понятно, вношу помеху, но меня смущает форма импульсов на этом контакте. Выглядят они так:
СпойлерИзображение

Тоже самое в большем разрешении:
СпойлерИзображение

В начале каждого импульса (перепад 1-0) появляется какой-то странный всплеск длительностью 100 нс. Как будто дребезг контакта, но там же транзисторы на выходе, а не реле. Вопрос: нормально ли такое поведение? Это какие-то помехи или специально сгенерированный контроллером сигнал?

_________________
We do what we must because we can (c) GLaDOS


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Мелкие вопросы по МК и ПЛИС.
СообщениеДобавлено: Чт ноя 21, 2019 12:24:23 
Говорящий с текстолитом

Карма: -10
Рейтинг сообщений: 173
Зарегистрирован: Вт авг 15, 2017 10:51:13
Сообщений: 1500
Рейтинг сообщения: 1
нормально ли такое поведение? Это какие-то помехи или специально сгенерированный контроллером сигнал?
Нормально. Эти артефакты вносит ваш щуп. Покрутите подстроечник в своём щупе. А также - землю для SCLK берите как можно ближе к точке, откуда берёте SCLK и подавайте её на металлическое колечко вокруг острия щупа.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Мелкие вопросы по МК и ПЛИС.
СообщениеДобавлено: Чт ноя 21, 2019 12:40:37 
Нашел транзистор. Понюхал.
Аватар пользователя

Зарегистрирован: Вт сен 14, 2010 23:07:10
Сообщений: 183
Откуда: Ростов
Рейтинг сообщения: 0
Нормально. Эти артефакты вносит ваш щуп. Покрутите подстроечник в своём щупе. А также - землю для SCLK берите как можно ближе к точке, откуда берёте SCLK и подавайте её на металлическое колечко вокруг острия щупа.

Спасибо за информацию. Увы, у меня не настолько продвинутый щуп - нет на нем ни подстроечника ни колечка вокруг острия)

_________________
We do what we must because we can (c) GLaDOS


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Мелкие вопросы по МК и ПЛИС.
СообщениеДобавлено: Чт ноя 21, 2019 13:54:01 
Друг Кота
Аватар пользователя

Карма: 51
Рейтинг сообщений: 2108
Зарегистрирован: Пт ноя 11, 2016 05:48:09
Сообщений: 6998
Откуда: Сердце Пармы
Рейтинг сообщения: 0
Медали: 2
Получил миской по аватаре (2)
появилась необходимость прошить флешь 25Q32 телевизора.
надо разобраться что за программатор... для USBasp ов и их клонов есть спецпрошивка, позволяющая шить и эти микры (сам так делал)... со стандартной прошивкой и стандартным совтом этот программатор скорее всего не подойдет...

_________________
Просто не учи физику в школе, и вся твоя жизнь будет наполнена чудесами и волшебством :)
Безграмотно вопрошающим про силовую или высоковольтную электронику я не отвечаю, а то ещё посадят за участие в (само)убиении оболтуса...


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Мелкие вопросы по МК и ПЛИС.
СообщениеДобавлено: Сб ноя 23, 2019 13:53:58 
Встал на лапы
Аватар пользователя

Карма: 5
Рейтинг сообщений: 12
Зарегистрирован: Вт июл 25, 2017 22:47:08
Сообщений: 103
Откуда: KAZAN
Рейтинг сообщения: 0
В МК новичок, поэтому не пинайте за вопросы.
Нужно реализовать многоразрядный параллельный регистр в одном корпусе. Составлена даже схема на простых логических элементах (где то 300 элементов). Что лучше использовать ПЛИС или МК?
Есть некоторое количество GAL16, GAL20, PIC16F628. Хватит ли их ресурсов?


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Мелкие вопросы по МК и ПЛИС.
СообщениеДобавлено: Сб ноя 23, 2019 15:35:27 
Друг Кота
Аватар пользователя

Карма: 1
Рейтинг сообщений: 178
Зарегистрирован: Пн окт 11, 2010 19:00:08
Сообщений: 3377
Рейтинг сообщения: 0
Shumadan писал(а):
Нужно реализовать многоразрядный параллельный регистр в одном корпусе.
В одной микросхеме?
Тогда PIC16F628 не подойдет. У него выводов мало.
Уточните сколько выводов должно быть у регистра.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Мелкие вопросы по МК и ПЛИС.
СообщениеДобавлено: Сб ноя 23, 2019 16:11:29 
Встал на лапы
Аватар пользователя

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

Вроде должно хватить. Если нет каких то ограничений.
5 входов и 5 выходов, 1 вход тактирующий


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Мелкие вопросы по МК и ПЛИС.
СообщениеДобавлено: Вт ноя 26, 2019 19:47:11 
Встал на лапы
Аватар пользователя

Карма: 5
Рейтинг сообщений: 12
Зарегистрирован: Вт июл 25, 2017 22:47:08
Сообщений: 103
Откуда: KAZAN
Рейтинг сообщения: 0
так никто не поможет? стою и думаю с чего начать изучение - МК или ПЛИС?


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Мелкие вопросы по МК и ПЛИС.
СообщениеДобавлено: Вт дек 03, 2019 00:09:07 
Встал на лапы
Аватар пользователя

Карма: 1
Рейтинг сообщений: 30
Зарегистрирован: Ср май 14, 2014 20:44:56
Сообщений: 96
Откуда: Республика Карелия
Рейтинг сообщения: 0
Парни, привет. Может кто подсказать каким простеньким (желательно из тех что есть на Али) программатором можно прочитать и перезаписать память 95640? В наличии имеется ПикКит3 и USBasp 2.0 но они как я понял не умеют читать и шить память да?


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Мелкие вопросы по МК и ПЛИС.
СообщениеДобавлено: Ср дек 18, 2019 19:54:38 
Потрогал лапой паяльник

Карма: 4
Рейтинг сообщений: 25
Зарегистрирован: Вс авг 16, 2015 13:08:53
Сообщений: 330
Рейтинг сообщения: 0
Всем привет! Ребята подскажите почему stm8 нагинает stm32? Брал одинаковый кусок кода (переменные 32 бит) ставил оба мк на 8МГц, в итоге в итоге stm8 шуршит быстрее раза в 4. По дизасемблеру смотрел код разница незначительная, но не на столько чтобы в 4 раза медленнее работал
recyclebin SPI флешки перепрошивал extrapic-oм. Но я под него софт еще пилил.


Вернуться наверх
 
Показать сообщения за:  Сортировать по:  Вернуться наверх
Начать новую тему Ответить на тему  [ Сообщений: 12545 ]     ... , , , 605, , , ...  

Часовой пояс: UTC + 3 часа


Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 3


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB
Extended by Karma MOD © 2007—2012 m157y
Extended by Topic Tags MOD © 2012 m157y