Temporizador

Contadores i8254, palavra de controlo, read-back, divisor e intervalos em ticks.

TLDR

Perguntar sobre esta página

ChatGPTClaudePerplexityGrokGeminiCopiar e abrirDeepSeekCopiar e abrir

Divisor e saída

Nos modos periódicos do i8254, com relógio de entrada finf_{in} e divisor NN:

fout=finN,T=Nfin.f_{out}=\frac{f_{in}}{N},\qquad T=\frac{N}{f_{in}}.
  • Usa TIMER_FREQ do apoio de LC. O valor nominal dos exemplos é 1193182 Hz.
  • A política de quociente inteiro para 60 Hz dá N=19886=0x4DAEN=19886=\texttt{0x4DAE} e cerca de 60,001106 Hz. Pedido e frequência real diferem.
  • Em binário, dois bytes zero codificam 65536. Valida o divisor antes de converter para 16 bits; nos modos 2 e 3, exige pelo menos 2. BCD precisa de cálculo próprio.
  • Modo 2 produz um impulso baixo por período. Modo 3 produz uma onda aproximadamente quadrada; com NN ímpar, a fase alta dura um ciclo de entrada mais. Não há duas interrupções por período.
  • Modos 0 e 1 correspondem a terminal count e one-shot; 4 e 5 produzem strobes iniciados por software e hardware.

Programar o contador

Contadores 0, 1 e 2 usam 0x40, 0x41 e 0x42; controlo usa 0x43.

Bits da palavra normalCampo
7:6Contador, códigos 00, 01, 10
5:4Acesso, 01 LSB, 10 MSB, 11 LSB depois MSB
3:1Modo
00 binário, 1 BCD

Para contador 2, LSB/MSB, modo 3 binário, escreve 0xB6 em 0x43. Para carregar 1234=0x04D21234=\texttt{0x04D2}, escreve 0xD2 e depois 0x04 em 0x42.

Se só alteras a frequência, conserva modo e base com status & 0x0F, juntando seleção do contador e acesso 0x30. Confere cada operação de I/O. Alterar timer 0 afeta o tempo que o Minix mede; repõe a configuração do ambiente.

Read-back

  • Bits 7:6 são 11. Bit 5 a 0 captura contagem; bit 4 a 0 captura estado.
  • Bits 3, 2 e 1 a 1 selecionam contadores 2, 1 e 0. Bit 0 fica a 0.
  • Só estado do contador 0: escreve 0xE2 em 0x43 e lê 0x40 uma vez.
  • No estado devolvido, bits 7 e 6 são OUT e Null Count; bits 5:0 são acesso, modo e base.
  • Extrai modo com (status >> 1) & 7; códigos 6 e 7 equivalem a 2 e 3. Se capturas estado e contagem, a porta devolve primeiro o estado e depois a contagem. O latch evita misturar bytes de contagens diferentes.

Ticks e intervalos

kk ticks a frequência ff representam aproximadamente k/fk/f segundos. 333 ticks a 60 Hz dão 5,55 s, com resolução de um tick.

A diferença entre contadores uint32_t é módulo 2322^{32}: de 0xFFFFFFFE até 3 passaram 5 ticks. A conta exige menos de uma volta completa e tipos sem sinal coerentes. Overflow com sinal é comportamento indefinido.

Timer a 60 Hz e desenho a cada dois ticks dão 30 frames/s. A receção de teclas continua entre frames.

Divisor e frequência real.

À tua maneira

Aparência

Modo de cor
Tema
Cor de destaque

Leitura

Fonte de leitura

Álgebra, lógica e uma ideia de cada vez.

Código

Fonte do código

Navegação

Cursor de leitura, sem edição. h, j, k, l movem; / pesquisa nesta página. v seleciona caracteres; V seleciona linhas; y copia. Tab permite destacar ou comentar. Espaço ou Enter abre blocos recolhíveis. Nos cartões, h, j, k, l mudam o foco.

CSS personalizado

Ativa uma sugestão ou guarda o teu CSS. Só muda este navegador.

Usa --page, --text e --accent para acompanhar o tema.

Seletores e recuperação

.site-header, .prose, .course-card, [data-reading-history], [data-playground] e .page-actions.

Abre a aparência com a tecla vírgula ou no rodapé. Se o CSS esconder os controlos, abre esta página sem CSS personalizado.

Pesquisar

Escreve para pesquisar em todo o site.

para escolher · Enter para abrir · Esc para fechar

Copiar fórmula

A cópia automática não está disponível. Copia o LaTeX abaixo.

Pesquisar nesta página

Enter procura · n / N repetem · Esc cancela. Ctrl / Cmd K pesquisa todo o site.

Atalhos de teclado

Clica numa tecla para a mudar. Esc cancela. Backspace desativa.

PesquisarCtrl / Cmd K

Os atalhos não interferem enquanto escreves. Tab e Enter funcionam sempre.