
Сообщение от
dosikus
Гы ... На F4 без оптимизации , тупой вывод из массива в соответствии с захваченными адресами - 330nS . 168МГц тактовая от HSE.
Отлично ! 150 ns от начала импульса прерывания до результата команды EXTI_STB_ON;
Теперь давайте займемся оптимизацией:
1. Импульс прерывания нужно сделать другой полярности. То есть при чтении из порта клавиатуры IN_FE (IN_K&K) сигнал равен 0, а не 1.
2. Немного сократим функцию прерывания:
Код:
...
EXTI_STB_ON;
GPIOB->ODR = key_buff2 [(GPIOB->IDR)&0x00ff];
EXTI_STB_OFF;
...
3. Массив key_buff2 заполним заранее, сразу после получения пакета по UART:
Код:
...
for (key_address = 0; key_address <= 255; key_address++) // цикл адреса с клавиатуры от 0 до 255 для заполнения массива данных с клавиатуры
{
key_data = 255; // начальный результат - все единицы - кнопки не нажаты
tmp_byte = key_address; // копируем для разбора по битам
for (b = 7; b >= 0; b--) // цикл по битам адреса с клавиатуры
{
tmp_byte &= 0x00ff; // обнуляем все биты, кроме 8 младших
if (tmp_byte < 128) // если старший бит в байте 0, то
{
key_data &= key_buff[b]; // добавляем к результату состояние соответствующего ряда клавиатуры из пакета
}
tmp_byte = tmp_byte << 1; // сдвигаем байт адреса влево
}
key_buff2[key_address] = key_data; // рассчитанный байт клавиатуры для данного адреса клавиатуры записываем в массив
}