Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Программируемый таймер в ПП останов после прерывания #11

Open
nzeemin opened this issue Jul 29, 2024 · 1 comment

Comments

@nzeemin
Copy link
Owner

nzeemin commented Jul 29, 2024

https://t.me/MC0511UKNC/47331/56002

Blaire Cas (Shamin Alex), [29.07.2024 16:19]
Обнаружил некий бажок в UKNCBTL (rev. 746). Программируемый таймер в ПП. Загружаем значение в 177712, считываем 177714 чтобы принялось, разрешаем прерывание и устанавливаем длительность счета таймера в 177710 - таймер пошел считать, досчитает до 0 - дергает прерывание по @#304 - вроде все окей. Но на реальной УКНЦ после этого таймер останавливается (нужно еще раз дергануть 177714 чтобы пошел еще раз считать). В эмуляторе он заново пойдет и так и будет постоянно прерывание дергать.

Blaire Cas (Shamin Alex), [29.07.2024 16:20]
То-есть впечатление что в эмуле 177714 нерабочий и не делает что надо. Тут конечно нужен Алекс К, а то этот таймер описан непойми где и как

Blaire Cas (Shamin Alex), [29.07.2024 16:22]
Да всю голову поломал почему на эмуляторе работает, а на реальной - шиш :)

Blaire Cas (Shamin Alex), [29.07.2024 16:24]
ПРИ ОБНУЛЕНИИ СЧЕТЧИКА ИЛИ ФИКСАЦИИ
ВНЕШНЕГО СОБЫТИЯ ЗАГРУЗКА РЕГИСТРА ТЕКУЩЕГО ЗНАЧЕНИЯ ПРЕКРАЩАЕТСЯ
ДО СЧИТЫВАНИЯ ЕГО ДАННЫХ. СЧЕТЧИК ЗАГРУЖАЕТСЯ ИЗ БУФЕРА И ПРОДОЛ-
ЖАЕТ РАБОТАТЬ НА ВЫЧИТАНИЕ.

Blaire Cas (Shamin Alex), [29.07.2024 16:25]
Вот как это понять из описания прототипа?

Blaire Cas (Shamin Alex), [29.07.2024 16:26]
Тут две фразы сразу и загрузка прекращается до считывания и счетчик загружается. Нет бы написали - после считывания счетчик загружается...

Blaire Cas (Shamin Alex), [29.07.2024 16:40]
Ну там еще и вторая фраза: ОТСЧЕТ ВРЕМЕНИ ПРОВОДИТСЯ ОТ МОМЕНТА ПУСКА ТАЙМЕРА ДО МОМЕНТА
ЛИБО ЕГО ОБНУЛЕНИЯ, ЛИБО ПОЯВЛЕНИЯ ВНЕШНЕГО СОБЫТИЯ. ПОСЛЕ ПУСКА
ТАЙМЕР РАБОТАЕТ В ЦИКЛИЧЕСКОМ РЕЖИМЕ.
—-
то-есть написано что считать будет до обнуления (и перестанет считать) и тут-же что "работает в циклическом режиме" - любой человек подумает раз в циклическом значит дальше тоже будет считать.. ааааа мой мозг

Blaire Cas (Shamin Alex), [29.07.2024 16:44]
Итого мое ИМХО надо сделать так что когда таймер в эмуляторе досчитал до 0 - остановить его и ждать пока не произойдет команда чтения 177714

Nikita Zimin, [29.07.2024 16:45]
@blairecas можешь сделать изолированный тест, на котором это можно протестить и на реале и в эмуляторе?

Blaire Cas (Shamin Alex), [29.07.2024 16:46]
Да у меня есть тест с нотами, на эмуле ноты будут звучать ибо прерывание постоянно будет дергаться без чтения 177714, на реале произойдет фиг ибо прерывание не дернется ни разу

Blaire Cas (Shamin Alex), [29.07.2024 16:50]
tstton.sav

Blaire Cas (Shamin Alex), [29.07.2024 16:51]
Вот это будет звучать в эмуляторе и кстати даже ноты верно звучать будут. Оттуда сейчас убраны все tst @#177714 - но ей пофиг, пашет :)

Blaire Cas (Shamin Alex), [29.07.2024 16:51]
Если у кого есть реал (помимо моего) просьба запустить и послушать тишину (или не тишину)

Nikita Zimin, [29.07.2024 16:52]
Т.е. на реале тишина?

Blaire Cas (Shamin Alex), [29.07.2024 16:52]
Ну да, там бипер дергается туда-сюда от прерывания. Без чтения 177714 таймер не будет считать и прерывания по обнулению не возникнет

Blaire Cas (Shamin Alex), [29.07.2024 16:52]
tstton.mac

Blaire Cas (Shamin Alex), [29.07.2024 16:53]
Мак немного сложен, но смысл думается понятен увидев что там закомментировано с 177714 (если их раскомментарить - на реале заработает тоже)

tstton.zip

@nzeemin
Copy link
Owner Author

nzeemin commented Jul 29, 2024

https://t.me/MC0511UKNC/47331/56025
Alexey Kisly, [29.07.2024 19:25]
Там программируемый таймер неправильно реализован. В нём четыре регистра - состояния (0177710), буферный (0177712), текущего значения (0177714) и счётчик. Вот счётчик ни на какие регистры не выводится. Он считает и загружает своё значение в 0177714. Когда появляется готовность внешнего события или обнуления, то загрузка прекращается. А в UKNCBTL как такового счётчика нету, он вроде совмещён с регистром 0177714.
По тестам это можно увидеть по моим тестам на диске PTEST, тесты начинающиеся с P*. Они работают без прерываний. В этих тестах подбирается размер очереди. Если после запуска таймера и прохода тестовой команды в 0177014 оказался ноль, то очередь уменьшается. И так до чтения ненулевого значения. А в UKNCBTL таймер всё время грузит в 0177014, даже если возникла готовность обнуления.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

1 participant