Port of LogicalNucleo to F411RE

Dependencies:   mbed

Fork of LogicAlNucleo by joao barraca

Committer:
jpbarraca
Date:
Sat Mar 12 00:18:53 2016 +0000
Revision:
0:41db3ed6754d
Child:
1:cf544bd09176
v0.1.2.1

Who changed what in which revision?

UserRevisionLine numberNew contents of line
jpbarraca 0:41db3ed6754d 1 /*
jpbarraca 0:41db3ed6754d 2 This program is free software: you can redistribute it and/or modify
jpbarraca 0:41db3ed6754d 3 it under the terms of the GNU General Public License as published by
jpbarraca 0:41db3ed6754d 4 the Free Software Foundation, either version 3 of the License, or
jpbarraca 0:41db3ed6754d 5 (at your option) any later version.
jpbarraca 0:41db3ed6754d 6
jpbarraca 0:41db3ed6754d 7 This program is distributed in the hope that it will be useful,
jpbarraca 0:41db3ed6754d 8 but WITHOUT ANY WARRANTY; without even the implied warranty of
jpbarraca 0:41db3ed6754d 9 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
jpbarraca 0:41db3ed6754d 10 GNU General Public License for more details.
jpbarraca 0:41db3ed6754d 11
jpbarraca 0:41db3ed6754d 12 Author: Joao Paulo Barraca <jpbarraca@gmail.com>
jpbarraca 0:41db3ed6754d 13 */
jpbarraca 0:41db3ed6754d 14
jpbarraca 0:41db3ed6754d 15 #include "mbed.h"
jpbarraca 0:41db3ed6754d 16 #include "Sampler.h"
jpbarraca 0:41db3ed6754d 17 #include <algorithm>
jpbarraca 0:41db3ed6754d 18
jpbarraca 0:41db3ed6754d 19 #define TRIGGER_PARALLEL 0
jpbarraca 0:41db3ed6754d 20 #define TRIGGER_SERIAL 1
jpbarraca 0:41db3ed6754d 21 #define TRIGGER_DISABLED 0xFF
jpbarraca 0:41db3ed6754d 22
jpbarraca 0:41db3ed6754d 23 #define TRIGGER_MODE_SERIAL 0
jpbarraca 0:41db3ed6754d 24 #define TRIGGER_MODE_PARALLEL 1
jpbarraca 0:41db3ed6754d 25
jpbarraca 0:41db3ed6754d 26 #define FLAGS_DEMUX 1
jpbarraca 0:41db3ed6754d 27 #define FLAGS_FILTER 2
jpbarraca 0:41db3ed6754d 28 #define FLAGS_CHANNEL_GROUPS 0x3C
jpbarraca 0:41db3ed6754d 29 #define FLAGS_EXTERNAL 0x40
jpbarraca 0:41db3ed6754d 30 #define FLAGS_INVERTED 0x80
jpbarraca 0:41db3ed6754d 31 #define FLAGS_TEST 0x400
jpbarraca 0:41db3ed6754d 32
jpbarraca 0:41db3ed6754d 33
jpbarraca 0:41db3ed6754d 34 #define SUMP_ORIGINAL_FREQ (100000000)
jpbarraca 0:41db3ed6754d 35 #define SYSTEM_CLOCK_MULT (SystemCoreClock / 1000000)
jpbarraca 0:41db3ed6754d 36 #define BUFFER_SIZE 32768
jpbarraca 0:41db3ed6754d 37 #define MAX_FREQUENCY 10000000
jpbarraca 0:41db3ed6754d 38
jpbarraca 0:41db3ed6754d 39 __attribute((section("AHBSRAM0"),aligned)) uint8_t main_buffer[BUFFER_SIZE];
jpbarraca 0:41db3ed6754d 40
jpbarraca 0:41db3ed6754d 41 #define likely(x) __builtin_expect((x),1)
jpbarraca 0:41db3ed6754d 42
jpbarraca 0:41db3ed6754d 43 Sampler::Sampler(Serial *sp)
jpbarraca 0:41db3ed6754d 44 {
jpbarraca 0:41db3ed6754d 45 pc = sp;
jpbarraca 0:41db3ed6754d 46 bufferSize = BUFFER_SIZE;
jpbarraca 0:41db3ed6754d 47 buffer = main_buffer;
jpbarraca 0:41db3ed6754d 48
jpbarraca 0:41db3ed6754d 49 //Setup port
jpbarraca 0:41db3ed6754d 50 SET_BIT(RCC->AHB1ENR, RCC_AHB1ENR_GPIOBEN);
jpbarraca 0:41db3ed6754d 51 GPIOB->OSPEEDR = 3; // High Speed
jpbarraca 0:41db3ed6754d 52 GPIOB->BSRR = 0xFFFF0000; // No Special pins
jpbarraca 0:41db3ed6754d 53 GPIOB->MODER = 0; // Input
jpbarraca 0:41db3ed6754d 54 GPIOB->PUPDR = 0; // No pull up or pull down
jpbarraca 0:41db3ed6754d 55
jpbarraca 0:41db3ed6754d 56 reset();
jpbarraca 0:41db3ed6754d 57 }
jpbarraca 0:41db3ed6754d 58
jpbarraca 0:41db3ed6754d 59 void Sampler::reset()
jpbarraca 0:41db3ed6754d 60 {
jpbarraca 0:41db3ed6754d 61 buffer_index = 0;
jpbarraca 0:41db3ed6754d 62 setTriggerMask(0);
jpbarraca 0:41db3ed6754d 63 setTriggerValue(0);
jpbarraca 0:41db3ed6754d 64 setTriggerState(0);
jpbarraca 0:41db3ed6754d 65 setSamplingDivider(11);
jpbarraca 0:41db3ed6754d 66 setFlags(0);
jpbarraca 0:41db3ed6754d 67 setSampleNumber(bufferSize);
jpbarraca 0:41db3ed6754d 68 setSamplingDelay(0);
jpbarraca 0:41db3ed6754d 69 }
jpbarraca 0:41db3ed6754d 70
jpbarraca 0:41db3ed6754d 71 uint32_t Sampler::getMaxFrequency(){
jpbarraca 0:41db3ed6754d 72 return MAX_FREQUENCY;
jpbarraca 0:41db3ed6754d 73 }
jpbarraca 0:41db3ed6754d 74
jpbarraca 0:41db3ed6754d 75 uint32_t Sampler::getBufferSize(){
jpbarraca 0:41db3ed6754d 76 return bufferSize;
jpbarraca 0:41db3ed6754d 77 }
jpbarraca 0:41db3ed6754d 78
jpbarraca 0:41db3ed6754d 79 void Sampler::setSamplingDivider(uint32_t divider)
jpbarraca 0:41db3ed6754d 80 {
jpbarraca 0:41db3ed6754d 81 //Max speed is 10Mhz
jpbarraca 0:41db3ed6754d 82 if(divider < 9)
jpbarraca 0:41db3ed6754d 83 divider = 9;
jpbarraca 0:41db3ed6754d 84
jpbarraca 0:41db3ed6754d 85 samplingPeriod = (divider+1)*10;
jpbarraca 0:41db3ed6754d 86 }
jpbarraca 0:41db3ed6754d 87
jpbarraca 0:41db3ed6754d 88 void Sampler::setSampleNumber(uint32_t s)
jpbarraca 0:41db3ed6754d 89 {
jpbarraca 0:41db3ed6754d 90 sampleNumber = min((uint32_t) bufferSize, s);
jpbarraca 0:41db3ed6754d 91 }
jpbarraca 0:41db3ed6754d 92
jpbarraca 0:41db3ed6754d 93 void Sampler::setSamplingDelay(uint16_t s)
jpbarraca 0:41db3ed6754d 94 {
jpbarraca 0:41db3ed6754d 95 sampleDelay = s;
jpbarraca 0:41db3ed6754d 96 }
jpbarraca 0:41db3ed6754d 97
jpbarraca 0:41db3ed6754d 98 void Sampler::setTriggerMask(uint32_t s)
jpbarraca 0:41db3ed6754d 99 {
jpbarraca 0:41db3ed6754d 100 triggerMask = s;
jpbarraca 0:41db3ed6754d 101 }
jpbarraca 0:41db3ed6754d 102 void Sampler::setTriggerValue(uint32_t s)
jpbarraca 0:41db3ed6754d 103 {
jpbarraca 0:41db3ed6754d 104 triggerValue = s & 0xFF;
jpbarraca 0:41db3ed6754d 105 }
jpbarraca 0:41db3ed6754d 106
jpbarraca 0:41db3ed6754d 107 void Sampler::setTriggerState(uint8_t state){
jpbarraca 0:41db3ed6754d 108 triggerState = state;
jpbarraca 0:41db3ed6754d 109 }
jpbarraca 0:41db3ed6754d 110
jpbarraca 0:41db3ed6754d 111 void Sampler::setFlags(uint32_t s)
jpbarraca 0:41db3ed6754d 112 {
jpbarraca 0:41db3ed6754d 113 flags = s;
jpbarraca 0:41db3ed6754d 114 }
jpbarraca 0:41db3ed6754d 115
jpbarraca 0:41db3ed6754d 116 void Sampler::runTest()
jpbarraca 0:41db3ed6754d 117 {
jpbarraca 0:41db3ed6754d 118 //TODO
jpbarraca 0:41db3ed6754d 119 }
jpbarraca 0:41db3ed6754d 120
jpbarraca 0:41db3ed6754d 121 void Sampler::start()
jpbarraca 0:41db3ed6754d 122 {
jpbarraca 0:41db3ed6754d 123
jpbarraca 0:41db3ed6754d 124 int32_t snum = sampleNumber;
jpbarraca 0:41db3ed6754d 125
jpbarraca 0:41db3ed6754d 126
jpbarraca 0:41db3ed6754d 127 if(sampleDelay > 0){
jpbarraca 0:41db3ed6754d 128 wait_us(sampleDelay);
jpbarraca 0:41db3ed6754d 129 }
jpbarraca 0:41db3ed6754d 130
jpbarraca 0:41db3ed6754d 131 if(triggerState == 1){
jpbarraca 0:41db3ed6754d 132 while((GPIOB->IDR & triggerMask) != triggerValue);
jpbarraca 0:41db3ed6754d 133 }
jpbarraca 0:41db3ed6754d 134
jpbarraca 0:41db3ed6754d 135 //10Mhz (Close but not really...)
jpbarraca 0:41db3ed6754d 136 if(samplingPeriod == 100){
jpbarraca 0:41db3ed6754d 137 while(likely(snum >= 4)){
jpbarraca 0:41db3ed6754d 138 buffer[snum - 1] = GPIOB->IDR;
jpbarraca 0:41db3ed6754d 139 __asm volatile ( " NOP\nNOP\n");
jpbarraca 0:41db3ed6754d 140 buffer[snum - 2] = GPIOB->IDR;
jpbarraca 0:41db3ed6754d 141 __asm volatile ( " NOP\nNOP\n");
jpbarraca 0:41db3ed6754d 142 buffer[snum - 3] = GPIOB->IDR;
jpbarraca 0:41db3ed6754d 143 __asm volatile ( " NOP\nNOP\n");
jpbarraca 0:41db3ed6754d 144 buffer[snum - 4] = GPIOB->IDR;
jpbarraca 0:41db3ed6754d 145 snum -= 4;
jpbarraca 0:41db3ed6754d 146 }
jpbarraca 0:41db3ed6754d 147 //5Mhz (Almost)
jpbarraca 0:41db3ed6754d 148 }else if(samplingPeriod == 200){
jpbarraca 0:41db3ed6754d 149 while(likely(snum >= 4)){
jpbarraca 0:41db3ed6754d 150 buffer[snum - 1] = GPIOB->IDR;
jpbarraca 0:41db3ed6754d 151 __asm volatile ( " NOP\nNOP\nNOP\nNOP\nNOP\nNOP\nNOP\nNOP\n");
jpbarraca 0:41db3ed6754d 152 __asm volatile ( " NOP\nNOP\nNOP\n");
jpbarraca 0:41db3ed6754d 153
jpbarraca 0:41db3ed6754d 154 buffer[snum - 2] = GPIOB->IDR;
jpbarraca 0:41db3ed6754d 155 __asm volatile ( " NOP\nNOP\nNOP\nNOP\nNOP\nNOP\nNOP\nNOP\n");
jpbarraca 0:41db3ed6754d 156 __asm volatile ( " NOP\nNOP\nNOP\n");
jpbarraca 0:41db3ed6754d 157
jpbarraca 0:41db3ed6754d 158 buffer[snum - 3] = GPIOB->IDR;
jpbarraca 0:41db3ed6754d 159 __asm volatile ( " NOP\nNOP\nNOP\nNOP\nNOP\nNOP\nNOP\nNOP\n");
jpbarraca 0:41db3ed6754d 160 __asm volatile ( " \nNOP\nNOP\nNOP\n");
jpbarraca 0:41db3ed6754d 161
jpbarraca 0:41db3ed6754d 162 buffer[snum - 4] = GPIOB->IDR;
jpbarraca 0:41db3ed6754d 163 __asm volatile ( " NOP\nNOP\nNOP\nNOP\nNOP\n");
jpbarraca 0:41db3ed6754d 164 snum -= 4;
jpbarraca 0:41db3ed6754d 165 }
jpbarraca 0:41db3ed6754d 166 //2Mhz (True)
jpbarraca 0:41db3ed6754d 167 }else if(samplingPeriod == 500){
jpbarraca 0:41db3ed6754d 168 while(likely(snum >= 4)){
jpbarraca 0:41db3ed6754d 169
jpbarraca 0:41db3ed6754d 170 buffer[snum - 1] = GPIOB->IDR;
jpbarraca 0:41db3ed6754d 171 __asm volatile ( " NOP\nNOP\nNOP\nNOP\nNOP\nNOP\nNOP\nNOP\nNOP\nNOP\nNOP\n");
jpbarraca 0:41db3ed6754d 172 __asm volatile ( " NOP\nNOP\nNOP\nNOP\nNOP\nNOP\nNOP\nNOP\nNOP\nNOP\nNOP\n");
jpbarraca 0:41db3ed6754d 173 __asm volatile ( " NOP\nNOP\nNOP\nNOP\nNOP\nNOP\nNOP\nNOP\nNOP\nNOP\nNOP\n");
jpbarraca 0:41db3ed6754d 174 __asm volatile ( " NOP\nNOP\nNOP\nNOP\n");
jpbarraca 0:41db3ed6754d 175
jpbarraca 0:41db3ed6754d 176 buffer[snum - 2] = GPIOB->IDR;
jpbarraca 0:41db3ed6754d 177 __asm volatile ( " NOP\nNOP\nNOP\nNOP\nNOP\nNOP\nNOP\nNOP\nNOP\nNOP\nNOP\n");
jpbarraca 0:41db3ed6754d 178 __asm volatile ( " NOP\nNOP\nNOP\nNOP\nNOP\nNOP\nNOP\nNOP\nNOP\nNOP\nNOP\n");
jpbarraca 0:41db3ed6754d 179 __asm volatile ( " NOP\nNOP\nNOP\nNOP\nNOP\nNOP\nNOP\nNOP\nNOP\nNOP\nNOP\n");
jpbarraca 0:41db3ed6754d 180 __asm volatile ( " NOP\nNOP\nNOP\n");
jpbarraca 0:41db3ed6754d 181
jpbarraca 0:41db3ed6754d 182 buffer[snum - 3] = GPIOB->IDR;
jpbarraca 0:41db3ed6754d 183 __asm volatile ( " NOP\nNOP\nNOP\nNOP\nNOP\nNOP\nNOP\nNOP\nNOP\nNOP\nNOP\n");
jpbarraca 0:41db3ed6754d 184 __asm volatile ( " NOP\nNOP\nNOP\nNOP\nNOP\nNOP\nNOP\nNOP\nNOP\nNOP\nNOP\n");
jpbarraca 0:41db3ed6754d 185 __asm volatile ( " NOP\nNOP\nNOP\nNOP\nNOP\nNOP\nNOP\nNOP\nNOP\nNOP\nNOP\n");
jpbarraca 0:41db3ed6754d 186 __asm volatile ( " NOP\nNOP\nNOP\n");
jpbarraca 0:41db3ed6754d 187
jpbarraca 0:41db3ed6754d 188 buffer[snum - 4] = GPIOB->IDR;
jpbarraca 0:41db3ed6754d 189 __asm volatile ( " NOP\nNOP\nNOP\nNOP\nNOP\nNOP\nNOP\nNOP\nNOP\nNOP\nNOP\n");
jpbarraca 0:41db3ed6754d 190 __asm volatile ( " NOP\nNOP\nNOP\nNOP\nNOP\nNOP\nNOP\nNOP\nNOP\nNOP\nNOP\n");
jpbarraca 0:41db3ed6754d 191 __asm volatile ( " NOP\nNOP\nNOP\nNOP\nNOP\nNOP\nNOP\nNOP\nNOP\n");
jpbarraca 0:41db3ed6754d 192 snum -= 4;
jpbarraca 0:41db3ed6754d 193 }
jpbarraca 0:41db3ed6754d 194 //1Mhz (True)
jpbarraca 0:41db3ed6754d 195 }else if(samplingPeriod == 1000){
jpbarraca 0:41db3ed6754d 196 while(likely(snum >= 4)){
jpbarraca 0:41db3ed6754d 197
jpbarraca 0:41db3ed6754d 198 buffer[snum - 1] = GPIOB->IDR;
jpbarraca 0:41db3ed6754d 199 __asm volatile ( " NOP\nNOP\nNOP\nNOP\nNOP\nNOP\nNOP\nNOP\nNOP\nNOP\nNOP\n");
jpbarraca 0:41db3ed6754d 200 __asm volatile ( " NOP\nNOP\nNOP\nNOP\nNOP\nNOP\nNOP\nNOP\nNOP\nNOP\nNOP\n");
jpbarraca 0:41db3ed6754d 201 __asm volatile ( " NOP\nNOP\nNOP\nNOP\nNOP\nNOP\nNOP\nNOP\nNOP\nNOP\nNOP\n");
jpbarraca 0:41db3ed6754d 202 __asm volatile ( " NOP\nNOP\nNOP\nNOP\nNOP\nNOP\nNOP\nNOP\nNOP");
jpbarraca 0:41db3ed6754d 203 __asm volatile ( " NOP\nNOP\nNOP\nNOP\nNOP\nNOP\nNOP\nNOP\nNOP\nNOP\nNOP\n");
jpbarraca 0:41db3ed6754d 204 __asm volatile ( " NOP\nNOP\nNOP\nNOP\nNOP\nNOP\nNOP\nNOP\nNOP\nNOP\nNOP\n");
jpbarraca 0:41db3ed6754d 205 __asm volatile ( " NOP\nNOP\nNOP\nNOP\nNOP\nNOP\nNOP\nNOP\nNOP\nNOP\nNOP\n");
jpbarraca 0:41db3ed6754d 206 __asm volatile ( " NOP\nNOP\nNOP\n");
jpbarraca 0:41db3ed6754d 207
jpbarraca 0:41db3ed6754d 208 buffer[snum - 2] = GPIOB->IDR;
jpbarraca 0:41db3ed6754d 209 __asm volatile ( " NOP\nNOP\nNOP\nNOP\nNOP\nNOP\nNOP\nNOP\nNOP\nNOP\nNOP\n");
jpbarraca 0:41db3ed6754d 210 __asm volatile ( " NOP\nNOP\nNOP\nNOP\nNOP\nNOP\nNOP\nNOP\nNOP\nNOP\nNOP\n");
jpbarraca 0:41db3ed6754d 211 __asm volatile ( " NOP\nNOP\nNOP\nNOP\nNOP\nNOP\nNOP\nNOP\nNOP\nNOP\nNOP\n");
jpbarraca 0:41db3ed6754d 212 __asm volatile ( " NOP\nNOP\nNOP\nNOP\nNOP\nNOP\nNOP\nNOP\nNOP");
jpbarraca 0:41db3ed6754d 213 __asm volatile ( " NOP\nNOP\nNOP\nNOP\nNOP\nNOP\nNOP\nNOP\nNOP\nNOP\nNOP\n");
jpbarraca 0:41db3ed6754d 214 __asm volatile ( " NOP\nNOP\nNOP\nNOP\nNOP\nNOP\nNOP\nNOP\nNOP\nNOP\nNOP\n");
jpbarraca 0:41db3ed6754d 215 __asm volatile ( " NOP\nNOP\nNOP\nNOP\nNOP\nNOP\nNOP\nNOP\nNOP\nNOP\nNOP\n");
jpbarraca 0:41db3ed6754d 216 __asm volatile ( " NOP\nNOP\nNOP\n");
jpbarraca 0:41db3ed6754d 217
jpbarraca 0:41db3ed6754d 218 buffer[snum - 3] = GPIOB->IDR;
jpbarraca 0:41db3ed6754d 219 __asm volatile ( " NOP\nNOP\nNOP\nNOP\nNOP\nNOP\nNOP\nNOP\nNOP\nNOP\nNOP\n");
jpbarraca 0:41db3ed6754d 220 __asm volatile ( " NOP\nNOP\nNOP\nNOP\nNOP\nNOP\nNOP\nNOP\nNOP\nNOP\nNOP\n");
jpbarraca 0:41db3ed6754d 221 __asm volatile ( " NOP\nNOP\nNOP\nNOP\nNOP\nNOP\nNOP\nNOP\nNOP\nNOP\nNOP\n");
jpbarraca 0:41db3ed6754d 222 __asm volatile ( " NOP\nNOP\nNOP\nNOP\nNOP\nNOP\nNOP\nNOP\nNOP");
jpbarraca 0:41db3ed6754d 223 __asm volatile ( " NOP\nNOP\nNOP\nNOP\nNOP\nNOP\nNOP\nNOP\nNOP\nNOP\nNOP\n");
jpbarraca 0:41db3ed6754d 224 __asm volatile ( " NOP\nNOP\nNOP\nNOP\nNOP\nNOP\nNOP\nNOP\nNOP\nNOP\nNOP\n");
jpbarraca 0:41db3ed6754d 225 __asm volatile ( " NOP\nNOP\nNOP\nNOP\nNOP\nNOP\nNOP\nNOP\nNOP\nNOP\nNOP\n");
jpbarraca 0:41db3ed6754d 226 __asm volatile ( " NOP\nNOP\nNOP\n");
jpbarraca 0:41db3ed6754d 227
jpbarraca 0:41db3ed6754d 228 buffer[snum - 4] = GPIOB->IDR;
jpbarraca 0:41db3ed6754d 229 __asm volatile ( " NOP\nNOP\nNOP\nNOP\nNOP\nNOP\nNOP\nNOP\nNOP\nNOP\nNOP\n");
jpbarraca 0:41db3ed6754d 230 __asm volatile ( " NOP\nNOP\nNOP\nNOP\nNOP\nNOP\nNOP\nNOP\nNOP\nNOP\nNOP\n");
jpbarraca 0:41db3ed6754d 231 __asm volatile ( " NOP\nNOP\nNOP\nNOP\nNOP\nNOP\nNOP\nNOP\nNOP\nNOP\nNOP\n");
jpbarraca 0:41db3ed6754d 232 __asm volatile ( " NOP\nNOP\nNOP\nNOP\nNOP\nNOP\nNOP\nNOP\nNOP");
jpbarraca 0:41db3ed6754d 233 __asm volatile ( " NOP\nNOP\nNOP\nNOP\nNOP\nNOP\nNOP\nNOP\nNOP\nNOP\nNOP\n");
jpbarraca 0:41db3ed6754d 234 __asm volatile ( " NOP\nNOP\nNOP\nNOP\nNOP\nNOP\nNOP\nNOP\nNOP\nNOP\nNOP\n");
jpbarraca 0:41db3ed6754d 235 __asm volatile ( " NOP\nNOP\nNOP\nNOP\nNOP\nNOP\nNOP\nNOP\nNOP\n");
jpbarraca 0:41db3ed6754d 236 snum -= 4;
jpbarraca 0:41db3ed6754d 237 }
jpbarraca 0:41db3ed6754d 238 //Others
jpbarraca 0:41db3ed6754d 239 }else {
jpbarraca 0:41db3ed6754d 240 uint32_t c = samplingPeriod/1000.0;
jpbarraca 0:41db3ed6754d 241 while(likely(snum >= 4)){
jpbarraca 0:41db3ed6754d 242 buffer[snum - 1] = GPIOB->IDR;
jpbarraca 0:41db3ed6754d 243 wait_us(c);
jpbarraca 0:41db3ed6754d 244 buffer[snum - 2] = GPIOB->IDR;
jpbarraca 0:41db3ed6754d 245 wait_us(c);
jpbarraca 0:41db3ed6754d 246 buffer[snum - 3] = GPIOB->IDR;
jpbarraca 0:41db3ed6754d 247 wait_us(c);
jpbarraca 0:41db3ed6754d 248 buffer[snum - 4] = GPIOB->IDR;
jpbarraca 0:41db3ed6754d 249 wait_us(c);
jpbarraca 0:41db3ed6754d 250 snum -= 4;
jpbarraca 0:41db3ed6754d 251 }
jpbarraca 0:41db3ed6754d 252 }
jpbarraca 0:41db3ed6754d 253 }
jpbarraca 0:41db3ed6754d 254
jpbarraca 0:41db3ed6754d 255 void Sampler::arm()
jpbarraca 0:41db3ed6754d 256 {
jpbarraca 0:41db3ed6754d 257 if (flags & FLAGS_TEST) {
jpbarraca 0:41db3ed6754d 258 PwmOut pwm0(PB_0);
jpbarraca 0:41db3ed6754d 259 pwm0.period_us(1);
jpbarraca 0:41db3ed6754d 260 pwm0.write(0.5);
jpbarraca 0:41db3ed6754d 261
jpbarraca 0:41db3ed6754d 262 PwmOut pwm1(PB_1);
jpbarraca 0:41db3ed6754d 263 pwm1.period_us(10);
jpbarraca 0:41db3ed6754d 264 pwm1.write(0.5);
jpbarraca 0:41db3ed6754d 265
jpbarraca 0:41db3ed6754d 266 PwmOut pwm2(PB_3);
jpbarraca 0:41db3ed6754d 267 pwm2.period_us(100);
jpbarraca 0:41db3ed6754d 268 pwm2.write(0.5);
jpbarraca 0:41db3ed6754d 269
jpbarraca 0:41db3ed6754d 270 PwmOut pwm3(PB_4);
jpbarraca 0:41db3ed6754d 271 pwm3.period_us(500);
jpbarraca 0:41db3ed6754d 272 pwm3.write(0.5);
jpbarraca 0:41db3ed6754d 273
jpbarraca 0:41db3ed6754d 274 PwmOut pwm4(PB_5);
jpbarraca 0:41db3ed6754d 275 pwm4.period_ms(1);
jpbarraca 0:41db3ed6754d 276 pwm4.write(0.5);
jpbarraca 0:41db3ed6754d 277
jpbarraca 0:41db3ed6754d 278 PwmOut pwm5(PB_6);
jpbarraca 0:41db3ed6754d 279 pwm5.period_ms(10);
jpbarraca 0:41db3ed6754d 280 pwm5.write(0.5);
jpbarraca 0:41db3ed6754d 281
jpbarraca 0:41db3ed6754d 282 PwmOut pwm6(PB_7);
jpbarraca 0:41db3ed6754d 283 pwm6.period_ms(100);
jpbarraca 0:41db3ed6754d 284 pwm6.write(0.5);
jpbarraca 0:41db3ed6754d 285
jpbarraca 0:41db3ed6754d 286 start();
jpbarraca 0:41db3ed6754d 287
jpbarraca 0:41db3ed6754d 288 pwm0.write(0);
jpbarraca 0:41db3ed6754d 289 pwm1.write(0);
jpbarraca 0:41db3ed6754d 290 pwm2.write(0);
jpbarraca 0:41db3ed6754d 291 pwm3.write(0);
jpbarraca 0:41db3ed6754d 292 pwm4.write(0);
jpbarraca 0:41db3ed6754d 293 pwm5.write(0);
jpbarraca 0:41db3ed6754d 294 pwm6.write(0);
jpbarraca 0:41db3ed6754d 295 }else{
jpbarraca 0:41db3ed6754d 296 start();
jpbarraca 0:41db3ed6754d 297 }
jpbarraca 0:41db3ed6754d 298
jpbarraca 0:41db3ed6754d 299 for(uint16_t i = 0;i < sampleNumber; i++)
jpbarraca 0:41db3ed6754d 300 {
jpbarraca 0:41db3ed6754d 301 pc->putc(buffer[i]);
jpbarraca 0:41db3ed6754d 302 while(!pc->writeable());
jpbarraca 0:41db3ed6754d 303 }
jpbarraca 0:41db3ed6754d 304 }
jpbarraca 0:41db3ed6754d 305
jpbarraca 0:41db3ed6754d 306 void Sampler::stop()
jpbarraca 0:41db3ed6754d 307 {
jpbarraca 0:41db3ed6754d 308 }