This is a part of the Kinetiszer project.

Dependencies:   inc

Dependents:   kinetisizer

Committer:
Clemo
Date:
Tue Oct 28 20:09:12 2014 +0000
Revision:
1:8ae4ab73ca6a
Parent:
0:cb80470434eb
First publication (untested)

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Clemo 0:cb80470434eb 1 /*
Clemo 0:cb80470434eb 2 * @brief Systick related functions.
Clemo 0:cb80470434eb 3 *
Clemo 0:cb80470434eb 4 * @note
Clemo 0:cb80470434eb 5 * Copyright (C) Elektor, 2014
Clemo 0:cb80470434eb 6 * All rights reserved.
Clemo 0:cb80470434eb 7 *
Clemo 0:cb80470434eb 8 * @par
Clemo 0:cb80470434eb 9 * This software is supplied "AS IS" without any warranties of any kind,
Clemo 0:cb80470434eb 10 * and Elektor and its licensor disclaim any and all warranties, express
Clemo 0:cb80470434eb 11 * or implied, including all implied warranties of merchantability,
Clemo 0:cb80470434eb 12 * fitness for a particular purpose and non-infringement of intellectual
Clemo 0:cb80470434eb 13 * property rights. Elektor assumes no responsibility or liability for
Clemo 0:cb80470434eb 14 * the use of the software, conveys no license or rights under any patent,
Clemo 0:cb80470434eb 15 * copyright, mask work right, or any other intellectual property rights in
Clemo 0:cb80470434eb 16 * or to any products. Elektor reserves the right to make changes in the
Clemo 0:cb80470434eb 17 * software without notification. Elektor also makes no representation or
Clemo 0:cb80470434eb 18 * warranty that such application will be suitable for the specified use
Clemo 0:cb80470434eb 19 * without further testing or modification.
Clemo 0:cb80470434eb 20 *
Clemo 0:cb80470434eb 21 * @par
Clemo 0:cb80470434eb 22 * Permission to use, copy, modify, and distribute this software and its
Clemo 0:cb80470434eb 23 * documentation is hereby granted, under Elektor's and its licensor's
Clemo 0:cb80470434eb 24 * relevant copyrights in the software, without fee. This copyright,
Clemo 0:cb80470434eb 25 * permission, and disclaimer notice must appear in all copies of this code.
Clemo 0:cb80470434eb 26 */
Clemo 0:cb80470434eb 27
Clemo 0:cb80470434eb 28 #include "board.h"
Clemo 0:cb80470434eb 29 #include "systick.h"
Clemo 0:cb80470434eb 30 #include "keyboard.h"
Clemo 0:cb80470434eb 31
Clemo 0:cb80470434eb 32 void loop_priority_high(void);
Clemo 0:cb80470434eb 33
Clemo 0:cb80470434eb 34 volatile uint32_t systick_counter = 0;
Clemo 0:cb80470434eb 35 static volatile uint16_t systick_rollover_counter = 0;
Clemo 0:cb80470434eb 36 static volatile uint32_t systick_delay_counter = 0;
Clemo 0:cb80470434eb 37 static volatile uint16_t systick_seconds_counter = 0;
Clemo 0:cb80470434eb 38 volatile uint32_t seconds_counter = 0;
Clemo 0:cb80470434eb 39 static volatile uint16_t systick_led1_red_counter = 0;
Clemo 0:cb80470434eb 40 static volatile uint16_t systick_led1_green_counter = 0;
Clemo 0:cb80470434eb 41 static volatile uint16_t systick_led3_counter = 0;
Clemo 0:cb80470434eb 42
Clemo 0:cb80470434eb 43 #define LED_BLINK_RATE (SYSTICK_RATE_HZ/4)
Clemo 0:cb80470434eb 44 volatile uint32_t systick_led_counter = LED_BLINK_RATE;
Clemo 0:cb80470434eb 45
Clemo 0:cb80470434eb 46 void SysTick_Handler(void)
Clemo 0:cb80470434eb 47 {
Clemo 0:cb80470434eb 48 //Board_LED_Set(BOARD_LED1_GREEN,true);
Clemo 0:cb80470434eb 49 if (systick_counter==0xffffffff) systick_rollover_counter += 1;
Clemo 0:cb80470434eb 50 systick_counter += 1;
Clemo 0:cb80470434eb 51
Clemo 0:cb80470434eb 52 if (systick_delay_counter!=0) systick_delay_counter -= 1;
Clemo 0:cb80470434eb 53
Clemo 0:cb80470434eb 54 systick_seconds_counter += 1;
Clemo 0:cb80470434eb 55 if (systick_seconds_counter>=SYSTICK_RATE_HZ)
Clemo 0:cb80470434eb 56 {
Clemo 0:cb80470434eb 57 systick_seconds_counter = 0;
Clemo 0:cb80470434eb 58 SysTick_Seconds();
Clemo 0:cb80470434eb 59 }
Clemo 0:cb80470434eb 60
Clemo 0:cb80470434eb 61 systick_led_counter -= 1;
Clemo 0:cb80470434eb 62 if (systick_led_counter==0)
Clemo 0:cb80470434eb 63 {
Clemo 0:cb80470434eb 64 systick_led_counter = LED_BLINK_RATE;
Clemo 0:cb80470434eb 65 //Board_LED_Toggle(BOARD_LED1_RED);
Clemo 0:cb80470434eb 66 }
Clemo 0:cb80470434eb 67
Clemo 0:cb80470434eb 68 loop_priority_high();
Clemo 0:cb80470434eb 69 keyboard_scan_encoders();
Clemo 0:cb80470434eb 70 // Board_LED_Set(BOARD_LED1_GREEN,false);
Clemo 0:cb80470434eb 71
Clemo 0:cb80470434eb 72 if (systick_led1_green_counter>0)
Clemo 0:cb80470434eb 73 {
Clemo 0:cb80470434eb 74 systick_led1_green_counter -= 1;
Clemo 0:cb80470434eb 75 if (systick_led1_green_counter==0)
Clemo 0:cb80470434eb 76 {
Clemo 0:cb80470434eb 77 Board_LED_Set(BOARD_LED1_GREEN,BOARD_LED_OFF);
Clemo 0:cb80470434eb 78 }
Clemo 0:cb80470434eb 79 }
Clemo 0:cb80470434eb 80
Clemo 0:cb80470434eb 81 if (systick_led1_red_counter>0)
Clemo 0:cb80470434eb 82 {
Clemo 0:cb80470434eb 83 systick_led1_red_counter -= 1;
Clemo 0:cb80470434eb 84 if (systick_led1_red_counter==0)
Clemo 0:cb80470434eb 85 {
Clemo 0:cb80470434eb 86 Board_LED_Set(BOARD_LED1_RED,BOARD_LED_OFF);
Clemo 0:cb80470434eb 87 }
Clemo 0:cb80470434eb 88 }
Clemo 0:cb80470434eb 89
Clemo 0:cb80470434eb 90 if (systick_led3_counter>0)
Clemo 0:cb80470434eb 91 {
Clemo 0:cb80470434eb 92 systick_led3_counter -= 1;
Clemo 0:cb80470434eb 93 if (systick_led3_counter==0)
Clemo 0:cb80470434eb 94 {
Clemo 0:cb80470434eb 95 Board_LED_Set(BOARD_LED3,false);
Clemo 0:cb80470434eb 96 }
Clemo 0:cb80470434eb 97 }
Clemo 0:cb80470434eb 98 }
Clemo 0:cb80470434eb 99
Clemo 0:cb80470434eb 100
Clemo 0:cb80470434eb 101 void SysTick_Seconds(void)
Clemo 0:cb80470434eb 102 {
Clemo 0:cb80470434eb 103 seconds_counter += 1;
Clemo 0:cb80470434eb 104 //Board_LED_Toggle(BOARD_LED0);
Clemo 0:cb80470434eb 105 }
Clemo 0:cb80470434eb 106
Clemo 0:cb80470434eb 107
Clemo 0:cb80470434eb 108 void SysTick_Delay(uint32_t ticks)
Clemo 0:cb80470434eb 109 {
Clemo 0:cb80470434eb 110 // Blocking delay.
Clemo 0:cb80470434eb 111 if (ticks!=0)
Clemo 0:cb80470434eb 112 {
Clemo 0:cb80470434eb 113 systick_delay_counter = ticks;
Clemo 0:cb80470434eb 114 while (systick_delay_counter>0);
Clemo 0:cb80470434eb 115 }
Clemo 0:cb80470434eb 116 }
Clemo 0:cb80470434eb 117
Clemo 0:cb80470434eb 118
Clemo 0:cb80470434eb 119 void SysTick_LED_Flash(uint8_t led, uint32_t ticks)
Clemo 0:cb80470434eb 120 {
Clemo 0:cb80470434eb 121 if (ticks>0)
Clemo 0:cb80470434eb 122 {
Clemo 0:cb80470434eb 123 if (led==BOARD_LED1_GREEN)
Clemo 0:cb80470434eb 124 {
Clemo 0:cb80470434eb 125 systick_led1_green_counter = ticks;
Clemo 0:cb80470434eb 126 Board_LED_Set(BOARD_LED1_GREEN,BOARD_LED_ON);
Clemo 0:cb80470434eb 127 }
Clemo 0:cb80470434eb 128 else if (led==BOARD_LED1_RED)
Clemo 0:cb80470434eb 129 {
Clemo 0:cb80470434eb 130 systick_led1_red_counter = ticks;
Clemo 0:cb80470434eb 131 Board_LED_Set(BOARD_LED1_RED,BOARD_LED_ON);
Clemo 0:cb80470434eb 132 }
Clemo 0:cb80470434eb 133 else if (led==BOARD_LED3)
Clemo 0:cb80470434eb 134 {
Clemo 0:cb80470434eb 135 systick_led3_counter = ticks;
Clemo 0:cb80470434eb 136 Board_LED_Set(BOARD_LED3,true);
Clemo 0:cb80470434eb 137 }
Clemo 0:cb80470434eb 138 }
Clemo 0:cb80470434eb 139 }