добавил инициализацию флоппи-приводов, чтобы они физически возвращались на парковку при сбросе процессора

This commit is contained in:
VladislavOstapov 2023-11-02 14:48:19 +03:00
parent 709ae5ef4f
commit b3b04f5714
3 changed files with 234 additions and 114 deletions

View File

@ -6,6 +6,11 @@
extern "C" { extern "C" {
#endif #endif
/**
* Функция инициализации флоппи-приводов, нужно вызывать после запуска таймера тактирования и перед запуском таймера мелодии
*/
void FloppyDriveInitialize();
/** /**
* Функция, вызываемая в прерывании таймера несущей частоты * Функция, вызываемая в прерывании таймера несущей частоты
*/ */

View File

@ -13,6 +13,7 @@ public:
uint16_t top = 0; // верхнее значение таймера uint16_t top = 0; // верхнее значение таймера
uint16_t curr_step = 0; // текущий шаг флоппи привода uint16_t curr_step = 0; // текущий шаг флоппи привода
bool isStarted = false; // запущен ли таймер bool isStarted = false; // запущен ли таймер
bool isInitialization = false; // режим инициализации, нужен чтобы отодвинуть флоппи привод на нулевую позицию
GPIO_TypeDef* gpio{}; GPIO_TypeDef* gpio{};
const uint16_t gpioDirBit{}; // бит ноги GPIO для подключения к Floppy::DIR const uint16_t gpioDirBit{}; // бит ноги GPIO для подключения к Floppy::DIR
@ -24,12 +25,38 @@ public:
top = FLOPPOTRON_SOUND_FREQ / freq; top = FLOPPOTRON_SOUND_FREQ / freq;
} }
void setInitializationMode() {
isInitialization = true;
isStarted = true;
}
void setEnable(bool en) { void setEnable(bool en) {
isStarted = en; isStarted = en;
} }
void tick() { void tick() {
if (isStarted) { if (isStarted) {
if (isInitialization) {
cnt++;
if (cnt >= FLOPPOTRON_SOUND_FREQ / 500) {
// направление выставляем сразу
gpio->ODR |= gpioDirBit;
// и дергаем ногой
gpio->ODR ^= gpioStepBit;
cnt = 0;
curr_step++;
if (curr_step >= FLOPPOTRON_MAX_STEPS) {
// инициализация завершена
curr_step = 0;
isInitialization = false;
isStarted = false;
}
}
} else {
cnt++; cnt++;
if (cnt >= top) { if (cnt >= top) {
cnt = 0; cnt = 0;
@ -40,15 +67,16 @@ public:
if (curr_step & 1) { if (curr_step & 1) {
// нечетные шаги, это тик направления // нечетные шаги, это тик направления
if (curr_step < FLOPPOTRON_MAX_STEPS / 2) { if (curr_step < FLOPPOTRON_MAX_STEPS / 2) {
gpio->ODR |= gpioDirBit;
} else {
gpio->ODR &= ~gpioDirBit; gpio->ODR &= ~gpioDirBit;
} else {
gpio->ODR |= gpioDirBit;
} }
} else { } else {
// четные шаги, это шаги мотора // четные шаги, это шаги мотора
gpio->ODR ^= gpioStepBit; gpio->ODR ^= gpioStepBit;
} }
} }
}
} else { } else {
cnt = 0; cnt = 0;
} }
@ -79,110 +107,194 @@ void FloppySoundTickHandler() {
#define FT_CMD_MASK 0xF000 #define FT_CMD_MASK 0xF000
void FloppyDriveInitialize() {
for (auto& d:drives) {
d.setInitializationMode();
}
for (auto& d:drives) {
// ожидание завершения инициализации
while (d.isInitialization) {}
}
}
// хандлер для проигрывания нот // хандлер для проигрывания нот
void FloppyTrackTick() { void FloppyTrackTick() {
// байткод для 100bpm, тестовая мелодия // байткод для 100bpm, тестовая мелодия
const static uint16_t bytecode[] = { const static uint16_t bytecode[] = {
FT_CMD_NOTES_ON | 1, FT_CMD_SET_FRQ1 | 165, FT_CMD_WAIT | 50, // '3' // FT_CMD_NOTES_ON | 1, FT_CMD_SET_FRQ1 | 165, FT_CMD_WAIT | 50, // '3'
FT_CMD_NOTES_ON | 1, FT_CMD_SET_FRQ1 | 247, FT_CMD_WAIT | 50, // '7' // FT_CMD_NOTES_ON | 1, FT_CMD_SET_FRQ1 | 247, FT_CMD_WAIT | 50, // '7'
FT_CMD_NOTES_ON | 1, FT_CMD_SET_FRQ1 | 196, FT_CMD_WAIT | 50, // '5' // FT_CMD_NOTES_ON | 1, FT_CMD_SET_FRQ1 | 196, FT_CMD_WAIT | 50, // '5'
FT_CMD_NOTES_ON | 1, FT_CMD_SET_FRQ1 | 247, FT_CMD_WAIT | 50, // '7' // FT_CMD_NOTES_ON | 1, FT_CMD_SET_FRQ1 | 247, FT_CMD_WAIT | 50, // '7'
FT_CMD_NOTES_ON | 1, FT_CMD_SET_FRQ1 | 165, FT_CMD_WAIT | 50, // '3' // FT_CMD_NOTES_ON | 1, FT_CMD_SET_FRQ1 | 165, FT_CMD_WAIT | 50, // '3'
FT_CMD_NOTES_ON | 1, FT_CMD_SET_FRQ1 | 247, FT_CMD_WAIT | 50, // '7' // FT_CMD_NOTES_ON | 1, FT_CMD_SET_FRQ1 | 247, FT_CMD_WAIT | 50, // '7'
FT_CMD_NOTES_ON | 1, FT_CMD_SET_FRQ1 | 196, FT_CMD_WAIT | 50, // '5' // FT_CMD_NOTES_ON | 1, FT_CMD_SET_FRQ1 | 196, FT_CMD_WAIT | 50, // '5'
FT_CMD_NOTES_ON | 1, FT_CMD_SET_FRQ1 | 247, FT_CMD_WAIT | 50, // '7' // FT_CMD_NOTES_ON | 1, FT_CMD_SET_FRQ1 | 247, FT_CMD_WAIT | 50, // '7'
FT_CMD_NOTES_ON | 1, FT_CMD_SET_FRQ1 | 147, FT_CMD_WAIT | 50, // '2' // FT_CMD_NOTES_ON | 1, FT_CMD_SET_FRQ1 | 147, FT_CMD_WAIT | 50, // '2'
FT_CMD_NOTES_ON | 1, FT_CMD_SET_FRQ1 | 247, FT_CMD_WAIT | 50, // '7' // FT_CMD_NOTES_ON | 1, FT_CMD_SET_FRQ1 | 247, FT_CMD_WAIT | 50, // '7'
FT_CMD_NOTES_ON | 1, FT_CMD_SET_FRQ1 | 196, FT_CMD_WAIT | 50, // '5' // FT_CMD_NOTES_ON | 1, FT_CMD_SET_FRQ1 | 196, FT_CMD_WAIT | 50, // '5'
FT_CMD_NOTES_ON | 1, FT_CMD_SET_FRQ1 | 247, FT_CMD_WAIT | 50, // '7' // FT_CMD_NOTES_ON | 1, FT_CMD_SET_FRQ1 | 247, FT_CMD_WAIT | 50, // '7'
FT_CMD_NOTES_ON | 1, FT_CMD_SET_FRQ1 | 147, FT_CMD_WAIT | 50, // '2' // FT_CMD_NOTES_ON | 1, FT_CMD_SET_FRQ1 | 147, FT_CMD_WAIT | 50, // '2'
FT_CMD_NOTES_ON | 1, FT_CMD_SET_FRQ1 | 247, FT_CMD_WAIT | 50, // '7' // FT_CMD_NOTES_ON | 1, FT_CMD_SET_FRQ1 | 247, FT_CMD_WAIT | 50, // '7'
FT_CMD_NOTES_ON | 1, FT_CMD_SET_FRQ1 | 196, FT_CMD_WAIT | 50, // '5' // FT_CMD_NOTES_ON | 1, FT_CMD_SET_FRQ1 | 196, FT_CMD_WAIT | 50, // '5'
FT_CMD_NOTES_ON | 1, FT_CMD_SET_FRQ1 | 247, FT_CMD_WAIT | 50, // '7' // FT_CMD_NOTES_ON | 1, FT_CMD_SET_FRQ1 | 247, FT_CMD_WAIT | 50, // '7'
FT_CMD_NOTES_ON | 1, FT_CMD_SET_FRQ1 | 147, FT_CMD_WAIT | 50, // '2' // FT_CMD_NOTES_ON | 1, FT_CMD_SET_FRQ1 | 147, FT_CMD_WAIT | 50, // '2'
FT_CMD_NOTES_ON | 1, FT_CMD_SET_FRQ1 | 247, FT_CMD_WAIT | 50, // '7' // FT_CMD_NOTES_ON | 1, FT_CMD_SET_FRQ1 | 247, FT_CMD_WAIT | 50, // '7'
FT_CMD_NOTES_ON | 1, FT_CMD_SET_FRQ1 | 174, FT_CMD_WAIT | 50, // '4' // FT_CMD_NOTES_ON | 1, FT_CMD_SET_FRQ1 | 174, FT_CMD_WAIT | 50, // '4'
FT_CMD_NOTES_ON | 1, FT_CMD_SET_FRQ1 | 247, FT_CMD_WAIT | 50, // '7' // FT_CMD_NOTES_ON | 1, FT_CMD_SET_FRQ1 | 247, FT_CMD_WAIT | 50, // '7'
FT_CMD_NOTES_ON | 1, FT_CMD_SET_FRQ1 | 147, FT_CMD_WAIT | 50, // '2' // FT_CMD_NOTES_ON | 1, FT_CMD_SET_FRQ1 | 147, FT_CMD_WAIT | 50, // '2'
FT_CMD_NOTES_ON | 1, FT_CMD_SET_FRQ1 | 247, FT_CMD_WAIT | 50, // '7' // FT_CMD_NOTES_ON | 1, FT_CMD_SET_FRQ1 | 247, FT_CMD_WAIT | 50, // '7'
FT_CMD_NOTES_ON | 1, FT_CMD_SET_FRQ1 | 174, FT_CMD_WAIT | 50, // '4' // FT_CMD_NOTES_ON | 1, FT_CMD_SET_FRQ1 | 174, FT_CMD_WAIT | 50, // '4'
FT_CMD_NOTES_ON | 1, FT_CMD_SET_FRQ1 | 247, FT_CMD_WAIT | 50, // '7' // FT_CMD_NOTES_ON | 1, FT_CMD_SET_FRQ1 | 247, FT_CMD_WAIT | 50, // '7'
FT_CMD_NOTES_ON | 1, FT_CMD_SET_FRQ1 | 147, FT_CMD_WAIT | 50, // '2' // FT_CMD_NOTES_ON | 1, FT_CMD_SET_FRQ1 | 147, FT_CMD_WAIT | 50, // '2'
FT_CMD_NOTES_ON | 1, FT_CMD_SET_FRQ1 | 220, FT_CMD_WAIT | 50, // '6' // FT_CMD_NOTES_ON | 1, FT_CMD_SET_FRQ1 | 220, FT_CMD_WAIT | 50, // '6'
FT_CMD_NOTES_ON | 1, FT_CMD_SET_FRQ1 | 174, FT_CMD_WAIT | 50, // '4' // FT_CMD_NOTES_ON | 1, FT_CMD_SET_FRQ1 | 174, FT_CMD_WAIT | 50, // '4'
FT_CMD_NOTES_ON | 1, FT_CMD_SET_FRQ1 | 220, FT_CMD_WAIT | 50, // '6' // FT_CMD_NOTES_ON | 1, FT_CMD_SET_FRQ1 | 220, FT_CMD_WAIT | 50, // '6'
FT_CMD_NOTES_ON | 1, FT_CMD_SET_FRQ1 | 147, FT_CMD_WAIT | 50, // '2' // FT_CMD_NOTES_ON | 1, FT_CMD_SET_FRQ1 | 147, FT_CMD_WAIT | 50, // '2'
FT_CMD_NOTES_ON | 1, FT_CMD_SET_FRQ1 | 220, FT_CMD_WAIT | 50, // '6' // FT_CMD_NOTES_ON | 1, FT_CMD_SET_FRQ1 | 220, FT_CMD_WAIT | 50, // '6'
FT_CMD_NOTES_ON | 1, FT_CMD_SET_FRQ1 | 174, FT_CMD_WAIT | 50, // '4' // FT_CMD_NOTES_ON | 1, FT_CMD_SET_FRQ1 | 174, FT_CMD_WAIT | 50, // '4'
FT_CMD_NOTES_ON | 1, FT_CMD_SET_FRQ1 | 220, FT_CMD_WAIT | 50, // '6' // FT_CMD_NOTES_ON | 1, FT_CMD_SET_FRQ1 | 220, FT_CMD_WAIT | 50, // '6'
FT_CMD_NOTES_OFF | 3, FT_CMD_WAIT | 50, // ' ' // FT_CMD_NOTES_OFF | 3, FT_CMD_WAIT | 50, // ' '
FT_CMD_NOTES_OFF | 3, FT_CMD_WAIT | 50, // ' ' // FT_CMD_NOTES_OFF | 3, FT_CMD_WAIT | 50, // ' '
FT_CMD_NOTES_OFF | 3, FT_CMD_WAIT | 50, // ' ' // FT_CMD_NOTES_OFF | 3, FT_CMD_WAIT | 50, // ' '
FT_CMD_NOTES_ON | 1, FT_CMD_SET_FRQ1 | 165, FT_CMD_WAIT | 50, // '3' // FT_CMD_NOTES_ON | 1, FT_CMD_SET_FRQ1 | 165, FT_CMD_WAIT | 50, // '3'
FT_CMD_NOTES_OFF | 3, FT_CMD_WAIT | 50, // ' ' // FT_CMD_NOTES_OFF | 3, FT_CMD_WAIT | 50, // ' '
FT_CMD_NOTES_ON | 1, FT_CMD_SET_FRQ1 | 196, FT_CMD_WAIT | 50, // '5' // FT_CMD_NOTES_ON | 1, FT_CMD_SET_FRQ1 | 196, FT_CMD_WAIT | 50, // '5'
FT_CMD_NOTES_ON | 1, FT_CMD_SET_FRQ1 | 174, FT_CMD_WAIT | 50, // '4' // FT_CMD_NOTES_ON | 1, FT_CMD_SET_FRQ1 | 174, FT_CMD_WAIT | 50, // '4'
FT_CMD_NOTES_ON | 1, FT_CMD_SET_FRQ1 | 196, FT_CMD_WAIT | 50, // '5' // FT_CMD_NOTES_ON | 1, FT_CMD_SET_FRQ1 | 196, FT_CMD_WAIT | 50, // '5'
FT_CMD_NOTES_OFF | 3, FT_CMD_WAIT | 50, // ' ' // FT_CMD_NOTES_OFF | 3, FT_CMD_WAIT | 50, // ' '
FT_CMD_NOTES_ON | 1, FT_CMD_SET_FRQ1 | 247, FT_CMD_WAIT | 50, // '7' // FT_CMD_NOTES_ON | 1, FT_CMD_SET_FRQ1 | 247, FT_CMD_WAIT | 50, // '7'
FT_CMD_NOTES_ON | 1, FT_CMD_SET_FRQ1 | 262, FT_CMD_WAIT | 50, // '1'' // FT_CMD_NOTES_ON | 1, FT_CMD_SET_FRQ1 | 262, FT_CMD_WAIT | 50, // '1''
FT_CMD_NOTES_ON | 1, FT_CMD_SET_FRQ1 | 247, FT_CMD_WAIT | 50, // '7' // FT_CMD_NOTES_ON | 1, FT_CMD_SET_FRQ1 | 247, FT_CMD_WAIT | 50, // '7'
FT_CMD_NOTES_OFF | 3, FT_CMD_WAIT | 50, // ' ' // FT_CMD_NOTES_OFF | 3, FT_CMD_WAIT | 50, // ' '
FT_CMD_NOTES_ON | 1, FT_CMD_SET_FRQ1 | 147, FT_CMD_WAIT | 50, // '2' // FT_CMD_NOTES_ON | 1, FT_CMD_SET_FRQ1 | 147, FT_CMD_WAIT | 50, // '2'
FT_CMD_NOTES_OFF | 3, FT_CMD_WAIT | 50, // ' ' // FT_CMD_NOTES_OFF | 3, FT_CMD_WAIT | 50, // ' '
FT_CMD_NOTES_ON | 1, FT_CMD_SET_FRQ1 | 174, FT_CMD_WAIT | 50, // '4' // FT_CMD_NOTES_ON | 1, FT_CMD_SET_FRQ1 | 174, FT_CMD_WAIT | 50, // '4'
FT_CMD_NOTES_ON | 1, FT_CMD_SET_FRQ1 | 196, FT_CMD_WAIT | 50, // '5' // FT_CMD_NOTES_ON | 1, FT_CMD_SET_FRQ1 | 196, FT_CMD_WAIT | 50, // '5'
FT_CMD_NOTES_ON | 1, FT_CMD_SET_FRQ1 | 174, FT_CMD_WAIT | 50, // '4' // FT_CMD_NOTES_ON | 1, FT_CMD_SET_FRQ1 | 174, FT_CMD_WAIT | 50, // '4'
FT_CMD_NOTES_OFF | 3, FT_CMD_WAIT | 50, // ' ' // FT_CMD_NOTES_OFF | 3, FT_CMD_WAIT | 50, // ' '
FT_CMD_NOTES_ON | 1, FT_CMD_SET_FRQ1 | 196, FT_CMD_WAIT | 50, // '5' // FT_CMD_NOTES_ON | 1, FT_CMD_SET_FRQ1 | 196, FT_CMD_WAIT | 50, // '5'
FT_CMD_NOTES_ON | 1, FT_CMD_SET_FRQ1 | 220, FT_CMD_WAIT | 50, // '6' // FT_CMD_NOTES_ON | 1, FT_CMD_SET_FRQ1 | 220, FT_CMD_WAIT | 50, // '6'
FT_CMD_NOTES_ON | 1, FT_CMD_SET_FRQ1 | 196, FT_CMD_WAIT | 50, // '5' // FT_CMD_NOTES_ON | 1, FT_CMD_SET_FRQ1 | 196, FT_CMD_WAIT | 50, // '5'
FT_CMD_NOTES_OFF | 3, FT_CMD_WAIT | 50, // ' ' // FT_CMD_NOTES_OFF | 3, FT_CMD_WAIT | 50, // ' '
FT_CMD_NOTES_ON | 1, FT_CMD_SET_FRQ1 | 147, FT_CMD_WAIT | 50, // '2' // FT_CMD_NOTES_ON | 1, FT_CMD_SET_FRQ1 | 147, FT_CMD_WAIT | 50, // '2'
FT_CMD_NOTES_OFF | 3, FT_CMD_WAIT | 50, // ' ' // FT_CMD_NOTES_OFF | 3, FT_CMD_WAIT | 50, // ' '
FT_CMD_NOTES_ON | 1, FT_CMD_SET_FRQ1 | 174, FT_CMD_WAIT | 50, // '4' // FT_CMD_NOTES_ON | 1, FT_CMD_SET_FRQ1 | 174, FT_CMD_WAIT | 50, // '4'
FT_CMD_NOTES_ON | 1, FT_CMD_SET_FRQ1 | 165, FT_CMD_WAIT | 50, // '3' // FT_CMD_NOTES_ON | 1, FT_CMD_SET_FRQ1 | 165, FT_CMD_WAIT | 50, // '3'
FT_CMD_NOTES_ON | 1, FT_CMD_SET_FRQ1 | 174, FT_CMD_WAIT | 50, // '4' // FT_CMD_NOTES_ON | 1, FT_CMD_SET_FRQ1 | 174, FT_CMD_WAIT | 50, // '4'
FT_CMD_NOTES_OFF | 3, FT_CMD_WAIT | 50, // ' ' // FT_CMD_NOTES_OFF | 3, FT_CMD_WAIT | 50, // ' '
FT_CMD_NOTES_ON | 1, FT_CMD_SET_FRQ1 | 247, FT_CMD_WAIT | 50, // '7' // FT_CMD_NOTES_ON | 1, FT_CMD_SET_FRQ1 | 247, FT_CMD_WAIT | 50, // '7'
FT_CMD_NOTES_ON | 1, FT_CMD_SET_FRQ1 | 262, FT_CMD_WAIT | 50, // '1'' // FT_CMD_NOTES_ON | 1, FT_CMD_SET_FRQ1 | 262, FT_CMD_WAIT | 50, // '1''
FT_CMD_NOTES_ON | 1, FT_CMD_SET_FRQ1 | 247, FT_CMD_WAIT | 50, // '7' // FT_CMD_NOTES_ON | 1, FT_CMD_SET_FRQ1 | 247, FT_CMD_WAIT | 50, // '7'
FT_CMD_NOTES_OFF | 3, FT_CMD_WAIT | 50, // ' ' // FT_CMD_NOTES_OFF | 3, FT_CMD_WAIT | 50, // ' '
FT_CMD_NOTES_ON | 1, FT_CMD_SET_FRQ1 | 147, FT_CMD_WAIT | 50, // '2' // FT_CMD_NOTES_ON | 1, FT_CMD_SET_FRQ1 | 147, FT_CMD_WAIT | 50, // '2'
FT_CMD_NOTES_OFF | 3, FT_CMD_WAIT | 50, // ' ' // FT_CMD_NOTES_OFF | 3, FT_CMD_WAIT | 50, // ' '
FT_CMD_NOTES_ON | 1, FT_CMD_SET_FRQ1 | 174, FT_CMD_WAIT | 50, // '4' // FT_CMD_NOTES_ON | 1, FT_CMD_SET_FRQ1 | 174, FT_CMD_WAIT | 50, // '4'
FT_CMD_NOTES_ON | 1, FT_CMD_SET_FRQ1 | 165, FT_CMD_WAIT | 50, // '3' // FT_CMD_NOTES_ON | 1, FT_CMD_SET_FRQ1 | 165, FT_CMD_WAIT | 50, // '3'
FT_CMD_NOTES_ON | 1, FT_CMD_SET_FRQ1 | 174, FT_CMD_WAIT | 50, // '4' // FT_CMD_NOTES_ON | 1, FT_CMD_SET_FRQ1 | 174, FT_CMD_WAIT | 50, // '4'
FT_CMD_NOTES_OFF | 3, FT_CMD_WAIT | 50, // ' ' // FT_CMD_NOTES_OFF | 3, FT_CMD_WAIT | 50, // ' '
FT_CMD_NOTES_ON | 1, FT_CMD_SET_FRQ1 | 196, FT_CMD_WAIT | 50, // '5' // FT_CMD_NOTES_ON | 1, FT_CMD_SET_FRQ1 | 196, FT_CMD_WAIT | 50, // '5'
FT_CMD_NOTES_ON | 1, FT_CMD_SET_FRQ1 | 220, FT_CMD_WAIT | 50, // '6' // FT_CMD_NOTES_ON | 1, FT_CMD_SET_FRQ1 | 220, FT_CMD_WAIT | 50, // '6'
FT_CMD_NOTES_ON | 1, FT_CMD_SET_FRQ1 | 196, FT_CMD_WAIT | 50, // '5' // FT_CMD_NOTES_ON | 1, FT_CMD_SET_FRQ1 | 196, FT_CMD_WAIT | 50, // '5'
//
FT_CMD_NOTES_OFF | 3, FT_CMD_WAIT | 500, // FT_CMD_NOTES_OFF | 3, FT_CMD_WAIT | 500,
// недо-имперский марш // недо-имперский марш
FT_CMD_NOTES_ON | 3, FT_CMD_SET_FRQ1 | 165, FT_CMD_SET_FRQ2 | 165, FT_CMD_WAIT | 25, // '3' FT_CMD_NOTES_ON | 3, FT_CMD_SET_FRQ1 | 131, FT_CMD_SET_FRQ2 | 131, FT_CMD_WAIT | 10, // '1'
FT_CMD_WAIT | 25, // '_' FT_CMD_NOTES_OFF | 3, FT_CMD_WAIT | 10, // ' '
FT_CMD_NOTES_OFF | 3, FT_CMD_WAIT | 25, // ' ' FT_CMD_NOTES_OFF | 3, FT_CMD_WAIT | 10, // ' '
FT_CMD_NOTES_ON | 3, FT_CMD_SET_FRQ1 | 165, FT_CMD_SET_FRQ2 | 165, FT_CMD_WAIT | 25, // '3' FT_CMD_NOTES_OFF | 3, FT_CMD_WAIT | 10, // ' '
FT_CMD_WAIT | 25, // '_' FT_CMD_NOTES_OFF | 3, FT_CMD_WAIT | 10, // ' '
FT_CMD_NOTES_OFF | 3, FT_CMD_WAIT | 25, // ' ' FT_CMD_NOTES_OFF | 3, FT_CMD_WAIT | 10, // ' '
FT_CMD_NOTES_ON | 3, FT_CMD_SET_FRQ1 | 165, FT_CMD_SET_FRQ2 | 165, FT_CMD_WAIT | 25, // '3' FT_CMD_NOTES_ON | 3, FT_CMD_SET_FRQ1 | 131, FT_CMD_SET_FRQ2 | 131, FT_CMD_WAIT | 10, // '1'
FT_CMD_WAIT | 25, // '_' FT_CMD_NOTES_OFF | 3, FT_CMD_WAIT | 10, // ' '
FT_CMD_NOTES_OFF | 3, FT_CMD_WAIT | 25, // ' ' FT_CMD_NOTES_OFF | 3, FT_CMD_WAIT | 10, // ' '
FT_CMD_NOTES_ON | 3, FT_CMD_SET_FRQ1 | 131, FT_CMD_SET_FRQ2 | 131, FT_CMD_WAIT | 25, // '1' FT_CMD_NOTES_OFF | 3, FT_CMD_WAIT | 10, // ' '
FT_CMD_WAIT | 25, // '_' FT_CMD_NOTES_OFF | 3, FT_CMD_WAIT | 10, // ' '
FT_CMD_NOTES_OFF | 3, FT_CMD_WAIT | 25, // ' ' FT_CMD_NOTES_OFF | 3, FT_CMD_WAIT | 10, // ' '
FT_CMD_NOTES_ON | 3, FT_CMD_SET_FRQ1 | 196, FT_CMD_SET_FRQ2 | 196, FT_CMD_WAIT | 25, // '5' FT_CMD_NOTES_ON | 3, FT_CMD_SET_FRQ1 | 131, FT_CMD_SET_FRQ2 | 131, FT_CMD_WAIT | 10, // '1'
FT_CMD_NOTES_ON | 3, FT_CMD_SET_FRQ1 | 165, FT_CMD_SET_FRQ2 | 165, FT_CMD_WAIT | 25, // '3' FT_CMD_NOTES_OFF | 3, FT_CMD_WAIT | 10, // ' '
FT_CMD_WAIT | 25, // '_' FT_CMD_NOTES_OFF | 3, FT_CMD_WAIT | 10, // ' '
FT_CMD_NOTES_OFF | 3, FT_CMD_WAIT | 25, // ' ' FT_CMD_NOTES_OFF | 3, FT_CMD_WAIT | 10, // ' '
FT_CMD_NOTES_ON | 3, FT_CMD_SET_FRQ1 | 131, FT_CMD_SET_FRQ2 | 131, FT_CMD_WAIT | 25, // '1' FT_CMD_NOTES_OFF | 3, FT_CMD_WAIT | 10, // ' '
FT_CMD_WAIT | 25, // '_' FT_CMD_NOTES_OFF | 3, FT_CMD_WAIT | 10, // ' '
FT_CMD_NOTES_OFF | 3, FT_CMD_WAIT | 25, // ' ' FT_CMD_NOTES_ON | 3, FT_CMD_SET_FRQ1 | 131, FT_CMD_SET_FRQ2 | 131, FT_CMD_WAIT | 10, // '1'
FT_CMD_NOTES_ON | 3, FT_CMD_SET_FRQ1 | 196, FT_CMD_SET_FRQ2 | 196, FT_CMD_WAIT | 25, // '5' FT_CMD_NOTES_OFF | 3, FT_CMD_WAIT | 10, // ' '
FT_CMD_NOTES_ON | 3, FT_CMD_SET_FRQ1 | 165, FT_CMD_SET_FRQ2 | 165, FT_CMD_WAIT | 25, // '3' FT_CMD_NOTES_ON | 3, FT_CMD_SET_FRQ1 | 131, FT_CMD_SET_FRQ2 | 131, FT_CMD_WAIT | 10, // '1'
FT_CMD_WAIT | 25, // '_' FT_CMD_NOTES_OFF | 3, FT_CMD_WAIT | 10, // ' '
FT_CMD_NOTES_ON | 3, FT_CMD_SET_FRQ1 | 131, FT_CMD_SET_FRQ2 | 131, FT_CMD_WAIT | 10, // '1'
FT_CMD_NOTES_OFF | 3, FT_CMD_WAIT | 10, // ' '
FT_CMD_NOTES_OFF | 3, FT_CMD_WAIT | 10, // ' '
FT_CMD_NOTES_OFF | 3, FT_CMD_WAIT | 10, // ' '
FT_CMD_NOTES_OFF | 3, FT_CMD_WAIT | 10, // ' '
FT_CMD_NOTES_OFF | 3, FT_CMD_WAIT | 10, // ' '
FT_CMD_NOTES_ON | 3, FT_CMD_SET_FRQ1 | 131, FT_CMD_SET_FRQ2 | 131, FT_CMD_WAIT | 10, // '1'
FT_CMD_NOTES_OFF | 3, FT_CMD_WAIT | 10, // ' '
FT_CMD_NOTES_OFF | 3, FT_CMD_WAIT | 10, // ' '
FT_CMD_NOTES_OFF | 3, FT_CMD_WAIT | 10, // ' '
FT_CMD_NOTES_OFF | 3, FT_CMD_WAIT | 10, // ' '
FT_CMD_NOTES_OFF | 3, FT_CMD_WAIT | 10, // ' '
FT_CMD_NOTES_ON | 3, FT_CMD_SET_FRQ1 | 131, FT_CMD_SET_FRQ2 | 131, FT_CMD_WAIT | 10, // '1'
FT_CMD_NOTES_OFF | 3, FT_CMD_WAIT | 10, // ' '
FT_CMD_NOTES_ON | 3, FT_CMD_SET_FRQ1 | 131, FT_CMD_SET_FRQ2 | 131, FT_CMD_WAIT | 10, // '1'
FT_CMD_NOTES_OFF | 3, FT_CMD_WAIT | 10, // ' '
FT_CMD_NOTES_OFF | 3, FT_CMD_WAIT | 10, // ' '
FT_CMD_NOTES_OFF | 3, FT_CMD_WAIT | 10, // ' '
FT_CMD_NOTES_OFF | 3, FT_CMD_WAIT | 10, // ' '
FT_CMD_NOTES_OFF | 3, FT_CMD_WAIT | 10, // ' '
FT_CMD_NOTES_ON | 3, FT_CMD_SET_FRQ1 | 165, FT_CMD_SET_FRQ2 | 165, FT_CMD_WAIT | 10, // '3'
FT_CMD_WAIT | 10, // '_'
FT_CMD_WAIT | 10, // '_'
FT_CMD_WAIT | 10, // '_'
FT_CMD_WAIT | 10, // '_'
FT_CMD_WAIT | 10, // '_'
FT_CMD_NOTES_OFF | 3, FT_CMD_WAIT | 10, // ' '
FT_CMD_NOTES_ON | 3, FT_CMD_SET_FRQ1 | 165, FT_CMD_SET_FRQ2 | 165, FT_CMD_WAIT | 10, // '3'
FT_CMD_WAIT | 10, // '_'
FT_CMD_WAIT | 10, // '_'
FT_CMD_WAIT | 10, // '_'
FT_CMD_WAIT | 10, // '_'
FT_CMD_WAIT | 10, // '_'
FT_CMD_NOTES_OFF | 3, FT_CMD_WAIT | 10, // ' '
FT_CMD_NOTES_ON | 3, FT_CMD_SET_FRQ1 | 165, FT_CMD_SET_FRQ2 | 165, FT_CMD_WAIT | 10, // '3'
FT_CMD_WAIT | 10, // '_'
FT_CMD_WAIT | 10, // '_'
FT_CMD_WAIT | 10, // '_'
FT_CMD_WAIT | 10, // '_'
FT_CMD_WAIT | 10, // '_'
FT_CMD_NOTES_OFF | 3, FT_CMD_WAIT | 10, // ' '
FT_CMD_NOTES_ON | 3, FT_CMD_SET_FRQ1 | 131, FT_CMD_SET_FRQ2 | 131, FT_CMD_WAIT | 10, // '1'
FT_CMD_WAIT | 10, // '_'
FT_CMD_WAIT | 10, // '_'
FT_CMD_WAIT | 10, // '_'
FT_CMD_WAIT | 10, // '_'
FT_CMD_WAIT | 10, // '_'
FT_CMD_NOTES_OFF | 3, FT_CMD_WAIT | 10, // ' '
FT_CMD_NOTES_ON | 3, FT_CMD_SET_FRQ1 | 196, FT_CMD_SET_FRQ2 | 196, FT_CMD_WAIT | 10, // '5'
FT_CMD_WAIT | 10, // '_'
FT_CMD_NOTES_ON | 3, FT_CMD_SET_FRQ1 | 165, FT_CMD_SET_FRQ2 | 165, FT_CMD_WAIT | 10, // '3'
FT_CMD_WAIT | 10, // '_'
FT_CMD_WAIT | 10, // '_'
FT_CMD_WAIT | 10, // '_'
FT_CMD_WAIT | 10, // '_'
FT_CMD_NOTES_OFF | 3, FT_CMD_WAIT | 10, // ' '
FT_CMD_NOTES_ON | 3, FT_CMD_SET_FRQ1 | 131, FT_CMD_SET_FRQ2 | 131, FT_CMD_WAIT | 10, // '1'
FT_CMD_WAIT | 10, // '_'
FT_CMD_WAIT | 10, // '_'
FT_CMD_WAIT | 10, // '_'
FT_CMD_WAIT | 10, // '_'
FT_CMD_WAIT | 10, // '_'
FT_CMD_NOTES_OFF | 3, FT_CMD_WAIT | 10, // ' '
FT_CMD_NOTES_ON | 3, FT_CMD_SET_FRQ1 | 196, FT_CMD_SET_FRQ2 | 196, FT_CMD_WAIT | 10, // '5'
FT_CMD_WAIT | 10, // '_'
FT_CMD_NOTES_ON | 3, FT_CMD_SET_FRQ1 | 165, FT_CMD_SET_FRQ2 | 165, FT_CMD_WAIT | 10, // '3'
FT_CMD_WAIT | 10, // '_'
FT_CMD_WAIT | 10, // '_'
FT_CMD_WAIT | 10, // '_'
FT_CMD_WAIT | 10, // '_'
FT_CMD_NOTES_OFF | 3, FT_CMD_WAIT | 10, // ' '
FT_CMD_NOTES_OFF | 3, FT_CMD_WAIT | 10, // ' '
FT_CMD_NOTES_OFF | 3, FT_CMD_WAIT | 500, FT_CMD_NOTES_OFF | 3, FT_CMD_WAIT | 500,
FT_CMD_STOP FT_CMD_STOP

View File

@ -96,6 +96,9 @@ int main(void)
/* USER CODE BEGIN 2 */ /* USER CODE BEGIN 2 */
HAL_TIM_Base_Start_IT(&htim4); HAL_TIM_Base_Start_IT(&htim4);
FloppyDriveInitialize();
HAL_TIM_Base_Start_IT(&htim3); HAL_TIM_Base_Start_IT(&htim3);
/* USER CODE END 2 */ /* USER CODE END 2 */