A bare to the bones, SUMP compatible, simple Logical Analyser. Mainly for the F401RE platform, but portable to many other platforms.
Sampler.cpp@0:41db3ed6754d, 2016-03-12 (annotated)
- Committer:
- jpbarraca
- Date:
- Sat Mar 12 00:18:53 2016 +0000
- Revision:
- 0:41db3ed6754d
v0.1.2.1
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) |
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 | } |