HWA
Bare metal programming with style
stka_2.h
Go to the documentation of this file.
1
2
/* This file is part of the HWA project.
3
* Copyright (c) 2017 Christophe Duparquet.
4
* All rights reserved. Read LICENSE.TXT for details.
5
*/
6
12
#define hw_class__stka
13
31
#define hw_configure__stka , _hw_cfstka
32
#define hwa_configure__stka , _hwa_cfstka
33
34
#define _hw_cfstka(o,a,k,...) do{ HW_B(_hwa_cfstka,k)(_hw,o,k,__VA_ARGS__) }while(0)
35
#define _hwa_cfstka(o,a,k,...) do{ HW_B(_hwa_cfstka,k)(_hwa,o,k,__VA_ARGS__) }while(0)
36
37
/* At least one keyword
38
*/
39
#define _hwa_cfstka1(h,o,k,...) HW_E(HW_EM_AML((clock,reload,run)))
40
#define _hwa_cfstka0(h,o,k,...) HW_BW(_hwa_cfstkack,clock,k)(h,o,k,__VA_ARGS__)
41
42
/* Optionnal parameter `clock`
43
*/
44
#define _hwa_cfstkack1(h,o,k,v,...) HW_BV(_hwa_cfstkack2,cfstkack_,v,h,o,v)(h,o,__VA_ARGS__)//PUSH
45
#define _hwa_cfstkack20(v,...) HW_E(HW_EM_XNIL(v,(ahb, ahb/8)))
46
#define _hwa_cfstkack21(r,h,o,v) \
47
if ( 8*r == 1 ) h##_write(o,clksource,0); \
48
else if ( r == 1 ) h##_write(o,clksource,1); \
49
else HWA_E(HW_EM_VAL(v,clock,(ahb/8, ahb))); \
50
_hwa_cfstkack0 //POP
51
52
#define _hw_cfstkack_ahb , 1
53
54
/* Optionnal parameter `reload`
55
*/
56
#define _hwa_cfstkack0(h,o,k,...) HW_BW(_hwa_cfstkald,reload,k)(h,o,k,__VA_ARGS__)
57
#define _hwa_cfstkald1(h,o,ok,v,k,...) \
58
h##_write(o,reload,(uint32_t)(v)); \
59
HW_BW(_hwa_cfstkarn,run,k)(h,o,k,__VA_ARGS__)
60
61
#define _hwa_cfstkald0(h,o,k,...) HW_BW(_hwa_cfstkarn,run,k)(h,o,k,__VA_ARGS__)
62
63
/* Optionnal parameter `run`
64
*/
65
#define _hwa_cfstkarn0(h,o,...) HW_EOL(__VA_ARGS__)
66
#define _hwa_cfstkarn1(h,o,k,v,...) HW_BV(_hwa_cfstkarn1,state_,v,h,o)(__VA_ARGS__)//PUSH
67
#define _hwa_cfstkarn10(v,...) HW_E(HW_EM_ST(v))
68
#define _hwa_cfstkarn11(r,n,h,o) h##_write(o,enable,r); HW_EOL //POP
69
70
80
#define hw_turn__stka , _hw_tnstka
81
#define _hw_tnstka(o,a,...) do{ _hwx_tnstka(_hw,o,__VA_ARGS__) }while(0)
82
83
#define hwa_turn__stka , _hwa_tnstka
84
#define _hwa_tnstka(o,a,...) do{ _hwx_tnstka(_hwa,o,__VA_ARGS__) }while(0)
85
86
#define _hwx_tnstka(h,o,v,...) HW_BV(_hwx_tnstka_,state_,v,h,o)(__VA_ARGS__)//PUSH
87
#define _hwx_tnstka_0(v,...) HW_E(HW_EM_ST(v))
88
#define _hwx_tnstka_1(r,n,h,o) h##_write(o,enable,r); HW_EOL//POP
89
90
100
#define hw_read__stka , _hw_rdstka
101
#define _hw_rdstka(o,a,...) _hw_read(o,current)
102
103
104
/*******************************************************************************
105
* *
106
* Context management *
107
* *
108
*******************************************************************************/
109
110
#define _hwa_setup__stka(o,a) \
111
_hwa_setup_r( o, ctrl ); \
112
_hwa_setup_r( o, load ); \
113
_hwa_setup_r( o, val )
114
115
#define _hwa_init__stka(o,a) \
116
_hwa_init_r( o, ctrl, 0x00000000 ); \
117
_hwa_init_r( o, load, 0x00000000 ); \
118
_hwa_init_r( o, val, 0x00000000 )
119
120
#define _hwa_commit__stka(o,a) \
121
_hwa_commit_r( o, ctrl ); \
122
_hwa_commit_r( o, load ); \
123
_hwa_commit_r( o, val )
Generated for HWA by
1.8.6