Например TDA7294

Форум РадиоКот • Просмотр темы - PY32 - микроконтроллеры Puya, вопросы и решения
Форум РадиоКот
Здесь можно немножко помяукать :)

Текущее время: Чт окт 30, 2025 18:28:47

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


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



Начать новую тему Ответить на тему  [ Сообщений: 12 ] 
Автор Сообщение
Не в сети
 Заголовок сообщения: PY32 - микроконтроллеры Puya, вопросы и решения
СообщениеДобавлено: Пн сен 22, 2025 21:54:46 
Друг Кота
Аватар пользователя

Карма: 59
Рейтинг сообщений: 1566
Зарегистрирован: Вт окт 22, 2013 04:37:23
Сообщений: 3402
Откуда: Казань
Рейтинг сообщения: 0
И вопрос первый - нигде не смог найти подробное описание SysTick (System tick timer). Имеется только адрес вектора прерывания, одна фраза о калибровке и всё. А где регистры?

И такая картина везде - и в китайских версиях мануалов, и в английских. Причём, на любое из семейств - F002, F003, F030.

Нет, понятно, что можно наковырять по кусочкам - что-то из описания Cortex-M0 с developer.arm.com, а конкретные названия регистров из исходников примеров Puya, но почему в документации-то ничего нет?

Может я какой документ или appnote пропустил?

_________________
Платы для HLDI - установки лазерной засветки фоторезиста.
Фоторезисты Ordyl Alpha 350 и AM 140.
Жидкое олово для лужения плат (видео) - самое лучшее и только у меня.
Паяльная маска XV501T-4 и KSM-S6189 (5 цветов).
Заказ печатных плат - pcbsmac@gmail.com


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: PY32 - микроконтроллеры Puya, вопросы и решения
СообщениеДобавлено: Пн сен 22, 2025 23:42:24 
Прорезались зубы
Аватар пользователя

Зарегистрирован: Пн сен 15, 2025 08:43:23
Сообщений: 224
Рейтинг сообщения: 0
Так это же из документации на ядро ARM! Соответственно, в ней и читать.
Я тоже, когда начал с STM32 заниматься, не понимал, какого черта часть регистров вообще в мануале не описана. Нашел их в мануале на ядро.

_________________
Windows must die! And the users of this crap should either become smarter or become janitors.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: PY32 - микроконтроллеры Puya, вопросы и решения
СообщениеДобавлено: Вт сен 23, 2025 12:40:41 
Открыл глаза
Аватар пользователя

Зарегистрирован: Вт фев 28, 2017 08:13:31
Сообщений: 53
Откуда: Свердловская обл.
Рейтинг сообщения: 0
Да.

SysTick - Относится к ядру (Core) и описание соответственно будет в RM на Cortex-M0 (armv6-m)
и CMSIS файлы для С/С++ для Core - отдельно идут для любых Cortex-ов

в облаке у меня есть - Arm_Architecture_v6m_Reference_Manual.pdf

https://disk.yandex.ru/d/-6DTrL-0xZCn6g/%5B%20ARM%20%5D

для любых других контроллеров также
те-же CH32V - тоже описание ядра в отдельных файлах
на V4 - например QingKeV4_Processor_Manual.PDF


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: PY32 - микроконтроллеры Puya, вопросы и решения
СообщениеДобавлено: Вт сен 23, 2025 12:54:11 
Грызет канифоль
Аватар пользователя

Карма: 1
Рейтинг сообщений: 26
Зарегистрирован: Ср мар 09, 2016 08:07:41
Сообщений: 295
Рейтинг сообщения: 0
"Cortex-M0+ Technical Reference Manual" (TRM) еще


Вернуться наверх
 
Эиком - электронные компоненты и радиодетали
Не в сети
 Заголовок сообщения: Re: PY32 - микроконтроллеры Puya, вопросы и решения
СообщениеДобавлено: Чт окт 30, 2025 04:19:26 
Друг Кота
Аватар пользователя

Карма: 59
Рейтинг сообщений: 1566
Зарегистрирован: Вт окт 22, 2013 04:37:23
Сообщений: 3402
Откуда: Казань
Рейтинг сообщения: 0
PY32 -> USART.

Отправляем 1 байт, прерывание генерируется 2 раза.
Отправляем больше 1 байта, прерывание генерируется ровно по числу отправляемых байт.

Кто-нибудь замечал такое?

