Вычисление циклов задержки для hcs12

Я пытаюсь рассчитать количество циклов инструкций и циклов задержки для HCS12. У меня есть информация о HCS12

HCS12 использует часы шины (E clock) в качестве эталона синхронизации.

  • Частота E-часов равна половине частоты встроенного тактового генератора (часы, 48 МГц, E-часы, 24 МГц).
  • Время выполнения инструкций также измеряется в тактах E

  • Интересно, 24 Mhz это частота кристалла? Если это так, только половина частоты кварцевого генератора используется для времени команд процессора. Так должно ли оно быть в два раза?

  • Как сделать задержку 100 мс для демонстрационной платы с частотой шины 24 МГц?

Чтобы создать задержку в 100 мс, нам нужно повторить предыдущую последовательность команд 60000 раз [100 мс ÷ (40 ÷ 24 000 000) мкс = 60 000]. Следующая последовательность команд создаст желаемую задержку: Есть пример, но я не понимаю, как 60000 а также 40 значения рассчитаны.

           ldx #60000       
loop       psha              ; 2 E cycles
           pula              ; 3 E cycles
           psha              ; 2 E cycles
           pula              ; 3 E cycles
           psha              ; 2 E cycles
           pula              ; 3 E cycles
           psha              ; 2 E cycles
           pula              ; 3 E cycles
           psha              ; 2 E cycles
           pula              ; 3 E cycles
           psha              ; 2 E cycles
           pula              ; 3 E cycles
           psha              ; 2 E cycles
           pula              ; 3 E cycles
           nop               ; 2 E cycles
           nop               ; 3 E cycles
           dbne x,loop

1 ответ

Решение

В первом разделе объясняется, что если внутренний генератор (или внешний кристалл) имеет частоту 48 МГц, EClock равен 24 МГц. Так что если вы хотите задержать на 100 миллисекунд, это 24 000 000 * 100 / 1000 EClocks, а именно 2 400 000 циклов команд.

Максимальный доступный размер регистра равен 16 битам, поэтому выбрано значение счетчика цикла <= 65535.

Удобно, когда 60000 - это фактор 2400000, то есть 60000 * 40. Таким образом, внутренний цикл рассчитан на 40 циклов. Однако временные комментарии на последних 3 строках неверны, они должны быть

nop               ; 1 E cycle
nop               ; 1 E cycle
dbne x,loop       ; 3 E cycles

Предоставление требуемого времени выполнения 40 циклов.

Обратите внимание, что если у вас есть прерывания, другие процессы, этот жестко закодированный метод не очень точен, и прерывание по таймеру будет лучше.

Другие вопросы по тегам