К1921ВГ015 общее
Модераторы: ea, dav, bkolbov, Alis, pip, _sva_
К1921ВГ015 общее
столкнулся с такой же проблемой как описана в errata_K1921VG015_Rev4_lqfp100 п.5 но уже для целых чисел uint32.
ошибочный результат деления на константу, если она находится в памяти программ.
пришлось так же сначала создать и загрузить переменную, а уж потом делить на нее...
возможно вся проблема кроется в невозможности пересылки не выровненных 32битных чисел.
результат деления на 1 давал переполнение. видимо делил на ноль.
соответственно, вероятнее с FPU такая же проблема.
возможно лучше допилить ядро чтоб мк нормально пересылал и брал числа со смещением хоть в 1 байт? если это конечно возможно...
это бы решило множество проблем. мне из-за этого приходится не выровненные данные собирать в промежуточную переменную и потом с ней работать. гемор и только...
ошибочный результат деления на константу, если она находится в памяти программ.
пришлось так же сначала создать и загрузить переменную, а уж потом делить на нее...
возможно вся проблема кроется в невозможности пересылки не выровненных 32битных чисел.
результат деления на 1 давал переполнение. видимо делил на ноль.
соответственно, вероятнее с FPU такая же проблема.
возможно лучше допилить ядро чтоб мк нормально пересылал и брал числа со смещением хоть в 1 байт? если это конечно возможно...
это бы решило множество проблем. мне из-за этого приходится не выровненные данные собирать в промежуточную переменную и потом с ней работать. гемор и только...
Re: К1921ВГ015 общее
QSPI.
не описан режим работы SPI.
2 абзаца один с описанием использования выводов (даже не описанием, а рисунком) и один на 3 пункта с описанием 3х регистров, можно в расчет не брать!
пришлось эмпирически вычислять влияние на работу регистров TDS и FWM...
а так же что скорость можно переключать только при выключенном устройстве...
не даны допустимые пределы установки делителя частоты CDIV (ни критериев подбора), хотя на картинке функционального устройства значится 1/CDIV что будет если 0 записать? у меня при 50МГц PLL получилось 25МГц.
не описано взаимодействие с DMA, хотя значится канал на прием (а где передача?)...
не описан режим работы SPI.
2 абзаца один с описанием использования выводов (даже не описанием, а рисунком) и один на 3 пункта с описанием 3х регистров, можно в расчет не брать!
пришлось эмпирически вычислять влияние на работу регистров TDS и FWM...
а так же что скорость можно переключать только при выключенном устройстве...
не даны допустимые пределы установки делителя частоты CDIV (ни критериев подбора), хотя на картинке функционального устройства значится 1/CDIV что будет если 0 записать? у меня при 50МГц PLL получилось 25МГц.
не описано взаимодействие с DMA, хотя значится канал на прием (а где передача?)...
Re: К1921ВГ015 общее
Пришлите пример проекта, не корректно выполняющий целочисленное деление.
Re: К1921ВГ015 общее
Информацию по режиму SPI блока QSPI дополним в руководстве пользователя и обновим в репозитории на GitFlic.dezna писал(а): ↑14 фев 2025, 10:35 QSPI.
не описан режим работы SPI.
2 абзаца один с описанием использования выводов (даже не описанием, а рисунком) и один на 3 пункта с описанием 3х регистров, можно в расчет не брать!
пришлось эмпирически вычислять влияние на работу регистров TDS и FWM...
а так же что скорость можно переключать только при выключенном устройстве...
не даны допустимые пределы установки делителя частоты CDIV (ни критериев подбора), хотя на картинке функционального устройства значится 1/CDIV что будет если 0 записать? у меня при 50МГц PLL получилось 25МГц.
не описано взаимодействие с DMA, хотя значится канал на прием (а где передача?)...
У блока QSPI не предусмотрены запросы к DMA - в руководстве пользователя также скорректируем.
Re: К1921ВГ015 общее
Информацию по режиму SPI блока QSPI дополнили в руководстве пользователя и обновили в репозитории на GitFlic.dezna писал(а): ↑14 фев 2025, 10:35 QSPI.
не описан режим работы SPI.
2 абзаца один с описанием использования выводов (даже не описанием, а рисунком) и один на 3 пункта с описанием 3х регистров, можно в расчет не брать!
пришлось эмпирически вычислять влияние на работу регистров TDS и FWM...
а так же что скорость можно переключать только при выключенном устройстве...
не даны допустимые пределы установки делителя частоты CDIV (ни критериев подбора), хотя на картинке функционального устройства значится 1/CDIV что будет если 0 записать? у меня при 50МГц PLL получилось 25МГц.
не описано взаимодействие с DMA, хотя значится канал на прием (а где передача?)...
У блока QSPI не предусмотрены запросы к DMA - в руководстве пользователя также скорректировали.
Re: К1921ВГ015 общее
все так же в РП остались не исправленными таблица 8.1 дублирование команд последний лист таблицы и отсутствуют команды и описание работы с float.
может конечно и не задумывалось, типа иди читай ядро, я не знаю.
но уж раз начали описывать, то доделайте.
может конечно и не задумывалось, типа иди читай ядро, я не знаю.
но уж раз начали описывать, то доделайте.
Re: К1921ВГ015 общее
столкнулся с такой проблемой:
при напряжении нуля на входе мк порядка 0,25В начинает сбоить генерация прерывания по фронту.
может сгенерировать по обоим фронтам.
подаю периодический сигнал на вход (синяя осциллограмма). прерывание настроено по переднему фронту.
в прерывании перекидываем тестовую ногу мк (желтая осциллограмма).
если генерить периодический сигнал с того же мк, то сбоев не наблюдается.
что-то не нашел по уровням входных/выходных сигналов ничего в РП. может проглядел где... только токи потребления.
причем пробовал фильтрацию входов - не помогло совсем. как будто не работает.
уровень приподнят, потому что сигнал заходит с оптрона (плюс - подтяжка, коммутирует ноль). на видео как раз пытался увеличивать ток через него больше чем в 2 раза.
так же отключал оптрон и пропускал сигнал с мк через его цепи на вход, ноль приподнимался и начинались такие же глюки.
можете сымитировать делителем на +U.
пробовал и с ДМА вместо прерывания - эффект тот же, значит не работает вход.
при напряжении нуля на входе мк порядка 0,25В начинает сбоить генерация прерывания по фронту.
может сгенерировать по обоим фронтам.
подаю периодический сигнал на вход (синяя осциллограмма). прерывание настроено по переднему фронту.
в прерывании перекидываем тестовую ногу мк (желтая осциллограмма).
если генерить периодический сигнал с того же мк, то сбоев не наблюдается.
что-то не нашел по уровням входных/выходных сигналов ничего в РП. может проглядел где... только токи потребления.
причем пробовал фильтрацию входов - не помогло совсем. как будто не работает.
уровень приподнят, потому что сигнал заходит с оптрона (плюс - подтяжка, коммутирует ноль). на видео как раз пытался увеличивать ток через него больше чем в 2 раза.
так же отключал оптрон и пропускал сигнал с мк через его цепи на вход, ноль приподнимался и начинались такие же глюки.
можете сымитировать делителем на +U.
пробовал и с ДМА вместо прерывания - эффект тот же, значит не работает вход.
- Вложения
-
- main.c
- образец кода.
- (4.03 КБ) 107 скачиваний
-
- 20250402_131210.mpg
- на видео видно как при изменении уровня нуля, уменьшается количество сбоев.
формат видео mp4. переименован, т.к. форум не дает его загрузить. - (22.48 МБ) 7 скачиваний
-
- напряжение нуля порядка 250мВ. сбои происходят достаточно часто.
- 20250402_131031.jpg (2.86 МБ) 1435 просмотров
Re: К1921ВГ015 общее
да, действительно проглядел.
Таблица 2.5, п.5
не понятно что значит предельно допустимый режим 0.8В для Uil...
что будет если 1В подать?
нет описания рабочих уровней Uil и Uih в таблице 2.4
Re: К1921ВГ015 общее
пробовал сменить вход и порт на TMR32_CCIB
если по прерыванию от порта или по прерыванию от захвата таймера, то эффект такой же как в изначальном посте. но работает.
ДМА настроить с CCIB не удалось. не работает.
Код: Выделить всё
uint32_t Buf[16+1];
#define DMA_CH_CFG_INIT_Const ( \
(DMA_CHANNEL_CFG_DST_INC_Word << DMA_CHANNEL_CFG_DST_INC_Pos) | \
(DMA_CHANNEL_CFG_SRC_INC_None << DMA_CHANNEL_CFG_SRC_INC_Pos) | \
(DMA_CHANNEL_CFG_DST_SIZE_Word << DMA_CHANNEL_CFG_DST_SIZE_Pos) | \
(DMA_CHANNEL_CFG_SRC_SIZE_Word << DMA_CHANNEL_CFG_SRC_SIZE_Pos) | \
(1<<DMA_CHANNEL_CFG_DST_PROT_PRIV_Pos) | (1<<DMA_CHANNEL_CFG_DST_PROT_BUFF_Pos) | (1<<DMA_CHANNEL_CFG_DST_PROT_CACHE_Pos) | \
(1<<DMA_CHANNEL_CFG_SRC_PROT_PRIV_Pos) | (1<<DMA_CHANNEL_CFG_SRC_PROT_BUFF_Pos) | (1<<DMA_CHANNEL_CFG_SRC_PROT_CACHE_Pos) | \
(0<<DMA_CHANNEL_CFG_R_POWER_Pos) | \
(16 << DMA_CHANNEL_CFG_N_MINUS_1_Pos) | \
(1<<DMA_CHANNEL_CFG_CYCLE_CTRL_Pos) \
)
//настройки
RCU->CGCFGAHB_bit.GPIOBEN = 1;
RCU->RSTDISAHB_bit.GPIOBEN = 1;
RCU->CGCFGAPB_bit.TMR32EN = 1;
RCU->RSTDISAPB_bit.TMR32EN = 1;
GPIOB->OUTENCLR = 1<<15;
GPIOB->ALTFUNCNUM |= (1<<(2*15));
GPIOB->ALTFUNCSET = (1<<15);
TMR32->CTRL = 0;
TMR32->CAPCOM[0].CTRL = TMR_CAPCOM_CTRL_CAP_Msk | (1<<TMR_CAPCOM_CTRL_CCISEL_Pos) | (1<<TMR_CAPCOM_CTRL_CAPMODE_Pos);
TMR32->CTRL = (TMR_CTRL_MODE_Multiple<<TMR_CTRL_MODE_Pos);
TMR32->DMA_IM |= TMR_DMA_IM_CAP0_Msk;
//connfigure DMA
DMA_CONFIGDATA.PRM_DATA.CH[DMA_CH_TMR32].SRC_DATA_END_PTR = (uint32_t)&TMR32->CAPCOM[0].VAL;
DMA_CONFIGDATA.PRM_DATA.CH[DMA_CH_TMR32].DST_DATA_END_PTR = (uint32_t)&Buf[16];
DMA_CONFIGDATA.PRM_DATA.CH[DMA_CH_TMR32].CHANNEL_CFG = DMA_CH_CFG_INIT_Const;
DMA->REQMASKCLR = 1<<DMA_CH_TMR32;
DMA->PRIALTCLR = 1<<DMA_CH_TMR32; //en prim struct
DMA->ENSET = 1<<DMA_CH_TMR32;
по ДМА вообще не работает
есть ли какие предложения как это обойти?
желательно заставить работать ДМА...