HWA
Bare metal programming with style
usarta_2.h
Go to the documentation of this file.
1 
2 /* This file is part of the HWA project.
3  * Copyright (c) 2019 Christophe Duparquet.
4  * All rights reserved. Read LICENSE.TXT for details.
5  */
6 
44 #define hw_class__usarta
45 
46 #define hw_configure__usarta , _hw_cfusarta
47 #define hwa_configure__usarta , _hwa_cfusarta
48 
49 #define _hw_cfusarta_clk_from_apb1 , 17
50 
51 #if 0
52 #define _hw_cfusarta(o,a,k,...) do{ HW_B(_hwx_cfusarta_k_,k)(_hw,o,k,__VA_ARGS__) }while(0)
53 #define _hwa_cfusarta(o,a,k,...) do{ HW_B(_hwx_cfusarta_k_,k)(_hwa,o,k,__VA_ARGS__) }while(0)
54 #else
55 #define _hw_cfusarta(o,a,k,...) HW_E(HW_EM_TBD())
56 #define _hwa_cfusarta(o,a,k,...) HW_E(HW_EM_TBD())
57 #endif
58 
59 /* At least one keyword
60  */
61 #define _hwx_cfusarta_k_1(h,o,k,...) HW_E(HW_EM_AML((clock,reload,run)))
62 #define _hwx_cfusarta_k_0(h,o,k,...) HW_B(_hwx_cfusarta_kclk_,_hw_is_clock_##k)(h,o,k,__VA_ARGS__)
63 
64 /* Optionnal parameter `clock`
65  */
66 #define _hwx_cfusarta_kclk_1(h,o,k,v,...) HW_B(_hwx_cfusarta_vclk_,_hw_cfusarta_clk_##v)(h,o,v,__VA_ARGS__)
67 #define _hwx_cfusarta_vclk_0(h,o,v,...) HW_E(HW_EM_XNIL(v,(apb1)))
68 #define _hwx_cfusarta_vclk_1(h,o,v,...) _hwx_cfusarta_vclk_2(h,o,v,_hw_cfusarta_clk_##v,__VA_ARGS__)
69 #define _hwx_cfusarta_vclk_2(...) _hwx_cfusarta_vclk_3(__VA_ARGS__)
70 #define _hwx_cfusarta_vclk_3(h,o,v,z,xv,k,...) \
71  if ( 8*xv == 17 ) h##_write(o,clksource,0); \
72  else if ( xv == 17 ) h##_write(o,clksource,1); \
73  else HWA_E(HW_EM_VAL(v,clock,(ahb/8, ahb))); \
74  HW_B(_hwx_cfusarta_krld_,_hw_is_reload_##k)(h,o,k,__VA_ARGS__)
75 
76 #define _hwx_cfusarta_kclk_0(h,o,k,...) HW_B(_hwx_cfusarta_krld_,_hw_is_reload_##k)(h,o,k,__VA_ARGS__)
77 
78 /* Optionnal parameter `reload`
79  */
80 #define _hwx_cfusarta_krld_1(h,o,k0,v,k,...) \
81  h##_write(o,arr,(uint32_t)(v)); \
82  HW_B(_hwx_cfusarta_krn_,_hw_is_run_##k)(h,o,k,__VA_ARGS__)
83 
84 #define _hwx_cfusarta_krld_0(h,o,k,...) HW_B(_hwx_cfusarta_krn_,_hw_is_run_##k)(h,o,k,__VA_ARGS__)
85 
86 /* Optionnal parameter `run`
87  */
88 #define _hwx_cfusarta_krn_0(h,o,k,...) HW_EOL(k)
89 #define _hwx_cfusarta_krn_1(h,o,k,v,...) HW_B(_hwx_cfusarta_vrn_,_hw_state_##v)(h,o,v,__VA_ARGS__)
90 #define _hwx_cfusarta_vrn_0(h,o,v,...) HW_E(HW_EM_ST(v))
91 #define _hwx_cfusarta_vrn_1(h,o,v,g,...) h##_write(o,cen,HW_A1(_hw_state_##v)); HW_EOL(g)
92 
93 
102 #define hw_read__usarta , _hw_rdusarta
103 #define _hw_rdusarta(o,a,...) _hw_read(o,cnt)
104 
105 
188 /*******************************************************************************
189  * *
190  * Context *
191  * *
192  *******************************************************************************/
193 
194 #define _hwa_setup__usarta(o,a) \
195  _hwa_setup_r( o, brr ); \
196  _hwa_setup_r( o, cr1 ); \
197  _hwa_setup_r( o, cr2 ); \
198  _hwa_setup_r( o, cr3 ); \
199  _hwa_setup_r( o, gtpr )
200 
201 #define _hwa_init__usarta(o,a) \
202  _hwa_init_r( o, brr, 0x00000000 ); \
203  _hwa_init_r( o, cr1, 0x00000000 ); \
204  _hwa_init_r( o, cr2, 0x00000000 ); \
205  _hwa_init_r( o, cr3, 0x00000000 ); \
206  _hwa_init_r( o, gtpr, 0x00000000 )
207 
208 #define _hwa_commit__usarta(o,a) \
209  _hwa_commit_r( o, brr ); \
210  _hwa_commit_r( o, cr1 ); \
211  _hwa_commit_r( o, cr2 ); \
212  _hwa_commit_r( o, cr3 ); \
213  _hwa_commit_r( o, gtpr )