mirror of
https://github.com/micropython/micropython.git
synced 2025-07-21 21:11:12 +02:00
Some checks failed
JavaScript code lint and formatting with Biome / eslint (push) Has been cancelled
Check code formatting / code-formatting (push) Has been cancelled
Check spelling with codespell / codespell (push) Has been cancelled
Build docs / build (push) Has been cancelled
Check examples / embedding (push) Has been cancelled
Package mpremote / build (push) Has been cancelled
.mpy file format and tools / test (push) Has been cancelled
Build ports metadata / build (push) Has been cancelled
cc3200 port / build (push) Has been cancelled
esp32 port / build_idf (esp32_build_cmod_spiram_s2) (push) Has been cancelled
esp32 port / build_idf (esp32_build_s3_c3) (push) Has been cancelled
esp8266 port / build (push) Has been cancelled
mimxrt port / build (push) Has been cancelled
nrf port / build (push) Has been cancelled
powerpc port / build (push) Has been cancelled
qemu port / build_and_test_arm (push) Has been cancelled
qemu port / build_and_test_rv32 (push) Has been cancelled
renesas-ra port / build_renesas_ra_board (push) Has been cancelled
rp2 port / build (push) Has been cancelled
samd port / build (push) Has been cancelled
stm32 port / build_stm32 (stm32_misc_build) (push) Has been cancelled
stm32 port / build_stm32 (stm32_nucleo_build) (push) Has been cancelled
stm32 port / build_stm32 (stm32_pyb_build) (push) Has been cancelled
unix port / minimal (push) Has been cancelled
unix port / reproducible (push) Has been cancelled
unix port / standard (push) Has been cancelled
unix port / standard_v2 (push) Has been cancelled
unix port / coverage (push) Has been cancelled
unix port / coverage_32bit (push) Has been cancelled
unix port / nanbox (push) Has been cancelled
unix port / float (push) Has been cancelled
unix port / stackless_clang (push) Has been cancelled
unix port / float_clang (push) Has been cancelled
unix port / settrace (push) Has been cancelled
unix port / settrace_stackless (push) Has been cancelled
unix port / macos (push) Has been cancelled
unix port / qemu_mips (push) Has been cancelled
unix port / qemu_arm (push) Has been cancelled
unix port / qemu_riscv64 (push) Has been cancelled
webassembly port / build (push) Has been cancelled
windows port / build-vs (Debug, x64, windows-2022, dev, 2022, [17, 18)) (push) Has been cancelled
windows port / build-vs (Debug, x64, windows-latest, dev, 2017, [15, 16)) (push) Has been cancelled
windows port / build-vs (Debug, x86, windows-2022, dev, 2022, [17, 18)) (push) Has been cancelled
windows port / build-vs (Debug, x86, windows-latest, dev, 2017, [15, 16)) (push) Has been cancelled
windows port / build-vs (Release, x64, windows-2019, dev, 2019, [16, 17)) (push) Has been cancelled
windows port / build-vs (Release, x64, windows-2019, standard, 2019, [16, 17)) (push) Has been cancelled
windows port / build-vs (Release, x64, windows-2022, dev, 2022, [17, 18)) (push) Has been cancelled
windows port / build-vs (Release, x64, windows-2022, standard, 2022, [17, 18)) (push) Has been cancelled
windows port / build-vs (Release, x64, windows-latest, dev, 2017, [15, 16)) (push) Has been cancelled
windows port / build-vs (Release, x64, windows-latest, standard, 2017, [15, 16)) (push) Has been cancelled
windows port / build-vs (Release, x86, windows-2019, dev, 2019, [16, 17)) (push) Has been cancelled
windows port / build-vs (Release, x86, windows-2019, standard, 2019, [16, 17)) (push) Has been cancelled
windows port / build-vs (Release, x86, windows-2022, dev, 2022, [17, 18)) (push) Has been cancelled
windows port / build-vs (Release, x86, windows-2022, standard, 2022, [17, 18)) (push) Has been cancelled
windows port / build-vs (Release, x86, windows-latest, dev, 2017, [15, 16)) (push) Has been cancelled
windows port / build-vs (Release, x86, windows-latest, standard, 2017, [15, 16)) (push) Has been cancelled
windows port / build-mingw (i686, mingw32, dev) (push) Has been cancelled
windows port / build-mingw (i686, mingw32, standard) (push) Has been cancelled
windows port / build-mingw (x86_64, mingw64, dev) (push) Has been cancelled
windows port / build-mingw (x86_64, mingw64, standard) (push) Has been cancelled
windows port / cross-build-on-linux (push) Has been cancelled
zephyr port / build (push) Has been cancelled
Python code lint and formatting with ruff / ruff (push) Has been cancelled
Signed-off-by: chuangjinglu <chuangjinglu@outlook.com>
160 lines
5.7 KiB
ReStructuredText
160 lines
5.7 KiB
ReStructuredText
.. currentmodule:: machine
|
|
.. _machine.TimerWiPy:
|
|
|
|
class TimerWiPy -- control hardware timers
|
|
==========================================
|
|
|
|
.. note::
|
|
|
|
This class is a non-standard Timer implementation for the WiPy.
|
|
It is available simply as ``machine.Timer`` on the WiPy but is named in the
|
|
documentation below as ``machine.TimerWiPy`` to distinguish it from the
|
|
more general :ref:`machine.Timer <machine.Timer>` class.
|
|
|
|
Hardware timers deal with timing of periods and events. Timers are perhaps
|
|
the most flexible and heterogeneous kind of hardware in MCUs and SoCs,
|
|
differently greatly from a model to a model. MicroPython's Timer class
|
|
defines a baseline operation of executing a callback with a given period
|
|
(or once after some delay), and allow specific boards to define more
|
|
non-standard behaviour (which thus won't be portable to other boards).
|
|
|
|
See discussion of :ref:`important constraints <machine_callbacks>` on
|
|
Timer callbacks.
|
|
|
|
.. note::
|
|
|
|
Memory can't be allocated inside irq handlers (an interrupt) and so
|
|
exceptions raised within a handler don't give much information. See
|
|
:func:`micropython.alloc_emergency_exception_buf` for how to get around this
|
|
limitation.
|
|
|
|
Constructors
|
|
------------
|
|
|
|
.. class:: TimerWiPy(id, ...)
|
|
|
|
Construct a new timer object of the given id. Id of -1 constructs a
|
|
virtual timer (if supported by a board).
|
|
|
|
Methods
|
|
-------
|
|
|
|
.. method:: TimerWiPy.init(mode, *, width=16)
|
|
|
|
Initialise the timer. Example::
|
|
|
|
tim.init(Timer.PERIODIC) # periodic 16-bit timer
|
|
tim.init(Timer.ONE_SHOT, width=32) # one shot 32-bit timer
|
|
|
|
Keyword arguments:
|
|
|
|
- ``mode`` can be one of:
|
|
|
|
- ``TimerWiPy.ONE_SHOT`` - The timer runs once until the configured
|
|
period of the channel expires.
|
|
- ``TimerWiPy.PERIODIC`` - The timer runs periodically at the configured
|
|
frequency of the channel.
|
|
- ``TimerWiPy.PWM`` - Output a PWM signal on a pin.
|
|
|
|
- ``width`` must be either 16 or 32 (bits). For really low frequencies < 5Hz
|
|
(or large periods), 32-bit timers should be used. 32-bit mode is only available
|
|
for ``ONE_SHOT`` AND ``PERIODIC`` modes.
|
|
|
|
.. method:: TimerWiPy.deinit()
|
|
|
|
Deinitialises the timer. Stops the timer, and disables the timer peripheral.
|
|
|
|
.. method:: TimerWiPy.channel(channel, **, freq, period, polarity=TimerWiPy.POSITIVE, duty_cycle=0)
|
|
|
|
If only a channel identifier passed, then a previously initialized channel
|
|
object is returned (or ``None`` if there is no previous channel).
|
|
|
|
Otherwise, a TimerChannel object is initialized and returned.
|
|
|
|
The operating mode is the one configured to the Timer object that was used to
|
|
create the channel.
|
|
|
|
- ``channel`` if the width of the timer is 16-bit, then must be either ``TIMER.A``, ``TIMER.B``.
|
|
If the width is 32-bit then it **must be** ``TIMER.A | TIMER.B``.
|
|
|
|
Keyword only arguments:
|
|
|
|
- ``freq`` sets the frequency in Hz.
|
|
- ``period`` sets the period in microseconds.
|
|
|
|
.. note::
|
|
|
|
Either ``freq`` or ``period`` must be given, never both.
|
|
|
|
- ``polarity`` this is applicable for ``PWM``, and defines the polarity of the duty cycle
|
|
- ``duty_cycle`` only applicable to ``PWM``. It's a percentage (0.00-100.00). Since the WiPy
|
|
doesn't support floating point numbers the duty cycle must be specified in the range 0-10000,
|
|
where 10000 would represent 100.00, 5050 represents 50.50, and so on.
|
|
|
|
.. note::
|
|
|
|
When the channel is in PWM mode, the corresponding pin is assigned automatically, therefore
|
|
there's no need to assign the alternate function of the pin via the ``Pin`` class. The pins which
|
|
support PWM functionality are the following:
|
|
|
|
- ``GP24`` on Timer 0 channel A.
|
|
- ``GP25`` on Timer 1 channel A.
|
|
- ``GP9`` on Timer 2 channel B.
|
|
- ``GP10`` on Timer 3 channel A.
|
|
- ``GP11`` on Timer 3 channel B.
|
|
|
|
class TimerChannel --- setup a channel for a timer
|
|
==================================================
|
|
|
|
Timer channels are used to generate/capture a signal using a timer.
|
|
|
|
TimerChannel objects are created using the Timer.channel() method.
|
|
|
|
Methods
|
|
-------
|
|
|
|
.. method:: timerchannel.irq(*, trigger, priority=1, handler=None)
|
|
|
|
The behaviour of this callback is heavily dependent on the operating
|
|
mode of the timer channel:
|
|
|
|
- If mode is ``TimerWiPy.PERIODIC`` the callback is executed periodically
|
|
with the configured frequency or period.
|
|
- If mode is ``TimerWiPy.ONE_SHOT`` the callback is executed once when
|
|
the configured timer expires.
|
|
- If mode is ``TimerWiPy.PWM`` the callback is executed when reaching the duty
|
|
cycle value.
|
|
|
|
The accepted params are:
|
|
|
|
- ``priority`` level of the interrupt. Can take values in the range 1-7.
|
|
Higher values represent higher priorities.
|
|
- ``handler`` is an optional function to be called when the interrupt is triggered.
|
|
- ``trigger`` must be ``TimerWiPy.TIMEOUT`` when the operating mode is either ``TimerWiPy.PERIODIC`` or
|
|
``TimerWiPy.ONE_SHOT``. In the case that mode is ``TimerWiPy.PWM`` then trigger must be equal to
|
|
``TimerWiPy.MATCH``.
|
|
|
|
Returns a callback object.
|
|
|
|
.. method:: timerchannel.freq([value])
|
|
|
|
Get or set the timer channel frequency (in Hz).
|
|
|
|
.. method:: timerchannel.period([value])
|
|
|
|
Get or set the timer channel period (in microseconds).
|
|
|
|
.. method:: timerchannel.duty_cycle([value])
|
|
|
|
Get or set the duty cycle of the PWM signal. It's a percentage (0.00-100.00). Since the WiPy
|
|
doesn't support floating point numbers the duty cycle must be specified in the range 0-10000,
|
|
where 10000 would represent 100.00, 5050 represents 50.50, and so on.
|
|
|
|
Constants
|
|
---------
|
|
|
|
.. data:: TimerWiPy.ONE_SHOT
|
|
.. data:: TimerWiPy.PERIODIC
|
|
|
|
Timer operating mode.
|