OSDN Git Service

projects clean up 1
[pinoc/pinoc.git] / pinoc_hew / pinoc_hew / 3069f_sci.c
1 /*
2  * sci.c
3  *
4  *  Created on: 2010/11/27
5  *      Author: pino
6  */
7
8 #include "3069f_sci.h"
9
10 static struct{
11         volatile struct SCI *sci;
12 }regs[3] =
13 {
14         {SCI0A},
15         {SCI1A},
16         {SCI2A},
17 };
18
19
20 void sci_init(SCI_NO no, BitRate_type_t type)
21 {
22         int i;
23
24         volatile struct SCI* sci = regs[no].sci;
25
26         sci->SCR.BYTE = 0;
27         sci->SMR.BYTE = 0;
28         sci->BRR = type;
29
30         // wait
31         for(i = 0; i < 1;i++);
32
33         // \91\97\8eó\90M\8b\96\89Â
34         sci->SCR.BIT.RE = 1;
35         sci->SCR.BIT.TE = 1;
36
37         sci->SSR.BYTE = 0;
38 }
39
40 /********************************************************************************
41         \83|\81[\83\8a\83\93\83O
42 ********************************************************************************/
43 void sci_write(SCI_NO no, char c)
44 {
45         volatile struct SCI* sci = regs[no].sci;
46
47         while(!sci->SSR.BIT.TDRE);
48         sci->TDR = c;
49         sci->SSR.BIT.TDRE = 0;
50
51         while(sci->SSR.BIT.TEND);
52
53 }
54
55 void sci_write_str(SCI_NO no,const char* _Str)
56 {
57         volatile struct SCI* sci = regs[no].sci;
58
59         while(*_Str)
60         {
61                 sci_write(no, *_Str++);
62         }
63
64         // \83o\83b\83t\83@\82Ì\92\86\90g\82ª\91S\82Ä\91\97\90M\82³\82ê\82é\82Ü\82Å\91Ò\8b@
65         while(!sci->SSR.BIT.TEND);
66 }
67
68 // \83f\81[\83^\82ð1byte\82¾\82¯\8eó\90M\82·\82é
69 char sci_read_byte(SCI_NO no)
70 {
71         volatile struct SCI* sci = regs[no].sci;
72         char c;
73
74         // \83f\81[\83^\82ª\8ai\94[\82³\82ê\82é\82Ü\82Å\91Ò\8b@
75         while (1)
76         {
77                 if (sci->SSR.BIT.ORER)
78                 {
79                         sci_write_str(no, "Error_sci over run");
80                         sci->SSR.BIT.ORER = 0;
81                 }
82                 if (sci->SSR.BIT.PER)
83                 {
84                         sci_write_str(no, "Error_sci parity");
85                         sci->SSR.BIT.PER = 0;
86                 }
87                 if (sci->SSR.BIT.FER_ERS)
88                 {
89                         sci_write_str(no, "Error_sci flaming");
90                         sci->SSR.BIT.FER_ERS = 0;
91                 }
92
93                 // \83f\81[\83^\82ª\8ai\94[\82³\82ê\82Ä\82¢\82é\82©\8am\94F
94                 if (sci->SSR.BIT.RDRF)
95                         break;
96         }
97
98         c = sci->RDR;
99         sci->SSR.BIT.RDRF = 0;
100
101         return c;
102 }
103
104 // \98A\91±\82µ\82½\83f\81[\83^\82ð\8eó\90M
105 void sci_read(SCI_NO no, char* buff, int size)
106 {
107         int i;
108         for (i = 0; i < size; i++)
109         {
110                 *(buff++) = sci_read_byte(no);
111         }
112 }
113
114 // \83f\81[\83^\82ð\8eó\90M\82µ\82Ä\82¢\82é\82©\8am\94F\82·\82é\81B
115 // \83|\81[\83\8a\83\93\83O\82Å\8am\94F\82·\82é
116 // \8ai\94[\82³\82ê\82Ä\82¢\82ê\82Î1\82ð\95Ô\82µ\81A\8ai\94[\82³\82ê\82Ä\82¢\82È\82¯\82ê\82Î\81A0\82ð\95Ô\82·
117 int sci_read_pol(SCI_NO no)
118 {
119         volatile struct SCI* sci = regs[no].sci;
120
121         if (sci->SSR.BIT.ORER)
122         {
123                 sci_write_str(no, "Error_sci over run");
124                 sci->SSR.BIT.ORER = 0;
125         }
126         if (sci->SSR.BIT.PER)
127         {
128                 sci_write_str(no, "Error_sci parity");
129                 sci->SSR.BIT.PER = 0;
130         }
131         if (sci->SSR.BIT.FER_ERS)
132         {
133                 sci_write_str(no, "Error_sci flaming");
134                 sci->SSR.BIT.FER_ERS = 0;
135         }
136
137         // \83f\81[\83^\82ª\8ai\94[\82³\82ê\82Ä\82¢\82é\82©\8am\94F
138         if (sci->SSR.BIT.RDRF)
139                 return 1;
140
141         return 0;
142 }
143
144 void charput(char c)
145 {
146         sci_write(SCI_NO_1, c);
147 }
148
149 char charget()
150 {
151         char c;
152         c = sci_read_byte(SCI_NO_1);
153
154         return c;
155 }
156
157
158 /********************************************************************************
159         \8a\84\82è\8d\9e\82Ý
160 ********************************************************************************/
161 char sci_read_byte_intr(SCI_NO no)
162 {
163         volatile struct SCI* sci = regs[no].sci;
164         char c;
165
166         c = sci->RDR;
167         sci->SSR.BIT.RDRF = 0;
168
169         return c;
170 }
171 // \91\97\90M\8a®\97¹\8a\84\82è\8d\9e\82ÝEnable
172 void sci_write_intr_enable(SCI_NO no)
173 {
174         volatile struct SCI* sci = regs[no].sci;
175         sci->SCR.BIT.TIE = 1;
176 }
177
178 // \91\97\90M\8a®\97¹\8a\84\82è\8d\9e\82ÝDisable
179 void sci_write_intr_disable(SCI_NO no)
180 {
181         volatile struct SCI* sci = regs[no].sci;
182         sci->SCR.BIT.TIE = 0;
183 }
184
185 // \8eó\90M\8a®\97¹\8a\84\82è\8d\9e\82ÝEnable
186 void sci_read_intr_enable(SCI_NO no)
187 {
188         volatile struct SCI* sci = regs[no].sci;
189         sci->SCR.BIT.RIE = 1;
190 }
191
192 // \8eó\90M\8a®\97¹\8a\84\82è\8d\9e\82ÝDisable
193 void sci_read_intr_disable(SCI_NO no)
194 {
195         volatile struct SCI* sci = regs[no].sci;
196         sci->SCR.BIT.RIE = 1;
197 }
198
199
200