ARM – SysTick fácil.

SysTick é um timer decrescente presente na maioria dos processadores ARM Cortex ligado diretamente ao Core Clock com registrador de 24 Bits.

O SysTick gera interrupção a cada estouro do contador, ou seja, quando chega em 0. Para configurar usando os registradores diretamente segue exemplo:

SysTick->CTRL = 0; // Desliga o SysTick
SysTick->LOAD = 1000; // Conta de 1000 até 0
SysTick->VAL = 0; // Valor inicial, e também valor da contagem atual
SysTick->CTRL = 0x7; // Liga o SysTick

Ou para quem tiver disponível os arquivos CMSIS (muito provavelmente) este pode ser inicializado diretamente:

Neste caso estabelecemos um estouro a cada 1ms

SysTick_Config(SystemCoreClock / 1000) ;

Neste o loop while trava se um valor impossível for inicializado.

while (SysTick_Config(48000000 / 2) != 0);  // 48Mhz / 2 = 24Mhz

Ótima opção para iniciar no mundo ARM.

Lembre-se que o tamanho máximo do contador é de 24 bits o que representa um valor decimal de 16777216. Assim dividir o 48Mhz por 2 retorna uma valor maior que o máximo possível. Deu para perceber que conseguir 1 Segundo de estouro só é possível em clocks mais baixo.

Para que as interrupções ocorram não esqueça de definir uma função (Handler) que deve estar adicionada na Vector Table:

void (* const g_pfnVectors[])(void) = {
&_estack,
Reset_Handler,
NMI_Handler,
FaultHandler,
0,
0,
0,
0,
0,
0,
0,
SVC_Handler,
0,
0,
PendSV_Handler,
SysTickIsr, //Função SysTickIsr que será chamada a cada estouro
};
Anúncios

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s