This is a part of the Kinetiszer project.
systick.c@0:cb80470434eb, 2014-10-28 (annotated)
- Committer:
- Clemo
- Date:
- Tue Oct 28 12:19:42 2014 +0000
- Revision:
- 0:cb80470434eb
Error & warning free.
Who changed what in which revision?
User | Revision | Line number | New 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 | } |