Обработчик прерывания простой:

Код:
void USART1_IRQHandler()
{
    uint32_t sr = USART1->SR;
    if (sr & USART_SR_TXE)                      // Transmit data register empty
    {                                       
        USART1->DR = *tx_buffer++;              // Send data
        tx_size--;
        if (tx_size == 0)
        {
            USART1->CR1 &= ~USART_CR1_TXEIE;    // Disable TXE interrupt
        }
    }
}

_________________
Платы для HLDI - установки лазерной засветки фоторезиста.
Фоторезисты Ordyl Alpha 350 и AM 140.
Жидкое олово для лужения плат (видео) - самое лучшее и только у меня.
Паяльная маска XV501T-4 и KSM-S6189 (5 цветов).
Заказ печатных плат - pcbsmac@gmail.com


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: PY32 - микроконтроллеры Puya, вопросы и решения
СообщениеДобавлено: Чт окт 30, 2025 10:47:30 
Открыл глаза
Аватар пользователя

Зарегистрирован: Вт фев 28, 2017 08:13:31
Сообщений: 53
Откуда: Свердловская обл.
Рейтинг сообщения: 0
может поможет вырезка из примеров

Код:
  /*  Transmit data register empty  */
  if ((LL_USART_IsActiveFlag_TXE(USARTx) != RESET) && (LL_USART_IsEnabledIT_TXE(USARTx) != RESET))
  {
    /* To prevent the TC flag bit from being affected by other operations during
       data transmission, read the SR register in conjunction with write the DR
       Register to clear the TC flag bit.
    */
    (void)(USARTx->SR);
    LL_USART_TransmitData8(USARTx, *TxBuff);
    TxBuff++;
    if (--TxCount == 0U)
    {
        LL_USART_DisableIT_TXE(USARTx);
       
        LL_USART_EnableIT_TC(USARTx);
    }
    return;
  }
 
  /*  Transmission complete  */
  if ((LL_USART_IsActiveFlag_TC(USARTx) != RESET) && (LL_USART_IsEnabledIT_TC(USARTx) != RESET))
  {
    LL_USART_DisableIT_TC(USARTx);
    UartReady = SET;
 
    return;
  }


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: PY32 - микроконтроллеры Puya, вопросы и решения
СообщениеДобавлено: Чт окт 30, 2025 12:22:16 
Друг Кота
Аватар пользователя

Карма: 59
Рейтинг сообщений: 1566
Зарегистрирован: Вт окт 22, 2013 04:37:23
Сообщений: 3402
Откуда: Казань
Рейтинг сообщения: 0
Zikon, не поможет. Я эти примеры видел, и в этих примерах ничего принципиально отличного от моего обработчика не делается.

Единственная разница - добавлено (void)USART1->SR, но это ничего не меняет - при отправке 1 байта, прерывание USART упорно генерируется дважды.

Да и не может (void)USART1->SR на что-то повлиять в моём случае - согласно даташиту это может быть полезным лишь при multiprocessor communication, у меня же вообще тестовый стенд, и прошивка ничего не делает, только отправляет 1 байт.

_________________
Платы для HLDI - установки лазерной засветки фоторезиста.
Фоторезисты Ordyl Alpha 350 и AM 140.
Жидкое олово для лужения плат (видео) - самое лучшее и только у меня.
Паяльная маска XV501T-4 и KSM-S6189 (5 цветов).
Заказ печатных плат - pcbsmac@gmail.com


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: PY32 - микроконтроллеры Puya, вопросы и решения
СообщениеДобавлено: Чт окт 30, 2025 13:48:37 
Говорящий с текстолитом

Карма: -7
Рейтинг сообщений: 185
Зарегистрирован: Вт авг 15, 2017 10:51:13
Сообщений: 1619
Рейтинг сообщения: 0
Единственная разница - добавлено (void)USART1->SR, но это ничего не меняет - при отправке 1 байта, прерывание USART упорно генерируется дважды.
Странно - когда в другой теме про этот ваш код я написал что он кривой и содержит массу багов, вы ответили:
Тем не менее, код нормально работает. Было бы странным, если бы в официальный SDK вкладывали неработающие примеры.

Хотя я писал как раз про эти проблемы, о которых вы сейчас рассказываете:
Код кривой. Содержит сразу несколько багов: 1) будет передано больше байт, чем tx_size; 2) будут ложные прерывания; 3) будут "гонки"; 4) будет некорректное состояние битов CR1 после завершения передачи (останется стоять TCIE); ...
Все баги там видны невооружённым глазом. Если хотя-бы одним глазом заглянть в мануал.

