]>
Commit | Line | Data |
---|---|---|
38d61ee1 | 1 | /* |
2 | Copyright 2012 Jun WAKO <wakojun@gmail.com> | |
3 | ||
4 | This software is licensed with a Modified BSD License. | |
5 | All of this is supposed to be Free Software, Open Source, DFSG-free, | |
6 | GPL-compatible, and OK to use in both free and proprietary applications. | |
7 | Additions and corrections to this file are welcome. | |
8 | ||
9 | ||
10 | Redistribution and use in source and binary forms, with or without | |
11 | modification, are permitted provided that the following conditions are met: | |
12 | ||
13 | * Redistributions of source code must retain the above copyright | |
14 | notice, this list of conditions and the following disclaimer. | |
15 | ||
16 | * Redistributions in binary form must reproduce the above copyright | |
17 | notice, this list of conditions and the following disclaimer in | |
18 | the documentation and/or other materials provided with the | |
19 | distribution. | |
20 | ||
21 | * Neither the name of the copyright holders nor the names of | |
22 | contributors may be used to endorse or promote products derived | |
23 | from this software without specific prior written permission. | |
24 | ||
25 | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" | |
26 | AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE | |
27 | IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE | |
28 | ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE | |
29 | LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR | |
30 | CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF | |
31 | SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS | |
32 | INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN | |
33 | CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) | |
34 | ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE | |
35 | POSSIBILITY OF SUCH DAMAGE. | |
36 | */ | |
37 | ||
38 | #include <stdbool.h> | |
39 | #include <avr/io.h> | |
40 | #include <avr/interrupt.h> | |
41 | #include "x68k.h" | |
42 | ||
43 | ||
44 | void x68k_init(void) | |
45 | { | |
46 | KBD_RX_INIT(); | |
47 | } | |
48 | ||
49 | // RX ring buffer | |
50 | #define RBUF_SIZE 8 | |
51 | static uint8_t rbuf[RBUF_SIZE]; | |
52 | static uint8_t rbuf_head = 0; | |
53 | static uint8_t rbuf_tail = 0; | |
54 | ||
55 | uint8_t x68k_recv(void) | |
56 | { | |
57 | uint8_t data = 0; | |
58 | if (rbuf_head == rbuf_tail) { | |
59 | return 0; | |
60 | } | |
61 | ||
62 | data = rbuf[rbuf_tail]; | |
63 | rbuf_tail = (rbuf_tail + 1) % RBUF_SIZE; | |
64 | return data; | |
65 | } | |
66 | ||
42c96241 | 67 | void x68k_send(uint8_t d) |
68 | { | |
69 | while (!(UCSR1A&(1<<UDRE1))); | |
70 | UDR1 = d; | |
71 | } | |
72 | ||
38d61ee1 | 73 | // USART RX complete interrupt |
74 | ISR(KBD_RX_VECT) | |
75 | { | |
76 | uint8_t next = (rbuf_head + 1) % RBUF_SIZE; | |
77 | if (next != rbuf_tail) { | |
78 | rbuf[rbuf_head] = KBD_RX_DATA; | |
79 | rbuf_head = next; | |
80 | } | |
81 | } |