-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathlibavr.h
93 lines (85 loc) · 2.13 KB
/
libavr.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
/*
* Copyright (c) 2007-21, Kalopa Robotics Limited. All rights reserved.
*
* This is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2, or (at your option)
* any later version. It is distributed in the hope that it will be
* useful, but WITHOUT ANY WARRANTY; without even the implied warranty
* of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this product; see the file COPYING. If not, write to the
* Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
*
* ABSTRACT
*/
/*
* Some inline assembly functions...
*/
#ifndef sei
#define sei() __asm__ __volatile__ ("sei" ::)
#define cli() __asm__ __volatile__ ("cli" ::)
#endif
/*
* Some useful typedefs...
*/
typedef unsigned char uchar_t;
typedef unsigned int uint_t;
typedef unsigned long ulong_t;
/*
* This structure is used to maintain the specific parameters for
* a PID controller.
*/
struct pid {
int kp;
int ki;
int kd;
uint_t k_div;
int e_sigma;
int e_prev;
uint_t u_mul;
uint_t u_div;
};
/*
* Linked list for timer callbacks.
*/
struct thread {
struct thread *next;
uint_t tick;
uint_t (*func)();
};
/*
* Prototypes for functions in libavr.a
*/
int sio_getc(FILE *);
int sio_putc(char, FILE *);
void sio_setecho(int);
int sio_dequeue(char);
void sio_enqueue(char, char);
void sio_set_direct_mode(uchar_t);
void sio_iqueue_drain();
void sio_oqueue_drain();
int sio_iqueue_empty();
int sio_oqueue_empty();
void spi_init();
int spi_byte(uchar_t);
int analog_read(int);
int pidcalc(struct pid *, int);
int timer_callback(unsigned int (*)(), int);
void timer_enqueue(struct thread *);
void timer_loop();
void timer_tick();
void _reset();
void _sleep();
void _watchdog();
void _wdenable();
void _setled(uchar_t);
void _bootstrap();
void _sio_rxinton();
void _sio_rxintoff();
void _sio_txinton();
void _sio_txintoff();
void _ana_start(uchar_t);
uint_t _ana_read();