Но все советы вы проигнорировали. Баги остались на месте.... :dont_know:


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: PY32 - микроконтроллеры Puya, вопросы и решения
СообщениеДобавлено: Чт окт 30, 2025 13:53:59 
Мудрый кот

Карма: 25
Рейтинг сообщений: 467
Зарегистрирован: Сб май 05, 2012 20:24:52
Сообщений: 1718
Откуда: KN34PC, Болгария
Рейтинг сообщения: 0
Код:
void USART1_IRQHandler()
{
  uint32_t sr = USART1->SR;
  if (sr & USART_SR_TXE)
  {
    if (tx_size > 0)
    {
      USART1->DR = *tx_buffer++;
      tx_size--;
      if (tx_size == 0)
      {
        USART1->CR1 &= ~USART_CR1_TXEIE;
        USART1->CR1 |= USART_CR1_TCIE;
      }
    }
  }

  if (sr & USART_SR_TC)
  {
    USART1->SR &= ~USART_SR_TC;
    USART1->CR1 &= ~USART_CR1_TCIE;
  }
}

TXEIE используется для отправки байтов из буфера. Когда последний байт записан в регистр DR, TXEIE выключается, а TCIE включается -> генерирует прерывание только один раз, когда байт полностью передан. Не пробовал, протестируйте, посмотрите с отладчиком, могут быть неточности.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: PY32 - микроконтроллеры Puya, вопросы и решения
СообщениеДобавлено: Чт окт 30, 2025 14:03:06 
Говорящий с текстолитом

Карма: -7
Рейтинг сообщений: 185
Зарегистрирован: Вт авг 15, 2017 10:51:13
Сообщений: 1619
Рейтинг сообщения: 0
Отправляем больше 1 байта, прерывание генерируется ровно по числу отправляемых байт.
Количество прерываний в том "коде" зависит от фаз Луны.

После записи в DR, у вас сразу может быть сгенерировано новое прерывание (если регистр сдвига был пуст в момент записи). И тогда никакие маскирования TXEIE не помогут. Либо не будет сразу сгенерировано (если регистр сдвига был не пуст). Также код содержит "гонки", а значит его работа будет зависеть от других событий в системе, происходящих в это время. Достаточно любому более приоритетному прерыванию случиться сразу после записи в DR - он будет или глючить или не глючить.

Запрещать TXEIE нужно ДО записи последнего символа в DR, а не ПОСЛЕ. Вроде как это очевидно.

Добавлено after 8 minutes 3 seconds:
Когда последний байт записан в регистр DR, TXEIE выключается, а TCIE включается -> генерирует прерывание только один раз, когда байт полностью передан.
Никакой TCIE в том ISR не нужен. Так как нет никаких поводов отслеживать реальное окончание передачи символа. Там нужно только грамотно работать с сигналом опустошения FIFO передатчика. Согласно User Manual. Только и всего.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: PY32 - микроконтроллеры Puya, вопросы и решения
СообщениеДобавлено: Чт окт 30, 2025 14:10:20 
Мудрый кот

Карма: 25
Рейтинг сообщений: 467
Зарегистрирован: Сб май 05, 2012 20:24:52
Сообщений: 1718
Откуда: KN34PC, Болгария
Рейтинг сообщения: 0
Есть много решений. Но ТС есть начало и спрашивает, а мы отвечаем. Он сам придет к ответу. Бы использовал DMA без прерывания.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: PY32 - микроконтроллеры Puya, вопросы и решения
СообщениеДобавлено: Чт окт 30, 2025 14:15:07 
Говорящий с текстолитом

Карма: -7
Рейтинг сообщений: 185
Зарегистрирован: Вт авг 15, 2017 10:51:13
Сообщений: 1619
Рейтинг сообщения: 0
Есть много решений. Но ТС есть начало и спрашивает, а мы отвечаем. Он сам придет к ответу. Бы использовал DMA без прерывания.
Ещё раз: ТС там не нужен. От слова 'совсем'. Не надо валить с больной головы на здоровую. Прилепливание туда ещё и TC не даст никакого результата, кроме ещё большего запутывания.
Там вся работа основана на TXE. Его вполне достаточно.


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

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


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

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


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

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


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