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; /* ¼õ¿®´°Î» */