diff options
Diffstat (limited to 'lib/chibios-contrib/testhal/STM32/STM32F3xx/OPAMP/main.c')
-rw-r--r-- | lib/chibios-contrib/testhal/STM32/STM32F3xx/OPAMP/main.c | 132 |
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 | */ | ||
25 | static 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 | |||
58 | static const DACConfig dac1cfg1 = { | ||
59 | .init = 2047U, | ||
60 | .datamode = DAC_DHRM_12BIT_RIGHT, | ||
61 | .cr = 0 | ||
62 | }; | ||
63 | |||
64 | static 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 | */ | ||
74 | static 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 | */ | ||
85 | static 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 | */ | ||
95 | int 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 | } | ||