Алексей ВМ1 1 8 мая, 2023 Опубликовано 8 мая, 2023 (изменено) · Жалоба Добрый день! Имеется плата с STM32MP157 на борту, хочу с помощью IPCC регулировать командами от А7 deadtime ШИМ TIM8 на М4. В начальном состоянии ШИМ генерится, но после прихода команды от А7 по ttyRPSMG0 выходы ШИМ становятся в исходное состояние, ШИМа на них нет. Без IPCC функция изменения deadtime работает нормально. Каким-то образом IPCC влияет на генерацию ШИМа таймером. Подскажите, может кто сталкивался с подобной проблемой? Используется фреймворк OpenAMP. Изменено 8 мая, 2023 пользователем Алексей ВМ1 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
GenaSPB 11 10 мая, 2023 Опубликовано 10 мая, 2023 (изменено) · Жалоба Как человек никогда не включавший M4 ядро на STM32MP157 могу предложить только всё что нужно делать со стороны A7 напрямую... Может магия и исчезнет. Ну или посмотреть на код который по IPCC команду отрабатывает. Изменено 10 мая, 2023 пользователем GenaSPB Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Алексей ВМ1 1 10 мая, 2023 Опубликовано 10 мая, 2023 · Жалоба 1 час назад, GenaSPB сказал: Как человек никогда не включавший M4 ядро на STM32MP157 могу предложить только всё что нужно делать со стороны A7 напрямую... Не вариант, нужен жесткий реал тайм) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
mantech 48 10 мая, 2023 Опубликовано 10 мая, 2023 · Жалоба В 08.05.2023 в 21:17, Алексей ВМ1 сказал: Используется фреймворк OpenAMP. 30 минут назад, Алексей ВМ1 сказал: нужен жесткий реал тайм) Думаете на этом нечто вы его получите?))) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Алексей ВМ1 1 10 мая, 2023 Опубликовано 10 мая, 2023 (изменено) · Жалоба 7 минут назад, mantech сказал: Думаете на этом нечто вы его получите?))) От IPCC реалтайма не нада, он лишь иногда меняет некритичные параметры для М4, на котором крутится реал тайм, поэтому все перетащить на А7 под Линухом не вариант. Изменено 10 мая, 2023 пользователем Алексей ВМ1 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
GenaSPB 11 10 мая, 2023 Опубликовано 10 мая, 2023 (изменено) · Жалоба 3 hours ago, Алексей ВМ1 said: Не вариант, нужен жесткий реал тайм) Я на bare metel + STM312MP153DAB на A7 получаю что надо - с системным тиком 5 мс... Звуковая обработка. Куда реалтаймнее? Но если спустили требование на линуксе... тогда грусть. Ведущие собаководы Специалисты утверждают, что есть версии real time ядра linux... 2 hours ago, Алексей ВМ1 said: он лишь иногда меняет некритичные параметры для М4 Так может тот код что у вас меняет параметры ШИМ чуть больше себе позволяет? Исходники! Изменено 10 мая, 2023 пользователем GenaSPB Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Алексей ВМ1 1 10 мая, 2023 Опубликовано 10 мая, 2023 (изменено) · Жалоба void TIM_SetDeadTime(uint16_t dead_time) { TIM_BreakDeadTimeConfigTypeDef sBreakDeadTimeConfig; sBreakDeadTimeConfig.OffStateRunMode = TIM_OSSR_DISABLE; sBreakDeadTimeConfig.OffStateIDLEMode = TIM_OSSI_ENABLE; sBreakDeadTimeConfig.LockLevel = TIM_LOCKLEVEL_1; sBreakDeadTimeConfig.DeadTime = TIM_CalcDeadtime(dead_time);// 104 - 500 ns, 168 - 1 us, 200 - 1.5 us sBreakDeadTimeConfig.BreakState = TIM_BREAK_DISABLE; sBreakDeadTimeConfig.BreakPolarity = TIM_BREAKPOLARITY_HIGH; sBreakDeadTimeConfig.BreakFilter = 0; sBreakDeadTimeConfig.Break2State = TIM_BREAK2_DISABLE; sBreakDeadTimeConfig.Break2Polarity = TIM_BREAK2POLARITY_HIGH; sBreakDeadTimeConfig.Break2Filter = 0; sBreakDeadTimeConfig.AutomaticOutput = TIM_AUTOMATICOUTPUT_DISABLE;//TIM_AUTOMATICOUTPUT_ENABLE; if (HAL_TIMEx_ConfigBreakDeadTime(&htim8, &sBreakDeadTimeConfig) != HAL_OK) { Error_Handler(); } } Функция, которая меняет длительность DeadTime по получению посылки от А7. Без IPCC работает нормально. if (VirtUart0RxMsg) { VirtUart0RxMsg = RESET; deadTimeToSet = *(uint16_t*)&VirtUart0ChannelBuffRx[0]; if(deadTimeToSet != deadTimePrev) { deadTimePrev = deadTimeToSet; TIM_SetDeadTime(deadTimeToSet); } } Обработка принятого значения. PS. Нашел косяк в своей функции TIM_SetDeadTime(), два поля не были проинициализированы, с фреймворком OpenAMP инициализировались мусором. Изменено 10 мая, 2023 пользователем Алексей ВМ1 1 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться