CH32V003 besitzt einen sogenannten Systemticker. Im Prinzip ist dieses ein Timerinterrupt, der ein Programm periodisch unterbricht
um den Programmteil im Interrupthandler auszuführen. Im hier vorliegenden Fall hat systick eine einzige Funktion, die vom
Benutzer aufrufbar ist:
Prototyp: void systick_init(void);
Durch den Aufruf von systick_init wird der Systemticker so initialisiert, dass der Interrupthandler hierfür jede Millisekunde
aufgerufen wird. Innerhalb dieses Interrupthandlers werden Varbiablen durch den Systemticker gezählt, auf die der Benutzer,
da global, innerhalb seines Programms Zugriff hat. Diese sind:
volatile uint32_t systick_millis;
volatile uint32_t system_zsec;
volatile uint32_t system_halfsec;
volatile uint32_t system_sec;
Während die Variablen system_millis (jede Millisekunde) und system_sec (jede Sekunde) bis zu einem Überlauf
hochgezählt werden (was im Falle von system_sec nie passieren wird, denn 232 Sekunden sind über 130 Jahre) zählt
die Variable system_halfsec alle 1/10 Sekunde periodisch nur von 0 bis 9. system_halfsec toggelt im
Halbsekundentakt zwischen 1 und 0 hin und her:
#include "ch32fun.h"
#include "ch32v003_gpio.h"
#include "systick.h"
#define led_init() PD4_output_init()
#define led_set() PD4_set()
#define led_clr() PD4_clr()
int main(void)
{
SystemInit();
led_init();
systick_init();
while(1)
{
if (system_halfsec) { led_set(); }
else { led_clr(); }
}
}
|