Port of LogicalNucleo to F411RE

Dependencies:   mbed

Fork of LogicAlNucleo by joao barraca

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?

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)
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 }