summaryrefslogtreecommitdiff
path: root/firmware/serial.c
diff options
context:
space:
mode:
Diffstat (limited to 'firmware/serial.c')
-rw-r--r--firmware/serial.c64
1 files changed, 31 insertions, 33 deletions
diff --git a/firmware/serial.c b/firmware/serial.c
index f9708f98cf..217f23eb6f 100644
--- a/firmware/serial.c
+++ b/firmware/serial.c
@@ -31,54 +31,52 @@
31static int serial_byte,serial_flag; 31static int serial_byte,serial_flag;
32 32
33void serial_putc (char byte) 33void serial_putc (char byte)
34 { 34{
35 static int i = 0; 35 while (!(SSR1 & (1<<TDRE)));
36 while (!(QI(SCISSR1) & (1<<TDRE))); 36 TDR1 = byte;
37 QI(SCITDR1) = byte; 37 clear_bit(TDRE,SSR1_ADDR);
38 clear_bit (TDRE,SCISSR1); 38}
39 lcd_goto ((i++)%11,1); lcd_putc (byte);
40 }
41 39
42void serial_puts (char const *string) 40void serial_puts (char const *string)
43 { 41{
44 int byte; 42 int byte;
45 while ((byte = *string++)) 43 while ((byte = *string++))
46 serial_putc (byte); 44 serial_putc (byte);
47 } 45}
48 46
49int serial_getc( void ) 47int serial_getc( void )
50 { 48{
51 int byte; 49 int byte;
52 while (!serial_flag); 50 while (!serial_flag);
53 byte = serial_byte; 51 byte = serial_byte;
54 serial_flag = 0; 52 serial_flag = 0;
55 serial_putc (byte); 53 serial_putc (byte);
56 return byte; 54 return byte;
57 } 55}
58 56
59void serial_setup (int baudrate) 57void serial_setup (int baudrate)
60 { 58{
61 QI(SCISCR1) = 59 SCR1 = 0;
62 QI(SCISSR1) = 60 SSR1 = 0;
63 QI(SCISMR1) = 0; 61 SMR1 = 0;
64 QI(SCIBRR1) = (PHI/(32*baudrate))-1; 62 BRR1 = (FREQ/(32*baudrate))-1;
65 QI(SCISCR1) = 0x70; 63 SCR1 = 0x70;
66 } 64}
67 65
68#pragma interrupt 66#pragma interrupt
69void REI1 (void) 67void REI1 (void)
70 { 68{
71 clear_bit (FER,SCISSR1); 69 clear_bit (FER,SSR1_ADDR);
72 } 70}
73 71
74#pragma interrupt 72#pragma interrupt
75void RXI1 (void) 73void RXI1 (void)
76 { 74{
77 serial_byte = QI(SCIRDR1); 75 serial_byte = RDR1;
78 serial_flag = 1; 76 serial_flag = 1;
79 clear_bit (RDRF,SCISSR1); 77 clear_bit(RDRF,SSR1_ADDR);
80 if (serial_byte == '0') 78 if (serial_byte == '0')
81 lcd_turn_off_backlight (); 79 lcd_turn_off_backlight ();
82 if (serial_byte == '1') 80 if (serial_byte == '1')
83 lcd_turn_on_backlight (); 81 lcd_turn_on_backlight ();
84 } 82}