Skip to content

Commit 81afd55

Browse files
authored
Merge branch 'adafruit:main' into usb-interposer-1
2 parents 70bea61 + 1493104 commit 81afd55

20 files changed

+268
-18
lines changed

locale/tr.po

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,8 @@ msgid ""
77
msgstr ""
88
"Project-Id-Version: PACKAGE VERSION\n"
99
"Report-Msgid-Bugs-To: \n"
10-
"PO-Revision-Date: 2024-07-02 03:21+0000\n"
11-
"Last-Translator: Zoda <ustunsoykerem23@gmail.com>\n"
10+
"PO-Revision-Date: 2024-07-03 19:09+0000\n"
11+
"Last-Translator: Hacı <qwehacim3542qwe@gmail.com>\n"
1212
"Language-Team: none\n"
1313
"Language: tr\n"
1414
"MIME-Version: 1.0\n"
@@ -55,6 +55,8 @@ msgid ""
5555
"\n"
5656
"You are in safe mode because:\n"
5757
msgstr ""
58+
"\n"
59+
"Güvenli moddasın çünkü:\n"
5860

5961
#: py/obj.c
6062
msgid " File \"%q\""
@@ -103,7 +105,7 @@ msgstr ""
103105

104106
#: ports/nordic/common-hal/watchdog/WatchDogTimer.c
105107
msgid "%q cannot be changed once mode is set to %q"
106-
msgstr ""
108+
msgstr "Mod %q olarak ayarlandıktan sonra %q değiştirilemez"
107109

