Systick Timer (SYSTICK)
Beberapa LPC memiliki fitur Systick Timer. Fitur ini melakukan perhitungan dari 24-bit register menghitung mundur sampai 0. Intinya adalah ini digunakan untuk menjalankan timer interrupt. Maksimum timer yg dapat dihitung adalah 1/4 dari clock microcontroller.
Misal 100Mhz, berarti maksimum Systick yaitu 25MHz.
Program untuk setting systick sangat mudah. ini contoh programnya:
Penjelasan SysTick_Config(ticks) :
Parameter: ticks: banyak nya denyut per detik
misal saya ingin SysTick_Handler bekerja setiap 1 ms = 0.001 S:
x = 1 / 0.001 = 1000
Sehingga:
SysTick_Config(SystemCoreClock / x)
jadi:
SysTick_Config(SystemCoreClock / 1000)
misal saya ingin SysTick_Handler bekerja setiap 0.1 ms = 0.0001 S:
x = 1 / 0.0001 = 10.000
SysTick_Config(SystemCoreClock / x)
jadi:
SysTick_Config(SystemCoreClock / 10000)
berikut fungsinya:
__STATIC_INLINE uint32_t SysTick_Config(uint32_t ticks)
{
if ((ticks - 1UL) > SysTick_LOAD_RELOAD_Msk)
{
return (1UL); /* Reload value impossible */
}
SysTick->LOAD = (uint32_t)(ticks - 1UL); /* set reload register */
NVIC_SetPriority (SysTick_IRQn, (1UL << __NVIC_PRIO_BITS) - 1UL); /* set Priority for Systick Interrupt */
SysTick->VAL = 0UL; /* Load the SysTick Counter Value */
SysTick->CTRL = SysTick_CTRL_CLKSOURCE_Msk |
SysTick_CTRL_TICKINT_Msk |
SysTick_CTRL_ENABLE_Msk; /* Enable SysTick IRQ and SysTick Timer */
return (0UL); /* Function successful */
}
Misal 100Mhz, berarti maksimum Systick yaitu 25MHz.
Program untuk setting systick sangat mudah. ini contoh programnya:
#include "LPC17xx.h"
uint32_t msTicks = 0; /* Variable to store millisecond ticks */
void SysTick_Handler(void)
{
}
int main (void)
{
uint32_t returnCode;
returnCode = SysTick_Config(SystemCoreClock / 1000); /* Configure SysTick to generate an interrupt every millisecond */
if (returnCode != 0)
{ /* Check return code for errors */
// Error Handling
}
while(1);
}
Penjelasan SysTick_Config(ticks) :
Parameter: ticks: banyak nya denyut per detik
misal saya ingin SysTick_Handler bekerja setiap 1 ms = 0.001 S:
x = 1 / 0.001 = 1000
Sehingga:
SysTick_Config(SystemCoreClock / x)
jadi:
SysTick_Config(SystemCoreClock / 1000)
misal saya ingin SysTick_Handler bekerja setiap 0.1 ms = 0.0001 S:
x = 1 / 0.0001 = 10.000
SysTick_Config(SystemCoreClock / x)
jadi:
SysTick_Config(SystemCoreClock / 10000)
berikut fungsinya:
__STATIC_INLINE uint32_t SysTick_Config(uint32_t ticks)
{
if ((ticks - 1UL) > SysTick_LOAD_RELOAD_Msk)
{
return (1UL); /* Reload value impossible */
}
SysTick->LOAD = (uint32_t)(ticks - 1UL); /* set reload register */
NVIC_SetPriority (SysTick_IRQn, (1UL << __NVIC_PRIO_BITS) - 1UL); /* set Priority for Systick Interrupt */
SysTick->VAL = 0UL; /* Load the SysTick Counter Value */
SysTick->CTRL = SysTick_CTRL_CLKSOURCE_Msk |
SysTick_CTRL_TICKINT_Msk |
SysTick_CTRL_ENABLE_Msk; /* Enable SysTick IRQ and SysTick Timer */
return (0UL); /* Function successful */
}
Komentar
Posting Komentar