bkolbov писал(а): ↑16 ноя 2017, 15:40
Для сброса удержания необходимо чтобы произошел отрицательный результат сравнения компаратора, и затем триггер был сброшен через DCRTC. И тогда по ближайшему событию TBCTR = 0000h удержание будет отключено, и продолжится генерация ШИМ, согласно настройкам модуля.
Путем экспериментов обнаружил, что для сброса удержания необходимо также сбросить флаг OST в регистре HDCLR.
Пороговый выключатель настраивается на многократный режим срабатывания так:
NT_PWM0->HDSEL_bit.DCMP0 = 1; //выбор цифрового компаратора блока АЦП, с выхода которого берется сигнал для формирования события удержания
NT_PWM0->HDSEL_bit.CBC = 1; //многократный режим срабатывания
NT_PWM0->HDCTL_bit.HDA = 1; //по событию от компаратора (ток меньше задания) верхний ключ - в состояние "1"
NT_PWM0->HDCTL_bit.HDB = NT_PWM0->HDCTL_bit.HDA;
Благодарю, Василий, что поделились результатами эксперимента. Наши исследования подтвердили его. Дополню лишь, что сброс удержания вне зависимости от режима осуществится лишь при сбросе OST после наступления нового периода ШИМ (TBCTR = 0000h).
Сведения об этом внесем в errata.
По вопросу Александра от 03 июл 2017:
3)Энвик->IP[(uint32_t)(IRQn)] = ((priority << (8 - __Энвик_PRIO_BITS)) & 0xff); Так мы задаем Приоритет... Вопрос чему равен регистр __Энвик_PRIO_BITS(обычно это число равно 4)...
и ответу на этот вопрос от 17 июл 2017:
3) Равен 3.
А так же ответа:
4)Контроллер прерываний Энвик
Контроллер обеспечивает:
- программное задание уровня приоритета независимо для каждого прерывания в
диапазоне от 0 до 15 (прерывание с уровнем 0 имеет наивысший приоритет);
При __Энвик_PRIO_BITS, равном 3 (что соответствует действительности - проверялось экспериментально), приоритеты прерываний не могут лежать в диапазоне 0...15. Они лежат в диапазоне 0...7.
Не очень понятно написано про поле INTPRD регистра ETPS. В таблице А. 12. 21 сказано, что значение 00 используется для прерывания по каждому событию, а 01 по первому событию, что уже несколько путает: что такое каждое, а что такое первое. Кроме того, на стр. 112 есть такая фраза "Каждая запись в INTPRD сбрасывает счетчик INTCNT. Запись единицы в бит INT
регистра ETFRC увеличит значение счетчика на единицу. Если значение INTPRD = 00b,
то счетчик отключен, а входные события игнорируются."
Наш программист это понял так: если присовить INTPRD равным нулю, то прерываний не будет. А на самом деле это не так. Конечно, прочитав подробнее про все эти счетчики и триггеры догадаться можно как это работает, но, думаю, стоит это описать чуть более однозначно.
С уважением,
Лашкевич Максим.
Инженер-программист ООО "НПФ Вектор", Москва. http://motorcontrol.ru/
Вопрос по регистру FWDTH - ограничения минимальной длины импульса. И в тексте, и в таблице регистров указано максимальное значение Fh, что, судя по всему, ошибка, и верное значение 0xFF. Кроме того, кажется, масштаб там тоже неверный, и у нас получилось что реальное ограничение минимального импульса в разы меньше, чем по документации.
С уважением,
Лашкевич Максим.
Инженер-программист ООО "НПФ Вектор", Москва. http://motorcontrol.ru/
Лашкевич писал(а): ↑03 июл 2018, 16:46
Вопрос по регистру FWDTH - ограничения минимальной длины импульса. И в тексте, и в таблице регистров указано максимальное значение Fh, что, судя по всему, ошибка, и верное значение 0xFF. Кроме того, кажется, масштаб там тоже неверный, и у нас получилось что реальное ограничение минимального импульса в разы меньше, чем по документации.
Да, верное 0xFF. В 10 раз меньше, если быть точным - при 100МГц 10нс * 256 = 2,56мкс.
Не смог найти в ТО явного указания о поддержке (или отсутствии таковой) режима High Speed для интерфейса USB 2.0 (High Speed). Предлагаю добавить в соответствующий раздел, а лучше в начало, где перечислены характеристики МК.
И все же я хотел бы закончить тему о приоритетах прерываний. Не нашел в вышесказанном ответа на вопрос, который задавался несколько раз
вопрос1: сколько же уровней приоритета прерываний в контроллере, 8 или16?
В ТО (стр.73) написано 16 . Здесь я встретил опровержение, и что их 8. ??
вопрос 2 касается содержимого регистра AIRCR, а именно битового поля определяющего количество групп и подгрупп.
Данное битовое поле шириной в три бита [10:8] . Так? Хотелось бы увидеть табличку зависимости количества групп/подгрупп от содержимого этого битового поля, как это сделано в импортной документации на кортекс-M4, чтобы раз и на всегда исключить недопонимание.
Илья писал(а): ↑28 ноя 2018, 00:31
И все же я хотел бы закончить тему о приоритетах прерываний. Не нашел в вышесказанном ответа на вопрос, который задавался несколько раз
вопрос1: сколько же уровней приоритета прерываний в контроллере, 8 или16?
В ТО (стр.73) написано 16 . Здесь я встретил опровержение, и что их 8. ??
вопрос 2 касается содержимого регистра AIRCR, а именно битового поля определяющего количество групп и подгрупп.
Данное битовое поле шириной в три бита [10:8] . Так? Хотелось бы увидеть табличку зависимости количества групп/подгрупп от содержимого этого битового поля, как это сделано в импортной документации на кортекс-M4, чтобы раз и на всегда исключить недопонимание.
Благодарю.
Добрый день!
1) 3 бита, 8 приоритетов
2) Данное поле является неизменяемой частью ядра, соответственно, довольно исчерпывающее описание данного поля приведено в Reference Manual на ядро
В описании на ядро (кортекс™-M4 Devices Generic User Guide) говорится о том, что данное поле AIRCR[10:8] (PRIGROUP) определяет не само количество приоритетов, а разделение приоритетов прерываний на группы и подгруппы в регистрах установки приоритетов прерываний IPR_n, и приводится табличка соответствия содержимого данного поля (PRIGROUP) и разбиения на группы/подгруппы. Общее количество приоритетов определяется исполнением, где-то 256, где-то 16...Соответственно в регистрах IPR_n работают либо все 8 бит, отведенные для установки приоритета, либо часть из них.