Skip to content

Commit 06a2e8e

Browse files
committed
SAMD21 input on change Arduino adapted macros
1 parent 3afa060 commit 06a2e8e

5 files changed

Lines changed: 469 additions & 323 deletions

File tree

docs/mcumap_gen.xlsx

1.28 KB
Binary file not shown.

uCNC/src/hal/boards/samd21/samd21.ini

Lines changed: 20 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -4,29 +4,38 @@
44

55
[common_samd21]
66
platform = atmelsam
7+
; platform_packages = platformio/toolchain-gccarmnoneeabi
78
board = zeroUSB
89
build_flags = ${env.build_flags} -std=gnu99 -Wall -fdata-sections -ffunction-sections -fno-exceptions -Wl,--gc-sections -nostdlib -fno-exceptions
910
lib_deps =
1011
${env.lib_deps}
1112
https://github.com/Paciente8159/uCNC-tinyusb.git#v0.15.4
12-
; platform_packages = platformio/tool-openocd
13-
; debug_build_flags = -Og -g3 -ggdb3 -gdwarf-2
14-
; debug_tool = cmsis-dap
15-
; debug_server =
16-
; $PLATFORMIO_CORE_DIR/packages/tool-openocd/bin/openocd
17-
; -f
18-
; arduino_zero_debug.cfg
19-
; debug_init_cmds =
20-
; target extended-remote $DEBUG_PORT
21-
; load
22-
; monitor reset init
13+
platform_packages = platformio/tool-openocd
14+
build_type = debug
15+
debug_build_flags = -Og -g3 -ggdb3 -gdwarf-2
16+
debug_tool = custom
17+
debug_server =
18+
${platformio.packages_dir}/tool-openocd/bin/openocd
19+
-s ${platformio.packages_dir}/tool-openocd/scripts
20+
-f interface/cmsis-dap.cfg
21+
-c "transport select swd"
22+
-c "set CHIPNAME at91samd21g18"
23+
-c "set ENDIAN little"
24+
-c "set telnet_port 0"
25+
-f target/at91samdXX.cfg
26+
-c "reset_config none"
27+
debug_init_cmds =
28+
target extended-remote $DEBUG_PORT
29+
load
30+
monitor reset init
2331

2432
[env:SAMD21-Wemos-M0]
2533
extends = common_samd21
2634
build_flags = ${common_samd21.build_flags} -D BOARDMAP=\"src/hal/boards/samd21/boardmap_mzero.h\"
2735
board_build.offset = 0x2000
2836
board_upload.offset_address = 0x00002000
2937

38+
3039
[env:SAMD21-Arduino-Zero]
3140
extends = common_samd21
3241
build_flags = ${common_samd21.build_flags} -D BOARDMAP=\"src/hal/boards/samd21/boardmap_zero.h\"

uCNC/src/hal/boards/stm32/stm32.ini

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -37,8 +37,8 @@ build_flags = ${common_stm32.build_flags} -D F_CPU=72000000UL -D BOARDMAP=\"src/
3737
; uncomment if it's a bluepill clone
3838
upload_flags = -c set CPUTAPID 0x2ba01477
3939
debug_server =
40-
$PLATFORMIO_CORE_DIR\packages\tool-openocd\bin\openocd
41-
-s $PLATFORMIO_CORE_DIR\packages\tool-openocd\scripts
40+
${platformio.packages_dir}/tool-openocd/bin/openocd
41+
-s ${platformio.packages_dir}/tool-openocd/scripts
4242
-f interface\stlink.cfg
4343
-c "transport select hla_swd"
4444
-c "set CPUTAPID 0x2ba01477"

uCNC/src/hal/mcus/samd21/mcu_samd21.c

Lines changed: 41 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,7 @@ static void mcu_setup_clocks(void)
5151
PM->APBBSEL.reg = 0;
5252
PM->APBCSEL.reg = 0;
5353
PM->AHBMASK.reg |= (PM_AHBMASK_NVMCTRL);
54-
PM->APBAMASK.reg |= (PM_APBAMASK_PM | PM_APBAMASK_SYSCTRL | PM_APBAMASK_GCLK | PM_APBAMASK_RTC);
54+
PM->APBAMASK.reg |= (PM_APBAMASK_PM | PM_APBAMASK_SYSCTRL | PM_APBAMASK_GCLK | PM_APBAMASK_RTC | PM_APBAMASK_EIC);
5555
PM->APBBMASK.reg |= (PM_APBBMASK_NVMCTRL | PM_APBBMASK_PORT | PM_APBBMASK_USB);
5656
PM->APBCMASK.reg |= (PM_APBCMASK_TCC0 | PM_APBCMASK_TCC1 | PM_APBCMASK_TCC2 | PM_APBCMASK_TC3 | PM_APBCMASK_TC4 | PM_APBCMASK_TC5 | PM_APBCMASK_TC6 | PM_APBCMASK_TC7);
5757
PM->APBCMASK.reg |= PM_APBCMASK_ADC;
@@ -86,20 +86,31 @@ static void mcu_setup_clocks(void)
8686
while (GCLK->STATUS.bit.SYNCBUSY)
8787
;
8888

