Gavin Whelan
/
LogicAlNucleoF411RE
Port of LogicalNucleo to F411RE
Fork of LogicAlNucleo by
Sampler.cpp@1:cf544bd09176, 2017-03-29 (annotated)
- Committer:
- gavwhela
- Date:
- Wed Mar 29 21:15:00 2017 +0000
- Revision:
- 1:cf544bd09176
- Parent:
- 0:41db3ed6754d
Changed NOP's for Nucleo F411RE and doubled buffer size for samples and serial rate for PC connection.
Who changed what in which revision?
User | Revision | Line number | New 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) |
gavwhela | 1:cf544bd09176 | 36 | #define BUFFER_SIZE 65536 |
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; |
gavwhela | 1:cf544bd09176 | 139 | __asm volatile ( " NOP\nNOP\nNOP\n"); |
jpbarraca | 0:41db3ed6754d | 140 | buffer[snum - 2] = GPIOB->IDR; |
gavwhela | 1:cf544bd09176 | 141 | __asm volatile ( " NOP\nNOP\nNOP\n"); |
gavwhela | 1:cf544bd09176 | 142 | buffer[snum - 3] = GPIOB->IDR; |
gavwhela | 1:cf544bd09176 | 143 | __asm volatile ( " NOP\nNOP\nNOP\n"); |
gavwhela | 1:cf544bd09176 | 144 | buffer[snum - 4] = GPIOB->IDR; |
gavwhela | 1:cf544bd09176 | 145 | __asm volatile ( " NOP\n"); |
jpbarraca | 0:41db3ed6754d | 146 | snum -= 4; |
jpbarraca | 0:41db3ed6754d | 147 | } |
jpbarraca | 0:41db3ed6754d | 148 | //5Mhz (Almost) |
jpbarraca | 0:41db3ed6754d | 149 | }else if(samplingPeriod == 200){ |
jpbarraca | 0:41db3ed6754d | 150 | while(likely(snum >= 4)){ |
jpbarraca | 0:41db3ed6754d | 151 | buffer[snum - 1] = GPIOB->IDR; |
gavwhela | 1:cf544bd09176 | 152 | __asm volatile ( " NOP\nNOP\nNOP\nNOP\nNOP\nNOP\nNOP\nNOP\nNOP\nNOP\n"); |
jpbarraca | 0:41db3ed6754d | 153 | __asm volatile ( " NOP\nNOP\nNOP\n"); |
jpbarraca | 0:41db3ed6754d | 154 | |
jpbarraca | 0:41db3ed6754d | 155 | buffer[snum - 2] = GPIOB->IDR; |
gavwhela | 1:cf544bd09176 | 156 | __asm volatile ( " NOP\nNOP\nNOP\nNOP\nNOP\nNOP\nNOP\nNOP\nNOP\nNOP\n"); |
jpbarraca | 0:41db3ed6754d | 157 | __asm volatile ( " NOP\nNOP\nNOP\n"); |
jpbarraca | 0:41db3ed6754d | 158 | |
jpbarraca | 0:41db3ed6754d | 159 | buffer[snum - 3] = GPIOB->IDR; |
gavwhela | 1:cf544bd09176 | 160 | __asm volatile ( " NOP\nNOP\nNOP\nNOP\nNOP\nNOP\nNOP\nNOP\nNOP\nNOP\n"); |
gavwhela | 1:cf544bd09176 | 161 | __asm volatile ( " NOP\nNOP\nNOP\n"); |
jpbarraca | 0:41db3ed6754d | 162 | |
jpbarraca | 0:41db3ed6754d | 163 | buffer[snum - 4] = GPIOB->IDR; |
gavwhela | 1:cf544bd09176 | 164 | __asm volatile ( " NOP\nNOP\nNOP\nNOP\nNOP\nNOP\nNOP\nNOP\n"); |
jpbarraca | 0:41db3ed6754d | 165 | snum -= 4; |
jpbarraca | 0:41db3ed6754d | 166 | } |
jpbarraca | 0:41db3ed6754d | 167 | //2Mhz (True) |
jpbarraca | 0:41db3ed6754d | 168 | }else if(samplingPeriod == 500){ |
jpbarraca | 0:41db3ed6754d | 169 | while(likely(snum >= 4)){ |
jpbarraca | 0:41db3ed6754d | 170 | |
jpbarraca | 0:41db3ed6754d | 171 | buffer[snum - 1] = GPIOB->IDR; |
gavwhela | 1:cf544bd09176 | 172 | __asm volatile ( " NOP\nNOP\nNOP\nNOP\nNOP\nNOP\nNOP\nNOP\nNOP\nNOP\n"); |
gavwhela | 1:cf544bd09176 | 173 | __asm volatile ( " NOP\nNOP\nNOP\nNOP\nNOP\nNOP\nNOP\nNOP\nNOP\nNOP\n"); |
gavwhela | 1:cf544bd09176 | 174 | __asm volatile ( " NOP\nNOP\nNOP\nNOP\nNOP\nNOP\nNOP\nNOP\nNOP\nNOP\n"); |
gavwhela | 1:cf544bd09176 | 175 | __asm volatile ( " NOP\nNOP\nNOP\nNOP\nNOP\nNOP\nNOP\nNOP\nNOP\nNOP\n"); |
gavwhela | 1:cf544bd09176 | 176 | __asm volatile ( " NOP\nNOP\nNOP\n"); |
jpbarraca | 0:41db3ed6754d | 177 | |
jpbarraca | 0:41db3ed6754d | 178 | buffer[snum - 2] = GPIOB->IDR; |
gavwhela | 1:cf544bd09176 | 179 | __asm volatile ( " NOP\nNOP\nNOP\nNOP\nNOP\nNOP\nNOP\nNOP\nNOP\nNOP\n"); |
gavwhela | 1:cf544bd09176 | 180 | __asm volatile ( " NOP\nNOP\nNOP\nNOP\nNOP\nNOP\nNOP\nNOP\nNOP\nNOP\n"); |
gavwhela | 1:cf544bd09176 | 181 | __asm volatile ( " NOP\nNOP\nNOP\nNOP\nNOP\nNOP\nNOP\nNOP\nNOP\nNOP\n"); |
gavwhela | 1:cf544bd09176 | 182 | __asm volatile ( " NOP\nNOP\nNOP\nNOP\nNOP\nNOP\nNOP\nNOP\nNOP\nNOP\n"); |
jpbarraca | 0:41db3ed6754d | 183 | __asm volatile ( " NOP\nNOP\nNOP\n"); |
jpbarraca | 0:41db3ed6754d | 184 | |
jpbarraca | 0:41db3ed6754d | 185 | buffer[snum - 3] = GPIOB->IDR; |
gavwhela | 1:cf544bd09176 | 186 | __asm volatile ( " NOP\nNOP\nNOP\nNOP\nNOP\nNOP\nNOP\nNOP\nNOP\nNOP\n"); |
gavwhela | 1:cf544bd09176 | 187 | __asm volatile ( " NOP\nNOP\nNOP\nNOP\nNOP\nNOP\nNOP\nNOP\nNOP\nNOP\n"); |
gavwhela | 1:cf544bd09176 | 188 | __asm volatile ( " NOP\nNOP\nNOP\nNOP\nNOP\nNOP\nNOP\nNOP\nNOP\nNOP\n"); |
gavwhela | 1:cf544bd09176 | 189 | __asm volatile ( " NOP\nNOP\nNOP\nNOP\nNOP\nNOP\nNOP\nNOP\nNOP\nNOP\n"); |
jpbarraca | 0:41db3ed6754d | 190 | __asm volatile ( " NOP\nNOP\nNOP\n"); |
jpbarraca | 0:41db3ed6754d | 191 | |
jpbarraca | 0:41db3ed6754d | 192 | buffer[snum - 4] = GPIOB->IDR; |
gavwhela | 1:cf544bd09176 | 193 | __asm volatile ( " NOP\nNOP\nNOP\nNOP\nNOP\nNOP\nNOP\nNOP\nNOP\nNOP\n"); |
gavwhela | 1:cf544bd09176 | 194 | __asm volatile ( " NOP\nNOP\nNOP\nNOP\nNOP\nNOP\nNOP\nNOP\nNOP\nNOP\n"); |
gavwhela | 1:cf544bd09176 | 195 | __asm volatile ( " NOP\nNOP\nNOP\nNOP\nNOP\nNOP\nNOP\nNOP\nNOP\nNOP\n"); |
gavwhela | 1:cf544bd09176 | 196 | __asm volatile ( " NOP\nNOP\nNOP\nNOP\nNOP\n"); |
jpbarraca | 0:41db3ed6754d | 197 | snum -= 4; |
jpbarraca | 0:41db3ed6754d | 198 | } |
jpbarraca | 0:41db3ed6754d | 199 | //1Mhz (True) |
jpbarraca | 0:41db3ed6754d | 200 | }else if(samplingPeriod == 1000){ |
jpbarraca | 0:41db3ed6754d | 201 | while(likely(snum >= 4)){ |
jpbarraca | 0:41db3ed6754d | 202 | |
jpbarraca | 0:41db3ed6754d | 203 | buffer[snum - 1] = GPIOB->IDR; |
gavwhela | 1:cf544bd09176 | 204 | __asm volatile ( " NOP\nNOP\nNOP\nNOP\nNOP\nNOP\nNOP\nNOP\nNOP\nNOP\n"); |
gavwhela | 1:cf544bd09176 | 205 | __asm volatile ( " NOP\nNOP\nNOP\nNOP\nNOP\nNOP\nNOP\nNOP\nNOP\nNOP\n"); |
gavwhela | 1:cf544bd09176 | 206 | __asm volatile ( " NOP\nNOP\nNOP\nNOP\nNOP\nNOP\nNOP\nNOP\nNOP\nNOP\n"); |
gavwhela | 1:cf544bd09176 | 207 | __asm volatile ( " NOP\nNOP\nNOP\nNOP\nNOP\nNOP\nNOP\nNOP\nNOP\nNOP\n"); |
gavwhela | 1:cf544bd09176 | 208 | __asm volatile ( " NOP\nNOP\nNOP\nNOP\nNOP\nNOP\nNOP\nNOP\nNOP\nNOP\n"); |
gavwhela | 1:cf544bd09176 | 209 | __asm volatile ( " NOP\nNOP\nNOP\nNOP\nNOP\nNOP\nNOP\nNOP\nNOP\nNOP\n"); |
gavwhela | 1:cf544bd09176 | 210 | __asm volatile ( " NOP\nNOP\nNOP\nNOP\nNOP\nNOP\nNOP\nNOP\nNOP\nNOP\n"); |
gavwhela | 1:cf544bd09176 | 211 | __asm volatile ( " NOP\nNOP\nNOP\nNOP\nNOP\nNOP\nNOP\nNOP\nNOP\nNOP\n"); |
gavwhela | 1:cf544bd09176 | 212 | __asm volatile ( " NOP\nNOP\nNOP\nNOP\nNOP\nNOP\nNOP\nNOP\nNOP\nNOP\n"); |
jpbarraca | 0:41db3ed6754d | 213 | |
jpbarraca | 0:41db3ed6754d | 214 | buffer[snum - 2] = GPIOB->IDR; |
gavwhela | 1:cf544bd09176 | 215 | __asm volatile ( " NOP\nNOP\nNOP\nNOP\nNOP\nNOP\nNOP\nNOP\nNOP\nNOP\n"); |
gavwhela | 1:cf544bd09176 | 216 | __asm volatile ( " NOP\nNOP\nNOP\nNOP\nNOP\nNOP\nNOP\nNOP\nNOP\nNOP\n"); |
gavwhela | 1:cf544bd09176 | 217 | __asm volatile ( " NOP\nNOP\nNOP\nNOP\nNOP\nNOP\nNOP\nNOP\nNOP\nNOP\n"); |
gavwhela | 1:cf544bd09176 | 218 | __asm volatile ( " NOP\nNOP\nNOP\nNOP\nNOP\nNOP\nNOP\nNOP\nNOP\nNOP\n"); |
gavwhela | 1:cf544bd09176 | 219 | __asm volatile ( " NOP\nNOP\nNOP\nNOP\nNOP\nNOP\nNOP\nNOP\nNOP\nNOP\n"); |
gavwhela | 1:cf544bd09176 | 220 | __asm volatile ( " NOP\nNOP\nNOP\nNOP\nNOP\nNOP\nNOP\nNOP\nNOP\nNOP\n"); |
gavwhela | 1:cf544bd09176 | 221 | __asm volatile ( " NOP\nNOP\nNOP\nNOP\nNOP\nNOP\nNOP\nNOP\nNOP\nNOP\n"); |
gavwhela | 1:cf544bd09176 | 222 | __asm volatile ( " NOP\nNOP\nNOP\nNOP\nNOP\nNOP\nNOP\nNOP\nNOP\nNOP\n"); |
gavwhela | 1:cf544bd09176 | 223 | __asm volatile ( " NOP\nNOP\nNOP\nNOP\nNOP\nNOP\nNOP\nNOP\nNOP\nNOP\n"); |
jpbarraca | 0:41db3ed6754d | 224 | |
jpbarraca | 0:41db3ed6754d | 225 | buffer[snum - 3] = GPIOB->IDR; |
gavwhela | 1:cf544bd09176 | 226 | __asm volatile ( " NOP\nNOP\nNOP\nNOP\nNOP\nNOP\nNOP\nNOP\nNOP\nNOP\n"); |
gavwhela | 1:cf544bd09176 | 227 | __asm volatile ( " NOP\nNOP\nNOP\nNOP\nNOP\nNOP\nNOP\nNOP\nNOP\nNOP\n"); |
gavwhela | 1:cf544bd09176 | 228 | __asm volatile ( " NOP\nNOP\nNOP\nNOP\nNOP\nNOP\nNOP\nNOP\nNOP\nNOP\n"); |
gavwhela | 1:cf544bd09176 | 229 | __asm volatile ( " NOP\nNOP\nNOP\nNOP\nNOP\nNOP\nNOP\nNOP\nNOP\nNOP\n"); |
gavwhela | 1:cf544bd09176 | 230 | __asm volatile ( " NOP\nNOP\nNOP\nNOP\nNOP\nNOP\nNOP\nNOP\nNOP\nNOP\n"); |
gavwhela | 1:cf544bd09176 | 231 | __asm volatile ( " NOP\nNOP\nNOP\nNOP\nNOP\nNOP\nNOP\nNOP\nNOP\nNOP\n"); |
gavwhela | 1:cf544bd09176 | 232 | __asm volatile ( " NOP\nNOP\nNOP\nNOP\nNOP\nNOP\nNOP\nNOP\nNOP\nNOP\n"); |
gavwhela | 1:cf544bd09176 | 233 | __asm volatile ( " NOP\nNOP\nNOP\nNOP\nNOP\nNOP\nNOP\nNOP\nNOP\nNOP\n"); |
gavwhela | 1:cf544bd09176 | 234 | __asm volatile ( " NOP\nNOP\nNOP\nNOP\nNOP\nNOP\nNOP\nNOP\nNOP\nNOP\n"); |
jpbarraca | 0:41db3ed6754d | 235 | |
jpbarraca | 0:41db3ed6754d | 236 | buffer[snum - 4] = GPIOB->IDR; |
gavwhela | 1:cf544bd09176 | 237 | __asm volatile ( " NOP\nNOP\nNOP\nNOP\nNOP\nNOP\nNOP\nNOP\nNOP\nNOP\n"); |
gavwhela | 1:cf544bd09176 | 238 | __asm volatile ( " NOP\nNOP\nNOP\nNOP\nNOP\nNOP\nNOP\nNOP\nNOP\nNOP\n"); |
gavwhela | 1:cf544bd09176 | 239 | __asm volatile ( " NOP\nNOP\nNOP\nNOP\nNOP\nNOP\nNOP\nNOP\nNOP\nNOP\n"); |
gavwhela | 1:cf544bd09176 | 240 | __asm volatile ( " NOP\nNOP\nNOP\nNOP\nNOP\nNOP\nNOP\nNOP\nNOP\nNOP\n"); |
gavwhela | 1:cf544bd09176 | 241 | __asm volatile ( " NOP\nNOP\nNOP\nNOP\nNOP\nNOP\nNOP\nNOP\nNOP\nNOP\n"); |
gavwhela | 1:cf544bd09176 | 242 | __asm volatile ( " NOP\nNOP\nNOP\nNOP\nNOP\nNOP\nNOP\nNOP\nNOP\nNOP\n"); |
gavwhela | 1:cf544bd09176 | 243 | __asm volatile ( " NOP\nNOP\nNOP\nNOP\nNOP\nNOP\nNOP\nNOP\nNOP\nNOP\n"); |
gavwhela | 1:cf544bd09176 | 244 | __asm volatile ( " NOP\nNOP\nNOP\nNOP\nNOP\nNOP\nNOP\nNOP\nNOP\nNOP\n"); |
gavwhela | 1:cf544bd09176 | 245 | __asm volatile ( " NOP\nNOP\nNOP\nNOP\n"); |
jpbarraca | 0:41db3ed6754d | 246 | snum -= 4; |
jpbarraca | 0:41db3ed6754d | 247 | } |
jpbarraca | 0:41db3ed6754d | 248 | //Others |
jpbarraca | 0:41db3ed6754d | 249 | }else { |
jpbarraca | 0:41db3ed6754d | 250 | uint32_t c = samplingPeriod/1000.0; |
jpbarraca | 0:41db3ed6754d | 251 | while(likely(snum >= 4)){ |
jpbarraca | 0:41db3ed6754d | 252 | buffer[snum - 1] = GPIOB->IDR; |
jpbarraca | 0:41db3ed6754d | 253 | wait_us(c); |
jpbarraca | 0:41db3ed6754d | 254 | buffer[snum - 2] = GPIOB->IDR; |
jpbarraca | 0:41db3ed6754d | 255 | wait_us(c); |
jpbarraca | 0:41db3ed6754d | 256 | buffer[snum - 3] = GPIOB->IDR; |
jpbarraca | 0:41db3ed6754d | 257 | wait_us(c); |
jpbarraca | 0:41db3ed6754d | 258 | buffer[snum - 4] = GPIOB->IDR; |
jpbarraca | 0:41db3ed6754d | 259 | wait_us(c); |
jpbarraca | 0:41db3ed6754d | 260 | snum -= 4; |
jpbarraca | 0:41db3ed6754d | 261 | } |
jpbarraca | 0:41db3ed6754d | 262 | } |
jpbarraca | 0:41db3ed6754d | 263 | } |
jpbarraca | 0:41db3ed6754d | 264 | |
jpbarraca | 0:41db3ed6754d | 265 | void Sampler::arm() |
jpbarraca | 0:41db3ed6754d | 266 | { |
jpbarraca | 0:41db3ed6754d | 267 | if (flags & FLAGS_TEST) { |
jpbarraca | 0:41db3ed6754d | 268 | PwmOut pwm0(PB_0); |
jpbarraca | 0:41db3ed6754d | 269 | pwm0.period_us(1); |
jpbarraca | 0:41db3ed6754d | 270 | pwm0.write(0.5); |
jpbarraca | 0:41db3ed6754d | 271 | |
jpbarraca | 0:41db3ed6754d | 272 | PwmOut pwm1(PB_1); |
jpbarraca | 0:41db3ed6754d | 273 | pwm1.period_us(10); |
jpbarraca | 0:41db3ed6754d | 274 | pwm1.write(0.5); |
jpbarraca | 0:41db3ed6754d | 275 | |
jpbarraca | 0:41db3ed6754d | 276 | PwmOut pwm2(PB_3); |
jpbarraca | 0:41db3ed6754d | 277 | pwm2.period_us(100); |
jpbarraca | 0:41db3ed6754d | 278 | pwm2.write(0.5); |
jpbarraca | 0:41db3ed6754d | 279 | |
jpbarraca | 0:41db3ed6754d | 280 | PwmOut pwm3(PB_4); |
jpbarraca | 0:41db3ed6754d | 281 | pwm3.period_us(500); |
jpbarraca | 0:41db3ed6754d | 282 | pwm3.write(0.5); |
jpbarraca | 0:41db3ed6754d | 283 | |
jpbarraca | 0:41db3ed6754d | 284 | PwmOut pwm4(PB_5); |
jpbarraca | 0:41db3ed6754d | 285 | pwm4.period_ms(1); |
jpbarraca | 0:41db3ed6754d | 286 | pwm4.write(0.5); |
jpbarraca | 0:41db3ed6754d | 287 | |
jpbarraca | 0:41db3ed6754d | 288 | PwmOut pwm5(PB_6); |
jpbarraca | 0:41db3ed6754d | 289 | pwm5.period_ms(10); |
jpbarraca | 0:41db3ed6754d | 290 | pwm5.write(0.5); |
jpbarraca | 0:41db3ed6754d | 291 | |
jpbarraca | 0:41db3ed6754d | 292 | PwmOut pwm6(PB_7); |
jpbarraca | 0:41db3ed6754d | 293 | pwm6.period_ms(100); |
jpbarraca | 0:41db3ed6754d | 294 | pwm6.write(0.5); |
jpbarraca | 0:41db3ed6754d | 295 | |
jpbarraca | 0:41db3ed6754d | 296 | start(); |
jpbarraca | 0:41db3ed6754d | 297 | |
jpbarraca | 0:41db3ed6754d | 298 | pwm0.write(0); |
jpbarraca | 0:41db3ed6754d | 299 | pwm1.write(0); |
jpbarraca | 0:41db3ed6754d | 300 | pwm2.write(0); |
jpbarraca | 0:41db3ed6754d | 301 | pwm3.write(0); |
jpbarraca | 0:41db3ed6754d | 302 | pwm4.write(0); |
jpbarraca | 0:41db3ed6754d | 303 | pwm5.write(0); |
jpbarraca | 0:41db3ed6754d | 304 | pwm6.write(0); |
jpbarraca | 0:41db3ed6754d | 305 | }else{ |
jpbarraca | 0:41db3ed6754d | 306 | start(); |
jpbarraca | 0:41db3ed6754d | 307 | } |
jpbarraca | 0:41db3ed6754d | 308 | |
gavwhela | 1:cf544bd09176 | 309 | for(uint32_t i = 0;i < sampleNumber; i++) |
jpbarraca | 0:41db3ed6754d | 310 | { |
jpbarraca | 0:41db3ed6754d | 311 | pc->putc(buffer[i]); |
jpbarraca | 0:41db3ed6754d | 312 | while(!pc->writeable()); |
jpbarraca | 0:41db3ed6754d | 313 | } |
jpbarraca | 0:41db3ed6754d | 314 | } |
jpbarraca | 0:41db3ed6754d | 315 | |
jpbarraca | 0:41db3ed6754d | 316 | void Sampler::stop() |
jpbarraca | 0:41db3ed6754d | 317 | { |
jpbarraca | 0:41db3ed6754d | 318 | } |