1313 * copies of the Software, and to permit persons to whom the Software is
1414 * furnished to do so, subject to the following conditions:
1515 *
16- * The above copyright notice and this permission notice shall be included in
17- * all copies or substantial portions of the Software.
16+ * 1. The above copyright notice and this permission notice shall be
17+ * included in all copies or substantial portions of the Software.
18+ *
19+ * 2. If the Software is incorporated into a build system that allows
20+ * selection among a list of target devices, then similar target
21+ * devices manufactured by PJRC.COM must be included in the list of
22+ * target devices and selectable in the same manner.
1823 *
1924 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
2025 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
3237
3338// These #defines are from here:
3439// https://github.com/PaulStoffregen/cores/blob/10025393e83ca9f4dc5646643a41cb2f32022ae4/teensy4/imxrt.h
35- #define CCM_CCGR_ON 3
3640#define FLEXSPI_MCR2_CLRLEARNPHASE (x ) ((uint32_t)(x << 14))
3741#define FLEXSPI_LUTKEY_VALUE ((uint32_t)0x5AF05AF0)
3842
@@ -97,23 +101,23 @@ static uint8_t flexspi2_psram_size(uint32_t addr) {
97101
98102size_t configure_external_ram () {
99103 // initialize pins
100- IOMUXC -> SW_PAD_CTL_PAD [22 ] = 0x1B0F9 ; // 100K pullup, strong drive, max speed, hyst
101- IOMUXC -> SW_PAD_CTL_PAD [23 ] = 0x110F9 ; // keeper, strong drive, max speed, hyst
102- IOMUXC -> SW_PAD_CTL_PAD [24 ] = 0x1B0F9 ; // 100K pullup, strong drive, max speed, hyst
103- IOMUXC -> SW_PAD_CTL_PAD [25 ] = 0x100F9 ; // strong drive, max speed, hyst
104- IOMUXC -> SW_PAD_CTL_PAD [26 ] = 0x170F9 ; // 47K pullup, strong drive, max speed, hyst
105- IOMUXC -> SW_PAD_CTL_PAD [27 ] = 0x170F9 ; // 47K pullup, strong drive, max speed, hyst
106- IOMUXC -> SW_PAD_CTL_PAD [28 ] = 0x170F9 ; // 47K pullup, strong drive, max speed, hyst
107- IOMUXC -> SW_PAD_CTL_PAD [29 ] = 0x170F9 ; // 47K pullup, strong drive, max speed, hyst
108-
109- IOMUXC -> SW_MUX_CTL_PAD [22 ] = 8 | 0x10 ; // ALT1 = FLEXSPI2_A_SS1_B (Flash)
110- IOMUXC -> SW_MUX_CTL_PAD [23 ] = 8 | 0x10 ; // ALT1 = FLEXSPI2_A_DQS
111- IOMUXC -> SW_MUX_CTL_PAD [24 ] = 8 | 0x10 ; // ALT1 = FLEXSPI2_A_SS0_B (RAM)
112- IOMUXC -> SW_MUX_CTL_PAD [25 ] = 8 | 0x10 ; // ALT1 = FLEXSPI2_A_SCLK
113- IOMUXC -> SW_MUX_CTL_PAD [26 ] = 8 | 0x10 ; // ALT1 = FLEXSPI2_A_DATA0
114- IOMUXC -> SW_MUX_CTL_PAD [27 ] = 8 | 0x10 ; // ALT1 = FLEXSPI2_A_DATA1
115- IOMUXC -> SW_MUX_CTL_PAD [28 ] = 8 | 0x10 ; // ALT1 = FLEXSPI2_A_DATA2
116- IOMUXC -> SW_MUX_CTL_PAD [29 ] = 8 | 0x10 ; // ALT1 = FLEXSPI2_A_DATA3
104+ IOMUXC -> SW_PAD_CTL_PAD [kIOMUXC_SW_MUX_CTL_PAD_GPIO_EMC_22 ] = 0x1B0F9 ; // 100K pullup, strong drive, max speed, hyst
105+ IOMUXC -> SW_PAD_CTL_PAD [kIOMUXC_SW_MUX_CTL_PAD_GPIO_EMC_23 ] = 0x110F9 ; // keeper, strong drive, max speed, hyst
106+ IOMUXC -> SW_PAD_CTL_PAD [kIOMUXC_SW_MUX_CTL_PAD_GPIO_EMC_24 ] = 0x1B0F9 ; // 100K pullup, strong drive, max speed, hyst
107+ IOMUXC -> SW_PAD_CTL_PAD [kIOMUXC_SW_MUX_CTL_PAD_GPIO_EMC_25 ] = 0x100F9 ; // strong drive, max speed, hyst
108+ IOMUXC -> SW_PAD_CTL_PAD [kIOMUXC_SW_MUX_CTL_PAD_GPIO_EMC_26 ] = 0x170F9 ; // 47K pullup, strong drive, max speed, hyst
109+ IOMUXC -> SW_PAD_CTL_PAD [kIOMUXC_SW_MUX_CTL_PAD_GPIO_EMC_27 ] = 0x170F9 ; // 47K pullup, strong drive, max speed, hyst
110+ IOMUXC -> SW_PAD_CTL_PAD [kIOMUXC_SW_MUX_CTL_PAD_GPIO_EMC_28 ] = 0x170F9 ; // 47K pullup, strong drive, max speed, hyst
111+ IOMUXC -> SW_PAD_CTL_PAD [kIOMUXC_SW_MUX_CTL_PAD_GPIO_EMC_29 ] = 0x170F9 ; // 47K pullup, strong drive, max speed, hyst
112+
113+ IOMUXC -> SW_MUX_CTL_PAD [kIOMUXC_SW_MUX_CTL_PAD_GPIO_EMC_22 ] = 8 | 0x10 ; // ALT1 = FLEXSPI2_A_SS1_B (Flash)
114+ IOMUXC -> SW_MUX_CTL_PAD [kIOMUXC_SW_MUX_CTL_PAD_GPIO_EMC_23 ] = 8 | 0x10 ; // ALT1 = FLEXSPI2_A_DQS
115+ IOMUXC -> SW_MUX_CTL_PAD [kIOMUXC_SW_MUX_CTL_PAD_GPIO_EMC_24 ] = 8 | 0x10 ; // ALT1 = FLEXSPI2_A_SS0_B (RAM)
116+ IOMUXC -> SW_MUX_CTL_PAD [kIOMUXC_SW_MUX_CTL_PAD_GPIO_EMC_25 ] = 8 | 0x10 ; // ALT1 = FLEXSPI2_A_SCLK
117+ IOMUXC -> SW_MUX_CTL_PAD [kIOMUXC_SW_MUX_CTL_PAD_GPIO_EMC_26 ] = 8 | 0x10 ; // ALT1 = FLEXSPI2_A_DATA0
118+ IOMUXC -> SW_MUX_CTL_PAD [kIOMUXC_SW_MUX_CTL_PAD_GPIO_EMC_27 ] = 8 | 0x10 ; // ALT1 = FLEXSPI2_A_DATA1
119+ IOMUXC -> SW_MUX_CTL_PAD [kIOMUXC_SW_MUX_CTL_PAD_GPIO_EMC_28 ] = 8 | 0x10 ; // ALT1 = FLEXSPI2_A_DATA2
120+ IOMUXC -> SW_MUX_CTL_PAD [kIOMUXC_SW_MUX_CTL_PAD_GPIO_EMC_29 ] = 8 | 0x10 ; // ALT1 = FLEXSPI2_A_DATA3
117121
118122 IOMUXC -> SELECT_INPUT_1 [kIOMUXC_FLEXSPI2_IPP_IND_DQS_FA_SELECT_INPUT ] = 1 ; // GPIO_EMC_23 for Mode: ALT8, pg 986
119123 IOMUXC -> SELECT_INPUT_1 [kIOMUXC_FLEXSPI2_IPP_IND_IO_FA_BIT0_SELECT_INPUT ] = 1 ; // GPIO_EMC_26 for Mode: ALT8
@@ -123,18 +127,17 @@ size_t configure_external_ram() {
123127 IOMUXC -> SELECT_INPUT_1 [kIOMUXC_FLEXSPI2_IPP_IND_SCK_FA_SELECT_INPUT ] = 1 ; // GPIO_EMC_25 for Mode: ALT8
124128
125129 // turn on clock (QSPI flash & PSRAM chips usually spec max clock 100 to 133 MHz)
126- CCM -> CBCMR = (CCM -> CBCMR & ~(CCM_CBCMR_FLEXSPI2_PODF_MASK | CCM_CBCMR_FLEXSPI2_CLK_SEL_MASK ))
127- // | CCM_CBCMR_FLEXSPI2_PODF(5) | CCM_CBCMR_FLEXSPI2_CLK_SEL(3); // 88.0 MHz
128- // | CCM_CBCMR_FLEXSPI2_PODF(3) | CCM_CBCMR_FLEXSPI2_CLK_SEL(0); // 99.0 MHz
129- // | CCM_CBCMR_FLEXSPI2_PODF(6) | CCM_CBCMR_FLEXSPI2_CLK_SEL(1); // 102.9 MHz
130- | CCM_CBCMR_FLEXSPI2_PODF (4 ) | CCM_CBCMR_FLEXSPI2_CLK_SEL (3 ); // 105.6 MHz
131- // | CCM_CBCMR_FLEXSPI2_PODF(5) | CCM_CBCMR_FLEXSPI2_CLK_SEL(2); // 110.8 MHz
132- // | CCM_CBCMR_FLEXSPI2_PODF(5) | CCM_CBCMR_FLEXSPI2_CLK_SEL(1); // 120.0 MHz
133- // | CCM_CBCMR_FLEXSPI2_PODF(3) | CCM_CBCMR_FLEXSPI2_CLK_SEL(3); // 132.0 MHz
134- // | CCM_CBCMR_FLEXSPI2_PODF(4) | CCM_CBCMR_FLEXSPI2_CLK_SEL(1); // 144.0 MHz
135- // | CCM_CBCMR_FLEXSPI2_PODF(3) | CCM_CBCMR_FLEXSPI2_CLK_SEL(2); // 166.2 MHz
136- // | CCM_CBCMR_FLEXSPI2_PODF(2) | CCM_CBCMR_FLEXSPI2_CLK_SEL(3); // 176.0 MHz
137- CCM -> CCGR7 |= CCM_CCGR7_CG1 (CCM_CCGR_ON );
130+ // CLOCK_SetDiv(kCLOCK_Flexspi2Div, 5); CLOCK_SetMux(kCLOCK_Flexspi2Mux, 3); // 88.0 MHz
131+ // CLOCK_SetDiv(kCLOCK_Flexspi2Div, 3); CLOCK_SetMux(kCLOCK_Flexspi2Mux, 0); // 99.0 MHz
132+ // CLOCK_SetDiv(kCLOCK_Flexspi2Div, 6); CLOCK_SetMux(kCLOCK_Flexspi2Mux, 1); // 102.9 MHz
133+ CLOCK_SetDiv (kCLOCK_Flexspi2Div , 4 ); CLOCK_SetMux (kCLOCK_Flexspi2Mux , 3 ); // 105.6 MHz
134+ // CLOCK_SetDiv(kCLOCK_Flexspi2Div, 5); CLOCK_SetMux(kCLOCK_Flexspi2Mux, 2); // 110.8 MHz
135+ // CLOCK_SetDiv(kCLOCK_Flexspi2Div, 5); CLOCK_SetMux(kCLOCK_Flexspi2Mux, 1); // 120.0 MHz
136+ // CLOCK_SetDiv(kCLOCK_Flexspi2Div, 3); CLOCK_SetMux(kCLOCK_Flexspi2Mux, 3); // 132.0 MHz
137+ // CLOCK_SetDiv(kCLOCK_Flexspi2Div, 4); CLOCK_SetMux(kCLOCK_Flexspi2Mux, 1); // 144.0 MHz
138+ // CLOCK_SetDiv(kCLOCK_Flexspi2Div, 3); CLOCK_SetMux(kCLOCK_Flexspi2Mux, 2); // 166.2 MHz
139+ // CLOCK_SetDiv(kCLOCK_Flexspi2Div, 2); CLOCK_SetMux(kCLOCK_Flexspi2Mux, 3); // 176.0 MHz
140+ CLOCK_EnableClock (kCLOCK_FlexSpi2 );
138141
139142 FLEXSPI2 -> MCR0 |= FLEXSPI_MCR0_MDIS (1 );
140143 FLEXSPI2 -> MCR0 = (FLEXSPI2 -> MCR0 & ~(FLEXSPI_MCR0_AHBGRANTWAIT_MASK
0 commit comments