4 #define SERIAL_SCI_NUM 3
6 #define H8_3069F_SCI0 ((volatile struct h8_3069f_sci *)0xffffb0)
7 #define H8_3069F_SCI1 ((volatile struct h8_3069f_sci *)0xffffb8)
8 #define H8_3069F_SCI2 ((volatile struct h8_3069f_sci *)0xffffc0)
20 #define H8_3069F_SCI_SMR_CKS_PER1 (0<<0)
21 #define H8_3069F_SCI_SMR_CKS_PER4 (1<<0)
22 #define H8_3069F_SCI_SMR_CKS_PER16 (2<<0)
23 #define H8_3069F_SCI_SMR_CKS_PER64 (3<<0)
24 #define H8_3069F_SCI_SMR_MP (1<<2)
25 #define H8_3069F_SCI_SMR_STOP (1<<3)
26 #define H8_3069F_SCI_SMR_OE (1<<4)
27 #define H8_3069F_SCI_SMR_PE (1<<5)
28 #define H8_3069F_SCI_SMR_CHR (1<<6)
29 #define H8_3069F_SCI_SMR_CA (1<<7)
31 #define H8_3069F_SCI_SCR_CKE0 (1<<0)
32 #define H8_3069F_SCI_SCR_CKE1 (1<<1)
33 #define H8_3069F_SCI_SCR_TEIE (1<<2)
34 #define H8_3069F_SCI_SCR_MPIE (1<<3)
35 #define H8_3069F_SCI_SCR_RE (1<<4) /* ¼õ¿®Í¸ú */
36 #define H8_3069F_SCI_SCR_TE (1<<5) /* Á÷¿®Í¸ú */
37 #define H8_3069F_SCI_SCR_RIE (1<<6) /* ¼õ¿®³ä¹þ¤ß͸ú */
38 #define H8_3069F_SCI_SCR_TIE (1<<7) /* Á÷¿®³ä¹þ¤ß͸ú */
40 #define H8_3069F_SCI_SSR_MPBT (1<<0)
41 #define H8_3069F_SCI_SSR_MPB (1<<1)
42 #define H8_3069F_SCI_SSR_TEND (1<<2)
43 #define H8_3069F_SCI_SSR_PER (1<<3)
44 #define H8_3069F_SCI_SSR_FERERS (1<<4)
45 #define H8_3069F_SCI_SSR_ORER (1<<5)
46 #define H8_3069F_SCI_SSR_RDRF (1<<6) /* ¼õ¿®´°Î» */
47 #define H8_3069F_SCI_SSR_TDRE (1<<7) /* Á÷¿®´°Î» */
50 volatile struct h8_3069f_sci *sci;
51 } regs[SERIAL_SCI_NUM] = {
58 int serial_init(int index)
60 volatile struct h8_3069f_sci *sci = regs[index].sci;
64 sci->brr = 64; /* 20MHz¤Î¥¯¥í¥Ã¥¯¤«¤é9600bps¤òÀ¸À®(25MHz¤Î¾ì¹ç¤Ï80¤Ë¤¹¤ë) */
65 sci->scr = H8_3069F_SCI_SCR_RE | H8_3069F_SCI_SCR_TE; /* Á÷¼õ¿®²Äǽ */
72 int serial_is_send_enable(int index)
74 volatile struct h8_3069f_sci *sci = regs[index].sci;
75 return (sci->ssr & H8_3069F_SCI_SSR_TDRE);
79 int serial_send_byte(int index, unsigned char c)
81 volatile struct h8_3069f_sci *sci = regs[index].sci;
83 /* Á÷¿®²Äǽ¤Ë¤Ê¤ë¤Þ¤ÇÂÔ¤Ä */
84 while (!serial_is_send_enable(index))
87 sci->ssr &= ~H8_3069F_SCI_SSR_TDRE; /* Á÷¿®³«»Ï */
93 int serial_is_recv_enable(int index)
95 volatile struct h8_3069f_sci *sci = regs[index].sci;
96 return (sci->ssr & H8_3069F_SCI_SSR_RDRF);
100 unsigned char serial_recv_byte(int index)
102 volatile struct h8_3069f_sci *sci = regs[index].sci;
105 /* ¼õ¿®Ê¸»ú¤¬Íè¤ë¤Þ¤ÇÂÔ¤Ä */
106 while (!serial_is_recv_enable(index))
109 sci->ssr &= ~H8_3069F_SCI_SSR_RDRF; /* ¼õ¿®´°Î» */
114 /* Á÷¿®³ä¹þ¤ß͸ú¤«¡© */
115 int serial_intr_is_send_enable(int index)
117 volatile struct h8_3069f_sci *sci = regs[index].sci;
118 return (sci->scr & H8_3069F_SCI_SCR_TIE) ? 1 : 0;
121 /* Á÷¿®³ä¹þ¤ß͸ú²½ */
122 void serial_intr_send_enable(int index)
124 volatile struct h8_3069f_sci *sci = regs[index].sci;
125 sci->scr |= H8_3069F_SCI_SCR_TIE;
128 /* Á÷¿®³ä¹þ¤ß̵¸ú²½ */
129 void serial_intr_send_disable(int index)
131 volatile struct h8_3069f_sci *sci = regs[index].sci;
132 sci->scr &= ~H8_3069F_SCI_SCR_TIE;
135 /* ¼õ¿®³ä¹þ¤ß͸ú¤«¡© */
136 int serial_intr_is_recv_enable(int index)
138 volatile struct h8_3069f_sci *sci = regs[index].sci;
139 return (sci->scr & H8_3069F_SCI_SCR_RIE) ? 1 : 0;
142 /* ¼õ¿®³ä¹þ¤ß͸ú²½ */
143 void serial_intr_recv_enable(int index)
145 volatile struct h8_3069f_sci *sci = regs[index].sci;
146 sci->scr |= H8_3069F_SCI_SCR_RIE;
149 /* ¼õ¿®³ä¹þ¤ß̵¸ú²½ */
150 void serial_intr_recv_disable(int index)
152 volatile struct h8_3069f_sci *sci = regs[index].sci;
153 sci->scr &= ~H8_3069F_SCI_SCR_RIE;