108110
#: shared-bindings/microcontroller/Pin.c
109111
msgid "%q contains duplicate pins"
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
/*
2+
* This file is part of the MicroPython project, http://micropython.org/
3+
*
4+
* The MIT License (MIT)
5+
*
6+
* Copyright (c) 2020 Scott Shawcroft for Adafruit Industries
7+
*
8+
* Permission is hereby granted, free of charge, to any person obtaining a copy
9+
* of this software and associated documentation files (the "Software"), to deal
10+
* in the Software without restriction, including without limitation the rights
11+
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
12+
* copies of the Software, and to permit persons to whom the Software is
13+
* furnished to do so, subject to the following conditions:
14+
*
15+
* The above copyright notice and this permission notice shall be included in
16+
* all copies or substantial portions of the Software.
17+
*
18+
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
19+
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
20+
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
21+
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
22+
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
23+
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
24+
* THE SOFTWARE.
25+
*/
26+
27+
#include "supervisor/board.h"
28+
29+
// Use the MP_WEAK supervisor/shared/board.c versions of routines not defined here.
Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
/*
2+
* This file is part of the MicroPython project, http://micropython.org/
3+
*
4+
* The MIT License (MIT)
5+
*
6+
* Copyright (c) 2022 Dan Halbert for Adafruit Industries
7+
*
8+
* Permission is hereby granted, free of charge, to any person obtaining a copy
9+
* of this software and associated documentation files (the "Software"), to deal
10+
* in the Software without restriction, including without limitation the rights
11+
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
12+
* copies of the Software, and to permit persons to whom the Software is
13+
* furnished to do so, subject to the following conditions:
14+
*
15+
* The above copyright notice and this permission notice shall be included in
16+
* all copies or substantial portions of the Software.
17+
*
18+
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
19+
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
20+
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
21+
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
22+
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
23+
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
24+
* THE SOFTWARE.
25+
*/
26+
27+
// Micropython setup
28+
29+
#define MICROPY_HW_BOARD_NAME "Espressif ESP32 TTGO T8 v1.7"
30+
#define MICROPY_HW_MCU_NAME "ESP32"
31+
32+
#define MICROPY_HW_LED_STATUS (&pin_GPIO21)
33+
34+
#define CIRCUITPY_BOARD_I2C (1)
35+
#define CIRCUITPY_BOARD_I2C_PIN {{.scl = &pin_GPIO22, .sda = &pin_GPIO21}}
36+
#define CIRCUITPY_I2C_ALLOW_INTERNAL_PULL_UP 1
37+
38+
#define CIRCUITPY_BOARD_SPI (1)
39+
#define CIRCUITPY_BOARD_SPI_PIN {{.clock = &pin_GPIO18, .mosi = &pin_GPIO23, .miso = &pin_GPIO19}}
40+
41+
#define CIRCUITPY_BOARD_UART (1)
42+
#define CIRCUITPY_BOARD_UART_PIN {{.tx = &pin_GPIO17, .rx = &pin_GPIO16}}
43+
44+
45+
#define CIRCUITPY_BOOT_BUTTON (&pin_GPIO0)
46+
47+
// UART pins attached to the USB-serial converter chip
48+
#define CIRCUITPY_CONSOLE_UART_TX (&pin_GPIO1)
49+
#define CIRCUITPY_CONSOLE_UART_RX (&pin_GPIO3)
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
CIRCUITPY_CREATOR_ID = 0x000C303A
2+
CIRCUITPY_CREATION_ID = 0x00320005
3+
4+
IDF_TARGET = esp32
5+
6+
CIRCUITPY_ESP_FLASH_MODE = qio
7+
CIRCUITPY_ESP_FLASH_FREQ = 80m
8+
CIRCUITPY_ESP_FLASH_SIZE = 4MB
9+
10+
CIRCUITPY_ESPCAMERA = 0
Lines changed: 66 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,66 @@
1+
#include "shared-bindings/board/__init__.h"
2+
3+
STATIC const mp_rom_map_elem_t board_module_globals_table[] = {
4+
CIRCUITPYTHON_BOARD_DICT_STANDARD_ITEMS
5+
6+
// External pins are in silkscreen order, from top to bottom, left side, then right side
7+
// Left Side
8+
9+
// Input-only pins, VP/VN on silkscreen
10+
{ MP_ROM_QSTR(MP_QSTR_I36), MP_ROM_PTR(&pin_GPIO36) },
11+
{ MP_ROM_QSTR(MP_QSTR_VP), MP_ROM_PTR(&pin_GPIO36) },
12+
{ MP_ROM_QSTR(MP_QSTR_I39), MP_ROM_PTR(&pin_GPIO39) },
13+
{ MP_ROM_QSTR(MP_QSTR_VN), MP_ROM_PTR(&pin_GPIO39) },
14+
{ MP_ROM_QSTR(MP_QSTR_I34), MP_ROM_PTR(&pin_GPIO34) },
15+
{ MP_ROM_QSTR(MP_QSTR_I35), MP_ROM_PTR(&pin_GPIO35) },
16+
17+
18+
{ MP_ROM_QSTR(MP_QSTR_IO32), MP_ROM_PTR(&pin_GPIO32) },
19+
{ MP_ROM_QSTR(MP_QSTR_IO33), MP_ROM_PTR(&pin_GPIO33) },
20+
21+
// Normal pins
22+
{ MP_ROM_QSTR(MP_QSTR_IO25), MP_ROM_PTR(&pin_GPIO25) },
23+
{ MP_ROM_QSTR(MP_QSTR_IO26), MP_ROM_PTR(&pin_GPIO26) },
24+
{ MP_ROM_QSTR(MP_QSTR_IO27), MP_ROM_PTR(&pin_GPIO27) },
25+
{ MP_ROM_QSTR(MP_QSTR_IO14), MP_ROM_PTR(&pin_GPIO14) },
26+
{ MP_ROM_QSTR(MP_QSTR_SD_SCK), MP_ROM_PTR(&pin_GPIO14) },
27+
{ MP_ROM_QSTR(MP_QSTR_IO12), MP_ROM_PTR(&pin_GPIO12) },
28+
{ MP_ROM_QSTR(MP_QSTR_IO13), MP_ROM_PTR(&pin_GPIO13) },
29+
{ MP_ROM_QSTR(MP_QSTR_SD_CS), MP_ROM_PTR(&pin_GPIO13) },
30+
{ MP_ROM_QSTR(MP_QSTR_IO15), MP_ROM_PTR(&pin_GPIO15) },
31+
{ MP_ROM_QSTR(MP_QSTR_SD_MOSI), MP_ROM_PTR(&pin_GPIO15) },
32+
33+
// Right Side
34+
35+
{ MP_ROM_QSTR(MP_QSTR_LED), MP_ROM_PTR(&pin_GPIO21) },
36+
{ MP_ROM_QSTR(MP_QSTR_SDA), MP_ROM_PTR(&pin_GPIO21) },
37+
{ MP_ROM_QSTR(MP_QSTR_IO21), MP_ROM_PTR(&pin_GPIO21) },
38+
39+
{ MP_ROM_QSTR(MP_QSTR_IO1), MP_ROM_PTR(&pin_GPIO1) },
40+
{ MP_ROM_QSTR(MP_QSTR_TX), MP_ROM_PTR(&pin_GPIO1) },
41+
{ MP_ROM_QSTR(MP_QSTR_IO3), MP_ROM_PTR(&pin_GPIO3) },
42+
{ MP_ROM_QSTR(MP_QSTR_RX), MP_ROM_PTR(&pin_GPIO3) },
43+
44+
{ MP_ROM_QSTR(MP_QSTR_IO22), MP_ROM_PTR(&pin_GPIO22) },
45+
{ MP_ROM_QSTR(MP_QSTR_SCL), MP_ROM_PTR(&pin_GPIO22) },
46+
47+
// Normal pins
48+
{ MP_ROM_QSTR(MP_QSTR_IO19), MP_ROM_PTR(&pin_GPIO19) },
49+
{ MP_ROM_QSTR(MP_QSTR_IO23), MP_ROM_PTR(&pin_GPIO23) },
50+
{ MP_ROM_QSTR(MP_QSTR_IO18), MP_ROM_PTR(&pin_GPIO18) },
51+
{ MP_ROM_QSTR(MP_QSTR_IO5), MP_ROM_PTR(&pin_GPIO5) },
52+
{ MP_ROM_QSTR(MP_QSTR_SD_MISO), MP_ROM_PTR(&pin_GPIO2) },
53+
{ MP_ROM_QSTR(MP_QSTR_IO2), MP_ROM_PTR(&pin_GPIO2) },
54+
55+
{ MP_ROM_QSTR(MP_QSTR_IO0), MP_ROM_PTR(&pin_GPIO0) },
56+
{ MP_ROM_QSTR(MP_QSTR_BUTTON), MP_ROM_PTR(&pin_GPIO0) },
57+
{ MP_ROM_QSTR(MP_QSTR_BOOT0), MP_ROM_PTR(&pin_GPIO0) },
58+
59+
{ MP_ROM_QSTR(MP_QSTR_IO4), MP_ROM_PTR(&pin_GPIO4) },
60+
61+
{MP_ROM_QSTR(MP_QSTR_I2C), MP_ROM_PTR(&board_i2c_obj)},
62+
{MP_ROM_QSTR(MP_QSTR_SPI), MP_ROM_PTR(&board_spi_obj)},
63+
{MP_ROM_QSTR(MP_QSTR_UART), MP_ROM_PTR(&board_uart_obj)}
64+
65+
};
66+
MP_DEFINE_CONST_DICT(board_module_globals, board_module_globals_table);

