16FXlib
util.c
Go to the documentation of this file.
1 
2 //*****************************************************************************
3 // Author : Christian Illy
4 // Created : 19.04.2009
5 // Revised : 04.06.2009
6 // Version : 0.1
7 // Target MCU : Fujitsu MB96300 series
8 //
9 // This program is free software: you can redistribute it and/or modify
10 // it under the terms of the GNU General Public License as published by
11 // the Free Software Foundation, either version 3 of the License, or
12 // (at your option) any later version.
13 //
14 // This program is distributed in the hope that it will be useful,
15 // but WITHOUT ANY WARRANTY; without even the implied warranty of
16 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17 // GNU General Public License for more details.
18 //
19 // You should have received a copy of the GNU General Public License
20 // along with this program. If not, see <http://www.gnu.org/licenses/>.
21 //
22 //*****************************************************************************
23 
24 #include "util.h"
25 #include "adc.h"
26 #include "mb96348hs.h"
27 
28 void delay(uint16_t del) {
29  uint16_t cnt;
30  for (cnt = 0; cnt < del; cnt++)
31  __wait_nop();
32 }
33 
34 void delay_us(uint16_t us) {
35  TMRLR3 = 7*us - 1;
36  TMCSR3 = 0x1403;
37  while (TMCSR3_UF == 0)
38  __wait_nop();
39 }
40 
41 void delay_ms(uint16_t ms) {
42  for (; ms > 0; ms--)
43  delay_us(1000);
44 }
45 
46 void delay_s(uint16_t s) {
47  for (; s > 0; s--)
48  delay_ms(1000);
49 }
50 
51 int sgn(int x) {
52  return (x > 0) ? 1 : (x < 0) ? -1 : 0;
53 }
54 
55 void intToStr(uint32_t val, uint8_t digits, uint8_t fuellChar, char* dest) {
56  uint8_t i;
57 
58  if ((digits < 1) || (digits > 10)) {
59  dest = 0;
60  return;
61  }
62 
63  for (i = 0; i < digits; i++) {
64  dest[digits - i - 1] = '0' + (val % 10);
65  val /= 10;
66  }
67 
68  for (i = 0; i < (digits - 1); i++) {
69  if (dest[i] == '0')
70  dest[i] = fuellChar;
71  else
72  break;
73  }
74 
75  dest[digits] = 0;
76 }
77 
78 void intToHex(uint32_t val, uint8_t digits, uint8_t fuellChar, char* dest) {
79  uint8_t i;
80 
81  if ((digits < 1) || (digits > 8)) {
82  dest = 0;
83  return;
84  }
85 
86  for (i = 0; i < digits; i++) {
87  dest[digits - i - 1] = '0' + (val % 16);
88  if (dest[digits - i - 1] > '9')
89  dest[digits - i - 1] += 'A' - ':';
90  val /= 16;
91  }
92 
93  for (i = 0; i < (digits - 1); i++) {
94  if (dest[i] == '0')
95  dest[i] = fuellChar;
96  else
97  break;
98  }
99 
100  dest[digits] = 0;
101 }
102 
103 
104 static uint32_t random_w = 0;
105 static uint32_t random_z = 0;
106 
107 void random_init(void) {
108  uint8_t i;
109 
110  adc_init();
111 
112  for (i = 0; i < 32; i++) {
113  random_w |= (adc_getValue(RANDOM_INIT_PIN_START+(i%RANDOM_INIT_PIN_COUNT)) & 0x01) << i;
114  delay_ms(3);
115  random_z |= (adc_getValue(RANDOM_INIT_PIN_START+(i%RANDOM_INIT_PIN_COUNT)) & 0x01) << i;
116  delay_ms(3);
117  }
118 }
119 
121 {
122  /*
123  * (Pseudo) random number generation from:
124  * http://en.wikipedia.org/wiki/Random_number_generation#Computational_methods
125  */
126  random_z = 36969 * (random_z & 65535) + (random_z >> 16);
127  random_w = 18000 * (random_w & 65535) + (random_w >> 16);
128  return (random_z << 16) + random_w; /* 32-bit result */
129 }
130 
int sgn(int x)
Definition: util.c:51
unsigned long uint32_t
Definition: inttypes.h:60
unsigned int uint16_t
Definition: inttypes.h:50
void delay_us(uint16_t us)
Definition: util.c:34
unsigned char uint8_t
Definition: inttypes.h:35
void delay_s(uint16_t s)
Definition: util.c:46
#define RANDOM_INIT_PIN_COUNT
Definition: util.h:117
uint32_t random(void)
Definition: util.c:120
void delay_ms(uint16_t ms)
Definition: util.c:41
#define RANDOM_INIT_PIN_START
Definition: util.h:122
void random_init(void)
Definition: util.c:107
int16_t adc_getValue(uint8_t pin)
Definition: adc.c:35
void adc_init(void)
Definition: adc.c:29
void delay(uint16_t del)
Definition: util.c:28
void intToHex(uint32_t val, uint8_t digits, uint8_t fuellChar, char *dest)
Definition: util.c:78
void intToStr(uint32_t val, uint8_t digits, uint8_t fuellChar, char *dest)
Definition: util.c:55