89-
#if (SAMD21_EIC_MASK != 0)
89+
#if (SAMD21_EIC_MASK != 0) && !defined(ARDUINO)
90+
// EIC->CTRL.bit.SWRST = 1;
91+
// while (EIC->STATUS.bit.SYNCBUSY || EIC->CTRL.bit.SWRST)
92+
// ;
93+
94+
NVIC_DisableIRQ(EIC_IRQn);
95+
NVIC_ClearPendingIRQ(EIC_IRQn);
96+
NVIC_SetPriority(EIC_IRQn, NVIC_INPUT_IRQ_Pri);
97+
NVIC_EnableIRQ(EIC_IRQn);
98+
9099
GCLK->CLKCTRL.reg = (uint16_t)(GCLK_CLKCTRL_CLKEN | GCLK_CLKCTRL_GEN_GCLK0 | GCLK_CLKCTRL_ID_EIC);
100+
91101
EIC->CTRL.bit.ENABLE = 1;
92102
while (EIC->STATUS.bit.SYNCBUSY)
93103
;
104+
105+
EIC->WAKEUP.reg = SAMD21_EIC_MASK;
106+
94107
/*all external interrupts will be on pin change with filter*/
95-
EIC->CONFIG[0].reg = 0xbbbbbbbb;
96-
EIC->CONFIG[1].reg = 0xbbbbbbbb;
97-
NVIC_SetPriority(EIC_IRQn, NVIC_INPUT_IRQ_Pri);
98-
NVIC_ClearPendingIRQ(EIC_IRQn);
99-
NVIC_EnableIRQ(EIC_IRQn);
108+
EIC->CONFIG[0].reg = 0x33333333;
109+
EIC->CONFIG[1].reg = 0x33333333;
100110
EIC->EVCTRL.reg = 0;
101111
EIC->INTFLAG.reg = SAMD21_EIC_MASK;
102112
EIC->INTENSET.reg = SAMD21_EIC_MASK;
113+
103114
#endif
104115
// ADC clock
105116
GCLK->CLKCTRL.reg = GCLK_CLKCTRL_CLKEN | GCLK_CLKCTRL_GEN_GCLK4 | GCLK_CLKCTRL_ID_ADC;
@@ -147,37 +158,55 @@ static void mcu_setup_clocks(void)
147158
static bool mcu_probe_isr_enabled;
148159
#endif
149160

161+
#ifndef ARDUINO
150162
void EIC_Handler(void)
151163
{
164+
uint32_t status = EIC->INTFLAG.reg;
165+
152166
#if (LIMITS_EICMASK != 0)
153-
if (EIC->INTFLAG.reg & LIMITS_EICMASK)
167+
if (status & LIMITS_EICMASK)
154168
{
155169
mcu_limits_changed_cb();
156170
}
157171
#endif
158172
#if (CONTROLS_EICMASK != 0)
159-
if (EIC->INTFLAG.reg & CONTROLS_EICMASK)
173+
if (status & CONTROLS_EICMASK)
160174
{
161175
mcu_controls_changed_cb();
162176
}
163177
#endif
164178
#if (PROBE_EICMASK != 0)
165-
if (EIC->INTFLAG.reg & PROBE_EICMASK && mcu_probe_isr_enabled)
179+
if (status & PROBE_EICMASK && mcu_probe_isr_enabled)
166180
{
167181
mcu_probe_changed_cb();
168182
}
169183
#endif
170184
#if (DIN_IO_EICMASK != 0)
171-
if (EIC->INTFLAG.reg & DIN_IO_EICMASK)
185+
if (status & DIN_IO_EICMASK)
172186
{
173187
mcu_inputs_changed_cb();
174188
}
189+
#endif
190+
EIC->INTFLAG.reg = status;
191+
}
175192
#endif
176193

177-
EIC->INTFLAG.reg = SAMD21_EIC_MASK;
194+
#ifdef ARDUINO
195+
uint32_t findPin(EPortType port, uint32_t pin)
196+
{
197+
for (unsigned int i = 0; i < PINCOUNT_fn(); i++)
198+
{
199+
if (g_APinDescription[i].ulPort == port && g_APinDescription[i].ulPin == pin)
200+
{
201+
return i;
202+
}
203+
}
204+
return -1;
178205
}
179206
#endif
180207

208+
#endif
209+
181210
void MCU_ITP_ISR(void)
182211
{
183212
static bool resetstep = false;

0 commit comments

Comments
 (0)