ports/espressif/boards/ttgo_t8_v1_7/sdkconfig

Whitespace-only changes.

ports/raspberrypi/common-hal/pwmio/PWMOut.c

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -176,6 +176,10 @@ extern void common_hal_pwmio_pwmout_set_duty_cycle(pwmio_pwmout_obj_t *self, uin
176176
} else {
177177
compare_count = ((uint32_t)duty * self->top + MAX_TOP / 2) / MAX_TOP;
178178
}
179+
// do not allow count to be 0 (due to rounding) unless duty 0 was requested
180+
if (compare_count == 0 && duty != 0) {
181+
compare_count = 1;
182+
}
179183
// compare_count is the CC register value, which should be TOP+1 for 100% duty cycle.
180184
pwm_set_chan_level(self->slice, self->ab_channel, compare_count);
181185
}
@@ -218,8 +222,8 @@ void common_hal_pwmio_pwmout_set_frequency(pwmio_pwmout_obj_t *self, uint32_t fr
218222
pwm_set_clkdiv_int_frac(self->slice, div16 / 16, div16 % 16);
219223
pwm_set_wrap(self->slice, self->top);
220224
} else {
221-
uint32_t top = common_hal_mcu_processor_get_frequency() / frequency;
222-
self->actual_frequency = common_hal_mcu_processor_get_frequency() / top;
225+
uint32_t top = common_hal_mcu_processor_get_frequency() / frequency - 1;
226+
self->actual_frequency = common_hal_mcu_processor_get_frequency() / (top + 1);
223227
self->top = MIN(MAX_TOP, top);
224228
pwm_set_clkdiv_int_frac(self->slice, 1, 0);
225229
// Set TOP register. For 100% duty cycle, CC must be set to TOP+1.

supervisor/shared/serial.c

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -309,10 +309,6 @@ uint32_t serial_bytes_available(void) {
309309
}
310310
#endif
311311

312-
#if CIRCUITPY_USB_DEVICE
313-
count += tud_cdc_available();
314-
#endif
315-
316312
// Board-specific serial input.
317313
count += board_serial_bytes_available();
318314

tests/circuitpython-manual/pwmio/README.md

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
This directory contains tools for testing CircuitPython's PWM API. Running the tests involves three steps:
44

5-
1. [CircuitPython PWM test code `code.py`](code.py) is run on the board to be tested.
5+
1. [CircuitPython PWM test code `code_ramps.py`](code_ramps.py) is run on the board to be tested.
66
2. As the code runs, the state of the PWM signal is logged by a logic analyzer (I used a Saleae Logic Pro 8).
77
3. Data collected by the logic analyzer is analyzed and plotted into a PNG image by [CPython code `duty.py`](duty.py).
88

@@ -37,3 +37,9 @@ These tests can be used to assess how well the PWM API delivers expected behavio
3737
The plot at the top of this page depicts data PWM gathered from a device with an API that displays all of the expected behavior listed above. The plots below show how the tools reveal flaws in the behavior of PWM APIs that are not as complete.
3838

3939
<img src="pwm_flaw_explainer.png">
40+
41+
## Testing always-off and always-on PWM extremes
42+
43+
The procedure described above does not test item 2 above, i.e. the ability of the API to support duty cycles of 0% and 100%. A different code file, (code_extremes.py) provides for this. This code cycles through PWM duty cycles of 32767, 65535, 1, 65534, and 0, repeating the sequence at six frequencies from 100 Hz to 10MHz. When viewed on a logic analyzer, the PWM output should look like the figure below. 100% and 0% PWM result from duty cycle settings of 65535 and 0, (and only from those settings, in accordance with item 3 above.)
44+
45+
<img src="pwm_extremes_explainer.png">
Lines changed: 87 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,87 @@
1+
import board
2+
import pwmio
3+
import random
4+
import time
5+
import microcontroller
6+
import os
7+
import sys
8+
import random
9+
10+
exponents = [
11+
2,
12+
3,
13+
4,
14+
5,
15+
6,
16+
7,
17+
]
18+
19+
freqs = [int(10**f) for f in exponents]
20+
21+
top = 65536
22+
den = 10
23+
duties = [32767, 65535, 1, 65534, 0, 0]
24+
freq_duration = 1.2
25+
duty_duration = 0.2
26+
27+
print("\n\n")
28+
board_name = sys.implementation[2]
29+
30+
pins = {
31+
"Feather RP2040": (("D4", ""),),
32+
"RP2040-Zero": (("GP15", ""),),
33+
"Grand Central": (("D51", "TCC"), ("A15", "TC")),
34+
"Metro M0": (("A2", "TC"), ("A3", "TCC")),
35+
"ESP32-S3-DevKit": (("IO6", ""),), # marked D5 on board for XIAO-ESP32-s3
36+
"Feather ESP32-S2": (("D9", ""),),
37+
"XIAO nRF52840": (("D9", ""),),
38+
}
39+
40+
for board_key in pins:
41+
if board_key in board_name:
42+
pins_to_use = pins[board_key]
43+
break
44+
45+
while True:
46+
for pin_name, pin_type in pins_to_use:
47+
pin = getattr(board, pin_name)
48+
print('title="', end="")
49+
print(f"{board_name} at {microcontroller.cpu.frequency} Hz, pin {pin_name}", end="")
50+
if len(pin_type) > 0:
51+
print(f" ({pin_type})", end="")
52+
print('",')
53+
print(f'subtitle="{freq_duration:0.1f}s per frequency",')
54+
print(f'version="{sys.version}",')
55+
print("freq_calls=", end="")
56+
pwm = pwmio.PWMOut(pin, variable_frequency=True)
57+
t0 = time.monotonic()
58+
duty_time = t0 + duty_duration
59+
print("(", end="")
60+
offset = 0
61+
increment = 1
62+
for freq in freqs:
63+
i = 0
64+
try:
65+
pwm.frequency = freq
66+
except ValueError:
67+
break
68+
freq_time = t0 + freq_duration
69+
duty_time = t0 + duty_duration
70+
j = 0
71+
while time.monotonic() < freq_time:
72+
duty = duties[j]
73+
pwm.duty_cycle = duty
74+
while time.monotonic() < duty_time and time.monotonic() < freq_time:
75+
pass
76+
j += 1
77+
j = min(j, len(duties) - 1)
78+
duty_time += duty_duration
79+
i += 1
80+
if time.monotonic() > freq_time:
81+
break
82+
t0 = freq_time
83+
print(f"({freq}, {i/freq_duration:.0f}), ", end="")
84+
print(")")
85+
print("done.")
86+
pwm.deinit()
87+
time.sleep(5)

tests/circuitpython-manual/pwmio/code.py renamed to tests/circuitpython-manual/pwmio/code_ramps.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@
3939
board_name = sys.implementation[2]
4040

4141
pins = {
42+
"Feather RP2040": (("D4", ""),),
4243
"RP2040-Zero": (("GP15", ""),),
4344
"Grand Central": (("D51", "TCC"), ("A15", "TC")),
4445
"Metro M0": (("A2", "TC"), ("A3", "TCC")),
Loading

0 commit comments

Comments
 (0)