Была ещё платка stm32. Собрал на макетке.
Отправлено с моего A0001 через Tapatalk
Была ещё платка stm32. Собрал на макетке.
Отправлено с моего A0001 через Tapatalk
- - - Добавлено - - -
Вот что вышло. Ошибка при окончании загрузки.
Синхра как должна быть с ноля в еденицу ?
Пилоттон, потом 1 нолик для синхры а потом данные. В конце после вывода последнего полупериода оставлять уровень без изменений.
PS Было бы круто добавить детонацию от ролика, чтобы оно так тепло и лампово раккорд тянуло ууу-ооо--уууу-оооо... Я помню, это не сильно влияло на качество загрузки.
Это пьезопищалка так старается.....
Проверил и с единицей в ноль и с нулем в единицу все равно в конце ошибку сыпит. Могу код скинуть.
Вот скрины анализатора.
это конец файла при синхре с нуля в еденицу
синхро
это при синхре единица в ноль
синхро
- - - Добавлено - - -
ps
У меня STM32 логика 3.3 В
Подключаю напрямую с выхода контроллера ко входу zx spectrum
В спектруме загрузщик не распаян(арлекин 48)
я подключил напрямую ко входу микросхемы.
Может нужна какая развязка?
Последний раз редактировалось san010101; 17.10.2017 в 05:57.
Загрузка Диззи
Запускается с музыкой и виснет в игре
- - - Добавлено - - -
Вообще файлы грузятся по разному, одни через пару блоков R tape error выдают другие могут загрузится и зависнуть
в некоторых загрузчиках нет проверки на ошибку, поэтому софт может быть частично работоспособный.
а у тебя похоже сбой на длинных блоках.
проще проверить грузя данные в какой-нибудь копировщик
(он хоть покажет ошибку контрольной суммы)
как вариант можно сделать verify code (например с ПЗУ)
Вот и думаю как проверить. Пока нужно отработать алгоритм. У меня каждый байт с карты читается. Без буферизации. Возможно в этом причина. Тестирую сейчас копировщиком для ленты.
А ты как формируешь то периоды? По CAPT или просто настраиваешь таймер на следующее событие?
- - - Добавлено - - -
А, вижу код страницей ранее. Думаю, у тебя достаточно сложное дерево алгоритма в обработчике прерываний. Я бы каждый блок "рендерил" в битстрим в ОЗУ а по таймеру протягивал его на порт (собственно, я так и делаю в программе на РС). Но и это не главное. Главное, что ты упустил вот это:
И так далее. У тебя может стрелять другое событие. Следует разделять события, ведь на них всех всего один общий обработчик.Код:void xIRQ() { uint16_t Events; *** // Сохраним список евентов и подтвердим обработку Events = TIM3->SR; TIM3->SR = 0x0000; // Это евент каптуры CAPT3 if (Events & TIM_SR_CC3IF) *** // Это евент каптуры CAPT1 if (Events & TIM_SR_CC1IF) ***
Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)