MVV wrote:dsp, как правильно сделать буфер в 14 байт,
Я готов помочь и рассказать, только я не понимаю вопроса. То есть, какая проблема.
1. что-то не правильно работает (тогда опиши пожалуйста подробно)
2. ты занят реализацией повторной посылки кода от нажатой клавиши, тогда лучше вообще этот 14 байтный буфер не трогать у него совсем другое назначение. Я там структуры делал и по ссылке обращался, но это по привычке (и совсем не обязательно так делать), тут можно просто глобально объявить переменную какую или буфер и потом к нему обращаться. Тоже будет работать. Тут всего одна клавиатура, а не 10.
По поводу 14 байтного буфера (которых у меня аж целых два, и они все время местами меняются, поэтому по ссылке к ним обращаюсь).
Вот есть там такая функция
int KBParse(PS2_keyboard_t* pPS2_keyboard)
она занимается тем, что все время сравнивает текущее и предыдущее состояние клавиатуры, когда происходит одно из событий – нажали клавишу (несколько) или отпустили. Вот клавиатура прислала нам 8 байт и как понять, что уже было нажато до сего момента, а что нажали только-что или какую клавишу отпустили. Для этого сравниваем с предыдущим состоянием. Так как то, что сейчас текущее в следующий раз будет предыдущим состоянием, то все время по ссылке переприсваиваем буфер. Как бы реально существует два буфера LIN_BUF_0 и LIN_BUF_1 а обращаемся к ним (чтобы проще было) через ссылки LIN_BUF_curr и LIN_BUF_prev. Эти массивы по 14 байт, потому что функциональных клавиш 8 (по байту) и плюс обычные клавиши могут быть нажаты (до пяти клавиш)
if (pPS2_KB->SW == 0x0){
LIN_BUF_curr = pPS2_KB->LIN_BUF_0;
LIN_BUF_prev = pPS2_KB->LIN_BUF_1;
} else {
LIN_BUF_curr = pPS2_KB->LIN_BUF_1;
LIN_BUF_prev = pPS2_KB->LIN_BUF_0;
}
Это все работает. Не знаю, почему ты спрашиваешь, как туда записать что то.
Я сейчас пользуюсь своей прошивкой, отличие только в том, что клавиши курсора добавлены. Так как клавиатура точно такие же шлет коды без 0xE0 еще от аналогичных клавиш курсора (уж не помню, можно посмотреть) то я не стал пока заморачиваться на посылку этого самого 0xE0 байта (пока). Ты добавил – хорошо. Если у тебя проблемка что на стороне приемника FPGA что-то не работает, то поменяй строчку (было - timer_60usec_count == 12'h800)
ps2_keyb.v
assign timer_60usec_done = (timer_60usec_count == 12'hFF0); // 12'h800 = 4000~ 160us
Частоту clk ты увеличил c 12.5 до 25Mhz, но некоторые вещи были настроены на 12.5 Mhz. Может еще где надо править по хорошему но у меня работает и так.
Вот, как понял так и объяснил.
MVV wrote:как правильно сделать буфер в 14 байт, чтобы запись сделанная в ps2_keyboard.с в нем сохранялась
все что делается ps2_keyboard.с а именно в функии KBParse, сохраняется в структуре PS2_KB. с нее все можно прочитать и переписать.