micropython/ports/mimxrt/boards/MIMXRT1021_af.csv
robert-hh 81f706aee4 mimxrt: Support PWM using the FLEXPWM and QTMR modules.
Frequency range 15Hz/18Hz to > 1 MHz, with decreasing resolution of the
duty cycle.  The basic API is supported as documentated, except that
keyword parameters are accepted for both the instatiaton and the
PWM.init() call.

Extensions: support PWM for channel pairs.  Channel pairs are declared by
supplying 2-element tuples for the pins.  The two channels of a pair must
be the A/B channel of a FLEXPWM module.  These form than a complementary
pair.

Additional supported keyword arguments:

- center=value Defines the center position of a pulse within the pulse
  cycle.  The align keyword is actually shortcut for center.

- sync=True|False: If set to True, the channels will be synchronized to a
  submodule 0 channel, which has already to be enabled.

- align=PWM.MIDDLE | PMW.BEGIN | PWM.END. It defines, whether synchronized
  channels are Center-Aligned or Edge-aligned.  The channels must be either
  complementary a channel pair or a group of synchronized channels.  It may
  as well be applied to a single channel, but withiout any benefit.

- invert= 0..3. Controls ouput inversion of the pins.  Bit 0 controls the
  first pin, bit 1 the second.

- deadtime=time_ns time of complementary channels for delaying the rising
  slope.

- xor=0|1|2 xor causes the output of channel A and B to be xored.  If
  applied to a X channel, it shows the value oif A ^ B.  If applied to an A
  or B channel, both channel show the xored signal for xor=1.  For xor=2,
  the xored signal is split between channels A and B.  See also the
  Reference Manual, chapter about double pulses.  The behavior of xor=2 can
  also be achieved using the center method for locating a pulse within a
  clock period.

The output is enabled for board pins only.

CPU pins may still be used for FLEXPWM, e.g. as sync source, but the signal
will not be routed to the output.  That applies only to FLEXPWM pins.  The
use of QTMR pins which are not board pins will be rejected.

As part of this commit, the _WFE() statement is removed from
ticks_delay_us64() to prevent PWM glitching during calls to sleep().
2021-11-24 13:48:27 +11:00

11 KiB

