HWA
Bare metal programming with style
ctb_1.h
Go to the documentation of this file.
1 
2 /* This file is part of the HWA project.
3  * Copyright (c) 2021 Christophe Duparquet.
4  * All rights reserved. Read LICENSE.TXT for details.
5  */
6 
12 /* The channels rely on their counter's registers, so we can use the cca
13  * implementation definitions with ctb counters.
14  */
15 
16 #include "cca_1.h"
17 
48 #define hw_class__ctb
49 
50 #define hw__ctb_cr1 _r16, 0x00, 0x03FF, 0
51 #define hw__ctb_cr2 _r16, 0x04, 0x00F8, 0
52 #define hw__ctb_smcr _r16, 0x08, 0xFFF7, 0
53 #define hw__ctb_dier _r16, 0x0C, 0x5F5F, 0
54 #define hw__ctb_sr _r16, 0x10, 0x1E7F, 0
55 #define hw__ctb_egr _r16, 0x14, 0x005F, 0
56 #define hw__ctb_ccmr1 _r16, 0x18, 0xFFFF, 0
57 #define hw__ctb_ccmr2 _r16, 0x1C, 0xFFFF, 0
58 #define hw__ctb_ccer _r16, 0x20, 0x3333, 0
59 #define hw__ctb_cnt _r32, 0x24, 0xFFFFFFFF, 0
60 #define hw__ctb_psc _r16, 0x28, 0xFFFF, 0
61 #define hw__ctb_arr _r32, 0x2C, 0xFFFFFFFF, 0
62 #define hw__ctb_ccr1 _r32, 0x34, 0xFFFFFFFF, 0
63 #define hw__ctb_ccr2 _r32, 0x38, 0xFFFFFFFF, 0
64 #define hw__ctb_ccr3 _r32, 0x3C, 0xFFFFFFFF, 0
65 #define hw__ctb_ccr4 _r32, 0x40, 0xFFFFFFFF, 0
66 #define hw__ctb_dcr _r16, 0x48, 0x1F1F, 0
67 #define hw__ctb_dmar _r16, 0x4C, 0xFFFF, 0
68 
69 #define hw__ctb_ckd _cb1, cr1, 2, 8
70 #define hw__ctb_arpe _cb1, cr1, 1, 7
71 #define hw__ctb_cms _cb1, cr1, 2, 5
72 #define hw__ctb_dir _cb1, cr1, 1, 4
73 #define hw__ctb_cmsdir _cb1, cr1, 3, 4 // Convenient
74 #define hw__ctb_opm _cb1, cr1, 1, 3
75 #define hw__ctb_cmsdiropm _cb1, cr1, 4, 3 // Convenient
76 #define hw__ctb_urs _cb1, cr1, 1, 2
77 #define hw__ctb_udis _cb1, cr1, 1, 1
78 #define hw__ctb_cen _cb1, cr1, 1, 0
79 
80 #define hw__ctb_ti1s _cb1, cr2, 1, 7
81 #define hw__ctb_mms _cb1, cr2, 3, 4
82 #define hw__ctb_ccds _cb1, cr2, 1, 3
83 
84 #define hw__ctb_etp _cb1, smcr, 1, 15
85 #define hw__ctb_ece _cb1, smcr, 1, 14
86 #define hw__ctb_etps _cb1, smcr, 2, 12
87 #define hw__ctb_etf _cb1, smcr, 4, 8
88 #define hw__ctb_msm _cb1, smcr, 1, 7
89 #define hw__ctb_ts _cb1, smcr, 3, 4
90 #define hw__ctb_sms _cb1, smcr, 3, 0
91 
92 #define hw__ctb_tde _cb1, dier, 1, 14
93 #define hw__ctb_cc4de _cb1, dier, 1, 12
94 #define hw__ctb_cc3de _cb1, dier, 1, 11
95 #define hw__ctb_cc2de _cb1, dier, 1, 10
96 #define hw__ctb_cc1de _cb1, dier, 1, 9
97 #define hw__ctb_ude _cb1, dier, 1, 8
98 #define hw__ctb_tie _cb1, dier, 1, 6
99 #define hw__ctb_cc4ie _cb1, dier, 1, 4
100 #define hw__ctb_cc3ie _cb1, dier, 1, 3
101 #define hw__ctb_cc2ie _cb1, dier, 1, 2
102 #define hw__ctb_cc1ie _cb1, dier, 1, 1
103 #define hw__ctb_uie _cb1, dier, 1, 0
104 
105 #define hw__ctb_cc4of _cb1, sr, 1, 12
106 #define hw__ctb_cc3of _cb1, sr, 1, 11
107 #define hw__ctb_cc2of _cb1, sr, 1, 10
108 #define hw__ctb_cc1of _cb1, sr, 1, 9
109 #define hw__ctb_tif _cb1, sr, 1, 6
110 #define hw__ctb_cc4if _cb1, sr, 1, 4
111 #define hw__ctb_cc3if _cb1, sr, 1, 3
112 #define hw__ctb_cc2if _cb1, sr, 1, 2
113 #define hw__ctb_cc1if _cb1, sr, 1, 1
114 #define hw__ctb_uif _cb1, sr, 1, 0
115 
116 #define hw__ctb_cc4p _cb1, ccer, 1, 13
117 #define hw__ctb_cc4e _cb1, ccer, 1, 12
118 #define hw__ctb_cc3p _cb1, ccer, 1, 9
119 #define hw__ctb_cc3e _cb1, ccer, 1, 8
120 #define hw__ctb_cc2p _cb1, ccer, 1, 5
121 #define hw__ctb_cc2e _cb1, ccer, 1, 4
122 #define hw__ctb_cc1p _cb1, ccer, 1, 1
123 #define hw__ctb_cc1e _cb1, ccer, 1, 0
124 
125 #define hw__ctb_oc2ce _cb1, ccmr1, 1, 15
126 #define hw__ctb_oc2m _cb1, ccmr1, 3, 12
127 #define hw__ctb_ic2f _cb1, ccmr1, 4, 12
128 #define hw__ctb_oc2pe _cb1, ccmr1, 1, 11
129 #define hw__ctb_oc2fe _cb1, ccmr1, 1, 10
130 #define hw__ctb_ic2psc _cb1, ccmr1, 2, 10
131 #define hw__ctb_cc2s _cb1, ccmr1, 2, 8
132 
133 #define hw__ctb_oc1ce _cb1, ccmr1, 1, 7
134 #define hw__ctb_oc1m _cb1, ccmr1, 3, 4
135 #define hw__ctb_ic1f _cb1, ccmr1, 4, 4
136 #define hw__ctb_oc1pe _cb1, ccmr1, 1, 3
137 #define hw__ctb_oc1fe _cb1, ccmr1, 1, 2
138 #define hw__ctb_ic1psc _cb1, ccmr1, 2, 2
139 #define hw__ctb_cc1s _cb1, ccmr1, 2, 0
140 
141 #define hw__ctb_oc4ce _cb1, ccmr2, 1, 15
142 #define hw__ctb_oc4m _cb1, ccmr2, 3, 12
143 #define hw__ctb_ic4f _cb1, ccmr2, 4, 12
144 #define hw__ctb_oc4pe _cb1, ccmr2, 1, 11
145 #define hw__ctb_oc4fe _cb1, ccmr2, 1, 10
146 #define hw__ctb_ic4psc _cb1, ccmr2, 2, 10
147 #define hw__ctb_cc4s _cb1, ccmr2, 2, 8
148 
149 #define hw__ctb_oc3ce _cb1, ccmr2, 1, 7
150 #define hw__ctb_oc3m _cb1, ccmr2, 3, 4
151 #define hw__ctb_ic3f _cb1, ccmr2, 4, 4
152 #define hw__ctb_oc3pe _cb1, ccmr2, 1, 3
153 #define hw__ctb_oc3fe _cb1, ccmr2, 1, 2
154 #define hw__ctb_ic3psc _cb1, ccmr2, 2, 2
155 #define hw__ctb_cc3s _cb1, ccmr2, 2, 0
156 
157 /* Relatives
158  */
159 #define hw__ctb_prescaler _cb1, psc, 32, 0
160 #define hw__ctb_reload _cb1, arr, 32, 0
161 
162 #define hw__ctb_irq _irq, uie, uif, 0 // Clear flag writing 0 (rc_w0)
163 
164 
165 #if !defined __ASSEMBLER__
166 
167 typedef struct {
168  hwa_r16_t cr1 ;
169  hwa_r16_t cr2 ;
170  hwa_r16_t smcr ;
171  hwa_r16_t dier ;
172  hwa_r16_t egr ;
173  hwa_r16_t ccmr1 ;
174  hwa_r16_t ccmr2 ;
175  hwa_r16_t ccer ;
176  hwa_r32_t cnt ;
177  hwa_r16_t psc ;
178  hwa_r32_t arr ;
179  hwa_r16_t ccr3 ;
180 } hwa_ctb_t ;
181 
182 #endif
cca_1.h
STM32 capture-compare channel.