forked from SZV10X_Software/SZV103_FM33A0xxEV_SiZhu

jinlicong
2024-05-28 6b0d1f644233b2984d2a87553de598879cf05caf
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
/**
  ******************************************************************************
  * @file    fm33a0xxev_u7816.h
  * @author  FM33A0XXEV Application Team
  * @version V1.0.0
  * @date    16-April-2020
  * @brief   This file contains all the functions prototypes for the U7816 firmware library.  
  ******************************************************************************
  */
  
/* Define to prevent recursive inclusion -------------------------------------*/
 
#ifndef __FM33A0XXEV_U7816_H
#define __FM33A0XXEV_U7816_H
 
 
#ifdef __cplusplus
 extern "C" {
#endif
 
/* Includes ------------------------------------------------------------------*/
 
#include "FM33A0XXEV.h" 
 
typedef struct
{
    FunState                TXEN;        //·¢ËÍʹÄÜ
    FunState                RXEN;        //½ÓÊÜʹÄÜ
    FunState                CKOEN;        //U7816ʱÖÓCLKÊä³öʹÄÜ¿ØÖÆ
    FunState                HPUAT;        //U7816ͨµÀÊý¾Ý·¢ËÍÇ¿ÉÏÀ­µç×è×Ô¶¯ÓÐЧ¿ØÖÆ
    FunState                HPUEN;        //U7816ͨµÀÇ¿ÉÏÀ­Ê¹ÄÜ¿ØÖÆ
    
    uint32_t                ERSW;        //ERROR SIGNAL¿í¶ÈÑ¡Ôñ
    uint32_t                ERSGD;        //ERROR SIGNALºóGUARDTIME¿í¶ÈÑ¡Ôñ£¨½öÔÚ·¢ËÍʱÓÐЧ£©
    FunState                BGTEN;        //BGT£¨block guard time£©¿ØÖÆ
    uint32_t                REP_T;        //¿ØÖƽÓÊÕÊý¾ÝÆæÅ¼Ð£Ñé³ö´íʱ×Ô¶¯ÖØ·¢´ÎÊý
    uint32_t                PAR;        //ÆæÅ¼Ð£ÑéÀàÐÍÑ¡Ôñ
    uint32_t                SFREN;        //Guard Time³¤¶È¿ØÖÆÎ»£¨·¢ËÍʱÑϸñ°´ÕÕЭÒé2etu£©
  uint32_t                RFREN;    //½ÓÊÕGuard Time³¤¶È¿ØÖÆÎ»
    FunState                TREPEN;        //»º·¢ËÍÊý¾ÝÆæÅ¼Ð£Ñé´íµÄ´¦Àí·½Ê½Ñ¡Ôñ
    FunState                RREPEN;        //½ÓÊÕÊý¾ÝÆæÅ¼Ð£Ñé´íµÄ´¦Àí·½Ê½Ñ¡Ôñ
    FunState                DICONV;        //´«Êä´ÎÐò·´Ïò±àÂëʹÄÜ
    
    uint32_t                TXEGT;        //·¢ËÍʱ²åÈëµÄEGTʱ¼ä£¨ÒÔETUΪµ¥Î»£©
    uint32_t                CLKDIV;        //U7816ʱÖÓÊä³ö·ÖƵ¿ØÖƼĴæÆ÷
    uint32_t                PDIV;        //U7816Ô¤·ÖƵ¿ØÖƼĴæÆ÷£¬¿ØÖÆ7816ͨÐÅ·ÖÆµ±È£¨²¨ÌØÂÊ£©
    
    FunState                RXIE;        //Êý¾Ý½ÓÊÕÖжÏʹÄÜλ¡£¶ÔÓ¦RX_FLAGÖжϱê־λ
    FunState                TXIE;        //Êý¾Ý·¢ËÍÖжÏʹÄÜλ¡£¶ÔÓ¦TX_FLAGÖжϱê־λ
    FunState                LSIE;        //Ïß·״̬ÖжÏʹÄÜλ¡£¶ÔÓ¦ERROR_FLAGÖжϱê־λ
    
}U7816_InitTypeDef;
 
 
#define    U7816_CR_TXEN_Pos    5    /* U7816ͨµÀ·¢ËÍʹÄÜ¿ØÖÆÎ» (Transmit Enable) 1£ºÍ¨µÀ·¢ËÍʹÄÜ£¬¿É·¢ËÍÊý¾Ý 0£ºÍ¨µÀ·¢ËͽûÖ¹£¬²»¿É·¢ËÍÊý¾Ý£¬²¢¹Ø¶ÏÊä³ö¶Ë¿Ú£¬½«SCLÐźÅת»¯ÎªµÍµçƽ */
#define    U7816_CR_TXEN_Msk    (0x1U << U7816_CR_TXEN_Pos)
 
#define    U7816_CR_RXEN_Pos    4    /* U7816ͨµÀ½ÓÊÕʹÄÜ¿ØÖÆÎ» (Receive Enable) 1£ºÍ¨µÀ½ÓÊÕʹÄÜ£¬¿É½ÓÊÕÊý¾Ý 0£ºÍ¨µÀ½ÓÊÕ½ûÖ¹£¬²»¿É½ÓÊÕÊý¾Ý£¬²¢¹Ø¶ÏÊäÈë¶Ë¿Ú */
#define    U7816_CR_RXEN_Msk    (0x1U << U7816_CR_RXEN_Pos)
 
#define    U7816_CR_CKOEN_Pos    3    /* U7816ʱÖÓCLKÊä³öʹÄÜ¿ØÖÆÎ» (Clock output Enable) 1£º7816ʱÖÓÊä³öʹÄÜ 0£º7816ʱÖÓÊä³ö½ûÖ¹ */
#define    U7816_CR_CKOEN_Msk    (0x1U << U7816_CR_CKOEN_Pos)
 
#define    U7816_CR_HPUAT_Pos    2    /* U7816ͨµÀÊý¾Ý·¢ËÍÇ¿ÉÏÀ­µç×è×Ô¶¯ÓÐЧ¿ØÖÆÎ» (High-Pullup Automatically) 1£ºÊý¾Ý·¢ËÍʱÉÏÀ­µç×è×Ô¶¯ÓÐЧ£¬½ÓÊÕ̬ÉÏÀ­µç×èÎÞЧ 0£ºÊý¾Ý·¢ËÍʱÉÏÀ­µç×è×Ô¶¯ÓÐЧ¹¦ÄܽûÖ¹£¬ÉÏÀ­µç×èÓÉHPUEN£¬LPUEN¿ØÖÆ */
#define    U7816_CR_HPUAT_Msk    (0x1U << U7816_CR_HPUAT_Pos)
 
#define    U7816_CR_HPUEN_Pos    1    /* U7816ͨµÀÇ¿ÉÏÀ­Ê¹ÄÜ¿ØÖÆÎ» (High-Pullup Enable) 1£ºÇ¿ÉÏÀ­ÓÐЧ 0£ºÇ¿ÉÏÀ­ÎÞЧ */
#define    U7816_CR_HPUEN_Msk    (0x1U << U7816_CR_HPUEN_Pos)
 
#define    U7816_FFR_SFREN_Pos    11    /* Guard Time·¢Ëͳ¤¶È¿ØÖÆÎ» (Send long Frame Enable) 1£ºGuard timeΪ3 etu 0£ºGuard timeΪ2 etu */
#define    U7816_FFR_SFREN_Msk    (0x1U << U7816_FFR_SFREN_Pos)
#define    U7816_FFR_SFREN_3ETU    (0x1U << U7816_FFR_SFREN_Pos)
#define    U7816_FFR_SFREN_2ETU    (0x0U << U7816_FFR_SFREN_Pos)
 
#define    U7816_FFR_ERSW_Pos    9    /* ERROR SIGNAL¿í¶ÈÑ¡Ôñ (Error Signal Width) 11£ºERROR SIGNAL¿í¶ÈΪ1ETU; 10£ºERROR SIGNAL¿í¶ÈΪ1.5ETU; 01£ºERROR SIGNAL¿í¶ÈΪ2ETU; 00£ºERROR SIGNAL¿í¶ÈΪ2ETU; */
#define    U7816_FFR_ERSW_Msk    (0x3U << U7816_FFR_ERSW_Pos)
#define    U7816_FFR_ERSW_1ETU    (0x0U << U7816_FFR_ERSW_Pos)
#define    U7816_FFR_ERSW_1P5ETU    (0x1U << U7816_FFR_ERSW_Pos)
#define    U7816_FFR_ERSW_2ETU    (0x2U << U7816_FFR_ERSW_Pos)
 
#define    U7816_FFR_ERSGD_Pos    8    /* ERROR SIGNALºóGUARDTIME¿í¶ÈÑ¡Ôñ£¨½öÔÚ·¢ËÍʱÓÐЧ£©
(Error Signal Guard Time) 1£ºERROR SIGNALºóGUARDTIMEΪ1~1.5ETU¡£ 0£ºERROR SIGNALºóGUARDTIMEΪ2~2.5ETU¡£ ERROR SIGNAL¿í¶ÈΪÕûÊýETUʱGUARDTIMEΪ1.5»ò2.5ETU£»ERROR SIGNAL¿í¶ÈΪ1.5ETUʱGUARDTIMEΪ1»ò2ETU */
#define    U7816_FFR_ERSGD_Msk    (0x1U << U7816_FFR_ERSGD_Pos)
#define    U7816_FFR_ERSGD_1ETU    (0x1U << U7816_FFR_ERSGD_Pos)    /* ERROR SIGNALºóGUARDTIMEΪ1~1.5ETU¡£ 0 */
#define    U7816_FFR_ERSGD_2ETU    (0x0U << U7816_FFR_ERSGD_Pos)
 
#define    U7816_FFR_BGTEN_Pos    7    /* BGT¿ØÖÆÎ»¡£¿ØÖƽÓÊÕ->·¢ËÍÖ®¼äÊÇ·ñ²åÈëBGT¡£BGTÊǽÓÊÕ->·¢ËÍÖ®¼äÐèÒªµÄ×îСʱ¼ä£¨block guard time enable£© 1£ºBGTʹÄÜ£¬²åÈëBlock guard time(12 etu); 0£ºBGT½ûÖ¹£¬²»²åÈëBlock guard time(12 etu); */
#define    U7816_FFR_BGTEN_Msk    (0x1U << U7816_FFR_BGTEN_Pos)
 
#define    U7816_FFR_REP_T_Pos    6    /* ¿ØÖƽÓÊÕÊý¾ÝÆæÅ¼Ð£Ñé³ö´íʱ×Ô¶¯ÖØ·¢´ÎÊý (Repeated Times) 1£º3´Î 0£º1´Î */
#define    U7816_FFR_REP_T_Msk    (0x1U << U7816_FFR_REP_T_Pos)
#define    U7816_FFR_REP_T_1TIMES    (0x0U << U7816_FFR_REP_T_Pos)
#define    U7816_FFR_REP_T_3TIMES    (0x1U << U7816_FFR_REP_T_Pos)
 
#define    U7816_FFR_PAR_Pos    4    /* ÆæÅ¼Ð£ÑéÀàÐÍÑ¡Ôñ (Parity) 00£ºEven 01£ºOdd 10£ºAlways 1 11£º²»Ð£Ñ飬´¦Àí */
#define    U7816_FFR_PAR_Msk    (0x3U << U7816_FFR_PAR_Pos)
#define    U7816_FFR_PAR_EVEN    (0x0U << U7816_FFR_PAR_Pos)
#define    U7816_FFR_PAR_ODD    (0x1U << U7816_FFR_PAR_Pos)
#define    U7816_FFR_PAR_1ALAWAYS    (0x2U << U7816_FFR_PAR_Pos)
#define    U7816_FFR_PAR_NON    (0x3U << U7816_FFR_PAR_Pos)
 
#define    U7816_FFR_RFREN_Pos    3    /* Guard Time½ÓÊÕ³¤¶È¿ØÖÆÎ» (Receive short Frame ) 1£ºGuard timeΪ1 etu 0£ºGuard timeΪ2 etu */
#define    U7816_FFR_RFREN_Msk    (0x1U << U7816_FFR_RFREN_Pos)
#define    U7816_FFR_RFREN_1ETU    (0x1U << U7816_FFR_RFREN_Pos)
#define    U7816_FFR_RFREN_2ETU    (0x0U << U7816_FFR_RFREN_Pos)
 
#define    U7816_FFR_TREPEN_Pos    2    /* ·¢ËÍÊý¾ÝÆæÅ¼Ð£Ñé´íµÄ´¦Àí·½Ê½Ñ¡Ôñ (Transmit Repeat Enable) 1£ºÊÕµ½ÆæÅ¼Ð£Ñé³ö´í±êÖ¾£¨error signal£©£¬¸ù¾ÝT£½0ЭÒé×Ô¶¯½øÐлط¢¡£ÔÚµ¥Ò»byteÖØ¸´·¢ËÍ´ÎÊý³¬¹ýREP_Tºó£¬ÖÃtx_parity_err±êÖ¾£¬½øÐÐÖÐ¶Ï 0£ºÊÕµ½Error signalʱ²»½øÐÐ×Ô¶¯»Ø·¢£¬ÖÃtx_parity_err±êÖ¾£¬Ö±½ÓÖжϠ*/
#define    U7816_FFR_TREPEN_Msk    (0x1U << U7816_FFR_TREPEN_Pos)
 
#define    U7816_FFR_RREPEN_Pos    1    /* ½ÓÊÕÊý¾ÝÆæÅ¼Ð£Ñé´íµÄ´¦Àí·½Ê½Ñ¡Ôñ (Receive Repeat Enable) 1£ºÆæÅ¼Ð£Ñé´í£¬¸ù¾ÝT=0ЭÒé×Ô¶¯»Ø·¢ERROR SIGNAL¡£µ¥Ò»BYTEÁ¬Ðø½ÓÊÕ´ÎÊý³¬¹ýREP_Tºó£¬ÖÃRX_PARITY_ERR±êÖ¾£¬½øÐÐÖÐ¶Ï 0£ºÆæÅ¼Ð£Ñé´í£¬²»×Ô¶¯·¢ËÍERROR SIGNAL£¬ÖÃRX_PARITY_ERR±êÖ¾£¬½øÐÐÖжϠ*/
#define    U7816_FFR_RREPEN_Msk    (0x1U << U7816_FFR_RREPEN_Pos)
 
#define    U7816_FFR_DICONV_Pos    0    /* ´«Êä´ÎÐò£¬±àÂ뷽ʽѡÔñ (bit Direction Conversion) 1£º·´Ïò±àÂ룬ÏÈÊÕ·¢MSB£»(ÊÕ·¢Êý¾Ý+УÑéλ)·´Âß¼­µçƽ 0£ºÕýÏò±àÂ룬ÏÈÊÕ·¢LSB £» (ÊÕ·¢Êý¾Ý+УÑéλ)ÕýÂß¼­µçƽ */
#define    U7816_FFR_DICONV_Msk    (0x1U << U7816_FFR_DICONV_Pos)
#define    U7816_FFR_DICONV_FORWARD    (0x0U << U7816_FFR_DICONV_Pos)
#define    U7816_FFR_DICONV_REVERSE    (0x1U << U7816_FFR_DICONV_Pos)
 
#define    U7816_EGTR_TXEGT_Pos    0    /* ·¢ËÍʱ²åÈëµÄExtra Guard Timeʱ¼ä£¨ÒÔETUΪµ¥Î»£©
(Transmit Extra Guard Time) */
#define    U7816_EGTR_TXEGT_Msk    (0xffU << U7816_EGTR_TXEGT_Pos)
 
#define    U7816_PSC_CLKDIV_Pos    0    /* U7816ʱÖÓÊä³ö·ÖƵ¿ØÖƼĴæÆ÷(Clock Divider)£¬¿ØÖÆ7816¹¤×÷ʱÖÓ·ÖÆµÊý¡£ U7816¹¤×÷ʱÖÓÓëAPBCLKµÄ·ÖƵ¹ØÏµ£º F7816=FAPBCLK/(CLKDIV+1) ÌØÊâÇé¿ö£ºCLK_DIVÉèÖóÉ0»ò1ʱ£¬F7816=FAPBCLK/2 ×¢£º7816ЭÒ鹿¶¨µÄ¹¤×÷ʱÖÓ·¶Î§ÊÇ1~5MHZ¡£ */
#define    U7816_PSC_CLKDIV_Msk    (0x1fU << U7816_PSC_CLKDIV_Pos)
 
#define    U7816_BGR_PDIV_Pos    0    /* U7816Ô¤·ÖƵ¿ØÖƼĴæÆ÷(Pre-Divider)£¬¿ØÖÆ7816ͨÐÅ·ÖÆµ±È£¨²¨ÌØÂÊ£© Baud £½ F7816/(PDIV £« 1)
 
×¢Ò⣺PDIV×îС¿ÉÓÃÖµÊÇ0x1£¬Ó¦ÓýûÖ¹ÅäÖÃ0x0 */
#define    U7816_BGR_PDIV_Msk    (0xfffU << U7816_BGR_PDIV_Pos)
 
#define    U7816_RXBUF_RXBUF_Pos    0    /* U7816Êý¾Ý½ÓÊÕ»º´æ¼Ä´æÆ÷ (Receive Buffer) */
#define    U7816_RXBUF_RXBUF_Msk    (0xffU << U7816_RXBUF_RXBUF_Pos)
 
#define    U7816_TXBUF_TXBUF_Pos    0    /* U7816Êý¾Ý·¢ËÍ»º´æ¼Ä´æÆ÷ (Transmit Buffer) */
#define    U7816_TXBUF_TXBUF_Msk    (0xffU << U7816_TXBUF_TXBUF_Pos)
 
#define    U7816_IER_RXIE_Pos    2    /* Êý¾Ý½ÓÊÕÖжÏʹÄÜλ¡£¶ÔÓ¦RXIFÖжϱê־λ (Receive Interrupt Enable) 1£ºµ±RXIF¼Ä´æÆ÷ÖÃλʱ²úÉú½ÓÊÕÍê³ÉÖÐ¶Ï 0£º½ûÖ¹½ÓÊÕÍê³ÉÖжϠ*/
#define    U7816_IER_RXIE_Msk    (0x1U << U7816_IER_RXIE_Pos)
 
#define    U7816_IER_TXIE_Pos    1    /* Êý¾Ý·¢ËÍÖжÏʹÄÜλ¡£¶ÔÓ¦TXIFÖжϱê־λ(Transmit Interrupt Enable) 1£ºµ±TXIF¼Ä´æÆ÷ÖÃλʱ²úÉú·¢ËÍÍê³ÉÖÐ¶Ï 0£º½ûÖ¹·¢ËÍÍê³ÉÖжϠ*/
#define    U7816_IER_TXIE_Msk    (0x1U << U7816_IER_TXIE_Pos)
 
#define    U7816_IER_LSIE_Pos    0    /* Ïß·״̬ÖжÏʹÄÜλ¡£¶ÔÓ¦ERRIFÖжϱê־λ(Line Status Interrupt Enable) 1£ºµ±ERRIF¼Ä´æÆ÷ÖÃλʱ²úÉúÏß·´íÎóÖÐ¶Ï 0£º½ûÖ¹Ïß·´íÎóÖжϠ*/
#define    U7816_IER_LSIE_Msk    (0x1U << U7816_IER_LSIE_Pos)
 
#define    U7816_ISR_WAIT_RPT_Pos    18    /* U7816½Ó¿Ú·¢ËÍÁË´íÎóÐźţ¬ÕýÔڵȴý¶Ô·½ÖØ·¢Êý¾Ý£»(Waiting for Repeat flag) ״̬»ú½øÈë·¢ËÍ´íÎóÐźÅ״̬ʱÖÃ룬ÊÕµ½Êý¾ÝÆðʼλ»òÕß½øÈë·¢ËÍ״̬ʱӲ¼þÇåÁ㣻 Èí¼þÖ»¶Á¡£ */
#define    U7816_ISR_WAIT_RPT_Msk    (0x1U << U7816_ISR_WAIT_RPT_Pos)
 
#define    U7816_ISR_TXBUSY_Pos    17    /* ·¢ËÍÊý¾Ýæ±êÖ¾¡££¨·¢ËÍÍê³Éºó×Ô¶¯ÇåÁ㣩(Transmission busy flag) 1£º´¦ÓÚÊý¾Ý·¢ËÍ״̬£¬·¢ËÍÒÆÎ»¼Ä´æÆ÷ÕýÔÚ·¢ËÍÊý¾Ý¡££¨¿ªÊ¼·¢ËÍÆðʼλÖÃ1£¬Í£Ö¹Î»ÖмäÇåÁ㣩 0£ºÊý¾Ý·¢ËÍ¿ÕÏР*/
#define    U7816_ISR_TXBUSY_Msk    (0x1U << U7816_ISR_TXBUSY_Pos)
 
#define    U7816_ISR_RXBUSY_Pos    16    /* ½ÓÊÕÊý¾Ýæ±êÖ¾¡££¨½ÓÊÕÍê³Éºó×Ô¶¯ÇåÁ㣩(Receiving busy flag) 1£º´¦ÓÚÊý¾Ý½ÓÊÕ״̬£¬½ÓÊÕÒÆÎ»¼Ä´æÆ÷ÕýÔÚ½ÓÊÕÊý¾Ý¡££¨ÊÕµ½ÆðʼλÖÃ1£¬ÊÕµ½Í£Ö¹Î»ÇåÁ㣬Èô½ÓÊÕÊý¾Ý³ö´íÐèÖØ·¢£¬Ôò»Ø·¢error signalʱÇåÁã¡£¼´Êý¾Ý¼°Ð£Ñéλ½ÓÊÕÖ®ºó£¬ÎÞÂÛÊÇ·ñÐèÒªÖØ·¢£¬¶¼ÐèÒª¼°Ê±Çå³ý¸Ã±êÖ¾£© 0£ºÊý¾Ý½ÓÊÕ¿ÕÏР*/
#define    U7816_ISR_RXBUSY_Msk    (0x1U << U7816_ISR_RXBUSY_Pos)
 
#define    U7816_ISR_TPARERR_Pos    11    /* ·¢ËÍÊý¾ÝÆæÅ¼Ð£Ñé´íÎó±ê־λ¡£Ó²¼þÖÃλ£¬Ð´1ÇåÁã (Transmit Parity Error,write 1 to clear) */
#define    U7816_ISR_TPARERR_Msk    (0x1U << U7816_ISR_TPARERR_Pos)
 
#define    U7816_ISR_RPARERR_Pos    10    /* ½ÓÊÕÊý¾ÝÆæÅ¼Ð£Ñé´íÎó±ê־λ¡£Ó²¼þÖÃλ£¬Ð´1ÇåÁã (Receive Parity Error flag,write 1 to clear) */
#define    U7816_ISR_RPARERR_Msk    (0x1U << U7816_ISR_RPARERR_Pos)
 
#define    U7816_ISR_FRERR_Pos    9    /* ½ÓÊÕÖ¡¸ñʽ´íÎó±ê־λ¡£Ó²¼þÖÃλ£¬Ð´1ÇåÁã (Frame Error flag,write 1 to clear) 1£ºÖ¡¸ñʽÓдíÎ󣬽ÓÊÕµ½µÄframe×Ö½Ú³¤¶ÈÓÐÎó»ò½ÓÊÕµ½µÄframe»òÕßstopλÓÐÎó 0£º½ÓÊÕÊý¾ÝʱÎÞÆæÅ¼Ð£Ñé´íÎó */
#define    U7816_ISR_FRERR_Msk    (0x1U << U7816_ISR_FRERR_Pos)
 
#define    U7816_ISR_OVERR_Pos    8    /* ½ÓÊÕÒç³ö´íÎó±ê־λ¡£Ó²¼þÖÃλ£¬Ð´1ÇåÁã (Receive Overflow Error,write 1 to clear) 1£º½ÓÊÕ»º³å¼Ä´æÆ÷δ±»¶Á³ö£¬ÓÖ½ÓÊÕµ½ÐµÄÊý¾Ý£¬Òç³ö´íÎó±êÖ¾ÓÐЧ¡£Ô­½ÓÊÕ»º³å¼Ä´æÆ÷ÄÚÊý¾Ý±»Ð¸²¸Ç 0£ºÎÞÒç³ö´íÎó */
#define    U7816_ISR_OVERR_Msk    (0x1U << U7816_ISR_OVERR_Pos)
 
#define    U7816_ISR_RXIF_Pos    2    /* ½ÓÊÕÍê³É±êÖ¾(Receive interrupt flag)£¬U7816½Ó¿Ú¿ØÖÆÆ÷ÿÊÕµ½1byteÊý¾Ý£¬¸ù¾Ý½ÓÊÕµÄͨµÀÏàÓ¦·¢³öÒ»´ÎÖжϡ£Ó²¼þÖÃ룬¶ÁÊý¾Ý½ÓÊÕ»º³å¼Ä´æÆ÷ÇåÁã 1£º½ÓÊÕµ½1byteÊý¾Ý£¬Êý¾Ý½ÓÊÕ»º³åÆ÷Âú 0£ºÎ´½ÓÊÕµ½Êý¾Ý£¬Êý¾Ý½ÓÊÕ»º³åÆ÷¿Õ */
#define    U7816_ISR_RXIF_Msk    (0x1U << U7816_ISR_RXIF_Pos)
 
#define    U7816_ISR_TXIF_Pos    1    /* ·¢ËÍ»º³åÇø¿Õ±êÖ¾(Transmit interrupt flag)£¬Éϵ縴λºó´Ë±êÖ¾¾Í×Ô¶¯ÖÃ룬±íʾ»º³åÇø¿Õ£¬¿ÉÒÔдÈëÊý¾Ý¡£Èí¼þдÈëÊý¾Ýºó±êÖ¾×Ô¶¯Çå³ý£¬Êý¾Ý´Ó·¢ËÍ»º´æÒÆÈëÒÆÎ»¼Ä´æÆ÷ºóÖÃ1 1£ºÊý¾Ý·¢ËÍ»º³åÆ÷¿Õ 0£ºÊý¾Ý·¢ËÍ»º³åÆ÷ÄÚÓÐÊý¾Ý´ý·¢ËÍ */
#define    U7816_ISR_TXIF_Msk    (0x1U << U7816_ISR_TXIF_Pos)
 
#define    U7816_ISR_ERRIF_Pos    0    /* ´íÎó±êÖ¾(Error interrupt flag)£¬¼Ä´æÆ÷ÅäÖóö´í»ò´«Êä¹ý³ÌÖгö´í¡£´ËbitÊÇTPARERR¡¢RPARERR¡¢FRERR¡¢OVERRµÄ»ò¡£Èí¼þͨ¹ýÇå³ýÒÔÉÏ´íÎó±êÖ¾¼Ä´æÆ÷À´Çå³ý´Ëbit¡£ */
#define    U7816_ISR_ERRIF_Msk    (0x1U << U7816_ISR_ERRIF_Pos)
//Macro_End
 
/* Exported functions --------------------------------------------------------*/ 
extern void U7816_Deinit(void);
 
/* U7816ͨµÀ·¢ËÍʹÄÜ¿ØÖÆÎ» (Transmit Enable) 1£ºÍ¨µÀ·¢ËÍʹÄÜ£¬¿É·¢ËÍÊý¾Ý 0£ºÍ¨µÀ·¢ËͽûÖ¹£¬²»¿É·¢ËÍÊý¾Ý£¬²¢¹Ø¶ÏÊä³ö¶Ë¿Ú£¬½«SCLÐźÅת»¯ÎªµÍµçƽ Ïà¹Øº¯Êý */
extern void U7816_CR_TXEN_Setable(FunState NewState);
extern FunState U7816_CR_TXEN_Getable(void);
 
/* U7816ͨµÀ½ÓÊÕʹÄÜ¿ØÖÆÎ» (Receive Enable) 1£ºÍ¨µÀ½ÓÊÕʹÄÜ£¬¿É½ÓÊÕÊý¾Ý 0£ºÍ¨µÀ½ÓÊÕ½ûÖ¹£¬²»¿É½ÓÊÕÊý¾Ý£¬²¢¹Ø¶ÏÊäÈë¶Ë¿Ú Ïà¹Øº¯Êý */
extern void U7816_CR_RXEN_Setable(FunState NewState);
extern FunState U7816_CR_RXEN_Getable(void);
 
/* U7816ʱÖÓCLKÊä³öʹÄÜ¿ØÖÆÎ» (Clock output Enable) 1£º7816ʱÖÓÊä³öʹÄÜ 0£º7816ʱÖÓÊä³ö½ûÖ¹ Ïà¹Øº¯Êý */
extern void U7816_CR_CKOEN_Setable(FunState NewState);
extern FunState U7816_CR_CKOEN_Getable(void);
 
/* U7816ͨµÀÊý¾Ý·¢ËÍÇ¿ÉÏÀ­µç×è×Ô¶¯ÓÐЧ¿ØÖÆÎ» (High-Pullup Automatically) 1£ºÊý¾Ý·¢ËÍʱÉÏÀ­µç×è×Ô¶¯ÓÐЧ£¬½ÓÊÕ̬ÉÏÀ­µç×èÎÞЧ 0£ºÊý¾Ý·¢ËÍʱÉÏÀ­µç×è×Ô¶¯ÓÐЧ¹¦ÄܽûÖ¹£¬ÉÏÀ­µç×èÓÉHPUEN£¬LPUEN¿ØÖÆ Ïà¹Øº¯Êý */
extern void U7816_CR_HPUAT_Setable(FunState NewState);
extern FunState U7816_CR_HPUAT_Getable(void);
 
/* U7816ͨµÀÇ¿ÉÏÀ­Ê¹ÄÜ¿ØÖÆÎ» (High-Pullup Enable) 1£ºÇ¿ÉÏÀ­ÓÐЧ 0£ºÇ¿ÉÏÀ­ÎÞЧ Ïà¹Øº¯Êý */
extern void U7816_CR_HPUEN_Setable(FunState NewState);
extern FunState U7816_CR_HPUEN_Getable(void);
 
/* Guard Time·¢Ëͳ¤¶È¿ØÖÆÎ» (Send long Frame Enable) 1£ºGuard timeΪ3 etu 0£ºGuard timeΪ2 etu Ïà¹Øº¯Êý */
extern void U7816_FFR_SFREN_Set(uint32_t SetValue);
extern uint32_t U7816_FFR_SFREN_Get(void);
 
/* ERROR SIGNAL¿í¶ÈÑ¡Ôñ (Error Signal Width) 11£ºERROR SIGNAL¿í¶ÈΪ1ETU; 10£ºERROR SIGNAL¿í¶ÈΪ1.5ETU; 01£ºERROR SIGNAL¿í¶ÈΪ2ETU; 00£ºERROR SIGNAL¿í¶ÈΪ2ETU; Ïà¹Øº¯Êý */
extern void U7816_FFR_ERSW_Set(uint32_t SetValue);
extern uint32_t U7816_FFR_ERSW_Get(void);
 
/* ERROR SIGNALºóGUARDTIME¿í¶ÈÑ¡Ôñ£¨½öÔÚ·¢ËÍʱÓÐЧ£©
(Error Signal Guard Time) 1£ºERROR SIGNALºóGUARDTIMEΪ1~1.5ETU¡£ 0£ºERROR SIGNALºóGUARDTIMEΪ2~2.5ETU¡£ ERROR SIGNAL¿í¶ÈΪÕûÊýETUʱGUARDTIMEΪ1.5»ò2.5ETU£»ERROR SIGNAL¿í¶ÈΪ1.5ETUʱGUARDTIMEΪ1»ò2ETU Ïà¹Øº¯Êý */
extern void U7816_FFR_ERSGD_Set(uint32_t SetValue);
extern uint32_t U7816_FFR_ERSGD_Get(void);
 
/* BGT¿ØÖÆÎ»¡£¿ØÖƽÓÊÕ->·¢ËÍÖ®¼äÊÇ·ñ²åÈëBGT¡£BGTÊǽÓÊÕ->·¢ËÍÖ®¼äÐèÒªµÄ×îСʱ¼ä£¨block guard time enable£© 1£ºBGTʹÄÜ£¬²åÈëBlock guard time(12 etu); 0£ºBGT½ûÖ¹£¬²»²åÈëBlock guard time(12 etu); Ïà¹Øº¯Êý */
extern void U7816_FFR_BGTEN_Setable(FunState NewState);
extern FunState U7816_FFR_BGTEN_Getable(void);
 
/* ¿ØÖƽÓÊÕÊý¾ÝÆæÅ¼Ð£Ñé³ö´íʱ×Ô¶¯ÖØ·¢´ÎÊý (Repeated Times) 1£º3´Î 0£º1´Î Ïà¹Øº¯Êý */
extern void U7816_FFR_REP_T_Set(uint32_t SetValue);
extern uint32_t U7816_FFR_REP_T_Get(void);
 
/* ÆæÅ¼Ð£ÑéÀàÐÍÑ¡Ôñ (Parity) 00£ºEven 01£ºOdd 10£ºAlways 1 11£º²»Ð£Ñ飬´¦Àí Ïà¹Øº¯Êý */
extern void U7816_FFR_PAR_Set(uint32_t SetValue);
extern uint32_t U7816_FFR_PAR_Get(void);
 
/* Guard Time½ÓÊÕ³¤¶È¿ØÖÆÎ» (Receive short Frame ) 1£ºGuard timeΪ1 etu 0£ºGuard timeΪ2 etu Ïà¹Øº¯Êý */
extern void U7816_FFR_RFREN_Set(uint32_t SetValue);
extern uint32_t U7816_FFR_RFREN_Get(void);
 
/* ·¢ËÍÊý¾ÝÆæÅ¼Ð£Ñé´íµÄ´¦Àí·½Ê½Ñ¡Ôñ (Transmit Repeat Enable) 1£ºÊÕµ½ÆæÅ¼Ð£Ñé³ö´í±êÖ¾£¨error signal£©£¬¸ù¾ÝT£½0ЭÒé×Ô¶¯½øÐлط¢¡£ÔÚµ¥Ò»byteÖØ¸´·¢ËÍ´ÎÊý³¬¹ýREP_Tºó£¬ÖÃtx_parity_err±êÖ¾£¬½øÐÐÖÐ¶Ï 0£ºÊÕµ½Error signalʱ²»½øÐÐ×Ô¶¯»Ø·¢£¬ÖÃtx_parity_err±êÖ¾£¬Ö±½ÓÖжϠÏà¹Øº¯Êý */
extern void U7816_FFR_TREPEN_Setable(FunState NewState);
extern FunState U7816_FFR_TREPEN_Getable(void);
 
/* ½ÓÊÕÊý¾ÝÆæÅ¼Ð£Ñé´íµÄ´¦Àí·½Ê½Ñ¡Ôñ (Receive Repeat Enable) 1£ºÆæÅ¼Ð£Ñé´í£¬¸ù¾ÝT=0ЭÒé×Ô¶¯»Ø·¢ERROR SIGNAL¡£µ¥Ò»BYTEÁ¬Ðø½ÓÊÕ´ÎÊý³¬¹ýREP_Tºó£¬ÖÃRX_PARITY_ERR±êÖ¾£¬½øÐÐÖÐ¶Ï 0£ºÆæÅ¼Ð£Ñé´í£¬²»×Ô¶¯·¢ËÍERROR SIGNAL£¬ÖÃRX_PARITY_ERR±êÖ¾£¬½øÐÐÖжϠÏà¹Øº¯Êý */
extern void U7816_FFR_RREPEN_Setable(FunState NewState);
extern FunState U7816_FFR_RREPEN_Getable(void);
 
/* ´«Êä´ÎÐò£¬±àÂ뷽ʽѡÔñ (bit Direction Conversion) 1£º·´Ïò±àÂ룬ÏÈÊÕ·¢MSB£»(ÊÕ·¢Êý¾Ý+УÑéλ)·´Âß¼­µçƽ 0£ºÕýÏò±àÂ룬ÏÈÊÕ·¢LSB £» (ÊÕ·¢Êý¾Ý+УÑéλ)ÕýÂß¼­µçƽ Ïà¹Øº¯Êý */
extern void U7816_FFR_DICONV_Set(uint32_t SetValue);
extern uint32_t U7816_FFR_DICONV_Get(void);
 
/* ·¢ËÍʱ²åÈëµÄExtra Guard Timeʱ¼ä£¨ÒÔETUΪµ¥Î»£©
(Transmit Extra Guard Time) Ïà¹Øº¯Êý */
extern void U7816_EGTR_Write(uint32_t SetValue);
extern uint32_t U7816_EGTR_Read(void);
 
/* U7816ʱÖÓÊä³ö·ÖƵ¿ØÖƼĴæÆ÷(Clock Divider)£¬¿ØÖÆ7816¹¤×÷ʱÖÓ·ÖÆµÊý¡£ U7816¹¤×÷ʱÖÓÓëAPBCLKµÄ·ÖƵ¹ØÏµ£º F7816=FAPBCLK/(CLKDIV+1) ÌØÊâÇé¿ö£ºCLK_DIVÉèÖóÉ0»ò1ʱ£¬F7816=FAPBCLK/2 ×¢£º7816ЭÒ鹿¶¨µÄ¹¤×÷ʱÖÓ·¶Î§ÊÇ1~5MHZ¡£ Ïà¹Øº¯Êý */
extern void U7816_PSC_Write(uint32_t SetValue);
extern uint32_t U7816_PSC_Read(void);
 
/* U7816Ô¤·ÖƵ¿ØÖƼĴæÆ÷(Pre-Divider)£¬¿ØÖÆ7816ͨÐÅ·ÖÆµ±È£¨²¨ÌØÂÊ£© Baud £½ F7816/(PDIV £« 1)
 
×¢Ò⣺PDIV×îС¿ÉÓÃÖµÊÇ0x1£¬Ó¦ÓýûÖ¹ÅäÖÃ0x0 Ïà¹Øº¯Êý */
extern void U7816_BGR_Write(uint32_t SetValue);
extern uint32_t U7816_BGR_Read(void);
 
/* U7816Êý¾Ý½ÓÊÕ»º´æ¼Ä´æÆ÷ (Receive Buffer) Ïà¹Øº¯Êý */
extern uint32_t U7816_RXBUF_Read(void);
 
/* U7816Êý¾Ý·¢ËÍ»º´æ¼Ä´æÆ÷ (Transmit Buffer) Ïà¹Øº¯Êý */
extern void U7816_TXBUF_Write(uint32_t SetValue);
 
/* Êý¾Ý½ÓÊÕÖжÏʹÄÜλ¡£¶ÔÓ¦RXIFÖжϱê־λ (Receive Interrupt Enable) 1£ºµ±RXIF¼Ä´æÆ÷ÖÃλʱ²úÉú½ÓÊÕÍê³ÉÖÐ¶Ï 0£º½ûÖ¹½ÓÊÕÍê³ÉÖжϠÏà¹Øº¯Êý */
extern void U7816_IER_RXIE_Setable(FunState NewState);
extern FunState U7816_IER_RXIE_Getable(void);
 
/* Êý¾Ý·¢ËÍÖжÏʹÄÜλ¡£¶ÔÓ¦TXIFÖжϱê־λ(Transmit Interrupt Enable) 1£ºµ±TXIF¼Ä´æÆ÷ÖÃλʱ²úÉú·¢ËÍÍê³ÉÖÐ¶Ï 0£º½ûÖ¹·¢ËÍÍê³ÉÖжϠÏà¹Øº¯Êý */
extern void U7816_IER_TXIE_Setable(FunState NewState);
extern FunState U7816_IER_TXIE_Getable(void);
 
/* Ïß·״̬ÖжÏʹÄÜλ¡£¶ÔÓ¦ERRIFÖжϱê־λ(Line Status Interrupt Enable) 1£ºµ±ERRIF¼Ä´æÆ÷ÖÃλʱ²úÉúÏß·´íÎóÖÐ¶Ï 0£º½ûÖ¹Ïß·´íÎóÖжϠÏà¹Øº¯Êý */
extern void U7816_IER_LSIE_Setable(FunState NewState);
extern FunState U7816_IER_LSIE_Getable(void);
 
/* U7816½Ó¿Ú·¢ËÍÁË´íÎóÐźţ¬ÕýÔڵȴý¶Ô·½ÖØ·¢Êý¾Ý£»(Waiting for Repeat flag) ״̬»ú½øÈë·¢ËÍ´íÎóÐźÅ״̬ʱÖÃ룬ÊÕµ½Êý¾ÝÆðʼλ»òÕß½øÈë·¢ËÍ״̬ʱӲ¼þÇåÁ㣻 Èí¼þÖ»¶Á¡£ Ïà¹Øº¯Êý */
extern FlagStatus U7816_ISR_WAIT_RPT_Chk(void);
 
/* ·¢ËÍÊý¾Ýæ±êÖ¾¡££¨·¢ËÍÍê³Éºó×Ô¶¯ÇåÁ㣩(Transmission busy flag) 1£º´¦ÓÚÊý¾Ý·¢ËÍ״̬£¬·¢ËÍÒÆÎ»¼Ä´æÆ÷ÕýÔÚ·¢ËÍÊý¾Ý¡££¨¿ªÊ¼·¢ËÍÆðʼλÖÃ1£¬Í£Ö¹Î»ÖмäÇåÁ㣩 0£ºÊý¾Ý·¢ËÍ¿ÕÏРÏà¹Øº¯Êý */
extern FlagStatus U7816_ISR_TXBUSY_Chk(void);
 
/* ½ÓÊÕÊý¾Ýæ±êÖ¾¡££¨½ÓÊÕÍê³Éºó×Ô¶¯ÇåÁ㣩(Receiving busy flag) 1£º´¦ÓÚÊý¾Ý½ÓÊÕ״̬£¬½ÓÊÕÒÆÎ»¼Ä´æÆ÷ÕýÔÚ½ÓÊÕÊý¾Ý¡££¨ÊÕµ½ÆðʼλÖÃ1£¬ÊÕµ½Í£Ö¹Î»ÇåÁ㣬Èô½ÓÊÕÊý¾Ý³ö´íÐèÖØ·¢£¬Ôò»Ø·¢error signalʱÇåÁã¡£¼´Êý¾Ý¼°Ð£Ñéλ½ÓÊÕÖ®ºó£¬ÎÞÂÛÊÇ·ñÐèÒªÖØ·¢£¬¶¼ÐèÒª¼°Ê±Çå³ý¸Ã±êÖ¾£© 0£ºÊý¾Ý½ÓÊÕ¿ÕÏРÏà¹Øº¯Êý */
extern FlagStatus U7816_ISR_RXBUSY_Chk(void);
 
/* ·¢ËÍÊý¾ÝÆæÅ¼Ð£Ñé´íÎó±ê־λ¡£Ó²¼þÖÃλ£¬Ð´1ÇåÁã (Transmit Parity Error,write 1 to clear) Ïà¹Øº¯Êý */
extern void U7816_ISR_TPARERR_Clr(void);
extern FlagStatus U7816_ISR_TPARERR_Chk(void);
 
/* ½ÓÊÕÊý¾ÝÆæÅ¼Ð£Ñé´íÎó±ê־λ¡£Ó²¼þÖÃλ£¬Ð´1ÇåÁã (Receive Parity Error flag,write 1 to clear) Ïà¹Øº¯Êý */
extern void U7816_ISR_RPARERR_Clr(void);
extern FlagStatus U7816_ISR_RPARERR_Chk(void);
 
/* ½ÓÊÕÖ¡¸ñʽ´íÎó±ê־λ¡£Ó²¼þÖÃλ£¬Ð´1ÇåÁã (Frame Error flag,write 1 to clear) 1£ºÖ¡¸ñʽÓдíÎ󣬽ÓÊÕµ½µÄframe×Ö½Ú³¤¶ÈÓÐÎó»ò½ÓÊÕµ½µÄframe»òÕßstopλÓÐÎó 0£º½ÓÊÕÊý¾ÝʱÎÞÆæÅ¼Ð£Ñé´íÎó Ïà¹Øº¯Êý */
extern void U7816_ISR_FRERR_Clr(void);
extern FlagStatus U7816_ISR_FRERR_Chk(void);
 
/* ½ÓÊÕÒç³ö´íÎó±ê־λ¡£Ó²¼þÖÃλ£¬Ð´1ÇåÁã (Receive Overflow Error,write 1 to clear) 1£º½ÓÊÕ»º³å¼Ä´æÆ÷δ±»¶Á³ö£¬ÓÖ½ÓÊÕµ½ÐµÄÊý¾Ý£¬Òç³ö´íÎó±êÖ¾ÓÐЧ¡£Ô­½ÓÊÕ»º³å¼Ä´æÆ÷ÄÚÊý¾Ý±»Ð¸²¸Ç 0£ºÎÞÒç³ö´íÎó Ïà¹Øº¯Êý */
extern void U7816_ISR_OVERR_Clr(void);
extern FlagStatus U7816_ISR_OVERR_Chk(void);
 
/* ½ÓÊÕÍê³É±êÖ¾(Receive interrupt flag)£¬U7816½Ó¿Ú¿ØÖÆÆ÷ÿÊÕµ½1byteÊý¾Ý£¬¸ù¾Ý½ÓÊÕµÄͨµÀÏàÓ¦·¢³öÒ»´ÎÖжϡ£Ó²¼þÖÃ룬¶ÁÊý¾Ý½ÓÊÕ»º³å¼Ä´æÆ÷ÇåÁã 1£º½ÓÊÕµ½1byteÊý¾Ý£¬Êý¾Ý½ÓÊÕ»º³åÆ÷Âú 0£ºÎ´½ÓÊÕµ½Êý¾Ý£¬Êý¾Ý½ÓÊÕ»º³åÆ÷¿Õ Ïà¹Øº¯Êý */
extern FlagStatus U7816_ISR_RXIF_Chk(void);
 
/* ·¢ËÍ»º³åÇø¿Õ±êÖ¾(Transmit interrupt flag)£¬Éϵ縴λºó´Ë±êÖ¾¾Í×Ô¶¯ÖÃ룬±íʾ»º³åÇø¿Õ£¬¿ÉÒÔдÈëÊý¾Ý¡£Èí¼þдÈëÊý¾Ýºó±êÖ¾×Ô¶¯Çå³ý£¬Êý¾Ý´Ó·¢ËÍ»º´æÒÆÈëÒÆÎ»¼Ä´æÆ÷ºóÖÃ1 1£ºÊý¾Ý·¢ËÍ»º³åÆ÷¿Õ 0£ºÊý¾Ý·¢ËÍ»º³åÆ÷ÄÚÓÐÊý¾Ý´ý·¢ËÍ Ïà¹Øº¯Êý */
extern FlagStatus U7816_ISR_TXIF_Chk(void);
 
/* ´íÎó±êÖ¾(Error interrupt flag)£¬¼Ä´æÆ÷ÅäÖóö´í»ò´«Êä¹ý³ÌÖгö´í¡£´ËbitÊÇTPARERR¡¢RPARERR¡¢FRERR¡¢OVERRµÄ»ò¡£Èí¼þͨ¹ýÇå³ýÒÔÉÏ´íÎó±êÖ¾¼Ä´æÆ÷À´Çå³ý´Ëbit¡£ Ïà¹Øº¯Êý */
extern FlagStatus U7816_ISR_ERRIF_Chk(void);
 
/* U7816ÍêÕû²ÎÊý³õʼ»¯º¯Êý */
void U7816_Init( U7816_InitTypeDef* para);
 
 
 
//Announce_End
#ifdef __cplusplus
}
#endif
 
#endif /* __FM33A0XXEV_U7816_H */