aboutsummaryrefslogtreecommitdiff
path: root/lib/chibios-contrib/testhal/STM32/STM32F3xx/OPAMP/main.c
diff options
context:
space:
mode:
Diffstat (limited to 'lib/chibios-contrib/testhal/STM32/STM32F3xx/OPAMP/main.c')
-rw-r--r--lib/chibios-contrib/testhal/STM32/STM32F3xx/OPAMP/main.c132
1 files changed, 132 insertions, 0 deletions
diff --git a/lib/chibios-contrib/testhal/STM32/STM32F3xx/OPAMP/main.c b/lib/chibios-contrib/testhal/STM32/STM32F3xx/OPAMP/main.c
new file mode 100644
index 000000000..fa47b1b43
--- /dev/null
+++ b/lib/chibios-contrib/testhal/STM32/STM32F3xx/OPAMP/main.c
@@ -0,0 +1,132 @@
1/*
2 ChibiOS - Copyright (C) 2006..2015 Giovanni Di Sirio
3
4 Licensed under the Apache License, Version 2.0 (the "License");
5 you may not use this file except in compliance with the License.
6 You may obtain a copy of the License at
7
8 http://www.apache.org/licenses/LICENSE-2.0
9
10 Unless required by applicable law or agreed to in writing, software
11 distributed under the License is distributed on an "AS IS" BASIS,
12 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 See the License for the specific language governing permissions and
14 limitations under the License.
15*/
16
17#include "ch.h"
18#include "hal.h"
19
20#define DAC_BUFFER_SIZE 360
21
22/*
23 * DAC test buffer (sine wave).
24 */
25static const dacsample_t dac_buffer[DAC_BUFFER_SIZE] = {
26 2047, 2082, 2118, 2154, 2189, 2225, 2260, 2296, 2331, 2367, 2402, 2437,
27 2472, 2507, 2542, 2576, 2611, 2645, 2679, 2713, 2747, 2780, 2813, 2846,
28 2879, 2912, 2944, 2976, 3008, 3039, 3070, 3101, 3131, 3161, 3191, 3221,
29 3250, 3278, 3307, 3335, 3362, 3389, 3416, 3443, 3468, 3494, 3519, 3544,
30 3568, 3591, 3615, 3637, 3660, 3681, 3703, 3723, 3744, 3763, 3782, 3801,
31 3819, 3837, 3854, 3870, 3886, 3902, 3917, 3931, 3944, 3958, 3970, 3982,
32 3993, 4004, 4014, 4024, 4033, 4041, 4049, 4056, 4062, 4068, 4074, 4078,
33 4082, 4086, 4089, 4091, 4092, 4093, 4094, 4093, 4092, 4091, 4089, 4086,
34 4082, 4078, 4074, 4068, 4062, 4056, 4049, 4041, 4033, 4024, 4014, 4004,
35 3993, 3982, 3970, 3958, 3944, 3931, 3917, 3902, 3886, 3870, 3854, 3837,
36 3819, 3801, 3782, 3763, 3744, 3723, 3703, 3681, 3660, 3637, 3615, 3591,
37 3568, 3544, 3519, 3494, 3468, 3443, 3416, 3389, 3362, 3335, 3307, 3278,
38 3250, 3221, 3191, 3161, 3131, 3101, 3070, 3039, 3008, 2976, 2944, 2912,
39 2879, 2846, 2813, 2780, 2747, 2713, 2679, 2645, 2611, 2576, 2542, 2507,
40 2472, 2437, 2402, 2367, 2331, 2296, 2260, 2225, 2189, 2154, 2118, 2082,
41 2047, 2012, 1976, 1940, 1905, 1869, 1834, 1798, 1763, 1727, 1692, 1657,
42 1622, 1587, 1552, 1518, 1483, 1449, 1415, 1381, 1347, 1314, 1281, 1248,
43 1215, 1182, 1150, 1118, 1086, 1055, 1024, 993, 963, 933, 903, 873,
44 844, 816, 787, 759, 732, 705, 678, 651, 626, 600, 575, 550,
45 526, 503, 479, 457, 434, 413, 391, 371, 350, 331, 312, 293,
46 275, 257, 240, 224, 208, 192, 177, 163, 150, 136, 124, 112,
47 101, 90, 80, 70, 61, 53, 45, 38, 32, 26, 20, 16,
48 12, 8, 5, 3, 2, 1, 0, 1, 2, 3, 5, 8,
49 12, 16, 20, 26, 32, 38, 45, 53, 61, 70, 80, 90,
50 101, 112, 124, 136, 150, 163, 177, 192, 208, 224, 240, 257,
51 275, 293, 312, 331, 350, 371, 391, 413, 434, 457, 479, 503,
52 526, 550, 575, 600, 626, 651, 678, 705, 732, 759, 787, 816,
53 844, 873, 903, 933, 963, 993, 1024, 1055, 1086, 1118, 1150, 1182,
54 1215, 1248, 1281, 1314, 1347, 1381, 1415, 1449, 1483, 1518, 1552, 1587,
55 1622, 1657, 1692, 1727, 1763, 1798, 1834, 1869, 1905, 1940, 1976, 2012
56};
57
58static const DACConfig dac1cfg1 = {
59 .init = 2047U,
60 .datamode = DAC_DHRM_12BIT_RIGHT,
61 .cr = 0
62};
63
64static const DACConversionGroup dacgrpcfg1 = {
65 .num_channels = 1U,
66 .end_cb = NULL,
67 .error_cb = NULL,
68 .trigger = DAC_TRG(0)
69};
70
71/*
72 * GPT6 configuration.
73 */
74static const GPTConfig gpt6cfg1 = {
75 .frequency = 10000U,
76 .callback = NULL,
77 .cr2 = TIM_CR2_MMS_1, /* MMS = 010 = TRGO on Update Event. */
78 .dier = 0U
79};
80
81/*
82 * OpAmp configuration.
83 * We will double the input voltage
84 */
85static const OPAMPConfig opamp1_conf = {
86 OPAMP1_CSR_VPSEL_PA01 | // INP connectd to PA1
87 OPAMP1_CSR_VMSEL_PGA | // INM connected to PGA
88 OPAMPx_CSR_PGAGAIN_x2 | // Gain of 2x
89 OPAMPx_CSR_PGACONNECT_GROUND // PGA connected to ground
90};
91
92/*
93 * Application entry point.
94 */
95int main(void) {
96
97 halInit();
98 chSysInit();
99
100 /*
101 * Set PA3 - PA1 to Analog (DAC1_CH1, OPAMP1_INP)
102 * You will have to connect these with a jumper wire
103 */
104 palSetPadMode(GPIOA, 3, PAL_MODE_INPUT_ANALOG);
105 palSetPadMode(GPIOA, 1, PAL_MODE_INPUT_ANALOG);
106
107 /*
108 * Start peripherals
109 */
110 dacStart(&DACD1, &dac1cfg1);
111 opampStart(&OPAMPD1, &opamp1_conf);
112 gptStart(&GPTD6, &gpt6cfg1);
113
114 /*
115 * Starting a continuous conversion.
116 */
117 dacStartConversion(&DACD1, &dacgrpcfg1, dac_buffer, DAC_BUFFER_SIZE);
118 gptStartContinuous(&GPTD6, 2U);
119
120 opampEnable(&OPAMPD1);
121 opampCalibrate();
122
123 /*
124 * Normal main() thread activity.
125 */
126 while (true) {
127
128 chThdSleepMilliseconds(250);
129 palToggleLine(LINE_LED3_RED);
130 }
131 return 0;
132}