diff options
| author | Scott Shawcroft <scott@tannewt.org> | 2018-03-28 14:24:32 -0700 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2018-03-28 14:24:32 -0700 |
| commit | 676ed4e1994e704b998deab11e25701954cdac3b (patch) | |
| tree | 5d6452025d5f14997a0d1c89f23c97b8b0ade0e2 | |
| parent | 7b2215a27c82d1522bd72b114e21ca48edc27c9b (diff) | |
| parent | 19b0b414e6091f75991be178f0ff2accd6e11124 (diff) | |
Merge pull request #724 from tannewt/fix_freetouch_submodule
Remove freetouch files that were accidentally checked in and
| -rw-r--r-- | .gitmodules | 6 | ||||
| m--------- | ports/atmel-samd/freetouch | 0 | ||||
| -rw-r--r-- | ports/atmel-samd/freetouch/Adafruit_FreeTouch.cpp | 280 | ||||
| -rw-r--r-- | ports/atmel-samd/freetouch/Adafruit_FreeTouch.h | 37 | ||||
| -rw-r--r-- | ports/atmel-samd/freetouch/README.md | 2 | ||||
| -rw-r--r-- | ports/atmel-samd/freetouch/adafruit_ptc.c | 148 | ||||
| -rw-r--r-- | ports/atmel-samd/freetouch/adafruit_ptc.h | 109 | ||||
| -rw-r--r-- | ports/atmel-samd/freetouch/examples/freetouch/freetouch.ino | 56 | ||||
| -rw-r--r-- | ports/atmel-samd/freetouch/samd21_ptc_component.h | 350 |
9 files changed, 3 insertions, 985 deletions
diff --git a/.gitmodules b/.gitmodules index a7f31837a..ec0b01e33 100644 --- a/.gitmodules +++ b/.gitmodules @@ -33,9 +33,6 @@ path = lib/stm32lib url = https://github.com/micropython/stm32lib branch = work-F4-1.13.1+F7-1.5.0+L4-1.3.0 -[submodule "freetouch2"] - path = ports/atmel-samd/freetouch - url = https://github.com/adafruit/Adafruit_FreeTouch.git [submodule "atmel-samd/asf4"] path = ports/atmel-samd/asf4 url = https://github.com/adafruit/asf4.git @@ -46,3 +43,6 @@ [submodule "lib/nrfutil"] path = lib/nrfutil url = https://github.com/adafruit/nRF52_nrfutil +[submodule "ports/atmel-samd/freetouch"] + path = ports/atmel-samd/freetouch + url = https://github.com/adafruit/Adafruit_FreeTouch.git diff --git a/ports/atmel-samd/freetouch b/ports/atmel-samd/freetouch new file mode 160000 +Subproject c3deba11eb4be397ec719cfbfba1abcaecda2c0 diff --git a/ports/atmel-samd/freetouch/Adafruit_FreeTouch.cpp b/ports/atmel-samd/freetouch/Adafruit_FreeTouch.cpp deleted file mode 100644 index 45cac3867..000000000 --- a/ports/atmel-samd/freetouch/Adafruit_FreeTouch.cpp +++ /dev/null @@ -1,280 +0,0 @@ -/* - * FreeTouch, a QTouch-compatible library - tested on ATSAMD21 only! - * The MIT License (MIT) - * - * Copyright (c) 2017 Limor 'ladyada' Fried for Adafruit Industries - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -#include "Adafruit_FreeTouch.h" - -#include "adafruit_ptc.h" - -Adafruit_FreeTouch::Adafruit_FreeTouch(int p, oversample_t f, series_resistor_t r, freq_mode_t fh) { - adafruit_ptc_get_config_default(&config); - pin = p; - uint8_t port_offset = 0; - if (g_APinDescription[pin].ulPort == PORTB) { - port_offset += 32; - } - config.pin = port_offset + g_APinDescription[pin].ulPin; - config.yline = getYLine(); // determine the Y0-15 # - config.oversample = f; - config.seriesres = r; - config.freqhop = fh; -} - -bool Adafruit_FreeTouch::begin(void) { - if (config.yline == -1) { // not all pins have Y line - return false; - } - - /* Setup and enable generic clock source for PTC module. - struct system_gclk_chan_config gclk_chan_conf; - system_gclk_chan_get_config_defaults(&gclk_chan_conf); - */ - - uint8_t channel = PTC_GCLK_ID; - uint8_t source_generator = 1; - - // original line: system_gclk_chan_set_config(PTC_GCLK_ID, &gclk_chan_conf); - uint32_t new_clkctrl_config = (channel << GCLK_CLKCTRL_ID_Pos); // from gclk.c - - // original line: gclk_chan_conf.source_generator = GCLK_GENERATOR_1; - /* Select the desired generic clock generator */ - new_clkctrl_config |= source_generator << GCLK_CLKCTRL_GEN_Pos; // from gclk.c - - /* Disable generic clock channel */ - // original line: system_gclk_chan_disable(channel); - noInterrupts(); - - /* Select the requested generator channel */ - *((uint8_t*)&GCLK->CLKCTRL.reg) = channel; - - /* Sanity check WRTLOCK */ - //Assert(!GCLK->CLKCTRL.bit.WRTLOCK); - - /* Switch to known-working source so that the channel can be disabled */ - uint32_t prev_gen_id = GCLK->CLKCTRL.bit.GEN; - GCLK->CLKCTRL.bit.GEN = 0; - - /* Disable the generic clock */ - GCLK->CLKCTRL.reg &= ~GCLK_CLKCTRL_CLKEN; - while (GCLK->CLKCTRL.reg & GCLK_CLKCTRL_CLKEN) { - /* Wait for clock to become disabled */ - } - - /* Restore previous configured clock generator */ - GCLK->CLKCTRL.bit.GEN = prev_gen_id; - - //system_interrupt_leave_critical_section(); - interrupts(); - - /* Write the new configuration */ - GCLK->CLKCTRL.reg = new_clkctrl_config; - - // original line: system_gclk_chan_enable(PTC_GCLK_ID); - *((uint8_t*)&GCLK->CLKCTRL.reg) = channel; - GCLK->CLKCTRL.reg |= GCLK_CLKCTRL_CLKEN; /* Enable the generic clock */ - - - // original line: system_apb_clock_set_mask(SYSTEM_CLOCK_APB_APBC, PM_APBCMASK_PTC); - PM->APBCMASK.reg |= PM_APBCMASK_PTC; - - adafruit_ptc_init(PTC, &config); - - return true; -} - -uint16_t Adafruit_FreeTouch::measure(void) { - uint16_t m; - - m = measureRaw(); - if (m == -1) return -1; - - // normalize the signal - switch (config.oversample) { - case OVERSAMPLE_1: return m; - case OVERSAMPLE_2: return m/2; - case OVERSAMPLE_4: return m/4; - case OVERSAMPLE_8: return m/8; - case OVERSAMPLE_16: return m/16; - case OVERSAMPLE_32: return m/32; - case OVERSAMPLE_64: return m/64; - } - - return -1; // shouldn't reach here but fail if we do! -} - -uint16_t Adafruit_FreeTouch::measureRaw(void) { - adafruit_ptc_start_conversion(PTC, &config); - - while (!adafruit_ptc_is_conversion_finished(PTC)) { - yield(); - } - - return adafruit_ptc_get_conversion_result(PTC); -} - -/*********************************** low level config **/ - -int Adafruit_FreeTouch::getYLine(void) { - int p = g_APinDescription[pin].ulPin; - if (g_APinDescription[pin].ulPort == PORTA) { - if ((p >= 2) && (p <= 7)) { - return (p - 2); - } - } - if (g_APinDescription[pin].ulPort == PORTB) { - if ((p >= 0) && (p <= 9)) { - return (p + 6); - } - } - - // not valid - return -1; -} - -void Adafruit_FreeTouch::setCompCap(uint16_t cc) { - config.compcap = cc & 0x3FFF; -} - -void Adafruit_FreeTouch::setIntCap(uint8_t ic) { - config.intcap = ic & 0x3F; -} - -void Adafruit_FreeTouch::setOversampling(oversample_t lvl) { - config.oversample = lvl; // back it up for later -} - -void Adafruit_FreeTouch::setSeriesResistor(series_resistor_t res) { - config.seriesres = res; -} - -void Adafruit_FreeTouch::setFreqHopping(freq_mode_t fh, freq_hop_t hs) { - config.freqhop = fh; - config.hops = hs; -} - -/**************************** DEBUGGING ASSIST *************************/ -void Adafruit_FreeTouch::snapshotRegsAndPrint(uint32_t base, uint8_t numregs) { - volatile uint32_t addr = base; - uint8_t datas[255]; - - digitalWrite(LED_BUILTIN, HIGH); - for (uint8_t i=0; i<numregs; i++) { - datas[i] = *(uint8_t *)(addr+i); - } - digitalWrite(LED_BUILTIN, LOW); - printPTCregs(base, datas, numregs); - - for (uint8_t i=0; i<numregs; i++) { - // Serial.print("$"); Serial.print(addr+i, HEX); Serial.print("\t0x"); - // printHex(datas[i]); Serial.println(); - } - -} - -// Print a hex with leading zero -void Adafruit_FreeTouch::printHex(uint8_t h, boolean newline) { - if (h < 0x10) Serial.print("0"); - Serial.print(h, HEX); - if (newline) Serial.println(); -} - -void Adafruit_FreeTouch::printPTCregs(uint32_t base, uint8_t *regs, uint8_t num) { - Serial.println("--------------------------------------------------------"); - for (uint8_t i=0; i<num; i++) { - switch (i + base) { - case 0x41004430: Serial.print("0x"); Serial.print(i+base, HEX); - Serial.print(" PMUX0:\t\t0x"); printHex(regs[i], true); break; - case 0x41004431: Serial.print("0x"); Serial.print(i+base, HEX); - Serial.print(" PMUX1:\t\t0x"); printHex(regs[i], true); break; - case 0x41004432: Serial.print("0x"); Serial.print(i+base, HEX); - Serial.print(" PMUX2:\t\t0x"); printHex(regs[i], true); break; - case 0x41004433: Serial.print("0x"); Serial.print(i+base, HEX); - Serial.print(" PMUX3:\t\t0x"); printHex(regs[i], true); break; - - case 0x41004440: Serial.print("0x"); Serial.print(i+base, HEX); - Serial.print(" PCFG0:\t\t0x"); printHex(regs[i], true); break; - case 0x41004441: Serial.print("0x"); Serial.print(i+base, HEX); - Serial.print(" PCFG1:\t\t0x"); printHex(regs[i], true); break; - case 0x41004442: Serial.print("0x"); Serial.print(i+base, HEX); - Serial.print(" PCFG2:\t\t0x"); printHex(regs[i], true); break; - case 0x41004443: Serial.print("0x"); Serial.print(i+base, HEX); - Serial.print(" PCFG3:\t\t0x"); printHex(regs[i], true); break; - case 0x41004444: Serial.print("0x"); Serial.print(i+base, HEX); - Serial.print(" PCFG4:\t\t0x"); printHex(regs[i], true); break; - - - case 0x42004C00: Serial.print("0x"); Serial.print(i+base, HEX); - Serial.print(" Control A:\t\t0x"); printHex(regs[i], true); break; - case 0x42004C01: Serial.print("0x"); Serial.print(i+base, HEX); - Serial.print(" Sync: \t\t0x"); printHex(regs[i], true); break; - case 0x42004C04: Serial.print("0x"); Serial.print(i+base, HEX); - Serial.print(" Prescaler:\t\t0x"); printHex(regs[i], true); break; - case 0x42004C05: Serial.print("0x"); Serial.print(i+base, HEX); - Serial.print(" Init: \t\t0x"); printHex(regs[i], true); break; - case 0x42004C08: Serial.print("0x"); Serial.print(i+base, HEX); - Serial.print(" Disable Irq:\t\t0x"); printHex(regs[i], true); break; - case 0x42004C09: Serial.print("0x"); Serial.print(i+base, HEX); - Serial.print(" Enable Irq:\t\t0x"); printHex(regs[i], true); break; - case 0x42004C0A: Serial.print("0x"); Serial.print(i+base, HEX); - Serial.print(" Flags: \t\t0x"); printHex(regs[i], true); break; - case 0x42004C0C: Serial.print("0x"); Serial.print(i+base, HEX); - Serial.print(" Freq Cntl:\t\t0x"); printHex(regs[i], true); break; - case 0x42004C0D: Serial.print("0x"); Serial.print(i+base, HEX); - Serial.print(" Conv Cntl:\t\t0x"); printHex(regs[i], true); break; - case 0x42004C10: Serial.print("0x"); Serial.print(i+base, HEX); - Serial.print(" Y Select1:\t\t0x"); printHex(regs[i], true); break; - case 0x42004C11: Serial.print("0x"); Serial.print(i+0x42004C00, HEX); - Serial.print(" Y Select2:\t\t0x"); printHex(regs[i], true); break; -/* - case 0x42004C12: Serial.print("0x"); Serial.print(i+0x42004C00, HEX); - Serial.print(" X Select1:\t\t0x"); printHex(regs[i], true); break; - case 0x42004C13: Serial.print("0x"); Serial.print(i+0x42004C00, HEX); - Serial.print(" X Select2:\t\t0x"); printHex(regs[i], true); break; -*/ - case 0x42004C14: Serial.print("0x"); Serial.print(i+base, HEX); - Serial.print(" Y Enable1:\t\t0x"); printHex(regs[i], true); break; - case 0x42004C15: Serial.print("0x"); Serial.print(i+0x42004C00, HEX); - Serial.print(" Y Enable2:\t\t0x"); printHex(regs[i], true); break; -/* - case 0x42004C16: Serial.print("0x"); Serial.print(i+0x42004C00, HEX); - Serial.print(" X Enable1:\t\t0x"); printHex(regs[i], true); break; - case 0x42004C17: Serial.print("0x"); Serial.print(i+0x42004C00, HEX); - Serial.print(" X Enable2:\t\t0x"); printHex(regs[i], true); break; -*/ - case 0x42004C18: Serial.print("0x"); Serial.print(i+base, HEX); - Serial.print(" Compcap L:\t\t0x"); printHex(regs[i], true); break; - case 0x42004C19: Serial.print("0x"); Serial.print(i+base, HEX); - Serial.print(" Compcap H:\t\t0x"); printHex(regs[i], true); break; - case 0x42004C1A: Serial.print("0x"); Serial.print(i+base, HEX); - Serial.print(" Intcap: \t\t0x"); printHex(regs[i], true); break; - case 0x42004C1B: Serial.print("0x"); Serial.print(i+base, HEX); - Serial.print(" Sense res:\t\t0x"); printHex(regs[i], true); break; - case 0x42004C1C: Serial.print("0x"); Serial.print(i+base, HEX); - Serial.print(" Result L:\t\t0x"); printHex(regs[i], true); break; - case 0x42004C1D: Serial.print("0x"); Serial.print(i+base, HEX); - Serial.print(" Result H:\t\t0x"); printHex(regs[i], true); break; - - } - } -} diff --git a/ports/atmel-samd/freetouch/Adafruit_FreeTouch.h b/ports/atmel-samd/freetouch/Adafruit_FreeTouch.h deleted file mode 100644 index 85dd08988..000000000 --- a/ports/atmel-samd/freetouch/Adafruit_FreeTouch.h +++ /dev/null @@ -1,37 +0,0 @@ -#ifndef ADAFRUIT_FREETOUCH_H -#define ADAFRUIT_FREETOUCH_H - -#include <Arduino.h> -#include "adafruit_ptc.h" - -class Adafruit_FreeTouch { - public: - Adafruit_FreeTouch(int p = 0, oversample_t f = OVERSAMPLE_4, series_resistor_t r = RESISTOR_0, freq_mode_t fh = FREQ_MODE_NONE); - bool begin(void); - - uint16_t measure(void); - uint16_t measureRaw(void); - - private: - void ptcInitSettings(void); - void ptcConfigIOpin(void); - uint16_t startPtcAcquire(void); - - int getYLine(void); - void selectYLine(void); - void setOversampling(oversample_t lvl); - void setSeriesResistor(series_resistor_t res); - void setFreqHopping(freq_mode_t fh, freq_hop_t hops = FREQ_HOP_1); - void setCompCap(uint16_t cc); - void setIntCap(uint8_t ic); - - void snapshotRegsAndPrint(uint32_t base, uint8_t numregs); - void printHex(uint8_t h, boolean newline); - void printPTCregs(uint32_t base, uint8_t *regs, uint8_t num); - - private: - int pin; // arduino pin # - struct adafruit_ptc_config config; -}; - -#endif diff --git a/ports/atmel-samd/freetouch/README.md b/ports/atmel-samd/freetouch/README.md deleted file mode 100644 index 3b179a45c..000000000 --- a/ports/atmel-samd/freetouch/README.md +++ /dev/null @@ -1,2 +0,0 @@ -# Adafruit_FreeTouch -A QTouch-compatible library diff --git a/ports/atmel-samd/freetouch/adafruit_ptc.c b/ports/atmel-samd/freetouch/adafruit_ptc.c deleted file mode 100644 index f4369cf4a..000000000 --- a/ports/atmel-samd/freetouch/adafruit_ptc.c +++ /dev/null @@ -1,148 +0,0 @@ -/* - * FreeTouch, a QTouch-compatible library - tested on ATSAMD21 only! - * The MIT License (MIT) - * - * Copyright (c) 2017 Limor 'ladyada' Fried for Adafruit Industries - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -#include "adafruit_ptc.h" -#include "pinmux.h" - -static void sync_config(Ptc const* module_inst) { - while (module_inst->CONTROLB.bit.SYNCFLAG) ; -} - -void adafruit_ptc_get_config_default(struct adafruit_ptc_config *config) { - config->pin = 0xff; - config->yline = -1; - config->oversample = OVERSAMPLE_4; - config->seriesres = RESISTOR_0; - config->freqhop = FREQ_MODE_NONE; - config->compcap = 0x2000; - config->intcap = 0x3F; -} - -void adafruit_ptc_init(Ptc* module_inst, struct adafruit_ptc_config const* config) { - struct system_pinmux_config pinmux_config; - system_pinmux_get_config_defaults(&pinmux_config); - pinmux_config.mux_position = 0x1; - pinmux_config.input_pull = SYSTEM_PINMUX_PIN_PULL_NONE; - system_pinmux_pin_set_config(config->pin, &pinmux_config); - - sync_config(module_inst); - module_inst->CONTROLA.bit.ENABLE = 0; - sync_config(module_inst); - - module_inst->UNK4C04.reg &= 0xF7; //MEMORY[0x42004C04] &= 0xF7u; - module_inst->UNK4C04.reg &= 0xFB; //MEMORY[0x42004C04] &= 0xFBu; - module_inst->UNK4C04.reg &= 0xFC; //MEMORY[0x42004C04] &= 0xFCu; - sync_config(module_inst); - module_inst->FREQCONTROL.reg &= 0x9F; //MEMORY[0x42004C0C] &= 0x9Fu; - sync_config(module_inst); - module_inst->FREQCONTROL.reg &= 0xEF; //MEMORY[0x42004C0C] &= 0xEFu; - sync_config(module_inst); - module_inst->FREQCONTROL.bit.SAMPLEDELAY = 0; //MEMORY[0x42004C0C] &= 0xF0u; - module_inst->CONTROLC.bit.INIT = 1; //MEMORY[0x42004C05] |= 1u; - module_inst->CONTROLA.bit.RUNINSTANDBY = 1; //MEMORY[0x42004C00] |= 4u; - sync_config(module_inst); - module_inst->INTDISABLE.bit.WCO = 1; - sync_config(module_inst); - module_inst->INTDISABLE.bit.EOC = 1; - sync_config(module_inst); - - // enable the sensor, only done once per line - if (config->yline < 8) { - sync_config(module_inst); - module_inst->YENABLEL.reg |= 1 << config->yline; - sync_config(module_inst); - } else if (config->yline < 16) { - module_inst->YENABLEH.reg |= 1 << (config->yline - 8); - } - - sync_config(module_inst); - module_inst->CONTROLA.bit.ENABLE = 1; - sync_config(module_inst); -} - -void adafruit_ptc_start_conversion(Ptc* module_inst, struct adafruit_ptc_config const* config) { - module_inst->CONTROLA.bit.RUNINSTANDBY = 1; - sync_config(module_inst); - module_inst->CONTROLA.bit.ENABLE = 1; - sync_config(module_inst); - module_inst->INTDISABLE.bit.WCO = 1; - sync_config(module_inst); - module_inst->INTFLAGS.bit.WCO = 1; - sync_config(module_inst); - module_inst->INTFLAGS.bit.EOC = 1; - sync_config(module_inst); - - // set up pin! - sync_config(module_inst); - if (config->yline < 8) { - module_inst->YSELECTL.reg = 1 << config->yline; - } else { - module_inst->YSELECTL.reg = 0; - } - - if (config->yline > 7) { - module_inst->YSELECTH.reg = 1 << (config->yline - 8); - } else { - module_inst->YSELECTH.reg = 0; - } - - sync_config(module_inst); - // set up sense resistor - module_inst->SERRES.bit.RESISTOR = config->seriesres; - sync_config(module_inst); - // set up prescalar - module_inst->CONVCONTROL.bit.ADCACCUM = config->oversample; - sync_config(module_inst); - // set up freq hopping - if (config->freqhop == FREQ_MODE_NONE) { - module_inst->FREQCONTROL.bit.FREQSPREADEN = 0; - module_inst->FREQCONTROL.bit.SAMPLEDELAY = 0; - } else { - module_inst->FREQCONTROL.bit.FREQSPREADEN = 1; - module_inst->FREQCONTROL.bit.SAMPLEDELAY = config->hops; - } - // set up compensation cap + int (?) cap - sync_config(module_inst); - module_inst->COMPCAPL.bit.VALUE = config->compcap & 0xFF; - module_inst->COMPCAPH.bit.VALUE = (config->compcap>>8) & 0x3F; - sync_config(module_inst); - module_inst->INTCAP.bit.VALUE = config->intcap & 0x3F; - sync_config(module_inst); - - module_inst->BURSTMODE.reg = 0xA4; - sync_config(module_inst); - - module_inst->CONVCONTROL.bit.CONVERT = 1; - sync_config(module_inst); -} - -bool adafruit_ptc_is_conversion_finished(Ptc* module_inst) { - return module_inst->CONVCONTROL.bit.CONVERT == 0; -} - -uint16_t adafruit_ptc_get_conversion_result(Ptc* module_inst) { - sync_config(module_inst); - return module_inst->RESULT.reg; -} diff --git a/ports/atmel-samd/freetouch/adafruit_ptc.h b/ports/atmel-samd/freetouch/adafruit_ptc.h deleted file mode 100644 index 93bb16ef4..000000000 --- a/ports/atmel-samd/freetouch/adafruit_ptc.h +++ /dev/null @@ -1,109 +0,0 @@ -/* - * FreeTouch, a QTouch-compatible library - tested on ATSAMD21 only! - * The MIT License (MIT) - * - * Copyright (c) 2017 Limor 'ladyada' Fried for Adafruit Industries - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -// This is similar to the drivers found in sam0/drivers but for the PTC. -#ifndef ADAFRUIT_FREETOUCH_ADAFRUIT_PTC_H -#define ADAFRUIT_FREETOUCH_ADAFRUIT_PTC_H - -#include <stdint.h> - -#include "samd21_ptc_component.h" - -#ifdef __cplusplus -extern "C" { -#endif - -/* Touch library oversampling (filter) setting */ -typedef enum tag_oversample_level_t { - OVERSAMPLE_1, - OVERSAMPLE_2, - OVERSAMPLE_4, - OVERSAMPLE_8, - OVERSAMPLE_16, - OVERSAMPLE_32, - OVERSAMPLE_64 -} -oversample_t; - -/* Touch library series resistor setting */ -typedef enum tag_series_resistor_t { - RESISTOR_0, - RESISTOR_20K, - RESISTOR_50K, - RESISTOR_100K, -} -series_resistor_t; - -typedef enum tag_freq_mode_t { - FREQ_MODE_NONE, - FREQ_MODE_HOP, - FREQ_MODE_SPREAD, - FREQ_MODE_SPREAD_MEDIAN -} -freq_mode_t; - -typedef enum tag_freq_hop_t { - FREQ_HOP_1, - FREQ_HOP_2, - FREQ_HOP_3, - FREQ_HOP_4, - FREQ_HOP_5, - FREQ_HOP_6, - FREQ_HOP_7, - FREQ_HOP_8, - FREQ_HOP_9, - FREQ_HOP_10, - FREQ_HOP_11, - FREQ_HOP_12, - FREQ_HOP_13, - FREQ_HOP_14, - FREQ_HOP_15, - FREQ_HOP_16 -} -freq_hop_t; - -struct adafruit_ptc_config { - uint8_t pin; // ASF pin # - int8_t yline; // the Y select line (see datasheet) - oversample_t oversample; - series_resistor_t seriesres; - freq_mode_t freqhop; - freq_hop_t hops; - uint16_t compcap; - uint8_t intcap; -}; - -void adafruit_ptc_get_config_default(struct adafruit_ptc_config *config); -void adafruit_ptc_init(Ptc* module_inst, struct adafruit_ptc_config const* config); -void adafruit_ptc_start_conversion(Ptc* module_inst, struct adafruit_ptc_config const* config); - -bool adafruit_ptc_is_conversion_finished(Ptc* module_inst); -uint16_t adafruit_ptc_get_conversion_result(Ptc* module_inst); - -#ifdef __cplusplus -} -#endif - -#endif // ADAFRUIT_FREETOUCH_ADAFRUIT_PTC_H diff --git a/ports/atmel-samd/freetouch/examples/freetouch/freetouch.ino b/ports/atmel-samd/freetouch/examples/freetouch/freetouch.ino deleted file mode 100644 index d89642c2e..000000000 --- a/ports/atmel-samd/freetouch/examples/freetouch/freetouch.ino +++ /dev/null @@ -1,56 +0,0 @@ -#include "Adafruit_FreeTouch.h" - -Adafruit_FreeTouch qt_1 = Adafruit_FreeTouch(A0, OVERSAMPLE_4, RESISTOR_50K, FREQ_MODE_NONE); -Adafruit_FreeTouch qt_2 = Adafruit_FreeTouch(A1, OVERSAMPLE_4, RESISTOR_50K, FREQ_MODE_NONE); -Adafruit_FreeTouch qt_3 = Adafruit_FreeTouch(A2, OVERSAMPLE_4, RESISTOR_50K, FREQ_MODE_NONE); -Adafruit_FreeTouch qt_4 = Adafruit_FreeTouch(A3, OVERSAMPLE_4, RESISTOR_50K, FREQ_MODE_NONE); - -void setup() { - Serial.begin(115200); - - while (!Serial); - Serial.println("FreeTouch test"); - // initialize digital pin LED_BUILTIN as an output. - pinMode(LED_BUILTIN, OUTPUT); - - if (! qt_1.begin()) - Serial.println("Failed to begin qt on pin A0"); - if (! qt_2.begin()) - Serial.println("Failed to begin qt on pin A1"); - if (! qt_3.begin()) - Serial.println("Failed to begin qt on pin A2"); - if (! qt_4.begin()) - Serial.println("Failed to begin qt on pin A3"); - -} - - - -void loop() { - int counter, result = 0; - - // DIY - Serial.println("\n*************************************"); - - counter = millis(); - result = qt_1.measure(); - Serial.print("QT 1: "); Serial.print(result); - Serial.print(" ("); Serial.print(millis() - counter); Serial.println(" ms)"); - - counter = millis(); - result = qt_2.measure(); - Serial.print("QT 2: "); Serial.print(result); - Serial.print(" ("); Serial.print(millis() - counter); Serial.println(" ms)"); - - counter = millis(); - result = qt_3.measure(); - Serial.print("QT 3: "); Serial.print(result); - Serial.print(" ("); Serial.print(millis() - counter); Serial.println(" ms)"); - - counter = millis(); - result = qt_4.measure(); - Serial.print("QT 4: "); Serial.print(result); - Serial.print(" ("); Serial.print(millis() - counter); Serial.println(" ms)"); - - delay(200); -}
\ No newline at end of file diff --git a/ports/atmel-samd/freetouch/samd21_ptc_component.h b/ports/atmel-samd/freetouch/samd21_ptc_component.h deleted file mode 100644 index 0af3236d3..000000000 --- a/ports/atmel-samd/freetouch/samd21_ptc_component.h +++ /dev/null @@ -1,350 +0,0 @@ -/* - * FreeTouch, a QTouch-compatible library - tested on ATSAMD21 only! - * The MIT License (MIT) - * - * Copyright (c) 2017 Limor 'ladyada' Fried for Adafruit Industries - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -// This is similar to the component definitions found in -// sam0/utils/cmsis/samd21/include/component but for the PTC. -#ifndef ADAFRUIT_FREETOUCH_PTC_COMPONENT_H -#define ADAFRUIT_FREETOUCH_PTC_COMPONENT_H - -#include "compiler.h" - -#undef ENABLE - -/*************** CONTROL A register ***************/ -#define PTC_REG_CONTROLA 0x42004C00 -#define PTC_BIT_ENABLE 0x02 -#define PTC_BIT_RUNINSTBY 0x04 - - -typedef union { - struct { - uint8_t SWRESET:1; - uint8_t ENABLE:1; - uint8_t RUNINSTANDBY:1; - uint8_t __pad0__:5; - } bit; - uint8_t reg; -} PTC_REG_CONTROLA_Type; - -/*************** CONTROL B register ***************/ - -#define PTC_REG_CONTROLB 0x42004C01 -#define PTC_BIT_SYNCFLAG 0x80 - -typedef union { - struct { - uint8_t __pad0__:7; - uint8_t SYNCFLAG:1; - } bit; - uint8_t reg; -} PTC_REG_CONTROLB_Type; - -/*************** UNK4C04 register ***************/ - -#define PTC_REG_UNK4C04 0x42004C04 - -typedef union { - uint8_t reg; -} PTC_REG_UNK4C04_Type; - - -/*************** CONTROL C register ***************/ - -#define PTC_REG_CONTROLC 0x42004C05 -#define PTC_BIT_INIT 0x01 - -typedef union { - struct { - uint8_t INIT:1; - uint8_t __pad0__:7; - } bit; - uint8_t reg; -} PTC_REG_CONTROLC_Type; - - - -/*************** INT registers ***************/ - -typedef union { - struct { - uint8_t EOC:1; - uint8_t WCO:1; - uint8_t __pad0__:6; - } bit; - uint8_t reg; -} PTC_REG_INT_Type; - - -#define PTC_REG_INTDISABLE 0x42004C08 -#define PTC_REG_INTENABLE 0x42004C09 -#define PTC_BIT_EOCINTEN 0x01 -#define PTC_BIT_WCOINTEN 0x02 - -#define PTC_REG_INTFLAGS 0x42004C0A -#define PTC_BIT_EOCINTFLAG 0x01 -#define PTC_BIT_WCOINTFLAG 0x02 - - -/*************** FREQ CONTROL reg ***************/ - -typedef union { - struct { - uint8_t SAMPLEDELAY:4; - uint8_t FREQSPREADEN:1; - uint8_t __pad0__:3; - } bit; - uint8_t reg; -} PTC_REG_FREQCONTROL_Type; - -#define PTC_REG_FREQCONTROL 0x42004C0C -#define PTC_BIT_FREQSPREADEN 0x10 -#define PTC_REG_SAMPLEDELAY_MASK 0x0F - -/*************** CONVERT CONTROL reg ***************/ - -typedef union { - struct { - uint8_t ADCACCUM:3; - uint8_t __pad0__:4; - uint8_t CONVERT:1; - } bit; - uint8_t reg; -} __attribute__ ((packed)) PTC_REG_CONVCONTROL_Type; - - -#define PTC_REG_CONVCONTROL 0x42004C0D -#define PTC_BIT_CONVSTARTED 0x80 -#define PTC_REG_ADCACC_MASK 0x07 - - -/*************** Y SELECT L+H reg ***************/ - -typedef union { - struct { - uint8_t Y0:1; - uint8_t Y1:1; - uint8_t Y2:1; - uint8_t Y3:1; - uint8_t Y4:1; - uint8_t Y5:1; - uint8_t Y6:1; - uint8_t Y7:1; - } bit; - uint8_t reg; -} __attribute__ ((packed)) PTC_REG_YSELECTL_Type; - -typedef union { - struct { - uint8_t Y8:1; - uint8_t Y9:1; - uint8_t Y10:1; - uint8_t Y11:1; - uint8_t Y12:1; - uint8_t Y13:1; - uint8_t Y14:1; - uint8_t Y15:1; - } bit; - uint8_t reg; -} __attribute__ ((packed)) PTC_REG_YSELECTH_Type; - -#define PTC_REG_YSELECT_L 0x42004C10 -#define PTC_REG_YSELECT_H 0x42004C11 - -#define PTC_REG_YENABLE_L 0x42004C14 -#define PTC_REG_YENABLE_H 0x42004C15 - - -/*************** X SELECT L+H reg ***************/ - -typedef union { - struct { - uint8_t X0:1; - uint8_t X1:1; - uint8_t X2:1; - uint8_t X3:1; - uint8_t X4:1; - uint8_t X5:1; - uint8_t X6:1; - uint8_t X7:1; - } bit; - uint8_t reg; -} __attribute__ ((packed)) PTC_REG_XSELECTL_Type; - -typedef union { - struct { - uint8_t X8:1; - uint8_t X9:1; - uint8_t X10:1; - uint8_t X11:1; - uint8_t X12:1; - uint8_t X13:1; - uint8_t X14:1; - uint8_t X15:1; - } bit; - uint8_t reg; -} __attribute__ ((packed)) PTC_REG_XSELECTH_Type; - - -#define PTC_REG_XSELECT_L 0x42004C12 -#define PTC_REG_XSELECT_H 0x42004C13 - -#define PTC_REG_XENABLE_L 0x42004C16 -#define PTC_REG_XENABLE_H 0x42004C17 - -/*************** Compensation Cap reg ***************/ - -typedef union { - struct { - uint8_t VALUE:8; - } bit; - uint8_t reg; -} __attribute__ ((packed)) PTC_REG_COMPCAPL_Type; - -typedef union { - struct { - uint8_t VALUE:6; - uint8_t __pad0__:2; - } bit; - uint8_t reg; -} __attribute__ ((packed)) PTC_REG_COMPCAPH_Type; - -#define PTC_REG_COMPCAPL 0x42004C18 -#define PTC_REG_COMPCAPH 0x42004C19 - -/*************** Int Cap reg ***************/ - -typedef union { - struct { - uint8_t VALUE:6; - uint8_t __pad0__:2; - } bit; - uint8_t reg; -} __attribute__ ((packed)) PTC_REG_INTCAP_Type; - - -#define PTC_REG_INTCAP 0x42004C1A - -/*************** Series resistor reg ***************/ - -typedef union { - struct { - uint8_t RESISTOR:2; - uint8_t __pad0__:6; - } bit; - uint8_t reg; -} __attribute__ ((packed)) PTC_REG_SERRES_Type; - -#define PTC_REG_SERIESRES 0x42004C1B - -/*************** conversion result reg ***************/ - -typedef union { - struct { - uint8_t LOWBYTE; - uint8_t HIGHBYTE; - } byte; - uint16_t reg; -} __attribute__ ((packed)) PTC_REG_CONVRESULT_Type; - -#define PTC_REG_CONVRESULT_L 0x42004C1C -#define PTC_REG_CONVRESULT_H 0x42004C1D - -/*************** burst mode reg ***************/ - -typedef union { - struct { - uint8_t __pad0__:2; - uint8_t CTSLOWPOWER:1; - uint8_t __pad1__:1; - uint8_t BURSTMODE:4; - } bit; - uint8_t reg; -} __attribute__ ((packed)) PTC_REG_BURSTMODE_Type; - - -#define PTC_REG_BURSTMODE 0x42004C20 -#define PTC_REG_BURSTMODE_MASK 0xF0 -#define PTC_BIT_CTSLOWPOWER 0x04 - -/*************** etc unused reg ***************/ - -#define PTC_REG_XYENABLE 0x42004C16 -#define PTC_BIT_XYENABLE 0x02 - -#define PTC_REG_WCO_MODE 0x42004C21 -#define PTC_REG_WCO_MODE_MASK 0x07 - -#define PTC_SET_WCO_THRESHHOLD_A_L 0x42004C24 -#define PTC_SET_WCO_THRESHHOLD_A_H 0x42004C25 -#define PTC_SET_WCO_THRESHHOLD_B_L 0x42004C26 -#define PTC_SET_WCO_THRESHHOLD_B_H 0x42004C27 - -typedef struct { - __IO PTC_REG_CONTROLA_Type CONTROLA; // 0x42004C00 - __IO PTC_REG_CONTROLB_Type CONTROLB; // 0x42004C01 - uint8_t __pad4c02__; // 0x42004C02 unknown - uint8_t __pad4c03__; // 0x42004C03 unknown - __IO PTC_REG_UNK4C04_Type UNK4C04; // 0x42004C04 unknown - __IO PTC_REG_CONTROLC_Type CONTROLC; // 0x42004C05 - uint8_t __pad4c06__; // 0x42004C06 unknown - uint8_t __pad4c07__; // 0x42004C07 unknown - __IO PTC_REG_INT_Type INTDISABLE; // 0x42004C08 - __IO PTC_REG_INT_Type INTENABLE; // 0x42004C09 - __IO PTC_REG_INT_Type INTFLAGS; // 0x42004C0A - uint8_t __pad4c0b__; // 0x42004C0B unknown - __IO PTC_REG_FREQCONTROL_Type FREQCONTROL; //0x42004C0C - __IO PTC_REG_CONVCONTROL_Type CONVCONTROL; // 0x42004C0D - uint8_t __pad4c0e__; // 0x42004C0E unknown - uint8_t __pad4c0f__; // 0x42004C0F unknown - __IO PTC_REG_YSELECTL_Type YSELECTL; // 0x42004C10 - __IO PTC_REG_YSELECTL_Type YSELECTH; // 0x42004C11 - __IO PTC_REG_XSELECTL_Type XSELECTL; // 0x42004C12 - __IO PTC_REG_XSELECTL_Type XSELECTH; // 0x42004C13 - __IO PTC_REG_YSELECTL_Type YENABLEL; // 0x42004C14 - __IO PTC_REG_YSELECTL_Type YENABLEH; // 0x42004C15 - __IO PTC_REG_XSELECTL_Type XENABLEL; // 0x42004C16 - __IO PTC_REG_XSELECTL_Type XENABLEH; // 0x42004C17 - - __IO PTC_REG_COMPCAPL_Type COMPCAPL; // 0x42004C18 - __IO PTC_REG_COMPCAPH_Type COMPCAPH; // 0x42004C19 - __IO PTC_REG_INTCAP_Type INTCAP; // 0x42004C1A - __IO PTC_REG_SERRES_Type SERRES; // 0x42004C1B - - __IO PTC_REG_CONVRESULT_Type RESULT; // 0x42004C1C + 0x42004C1D - uint8_t __pad4c1e__; // 0x42004C1E unknown - uint8_t __pad4c1f__; // 0x42004C1F unknown - __IO PTC_REG_BURSTMODE_Type BURSTMODE; // 0x42004C20 -} Ptc; - -#define PTC (( Ptc *)0x42004C00U) - -#define PTC_REG_INTDISABLE 0x42004C08 -#define PTC_REG_INTENABLE 0x42004C09 -#define PTC_BIT_EOCINTEN 0x01 -#define PTC_BIT_WCOINTEN 0x02 - -#define PTC_REG_INTFLAGS 0x42004C0A - -#endif // ADAFRUIT_FREETOUCH_PTC_COMPONENT_H |