1PadALT0ALT1ALT2ALT3ALT4ALT5ALT6ALT7ALT8ALT9ADCACMPDefault
2GPIO_AD_B0_00JTAG_TMSGPIO1_IO00USBPHY1_TSTI_TX_ENGPT1_COMPARE1ALT0
3GPIO_AD_B0_01JTAG_TCKGPIO1_IO01USBPHY1_TSTI_TX_HIZGPT1_CAPTURE2ALT0
4GPIO_AD_B0_02JTAG_MODGPIO1_IO02USBPHY1_TSTI_TX_LS_MODEGPT1_CAPTURE1ALT0
5GPIO_AD_B0_03JTAG_TDIUSDHC2_CD_BWDOG1_BSAI1_MCLKUSDHC1_WPGPIO1_IO03USB_OTG1_OCCCM_PMIC_RDYALT0
6GPIO_AD_B0_04JTAG_TDOFLEXCAN1_TXUSDHC1_WPTMR2_TIMER0ENET_MDIOGPIO1_IO04USB_OTG1_PWREWM_OUT_BALT0
7GPIO_AD_B0_05JTAG_TRSTBFLEXCAN1_RXUSDHC1_CD_BTMR2_TIMER1ENET_MDCGPIO1_IO05USB_OTG1_IDARM_NMIALT0
8GPIO_AD_B0_06PIT_TRIGGER0MQS_RIGHTLPUART1_TXDTMR2_TIMER2FLEXPWM2_PWM3_AGPIO1_IO06REF_32K_OUTALT5
9GPIO_AD_B0_07PIT_TRIGGER1MQS_LEFTLPUART1_RXDTMR2_TIMER3FLEXPWM2_PWM3_BGPIO1_IO07REF_24M_OUTALT5
10GPIO_AD_B0_08ENET_TX_CLKLPI2C3_SCLLPUART1_CTS_BKPP_COL0ENET_REF_CLKGPIO1_IO08ARM_CM7_TXEVACMP1_IN4ALT5
11GPIO_AD_B0_09ENET_RX_DATA1LPI2C3_SDALPUART1_RTS_BKPP_ROW0GPIO1_IO09ARM_CM7_RXEVACMP2_IN4ALT5
12GPIO_AD_B0_10ENET_RX_DATA0LPSPI1_SCKLPUART5_TXDKPP_COL1FLEXPWM2_PWM2_AGPIO1_IO10ARM_TRACE_CLKACMP3_IN4ALT5
13GPIO_AD_B0_11ENET_RX_ENLPSPI1_PCS0LPUART5_RXDKPP_ROW1FLEXPWM2_PWM2_BGPIO1_IO11ARM_TRACE_SWOACMP4_IN4ALT5
14GPIO_AD_B0_12ENET_RX_ERLPSPI1_SDOLPUART3_CTS_BKPP_COL2FLEXPWM2_PWM1_AGPIO1_IO12ARM_TRACE0SNVS_VIO_5_CTLADC1_IN0ALT5
15GPIO_AD_B0_13ENET_TX_ENLPSPI1_SDILPUART3_RTS_BKPP_ROW2FLEXPWM2_PWM1_BGPIO1_IO13SNVS_VIO_5_BADC2_IN0ALT5
16GPIO_AD_B0_14ENET_TX_DATA0FLEXCAN2_TXLPUART3_TXDKPP_COL3FLEXPWM2_PWM0_AGPIO1_IO14WDOG1_ANYADC1_IN1,ADC2_IN1ACMP1_IN0,ACMP2_IN0,ACMP3_IN0,ACMP4_IN0ALT5
17GPIO_AD_B0_15ENET_TX_DATA1FLEXCAN2_RXLPUART3_RXDKPP_ROW3FLEXPWM2_PWM0_BGPIO1_IO15ADC1_IN2,ADC2_IN2ACMP1_IN1,ACMP2_IN1,ACMP3_IN1,ACMP4_IN1ALT5
18GPIO_AD_B1_00SEMC_RDYFLEXSPI_A_DATA3FLEXCAN2_TXSAI1_MCLKFLEXIO1_D15GPIO1_IO16ENET_1588_EVENT2_OUTKPP_COL4ACMP1_IN2ALT5
19GPIO_AD_B1_01SEMC_CSX0FLEXSPI_A_SCLKFLEXCAN2_RXSAI1_TX_BCLKFLEXIO1_D14GPIO1_IO17ENET_1588_EVENT2_INKPP_ROW4ADC1_IN3ACMP2_IN2ALT5
20GPIO_AD_B1_02SEMC_CSX1FLEXSPI_A_DATA0LPSPI4_SCKSAI1_TX_SYNCFLEXIO1_D13GPIO1_IO18ENET_1588_EVENT3_OUTKPP_COL5ADC2_IN3ACMP3_IN2ALT5
21GPIO_AD_B1_03SEMC_CSX2FLEXSPI_A_DATA2LPSPI4_PCS0SAI1_TX_DATA0FLEXIO1_D12GPIO1_IO19ENET_1588_EVENT3_INKPP_ROW5ADC1_IN4ACMP4_IN2ALT5
22GPIO_AD_B1_04SEMC_CSX3FLEXSPI_A_DATA1LPSPI4_SDOSAI1_RX_SYNCFLEXIO1_D11GPIO1_IO20LPSPI1_PCS1KPP_COL6ADC2_IN4ACMP1_IN3ALT5
23GPIO_AD_B1_05USDHC1_WPFLEXSPI_A_SS0_BLPSPI4_SDISAI1_RX_DATA0FLEXIO1_D10GPIO1_IO21LPSPI1_PCS2KPP_ROW6ADC1_IN5,ADC2_IN5ACMP2_IN3ALT5
24GPIO_AD_B1_06USDHC1_RESET_BFLEXPWM1_PWM0_ALPUART2_CTS_BSAI1_RX_BCLKFLEXIO1_D09GPIO1_IO22LPSPI1_PCS3KPP_COL7ADC1_IN6,ADC2_IN6ACMP3_IN3ALT5
25GPIO_AD_B1_07USDHC1_VSELECTFLEXPWM1_PWM0_BLPUART2_RTS_BSAI1_TX_DATA1FLEXIO1_D08GPIO1_IO23LPSPI3_PCS3KPP_ROW7ADC1_IN7,ADC2_IN7ACMP4_IN3ALT5
26GPIO_AD_B1_08LPI2C2_SCLFLEXPWM1_PWM1_ALPUART2_TXDSAI1_TX_DATA2FLEXIO1_D07GPIO1_IO24LPSPI3_PCS2XBAR_INOUT12ADC1_IN8,ADC2_IN8ACMP1_IN5ALT5
27GPIO_AD_B1_09LPI2C2_SDAFLEXPWM1_PWM1_BLPUART2_RXDSAI1_TX_DATA3FLEXIO1_D06GPIO1_IO25LPSPI3_PCS1XBAR_INOUT13ADC1_IN9,ADC2_IN9ACMP2_IN5ALT5
28GPIO_AD_B1_10USB_OTG1_PWRFLEXPWM1_PWM2_ALPUART4_TXDUSDHC1_CD_BFLEXIO1_D05GPIO1_IO26GPT2_CAPTURE1ADC1_IN10,ADC2_IN10ACMP3_IN5ALT5
29GPIO_AD_B1_11USB_OTG1_IDFLEXPWM1_PWM2_BLPUART4_RXDUSDHC1_WPFLEXIO1_D04GPIO1_IO27GPT2_COMPARE1ADC1_IN11,ADC2_IN11ACMP4_IN5ALT5
30GPIO_AD_B1_12USB_OTG1_OCACMP1_OUTLPSPI3_SCKUSDHC2_CD_BFLEXIO1_D03GPIO1_IO28FLEXPWM1_PWM3_AADC1_IN12,ADC2_IN12ACMP1_IN6,ACMP1_OUTALT5
31GPIO_AD_B1_13LPI2C1_HREQACMP2_OUTLPSPI3_PCS0USDHC2_WPFLEXIO1_D02GPIO1_IO29FLEXPWM1_PWM3_BADC1_IN13,ADC2_IN13ACMP2_IN6,ACMP2_OUTALT5
32GPIO_AD_B1_14LPI2C1_SCLACMP3_OUTLPSPI3_SDOENET_1588_EVENT0_OUTFLEXIO1_D01GPIO1_IO30ADC1_IN14,ADC2_IN14ACMP3_IN6,ACMP3_OUTALT5
33GPIO_AD_B1_15LPI2C1_SDAACMP4_OUTLPSPI3_SDIENET_1588_EVENT0_INFLEXIO1_D00GPIO1_IO31ADC1_IN15,ADC2_IN15ACMP4_IN6,ACMP4_OUTALT5
34GPIO_EMC_00SEMC_DA00TMR2_TIMER0LPUART4_CTS_BSPDIF_SR_CLKLPSPI2_SCKGPIO2_IO00FLEXCAN1_TXPIT_TRIGGER2ALT5
35GPIO_EMC_01SEMC_DA01TMR2_TIMER1LPUART4_RTS_BSPDIF_OUTLPSPI2_PCS0GPIO2_IO01FLEXCAN1_RXPIT_TRIGGER3ALT5
36GPIO_EMC_02SEMC_DA02TMR2_TIMER2LPUART4_TXDSPDIF_LOCKLPSPI2_SDOGPIO2_IO02LPI2C1_SCLALT5
37GPIO_EMC_03SEMC_DA03TMR2_TIMER3LPUART4_RXDSPDIF_EXT_CLKLPSPI2_SDIGPIO2_IO03LPI2C1_SDAALT5
38GPIO_EMC_04SEMC_DA04XBAR_INOUT04SPDIF_OUTSAI2_TX_BCLKFLEXIO1_D16GPIO2_IO04USBPHY1_TSTO_PLL_CLK20DIVALT5
39GPIO_EMC_05SEMC_DA05XBAR_INOUT05SPDIF_INSAI2_TX_SYNCFLEXIO1_D17GPIO2_IO05USBPHY1_TSTI_TX_HS_MODEALT5
40GPIO_EMC_06SEMC_DA06XBAR_INOUT06LPUART3_TXDSAI2_TX_DATAFLEXIO1_D18GPIO2_IO06USBPHY1_TSTI_TX_DNALT5
41GPIO_EMC_07SEMC_DA07XBAR_INOUT07LPUART3_RXDSAI2_RX_SYNCFLEXIO1_D19GPIO2_IO07USBPHY1_TSTO_RX_SQUELCHALT5
42GPIO_EMC_08SEMC_DM0XBAR_INOUT08FLEXCAN2_TXSAI2_RX_DATAFLEXIO1_D20GPIO2_IO08USBPHY1_TSTO_RX_DISCON_DETALT5
43GPIO_EMC_09SEMC_WEXBAR_INOUT09FLEXCAN2_RXSAI2_RX_BCLKFLEXIO1_D21GPIO2_IO09USBPHY1_TSTO_RX_HS_RXDALT5
44GPIO_EMC_10SEMC_CASXBAR_INOUT10LPI2C4_SDASAI1_TX_SYNCLPSPI2_SCKGPIO2_IO10FLEXPWM2_PWM0_XALT5
45GPIO_EMC_11SEMC_RASXBAR_INOUT11LPI2C4_SCLSAI1_TX_BCLKLPSPI2_PCS0GPIO2_IO11FLEXPWM2_PWM1_XALT5
46GPIO_EMC_12SEMC_CS0XBAR_INOUT12LPUART6_TXDSAI1_TX_DATA0LPSPI2_SDOGPIO2_IO12FLEXPWM2_PWM2_XALT5
47GPIO_EMC_13SEMC_BA0XBAR_INOUT13LPUART6_RXDSAI1_RX_DATA0LPSPI2_SDIGPIO2_IO13FLEXPWM2_PWM3_XCCM_PMIC_RDYALT5
48GPIO_EMC_14SEMC_BA1XBAR_INOUT14LPUART6_CTS_BSAI1_RX_BCLKLPSPI2_PCS1GPIO2_IO14FLEXCAN1_TXALT5
49GPIO_EMC_15SEMC_ADDR10XBAR_INOUT15LPUART6_RTS_BSAI1_RX_SYNCWDOG1_BGPIO2_IO15FLEXCAN1_RXALT5
50GPIO_EMC_16SEMC_ADDR00MQS_RIGHTSAI2_MCLKGPIO2_IO16SRC_BOOT_MODE0ALT5
51GPIO_EMC_17SEMC_ADDR01MQS_LEFTSAI3_MCLKGPIO2_IO17SRC_BOOT_MODE1ALT5
52GPIO_EMC_18SEMC_ADDR02XBAR_INOUT16LPI2C2_SDASAI1_RX_SYNCFLEXIO1_D22GPIO2_IO18SRC_BT_CFG0ALT5
53GPIO_EMC_19SEMC_ADDR03XBAR_INOUT17LPI2C2_SCLSAI1_RX_BCLKFLEXIO1_D23GPIO2_IO19SRC_BT_CFG1ALT5
54GPIO_EMC_20SEMC_ADDR04FLEXPWM1_PWM3_ALPUART2_CTS_BSAI1_MCLKFLEXIO1_D24GPIO2_IO20SRC_BT_CFG2ALT5
55GPIO_EMC_21SEMC_ADDR05FLEXPWM1_PWM3_BLPUART2_RTS_BSAI1_RX_DATA0FLEXIO1_D25GPIO2_IO21SRC_BT_CFG3ALT5
56GPIO_EMC_22SEMC_ADDR06FLEXPWM1_PWM2_ALPUART2_TXDSAI1_TX_DATA3FLEXIO1_D26GPIO2_IO22SRC_BT_CFG4ALT5
57GPIO_EMC_23SEMC_ADDR07FLEXPWM1_PWM2_BLPUART2_RXDSAI1_TX_DATA2FLEXIO1_D27GPIO2_IO23SRC_BT_CFG5ALT5
58GPIO_EMC_24SEMC_ADDR08FLEXPWM1_PWM1_ALPUART8_CTS_BSAI1_TX_DATA1FLEXIO1_D28GPIO2_IO24SRC_BT_CFG6ALT5
59GPIO_EMC_25SEMC_ADDR09FLEXPWM1_PWM1_BLPUART8_RTS_BSAI1_TX_DATA0FLEXIO1_D29GPIO2_IO25SRC_BT_CFG7ALT5
60GPIO_EMC_26SEMC_ADDR11FLEXPWM1_PWM0_ALPUART8_TXDSAI1_TX_BCLKFLEXIO1_D30GPIO2_IO26SRC_BT_CFG8ALT5
61GPIO_EMC_27SEMC_ADDR12FLEXPWM1_PWM0_BLPUART8_RXDSAI1_TX_SYNCFLEXIO1_D31GPIO2_IO27SRC_BT_CFG9ALT5
62GPIO_EMC_28SEMC_DQSFLEXPWM2_PWM3_AXBAR_INOUT18SAI3_MCLKEWM_OUT_BGPIO2_IO28GPT2_CAPTURE2FLEXPWM1_PWM0_XALT5
63GPIO_EMC_29SEMC_CKEFLEXPWM2_PWM3_BXBAR_INOUT19SAI3_RX_BCLKWDOG2_RST_B_DEBGPIO2_IO29GPT2_COMPARE2FLEXPWM1_PWM1_XALT5
64GPIO_EMC_30SEMC_CLKFLEXPWM2_PWM2_ALPUART4_CTS_BSAI3_RX_SYNCWDOG1_RST_B_DEBGPIO2_IO30GPT2_COMPARE3FLEXPWM1_PWM2_XALT5
65GPIO_EMC_31SEMC_DM1FLEXPWM2_PWM2_BLPUART4_RTS_BSAI3_RX_DATAWDOG2_BGPIO2_IO31GPT2_CLKFLEXPWM1_PWM3_XALT5
66GPIO_EMC_32SEMC_DA08TMR1_TIMER0LPUART4_TXDSAI3_TX_DATALPSPI4_SCKGPIO3_IO00USBPHY1_TSTO_RX_FS_RXDREF_24M_OUTALT5
67GPIO_EMC_33SEMC_DA09TMR1_TIMER1LPUART4_RXDSAI3_TX_BCLKLPSPI4_PCS0GPIO3_IO01USBPHY1_TSTI_TX_DPSRC_TESTER_ACKALT5
68GPIO_EMC_34SEMC_DA10TMR1_TIMER2LPUART7_TXDSAI3_TX_SYNCLPSPI4_SDOGPIO3_IO02ENET_CRSALT5
69GPIO_EMC_35SEMC_DA11TMR1_TIMER3LPUART7_RXDUSDHC2_WPLPSPI4_SDIGPIO3_IO03ENET_COLALT5
70GPIO_EMC_36SEMC_DA12FLEXPWM2_PWM1_ALPUART5_CTS_BCCM_PMIC_RDYLPSPI4_PCS1GPIO3_IO04ENET_RX_CLKUSDHC1_WPALT5
71GPIO_EMC_37SEMC_DA13FLEXPWM2_PWM1_BLPUART5_RTS_BMQS_RIGHTLPSPI4_PCS2GPIO3_IO05ENET_RX_DATA3USDHC1_VSELECTALT5
72GPIO_EMC_38SEMC_DA14FLEXPWM2_PWM0_ALPUART5_TXDMQS_LEFTLPSPI4_PCS3GPIO3_IO06ENET_RX_DATA2USDHC1_CD_BALT5
73GPIO_EMC_39SEMC_DA15FLEXPWM2_PWM0_BLPUART5_RXDUSB_OTG1_OCWDOG1_BGPIO3_IO07ENET_TX_ERGPT1_CLKALT5
74GPIO_EMC_40SEMC_CSX0XBAR_INOUT18SPDIF_OUTUSB_OTG1_IDENET_MDIOGPIO3_IO08ENET_TX_DATA3GPT1_COMPARE3ALT5
75GPIO_EMC_41SEMC_RDYXBAR_INOUT19SPDIF_INUSB_OTG1_PWRENET_MDCGPIO3_IO09ENET_TX_DATA2GPT1_COMPARE2ALT5
76GPIO_SD_B0_00USDHC1_DATA2TMR1_TIMER0SAI1_MCLKSAI2_MCLKLPI2C3_SCLGPIO3_IO13FLEXSPI_A_SS1_BXBAR_INOUT14ALT5
77GPIO_SD_B0_01USDHC1_DATA3TMR1_TIMER1REF_24M_OUTSAI2_RX_SYNCLPI2C3_SDAGPIO3_IO14FLEXSPI_B_SS1_BXBAR_INOUT15ALT5
78GPIO_SD_B0_02USDHC1_CMDTMR1_TIMER2LPUART7_CTS_BSAI2_RX_BCLKLPSPI1_SCKGPIO3_IO15ENET_MDIOXBAR_INOUT16ALT5
79GPIO_SD_B0_03USDHC1_CLKTMR1_TIMER3LPUART7_RTS_BSAI2_RX_DATALPSPI1_PCS0GPIO3_IO16ENET_MDCALT5
80GPIO_SD_B0_04USDHC1_DATA0FLEXCAN2_TXLPUART7_TXDSAI2_TX_DATALPSPI1_SDOGPIO3_IO17FLEXSPI_B_SS0_BALT5
81GPIO_SD_B0_05USDHC1_DATA1FLEXCAN2_RXLPUART7_RXDSAI2_TX_BCLKLPSPI1_SDIGPIO3_IO18FLEXSPI_B_DQSALT5
82GPIO_SD_B0_06USDHC1_CD_BUSDHC1_RESET_BREF_32K_OUTSAI2_TX_SYNCWDOG1_BGPIO3_IO19XBAR_INOUT17ALT5
83GPIO_SD_B1_00USDHC2_DATA2FLEXSPI_B_DATA3LPUART6_TXDXBAR_INOUT10FLEXCAN1_TXGPIO3_IO20ALT5
84GPIO_SD_B1_01USDHC2_DATA3FLEXSPI_B_SCLKLPUART6_RXDFLEXSPI_A_SS1_BFLEXCAN1_RXGPIO3_IO21ALT5
85GPIO_SD_B1_02USDHC2_CMDFLEXSPI_B_DATA0LPUART8_TXDLPI2C4_SCLENET_1588_EVENT1_OUTGPIO3_IO22CCM_CLKO1ALT5
86GPIO_SD_B1_03USDHC2_CLKFLEXSPI_B_DATA2LPUART8_RXDLPI2C4_SDAENET_1588_EVENT1_INGPIO3_IO23CCM_CLKO2ALT5
87GPIO_SD_B1_04USDHC2_DATA0FLEXSPI_B_DATA1ENET_TX_CLKENET_REF_CLKEWM_OUT_BGPIO3_IO24CCM_WAITALT5
88GPIO_SD_B1_05USDHC2_DATA1FLEXSPI_A_DQSENET_RX_DATA1SAI3_MCLKFLEXSPI_B_SS0_BGPIO3_IO25CCM_PMIC_RDYALT5
89GPIO_SD_B1_06USDHC2_CD_BFLEXSPI_A_DATA3ENET_RX_DATA0SAI3_TX_BCLKLPSPI2_PCS0GPIO3_IO26CCM_STOPALT5
90GPIO_SD_B1_07USDHC2_RESET_BFLEXSPI_A_SCLKENET_RX_ENSAI3_TX_SYNCLPSPI2_SCKGPIO3_IO27ALT5
91GPIO_SD_B1_08USDHC2_DATA4FLEXSPI_A_DATA0ENET_RX_ERSAI3_TX_DATALPSPI2_SDOGPIO3_IO28ALT5
92GPIO_SD_B1_09USDHC2_DATA5FLEXSPI_A_DATA2ENET_TX_ENSAI3_RX_BCLKLPSPI2_SDIGPIO3_IO29CCM_REF_EN_BALT5
93GPIO_SD_B1_10USDHC2_DATA6FLEXSPI_A_DATA1ENET_TX_DATA0SAI3_RX_SYNCLPSPI2_PCS2GPIO3_IO30SRC_SYSTEM_RESETALT5
94GPIO_SD_B1_11USDHC2_DATA7FLEXSPI_A_SS0_BENET_TX_DATA1SAI3_RX_DATALPSPI2_PCS3GPIO3_IO31SRC_EARLY_RESETALT5