[nxp][imxrt1060] add link script files
This commit is contained in:
parent
b2f2825456
commit
61c239b6f0
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 2006-2022, RT-Thread Development Team
|
* Copyright (c) 2006-2023, RT-Thread Development Team
|
||||||
*
|
*
|
||||||
* SPDX-License-Identifier: Apache-2.0
|
* SPDX-License-Identifier: Apache-2.0
|
||||||
*
|
*
|
||||||
|
|
|
@ -143,6 +143,9 @@ menu "On-chip Peripheral Drivers"
|
||||||
bool "Enable RTC"
|
bool "Enable RTC"
|
||||||
select RT_USING_RTC
|
select RT_USING_RTC
|
||||||
default n
|
default n
|
||||||
|
config BSP_USING_CACHE
|
||||||
|
bool "Enable CACHE"
|
||||||
|
default n
|
||||||
|
|
||||||
endmenu
|
endmenu
|
||||||
|
|
||||||
|
@ -188,6 +191,43 @@ menu "Onboard Peripheral Drivers"
|
||||||
bool "Enable RS485"
|
bool "Enable RS485"
|
||||||
select BSP_USING_LPUART5
|
select BSP_USING_LPUART5
|
||||||
default n
|
default n
|
||||||
|
menuconfig BSP_USING_ETH
|
||||||
|
bool "Enable Ethernet"
|
||||||
|
select RT_USING_NETDEV
|
||||||
|
select RT_USING_LWIP
|
||||||
|
default n
|
||||||
|
|
||||||
|
if BSP_USING_ETH
|
||||||
|
config BSP_USING_PHY
|
||||||
|
select RT_USING_PHY
|
||||||
|
bool "Enable ethernet phy"
|
||||||
|
default y
|
||||||
|
|
||||||
|
if BSP_USING_PHY
|
||||||
|
config PHY_USING_KSZ8081
|
||||||
|
bool "i.MX RT1020EVK uses ksz8081 phy"
|
||||||
|
default y
|
||||||
|
|
||||||
|
if PHY_USING_KSZ8081
|
||||||
|
config PHY_KSZ8081_ADDRESS
|
||||||
|
int "Specify address of phy device"
|
||||||
|
default 2
|
||||||
|
|
||||||
|
config PHY_RESET_KSZ8081_PORT
|
||||||
|
int "indicate port of reset"
|
||||||
|
default 1
|
||||||
|
|
||||||
|
config PHY_RESET_KSZ8081_PIN
|
||||||
|
int "indicate pin of reset"
|
||||||
|
default 4
|
||||||
|
|
||||||
|
config FSL_FEATURE_PHYKSZ8081_USE_RMII50M_MODE
|
||||||
|
bool "Enable the PHY ksz8081 RMII50M mode"
|
||||||
|
depends on PHY_USING_KSZ8081
|
||||||
|
default y
|
||||||
|
endif
|
||||||
|
endif
|
||||||
|
endif
|
||||||
|
|
||||||
endmenu
|
endmenu
|
||||||
|
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 2006-2022, RT-Thread Development Team
|
* Copyright (c) 2006-2023, RT-Thread Development Team
|
||||||
*
|
*
|
||||||
* SPDX-License-Identifier: Apache-2.0
|
* SPDX-License-Identifier: Apache-2.0
|
||||||
*
|
*
|
||||||
|
@ -12,7 +12,7 @@
|
||||||
#include <rtthread.h>
|
#include <rtthread.h>
|
||||||
#include "board.h"
|
#include "board.h"
|
||||||
#include "pin_mux.h"
|
#include "pin_mux.h"
|
||||||
|
#include "fsl_iomuxc.h"
|
||||||
#ifdef BSP_USING_DMA
|
#ifdef BSP_USING_DMA
|
||||||
#include "fsl_dmamux.h"
|
#include "fsl_dmamux.h"
|
||||||
#include "fsl_edma.h"
|
#include "fsl_edma.h"
|
||||||
|
@ -168,6 +168,221 @@ void imxrt_dma_init(void)
|
||||||
EDMA_Init(DMA0, &config);
|
EDMA_Init(DMA0, &config);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
#ifdef BSP_USING_ETH
|
||||||
|
void imxrt_enet_pins_init(void)
|
||||||
|
{
|
||||||
|
IOMUXC_SetPinMux(
|
||||||
|
IOMUXC_GPIO_AD_B0_04_GPIO1_IO04, /* GPIO_AD_B0_04 is configured as GPIO1_IO04 */
|
||||||
|
0U); /* Software Input On Field: Input Path is determined by functionality */
|
||||||
|
/* Software Input On Field: Input Path is determined by functionality */
|
||||||
|
IOMUXC_SetPinMux(
|
||||||
|
IOMUXC_GPIO_AD_B0_08_ENET_REF_CLK1, /* GPIO_AD_B0_08 is configured as ENET_REF_CLK1 */
|
||||||
|
1U); /* Software Input On Field: Force input path of pad GPIO_AD_B0_08 */
|
||||||
|
IOMUXC_SetPinMux(
|
||||||
|
IOMUXC_GPIO_AD_B0_09_ENET_RDATA01, /* GPIO_AD_B0_09 is configured as ENET_RDATA01 */
|
||||||
|
0U); /* Software Input On Field: Input Path is determined by functionality */
|
||||||
|
IOMUXC_SetPinMux(
|
||||||
|
IOMUXC_GPIO_AD_B0_10_ENET_RDATA00, /* GPIO_AD_B0_10 is configured as ENET_RDATA00 */
|
||||||
|
0U); /* Software Input On Field: Input Path is determined by functionality */
|
||||||
|
IOMUXC_SetPinMux(
|
||||||
|
IOMUXC_GPIO_AD_B0_11_ENET_RX_EN, /* GPIO_AD_B0_11 is configured as ENET_RX_EN */
|
||||||
|
0U); /* Software Input On Field: Input Path is determined by functionality */
|
||||||
|
IOMUXC_SetPinMux(
|
||||||
|
IOMUXC_GPIO_AD_B0_12_ENET_RX_ER, /* GPIO_AD_B0_12 is configured as ENET_RX_ER */
|
||||||
|
0U); /* Software Input On Field: Input Path is determined by functionality */
|
||||||
|
IOMUXC_SetPinMux(
|
||||||
|
IOMUXC_GPIO_AD_B0_13_ENET_TX_EN, /* GPIO_AD_B0_13 is configured as ENET_TX_EN */
|
||||||
|
0U); /* Software Input On Field: Input Path is determined by functionality */
|
||||||
|
IOMUXC_SetPinMux(
|
||||||
|
IOMUXC_GPIO_AD_B0_14_ENET_TDATA00, /* GPIO_AD_B0_14 is configured as ENET_TDATA00 */
|
||||||
|
0U); /* Software Input On Field: Input Path is determined by functionality */
|
||||||
|
IOMUXC_SetPinMux(
|
||||||
|
IOMUXC_GPIO_AD_B0_15_ENET_TDATA01, /* GPIO_AD_B0_15 is configured as ENET_TDATA01 */
|
||||||
|
0U); /* Software Input On Field: Input Path is determined by functionality */
|
||||||
|
IOMUXC_SetPinMux(
|
||||||
|
IOMUXC_GPIO_AD_B1_06_GPIO1_IO22, /* GPIO_AD_B1_06 is configured as GPIO1_IO22 */
|
||||||
|
0U); /* Software Input On Field: Input Path is determined by functionality */
|
||||||
|
IOMUXC_SetPinMux(
|
||||||
|
IOMUXC_GPIO_EMC_40_ENET_MDIO, /* GPIO_EMC_40 is configured as ENET_MDIO */
|
||||||
|
0U); /* Software Input On Field: Input Path is determined by functionality */
|
||||||
|
IOMUXC_SetPinMux(
|
||||||
|
IOMUXC_GPIO_EMC_41_ENET_MDC, /* GPIO_EMC_41 is configured as ENET_MDC */
|
||||||
|
0U); /* Software Input On Field: Input Path is determined by functionality */
|
||||||
|
IOMUXC_SetPinConfig(
|
||||||
|
IOMUXC_GPIO_AD_B0_04_GPIO1_IO04, /* GPIO_AD_B0_04 PAD functional properties : */
|
||||||
|
0xB0A9U); /* Slew Rate Field: Fast Slew Rate
|
||||||
|
Drive Strength Field: R0/5
|
||||||
|
Speed Field: medium(100MHz)
|
||||||
|
Open Drain Enable Field: Open Drain Disabled
|
||||||
|
Pull / Keep Enable Field: Pull/Keeper Enabled
|
||||||
|
Pull / Keep Select Field: Pull
|
||||||
|
Pull Up / Down Config. Field: 100K Ohm Pull Up
|
||||||
|
Hyst. Enable Field: Hysteresis Disabled */
|
||||||
|
IOMUXC_SetPinConfig(
|
||||||
|
IOMUXC_GPIO_AD_B0_08_ENET_REF_CLK1, /* GPIO_AD_B0_08 PAD functional properties : */
|
||||||
|
0xB0E9U); /* Slew Rate Field: Fast Slew Rate
|
||||||
|
Drive Strength Field: R0/5
|
||||||
|
Speed Field: max(200MHz)
|
||||||
|
Open Drain Enable Field: Open Drain Disabled
|
||||||
|
Pull / Keep Enable Field: Pull/Keeper Enabled
|
||||||
|
Pull / Keep Select Field: Pull
|
||||||
|
Pull Up / Down Config. Field: 100K Ohm Pull Up
|
||||||
|
Hyst. Enable Field: Hysteresis Disabled */
|
||||||
|
IOMUXC_SetPinConfig(
|
||||||
|
IOMUXC_GPIO_AD_B0_09_ENET_RDATA01, /* GPIO_AD_B0_09 PAD functional properties : */
|
||||||
|
0xB0E9U); /* Slew Rate Field: Fast Slew Rate
|
||||||
|
Drive Strength Field: R0/5
|
||||||
|
Speed Field: max(200MHz)
|
||||||
|
Open Drain Enable Field: Open Drain Disabled
|
||||||
|
Pull / Keep Enable Field: Pull/Keeper Enabled
|
||||||
|
Pull / Keep Select Field: Pull
|
||||||
|
Pull Up / Down Config. Field: 100K Ohm Pull Up
|
||||||
|
Hyst. Enable Field: Hysteresis Disabled */
|
||||||
|
IOMUXC_SetPinConfig(
|
||||||
|
IOMUXC_GPIO_AD_B0_10_ENET_RDATA00, /* GPIO_AD_B0_10 PAD functional properties : */
|
||||||
|
0xB0E9U); /* Slew Rate Field: Fast Slew Rate
|
||||||
|
Drive Strength Field: R0/5
|
||||||
|
Speed Field: max(200MHz)
|
||||||
|
Open Drain Enable Field: Open Drain Disabled
|
||||||
|
Pull / Keep Enable Field: Pull/Keeper Enabled
|
||||||
|
Pull / Keep Select Field: Pull
|
||||||
|
Pull Up / Down Config. Field: 100K Ohm Pull Up
|
||||||
|
Hyst. Enable Field: Hysteresis Disabled */
|
||||||
|
IOMUXC_SetPinConfig(
|
||||||
|
IOMUXC_GPIO_AD_B0_11_ENET_RX_EN, /* GPIO_AD_B0_11 PAD functional properties : */
|
||||||
|
0xB0E9U); /* Slew Rate Field: Fast Slew Rate
|
||||||
|
Drive Strength Field: R0/5
|
||||||
|
Speed Field: max(200MHz)
|
||||||
|
Open Drain Enable Field: Open Drain Disabled
|
||||||
|
Pull / Keep Enable Field: Pull/Keeper Enabled
|
||||||
|
Pull / Keep Select Field: Pull
|
||||||
|
Pull Up / Down Config. Field: 100K Ohm Pull Up
|
||||||
|
Hyst. Enable Field: Hysteresis Disabled */
|
||||||
|
IOMUXC_SetPinConfig(
|
||||||
|
IOMUXC_GPIO_AD_B0_12_ENET_RX_ER, /* GPIO_AD_B0_12 PAD functional properties : */
|
||||||
|
0xB0E9U); /* Slew Rate Field: Fast Slew Rate
|
||||||
|
Drive Strength Field: R0/5
|
||||||
|
Speed Field: max(200MHz)
|
||||||
|
Open Drain Enable Field: Open Drain Disabled
|
||||||
|
Pull / Keep Enable Field: Pull/Keeper Enabled
|
||||||
|
Pull / Keep Select Field: Pull
|
||||||
|
Pull Up / Down Config. Field: 100K Ohm Pull Up
|
||||||
|
Hyst. Enable Field: Hysteresis Disabled */
|
||||||
|
IOMUXC_SetPinConfig(
|
||||||
|
IOMUXC_GPIO_AD_B0_13_ENET_TX_EN, /* GPIO_AD_B0_13 PAD functional properties : */
|
||||||
|
0xB0E9U); /* Slew Rate Field: Fast Slew Rate
|
||||||
|
Drive Strength Field: R0/5
|
||||||
|
Speed Field: max(200MHz)
|
||||||
|
Open Drain Enable Field: Open Drain Disabled
|
||||||
|
Pull / Keep Enable Field: Pull/Keeper Enabled
|
||||||
|
Pull / Keep Select Field: Pull
|
||||||
|
Pull Up / Down Config. Field: 100K Ohm Pull Up
|
||||||
|
Hyst. Enable Field: Hysteresis Disabled */
|
||||||
|
IOMUXC_SetPinConfig(
|
||||||
|
IOMUXC_GPIO_AD_B0_14_ENET_TDATA00, /* GPIO_AD_B0_14 PAD functional properties : */
|
||||||
|
0xB0E9U); /* Slew Rate Field: Fast Slew Rate
|
||||||
|
Drive Strength Field: R0/5
|
||||||
|
Speed Field: max(200MHz)
|
||||||
|
Open Drain Enable Field: Open Drain Disabled
|
||||||
|
Pull / Keep Enable Field: Pull/Keeper Enabled
|
||||||
|
Pull / Keep Select Field: Pull
|
||||||
|
Pull Up / Down Config. Field: 100K Ohm Pull Up
|
||||||
|
Hyst. Enable Field: Hysteresis Disabled */
|
||||||
|
IOMUXC_SetPinConfig(
|
||||||
|
IOMUXC_GPIO_AD_B0_15_ENET_TDATA01, /* GPIO_AD_B0_15 PAD functional properties : */
|
||||||
|
0xB0E9U); /* Slew Rate Field: Fast Slew Rate
|
||||||
|
Drive Strength Field: R0/5
|
||||||
|
Speed Field: max(200MHz)
|
||||||
|
Open Drain Enable Field: Open Drain Disabled
|
||||||
|
Pull / Keep Enable Field: Pull/Keeper Enabled
|
||||||
|
Pull / Keep Select Field: Pull
|
||||||
|
Pull Up / Down Config. Field: 100K Ohm Pull Up
|
||||||
|
Hyst. Enable Field: Hysteresis Disabled */
|
||||||
|
IOMUXC_SetPinConfig(
|
||||||
|
IOMUXC_GPIO_AD_B1_06_GPIO1_IO22, /* GPIO_AD_B1_06 PAD functional properties : */
|
||||||
|
0xB0A9U); /* Slew Rate Field: Fast Slew Rate
|
||||||
|
Drive Strength Field: R0/5
|
||||||
|
Speed Field: medium(100MHz)
|
||||||
|
Open Drain Enable Field: Open Drain Disabled
|
||||||
|
Pull / Keep Enable Field: Pull/Keeper Enabled
|
||||||
|
Pull / Keep Select Field: Pull
|
||||||
|
Pull Up / Down Config. Field: 100K Ohm Pull Up
|
||||||
|
Hyst. Enable Field: Hysteresis Disabled */
|
||||||
|
IOMUXC_SetPinConfig(
|
||||||
|
IOMUXC_GPIO_EMC_40_ENET_MDIO, /* GPIO_EMC_40 PAD functional properties : */
|
||||||
|
0xB0E9U); /* Slew Rate Field: Fast Slew Rate
|
||||||
|
Drive Strength Field: R0/5
|
||||||
|
Speed Field: max(200MHz)
|
||||||
|
Open Drain Enable Field: Open Drain Disabled
|
||||||
|
Pull / Keep Enable Field: Pull/Keeper Enabled
|
||||||
|
Pull / Keep Select Field: Pull
|
||||||
|
Pull Up / Down Config. Field: 100K Ohm Pull Up
|
||||||
|
Hyst. Enable Field: Hysteresis Disabled */
|
||||||
|
IOMUXC_SetPinConfig(
|
||||||
|
IOMUXC_GPIO_EMC_41_ENET_MDC, /* GPIO_EMC_41 PAD functional properties : */
|
||||||
|
0xB0E9U); /* Slew Rate Field: Fast Slew Rate
|
||||||
|
Drive Strength Field: R0/5
|
||||||
|
Speed Field: max(200MHz)
|
||||||
|
Open Drain Enable Field: Open Drain Disabled
|
||||||
|
Pull / Keep Enable Field: Pull/Keeper Enabled
|
||||||
|
Pull / Keep Select Field: Pull
|
||||||
|
Pull Up / Down Config. Field: 100K Ohm Pull Up
|
||||||
|
Hyst. Enable Field: Hysteresis Disabled */
|
||||||
|
}
|
||||||
|
|
||||||
|
#ifndef BSP_USING_PHY
|
||||||
|
void imxrt_enet_phy_reset_by_gpio(void)
|
||||||
|
{
|
||||||
|
gpio_pin_config_t gpio_config = {kGPIO_DigitalOutput, 0, kGPIO_NoIntmode};
|
||||||
|
|
||||||
|
GPIO_PinInit(GPIO1, 9, &gpio_config);
|
||||||
|
GPIO_PinInit(GPIO1, 10, &gpio_config);
|
||||||
|
/* pull up the ENET_INT before RESET. */
|
||||||
|
GPIO_WritePinOutput(GPIO1, 10, 1);
|
||||||
|
GPIO_WritePinOutput(GPIO1, 9, 0);
|
||||||
|
rt_thread_delay(100);
|
||||||
|
GPIO_WritePinOutput(GPIO1, 9, 1);
|
||||||
|
}
|
||||||
|
#endif /* BSP_USING_PHY */
|
||||||
|
|
||||||
|
#endif /* BSP_USING_ETH */
|
||||||
|
|
||||||
|
#ifdef BSP_USING_PHY
|
||||||
|
void imxrt_phy_pins_init( void )
|
||||||
|
{
|
||||||
|
// IOMUXC_SetPinMux(
|
||||||
|
// IOMUXC_GPIO_AD_B0_09_GPIO1_IO09, /* GPIO_AD_B0_09 is configured as GPIO1_IO09 */
|
||||||
|
// 0U); /* Software Input On Field: Input Path is determined by functionality */
|
||||||
|
// IOMUXC_SetPinConfig(
|
||||||
|
// IOMUXC_GPIO_AD_B0_09_GPIO1_IO09, /* GPIO_B0_00 PAD functional properties : */
|
||||||
|
// 0x10B0u); /* Slew Rate Field: Slow Slew Rate
|
||||||
|
// Drive Strength Field: R0/6
|
||||||
|
// Speed Field: medium(100MHz)
|
||||||
|
// Open Drain Enable Field: Open Drain Disabled
|
||||||
|
// Pull / Keep Enable Field: Pull/Keeper Enabled
|
||||||
|
// Pull / Keep Select Field: Keeper
|
||||||
|
// Pull Up / Down Config. Field: 100K Ohm Pull Down
|
||||||
|
// Hyst. Enable Field: Hysteresis Disabled */
|
||||||
|
|
||||||
|
IOMUXC_SetPinMux(
|
||||||
|
IOMUXC_GPIO_AD_B0_04_GPIO1_IO04, /* GPIO_AD_B0_09 is configured as GPIO1_IO09 */
|
||||||
|
0U); /* Software Input On Field: Input Path is determined by functionality */
|
||||||
|
IOMUXC_SetPinConfig(
|
||||||
|
IOMUXC_GPIO_AD_B0_04_GPIO1_IO04, /* GPIO_B0_00 PAD functional properties : */
|
||||||
|
0x10B0u); /* Slew Rate Field: Slow Slew Rate
|
||||||
|
Drive Strength Field: R0/6
|
||||||
|
Speed Field: medium(100MHz)
|
||||||
|
Open Drain Enable Field: Open Drain Disabled
|
||||||
|
Pull / Keep Enable Field: Pull/Keeper Enabled
|
||||||
|
Pull / Keep Select Field: Keeper
|
||||||
|
Pull Up / Down Config. Field: 100K Ohm Pull Down
|
||||||
|
Hyst. Enable Field: Hysteresis Disabled */
|
||||||
|
}
|
||||||
|
#endif /* BSP_USING_PHY */
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* This function will initial rt1050 board.
|
* This function will initial rt1050 board.
|
||||||
*/
|
*/
|
||||||
|
@ -184,6 +399,13 @@ void rt_hw_board_init()
|
||||||
imxrt_dma_init();
|
imxrt_dma_init();
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifdef BSP_USING_ETH
|
||||||
|
imxrt_enet_pins_init();
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef BSP_USING_PHY
|
||||||
|
imxrt_phy_pins_init();
|
||||||
|
#endif
|
||||||
#ifdef RT_USING_HEAP
|
#ifdef RT_USING_HEAP
|
||||||
rt_system_heap_init((void *)HEAP_BEGIN, (void *)HEAP_END);
|
rt_system_heap_init((void *)HEAP_BEGIN, (void *)HEAP_END);
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 2006-2022, RT-Thread Development Team
|
* Copyright (c) 2006-2023, RT-Thread Development Team
|
||||||
*
|
*
|
||||||
* SPDX-License-Identifier: Apache-2.0
|
* SPDX-License-Identifier: Apache-2.0
|
||||||
*
|
*
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 2006-2021, RT-Thread Development Team
|
* Copyright (c) 2006-2023, RT-Thread Development Team
|
||||||
*
|
*
|
||||||
* SPDX-License-Identifier: Apache-2.0
|
* SPDX-License-Identifier: Apache-2.0
|
||||||
*
|
*
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 2006-2022, RT-Thread Development Team
|
* Copyright (c) 2006-2023, RT-Thread Development Team
|
||||||
*
|
*
|
||||||
* SPDX-License-Identifier: Apache-2.0
|
* SPDX-License-Identifier: Apache-2.0
|
||||||
*
|
*
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 2006-2022, RT-Thread Development Team
|
* Copyright (c) 2006-2023, RT-Thread Development Team
|
||||||
*
|
*
|
||||||
* SPDX-License-Identifier: Apache-2.0
|
* SPDX-License-Identifier: Apache-2.0
|
||||||
*
|
*
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 2006-2022, RT-Thread Development Team
|
* Copyright (c) 2006-2023, RT-Thread Development Team
|
||||||
*
|
*
|
||||||
* SPDX-License-Identifier: Apache-2.0
|
* SPDX-License-Identifier: Apache-2.0
|
||||||
*
|
*
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 2006-2022, RT-Thread Development Team
|
* Copyright (c) 2006-2023, RT-Thread Development Team
|
||||||
*
|
*
|
||||||
* SPDX-License-Identifier: Apache-2.0
|
* SPDX-License-Identifier: Apache-2.0
|
||||||
*
|
*
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 2006-2022, RT-Thread Development Team
|
* Copyright (c) 2006-2023, RT-Thread Development Team
|
||||||
*
|
*
|
||||||
* SPDX-License-Identifier: Apache-2.0
|
* SPDX-License-Identifier: Apache-2.0
|
||||||
*
|
*
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 2006-2022, RT-Thread Development Team
|
* Copyright (c) 2006-2023, RT-Thread Development Team
|
||||||
*
|
*
|
||||||
* SPDX-License-Identifier: Apache-2.0
|
* SPDX-License-Identifier: Apache-2.0
|
||||||
*
|
*
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 2006-2022, RT-Thread Development Team
|
* Copyright (c) 2006-2023, RT-Thread Development Team
|
||||||
* Copyright 2022 NXP
|
* Copyright 2022 NXP
|
||||||
*
|
*
|
||||||
* SPDX-License-Identifier: Apache-2.0
|
* SPDX-License-Identifier: Apache-2.0
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 2006-2022, RT-Thread Development Team
|
* Copyright (c) 2006-2023, RT-Thread Development Team
|
||||||
*
|
*
|
||||||
* SPDX-License-Identifier: Apache-2.0
|
* SPDX-License-Identifier: Apache-2.0
|
||||||
*
|
*
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 2006-2022, RT-Thread Development Team
|
* Copyright (c) 2006-2023, RT-Thread Development Team
|
||||||
*
|
*
|
||||||
* SPDX-License-Identifier: Apache-2.0
|
* SPDX-License-Identifier: Apache-2.0
|
||||||
*
|
*
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 2006-2022, RT-Thread Development Team
|
* Copyright (c) 2006-2023, RT-Thread Development Team
|
||||||
*
|
*
|
||||||
* SPDX-License-Identifier: Apache-2.0
|
* SPDX-License-Identifier: Apache-2.0
|
||||||
*
|
*
|
||||||
|
|
|
@ -0,0 +1,82 @@
|
||||||
|
#!armclang --target=arm-arm-none-eabi -mcpu=cortex-m7 -E -x c
|
||||||
|
/*
|
||||||
|
** ###################################################################
|
||||||
|
** Processors: MIMXRT1062CVJ5A
|
||||||
|
** MIMXRT1062CVL5A
|
||||||
|
** MIMXRT1062DVJ6A
|
||||||
|
** MIMXRT1062DVL6A
|
||||||
|
** MIMXRT1062DVN6B
|
||||||
|
** MIMXRT1062XVN5B
|
||||||
|
**
|
||||||
|
** Compiler: Keil ARM C/C++ Compiler
|
||||||
|
** Reference manual: IMXRT1060RM Rev.3, 07/2021 | IMXRT106XSRM Rev.0
|
||||||
|
** Version: rev. 0.2, 2022-03-25
|
||||||
|
** Build: b220401
|
||||||
|
**
|
||||||
|
** Abstract:
|
||||||
|
** Linker file for the Keil ARM C/C++ Compiler
|
||||||
|
**
|
||||||
|
** Copyright 2016 Freescale Semiconductor, Inc.
|
||||||
|
** Copyright 2016-2022 NXP
|
||||||
|
** All rights reserved.
|
||||||
|
**
|
||||||
|
** SPDX-License-Identifier: BSD-3-Clause
|
||||||
|
**
|
||||||
|
** http: www.nxp.com
|
||||||
|
** mail: support@nxp.com
|
||||||
|
**
|
||||||
|
** ###################################################################
|
||||||
|
*/
|
||||||
|
|
||||||
|
#define m_interrupts_start 0x00000000
|
||||||
|
#define m_interrupts_size 0x00000400
|
||||||
|
|
||||||
|
#define m_text_start 0x00000400
|
||||||
|
#define m_text_size 0x0001FC00
|
||||||
|
|
||||||
|
#define m_data_start 0x20000000
|
||||||
|
#define m_data_size 0x00020000
|
||||||
|
|
||||||
|
#define m_data2_start 0x20200000
|
||||||
|
#define m_data2_size 0x000C0000
|
||||||
|
|
||||||
|
/* Sizes */
|
||||||
|
#if (defined(__stack_size__))
|
||||||
|
#define Stack_Size __stack_size__
|
||||||
|
#else
|
||||||
|
#define Stack_Size 0x2000
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if (defined(__heap_size__))
|
||||||
|
#define Heap_Size __heap_size__
|
||||||
|
#else
|
||||||
|
#define Heap_Size 0x2000
|
||||||
|
#endif
|
||||||
|
#define RTT_HEAP_SIZE (m_data_size-ImageLength(RW_m_data)-ImageLength(ARM_LIB_HEAP)-ImageLength(ARM_LIB_STACK))
|
||||||
|
LR_m_text m_interrupts_start m_text_start+m_text_size-m_interrupts_start { ; load region size_region
|
||||||
|
VECTOR_ROM m_interrupts_start FIXED m_interrupts_size { ; load address = execution address
|
||||||
|
* (.isr_vector,+FIRST)
|
||||||
|
}
|
||||||
|
ER_m_text m_text_start FIXED m_text_size { ; load address = execution address
|
||||||
|
* (InRoot$$Sections)
|
||||||
|
* (CodeQuickAccess)
|
||||||
|
.ANY (+RO)
|
||||||
|
}
|
||||||
|
VECTOR_RAM m_interrupts_start EMPTY 0 {
|
||||||
|
}
|
||||||
|
RW_m_data m_data_start m_data_size-Stack_Size-Heap_Size { ; RW data
|
||||||
|
.ANY (+RW +ZI)
|
||||||
|
* (NonCacheable.init)
|
||||||
|
* (*NonCacheable)
|
||||||
|
* (DataQuickAccess)
|
||||||
|
}
|
||||||
|
ARM_LIB_HEAP +0 EMPTY Heap_Size { ; Heap region growing up
|
||||||
|
}
|
||||||
|
ARM_LIB_STACK +0 EMPTY Stack_Size{} ; Stack region growing down
|
||||||
|
RTT_HEAP +0 EMPTY RTT_HEAP_SIZE{}
|
||||||
|
|
||||||
|
RW_m_ncache m_data2_start EMPTY 0 {
|
||||||
|
}
|
||||||
|
RW_m_ncache_unused +0 EMPTY m_data2_size-ImageLength(RW_m_ncache) { ; Empty region added for MPU configuration
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,101 @@
|
||||||
|
/*
|
||||||
|
** ###################################################################
|
||||||
|
** Processors: MIMXRT1062CVJ5A
|
||||||
|
** MIMXRT1062CVL5A
|
||||||
|
** MIMXRT1062DVJ6A
|
||||||
|
** MIMXRT1062DVL6A
|
||||||
|
** MIMXRT1062DVN6B
|
||||||
|
** MIMXRT1062XVN5B
|
||||||
|
**
|
||||||
|
** Compiler: IAR ANSI C/C++ Compiler for ARM
|
||||||
|
** Reference manual: IMXRT1060RM Rev.3, 07/2021 | IMXRT106XSRM Rev.0
|
||||||
|
** Version: rev. 0.2, 2022-03-25
|
||||||
|
** Build: b220401
|
||||||
|
**
|
||||||
|
** Abstract:
|
||||||
|
** Linker file for the IAR ANSI C/C++ Compiler for ARM
|
||||||
|
**
|
||||||
|
** Copyright 2016 Freescale Semiconductor, Inc.
|
||||||
|
** Copyright 2016-2022 NXP
|
||||||
|
** All rights reserved.
|
||||||
|
**
|
||||||
|
** SPDX-License-Identifier: BSD-3-Clause
|
||||||
|
**
|
||||||
|
** http: www.nxp.com
|
||||||
|
** mail: support@nxp.com
|
||||||
|
**
|
||||||
|
** ###################################################################
|
||||||
|
*/
|
||||||
|
|
||||||
|
define symbol m_interrupts_start = 0x00000000;
|
||||||
|
define symbol m_interrupts_end = 0x000003FF;
|
||||||
|
|
||||||
|
define symbol m_text_start = 0x00000400;
|
||||||
|
define symbol m_text_end = 0x0001FFFF;
|
||||||
|
|
||||||
|
define symbol m_data_start = 0x20000000;
|
||||||
|
define symbol m_data_end = 0x2001FFFF;
|
||||||
|
|
||||||
|
define symbol m_data2_start = 0x20200000;
|
||||||
|
define symbol m_data2_end = 0x202BFFFF;
|
||||||
|
|
||||||
|
define symbol m_data3_start = 0x80000000;
|
||||||
|
define symbol m_data3_end = 0x81DFFFFF;
|
||||||
|
|
||||||
|
define symbol m_ncache_start = 0x81E00000;
|
||||||
|
define symbol m_ncache_end = 0x81FFFFFF;
|
||||||
|
|
||||||
|
/* Sizes */
|
||||||
|
if (isdefinedsymbol(__stack_size__)) {
|
||||||
|
define symbol __size_cstack__ = __stack_size__;
|
||||||
|
} else {
|
||||||
|
define symbol __size_cstack__ = 0x0400;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (isdefinedsymbol(__heap_size__)) {
|
||||||
|
define symbol __size_heap__ = __heap_size__;
|
||||||
|
} else {
|
||||||
|
define symbol __size_heap__ = 0x0400;
|
||||||
|
}
|
||||||
|
|
||||||
|
define exported symbol __NCACHE_REGION_START = m_ncache_start;
|
||||||
|
define exported symbol __NCACHE_REGION_SIZE = m_ncache_end - m_ncache_start + 1;
|
||||||
|
|
||||||
|
define exported symbol __VECTOR_TABLE = m_interrupts_start;
|
||||||
|
define exported symbol __VECTOR_RAM = m_interrupts_start;
|
||||||
|
define exported symbol __RAM_VECTOR_TABLE_SIZE = 0x0;
|
||||||
|
define exported symbol __RTT_HEAP_END = m_data2_end;
|
||||||
|
define memory mem with size = 4G;
|
||||||
|
define region TEXT_region = mem:[from m_interrupts_start to m_interrupts_end]
|
||||||
|
| mem:[from m_text_start to m_text_end];
|
||||||
|
define region DATA_region = mem:[from m_data_start to m_data_end];
|
||||||
|
define region DATA2_region = mem:[from m_data2_start to m_data2_end];
|
||||||
|
define region DATA3_region = mem:[from m_data3_start to m_data3_end-__size_cstack__];
|
||||||
|
define region CSTACK_region = mem:[from m_data3_end-__size_cstack__+1 to m_data3_end];
|
||||||
|
define region NCACHE_region = mem:[from m_ncache_start to m_ncache_end];
|
||||||
|
|
||||||
|
define block CSTACK with alignment = 8, size = __size_cstack__ { };
|
||||||
|
define block HEAP with alignment = 8, size = __size_heap__ { };
|
||||||
|
define block RW { first readwrite, section m_usb_dma_init_data };
|
||||||
|
define block ZI with alignment = 32 { first zi, section m_usb_dma_noninit_data };
|
||||||
|
define block NCACHE_VAR { section NonCacheable , section NonCacheable.init };
|
||||||
|
define block QACCESS_CODE { section CodeQuickAccess };
|
||||||
|
define block QACCESS_DATA { section DataQuickAccess };
|
||||||
|
|
||||||
|
initialize by copy { readwrite, section .textrw, section CodeQuickAccess, section DataQuickAccess };
|
||||||
|
do not initialize { section .noinit };
|
||||||
|
|
||||||
|
place at address mem: m_interrupts_start { readonly section .intvec };
|
||||||
|
|
||||||
|
place in TEXT_region { readonly };
|
||||||
|
place in DATA3_region { block RW };
|
||||||
|
place in DATA3_region { block ZI };
|
||||||
|
if (isdefinedsymbol(__heap_noncacheable__)) {
|
||||||
|
place in NCACHE_region { last block HEAP };
|
||||||
|
} else {
|
||||||
|
place in DATA3_region { last block HEAP };
|
||||||
|
}
|
||||||
|
place in NCACHE_region { block NCACHE_VAR };
|
||||||
|
place in TEXT_region { block QACCESS_CODE };
|
||||||
|
place in DATA_region { block QACCESS_DATA };
|
||||||
|
place in CSTACK_region { block CSTACK };
|
|
@ -0,0 +1,107 @@
|
||||||
|
#!armclang --target=arm-arm-none-eabi -mcpu=cortex-m7 -E -x c
|
||||||
|
/*
|
||||||
|
** ###################################################################
|
||||||
|
** Processors: MIMXRT1062CVJ5A
|
||||||
|
** MIMXRT1062CVL5A
|
||||||
|
** MIMXRT1062DVJ6A
|
||||||
|
** MIMXRT1062DVL6A
|
||||||
|
** MIMXRT1062DVN6B
|
||||||
|
** MIMXRT1062XVN5B
|
||||||
|
**
|
||||||
|
** Compiler: Keil ARM C/C++ Compiler
|
||||||
|
** Reference manual: IMXRT1060RM Rev.3, 07/2021 | IMXRT106XSRM Rev.0
|
||||||
|
** Version: rev. 0.2, 2022-03-25
|
||||||
|
** Build: b220401
|
||||||
|
**
|
||||||
|
** Abstract:
|
||||||
|
** Linker file for the Keil ARM C/C++ Compiler
|
||||||
|
**
|
||||||
|
** Copyright 2016 Freescale Semiconductor, Inc.
|
||||||
|
** Copyright 2016-2022 NXP
|
||||||
|
** All rights reserved.
|
||||||
|
**
|
||||||
|
** SPDX-License-Identifier: BSD-3-Clause
|
||||||
|
**
|
||||||
|
** http: www.nxp.com
|
||||||
|
** mail: support@nxp.com
|
||||||
|
**
|
||||||
|
** ###################################################################
|
||||||
|
*/
|
||||||
|
|
||||||
|
#define m_interrupts_start 0x00000000
|
||||||
|
#define m_interrupts_size 0x00000400
|
||||||
|
|
||||||
|
#define m_text_start 0x00000400
|
||||||
|
#define m_text_size 0x0001FC00
|
||||||
|
|
||||||
|
#define m_data_start 0x80000000
|
||||||
|
#define m_data_size 0x01E00000
|
||||||
|
|
||||||
|
#define m_data2_start 0x20000000
|
||||||
|
#define m_data2_size 0x00020000
|
||||||
|
|
||||||
|
#define m_data3_start 0x20200000
|
||||||
|
#define m_data3_size 0x000C0000
|
||||||
|
|
||||||
|
#define m_ncache_start 0x81E00000
|
||||||
|
#define m_ncache_size 0x00200000
|
||||||
|
|
||||||
|
/* Sizes */
|
||||||
|
#if (defined(__stack_size__))
|
||||||
|
#define Stack_Size __stack_size__
|
||||||
|
#else
|
||||||
|
#define Stack_Size 0x0400
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if (defined(__heap_size__))
|
||||||
|
#define Heap_Size __heap_size__
|
||||||
|
#else
|
||||||
|
#define Heap_Size 0x0400
|
||||||
|
#endif
|
||||||
|
#define RTT_HEAP_SIZE (m_data_size-ImageLength(RW_m_data)-ImageLength(ARM_LIB_HEAP)-ImageLength(ARM_LIB_STACK))
|
||||||
|
LR_m_text m_interrupts_start m_text_start+m_text_size-m_interrupts_start { ; load region size_region
|
||||||
|
VECTOR_ROM m_interrupts_start FIXED m_interrupts_size { ; load address = execution address
|
||||||
|
* (.isr_vector,+FIRST)
|
||||||
|
}
|
||||||
|
ER_m_text m_text_start FIXED m_text_size { ; load address = execution address
|
||||||
|
* (InRoot$$Sections)
|
||||||
|
* (CodeQuickAccess)
|
||||||
|
.ANY (+RO)
|
||||||
|
}
|
||||||
|
VECTOR_RAM m_interrupts_start EMPTY 0 {
|
||||||
|
}
|
||||||
|
#if (defined(__heap_noncacheable__))
|
||||||
|
RW_m_data m_data_start m_data_size-Stack_Size { ; RW data
|
||||||
|
#else
|
||||||
|
RW_m_data m_data_start m_data_size-Stack_Size-Heap_Size { ; RW data
|
||||||
|
#endif
|
||||||
|
.ANY (+RW +ZI)
|
||||||
|
* (*m_usb_dma_init_data)
|
||||||
|
* (*m_usb_dma_noninit_data)
|
||||||
|
}
|
||||||
|
#if (!defined(__heap_noncacheable__))
|
||||||
|
ARM_LIB_HEAP +0 EMPTY Heap_Size { ; Heap region growing up
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
ARM_LIB_STACK +0 EMPTY Stack_Size{} ; Stack region growing down
|
||||||
|
RTT_HEAP +0 EMPTY RTT_HEAP_SIZE{}
|
||||||
|
RW_m_data2 m_data2_start m_data2_size { ;
|
||||||
|
* (DataQuickAccess)
|
||||||
|
}
|
||||||
|
#if (defined(__heap_noncacheable__))
|
||||||
|
RW_m_ncache m_ncache_start m_ncache_size - Heap_Size { ; ncache RW data
|
||||||
|
#else
|
||||||
|
RW_m_ncache m_ncache_start m_ncache_size { ; ncache RW data
|
||||||
|
#endif
|
||||||
|
* (NonCacheable.init)
|
||||||
|
* (*NonCacheable)
|
||||||
|
}
|
||||||
|
#if (defined(__heap_noncacheable__))
|
||||||
|
ARM_LIB_HEAP +0 EMPTY Heap_Size { ; Heap region growing up
|
||||||
|
}
|
||||||
|
RW_m_ncache_unused +0 EMPTY m_ncache_size-ImageLength(RW_m_ncache)-Heap_Size { ; Empty region added for MPU configuration
|
||||||
|
#else
|
||||||
|
RW_m_ncache_unused +0 EMPTY m_ncache_size-ImageLength(RW_m_ncache) { ; Empty region added for MPU configuration
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
}
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 2006-2022, RT-Thread Development Team
|
* Copyright (c) 2006-2023, RT-Thread Development Team
|
||||||
*
|
*
|
||||||
* SPDX-License-Identifier: Apache-2.0
|
* SPDX-License-Identifier: Apache-2.0
|
||||||
*
|
*
|
||||||
|
|
|
@ -0,0 +1,89 @@
|
||||||
|
/*
|
||||||
|
* Copyright 2018-2020 NXP
|
||||||
|
* All rights reserved.
|
||||||
|
*
|
||||||
|
* SPDX-License-Identifier: BSD-3-Clause
|
||||||
|
*/
|
||||||
|
|
||||||
|
FUNC void _loadDcdcTrim(void)
|
||||||
|
{
|
||||||
|
unsigned int dcdc_trim_loaded;
|
||||||
|
unsigned long ocotp_base;
|
||||||
|
unsigned long ocotp_fuse_bank0_base;
|
||||||
|
unsigned long dcdc_base;
|
||||||
|
unsigned long reg;
|
||||||
|
unsigned long trim_value;
|
||||||
|
unsigned int index;
|
||||||
|
|
||||||
|
ocotp_base = 0x401F4000;
|
||||||
|
ocotp_fuse_bank0_base = ocotp_base + 0x400;
|
||||||
|
dcdc_base = 0x40080000;
|
||||||
|
|
||||||
|
dcdc_trim_loaded = 0;
|
||||||
|
|
||||||
|
reg = _RDWORD(ocotp_fuse_bank0_base + 0x90);
|
||||||
|
if (reg & (1<<10))
|
||||||
|
{
|
||||||
|
// DCDC: REG0->VBG_TRM
|
||||||
|
trim_value = (reg & (0x1F << 11)) >> 11;
|
||||||
|
reg = (_RDWORD(dcdc_base + 0x4) & ~(0x1F << 24)) | (trim_value << 24);
|
||||||
|
_WDWORD(dcdc_base + 0x4, reg);
|
||||||
|
dcdc_trim_loaded = 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
reg = _RDWORD(ocotp_fuse_bank0_base + 0x80);
|
||||||
|
if (reg & (1<<30))
|
||||||
|
{
|
||||||
|
index = (reg & (3 << 28)) >> 28;
|
||||||
|
if (index < 4)
|
||||||
|
{
|
||||||
|
// DCDC: REG3->TRG
|
||||||
|
reg = (_RDWORD(dcdc_base + 0xC) & ~(0x1F)) | ((0xF + index));
|
||||||
|
_WDWORD(dcdc_base + 0xC, reg);
|
||||||
|
dcdc_trim_loaded = 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (dcdc_trim_loaded)
|
||||||
|
{
|
||||||
|
// delay about 400us till dcdc is stable.
|
||||||
|
_Sleep_(1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
FUNC void restoreFlexRAM(void)
|
||||||
|
{
|
||||||
|
unsigned int value;
|
||||||
|
unsigned int base;
|
||||||
|
|
||||||
|
base = 0x400AC000;
|
||||||
|
|
||||||
|
value = _RDWORD(base + 0x44);
|
||||||
|
value &= ~(0xFFFFFFFF);
|
||||||
|
value |= 0x55AFFA55;
|
||||||
|
_WDWORD(base + 0x44, value);
|
||||||
|
|
||||||
|
value = _RDWORD(base + 0x40);
|
||||||
|
value |= (1 << 2);
|
||||||
|
_WDWORD(base + 0x40, value);
|
||||||
|
}
|
||||||
|
|
||||||
|
FUNC void Setup (void) {
|
||||||
|
_loadDcdcTrim();
|
||||||
|
SP = _RDWORD(0x00000000); // Setup Stack Pointer
|
||||||
|
PC = _RDWORD(0x00000004); // Setup Program Counter
|
||||||
|
_WDWORD(0xE000ED08, 0x00000000); // Setup Vector Table Offset Register
|
||||||
|
}
|
||||||
|
|
||||||
|
FUNC void OnResetExec (void) { // executes upon software RESET
|
||||||
|
restoreFlexRAM();
|
||||||
|
Setup(); // Setup for Running
|
||||||
|
}
|
||||||
|
|
||||||
|
restoreFlexRAM();
|
||||||
|
|
||||||
|
LOAD %L INCREMENTAL // Download
|
||||||
|
|
||||||
|
Setup(); // Setup for Running
|
||||||
|
|
||||||
|
// g, main
|
|
@ -0,0 +1,256 @@
|
||||||
|
/*
|
||||||
|
* Copyright 2018-2020 NXP
|
||||||
|
* All rights reserved.
|
||||||
|
*
|
||||||
|
* SPDX-License-Identifier: BSD-3-Clause
|
||||||
|
*/
|
||||||
|
|
||||||
|
FUNC void _loadDcdcTrim(void)
|
||||||
|
{
|
||||||
|
unsigned int dcdc_trim_loaded;
|
||||||
|
unsigned long ocotp_base;
|
||||||
|
unsigned long ocotp_fuse_bank0_base;
|
||||||
|
unsigned long dcdc_base;
|
||||||
|
unsigned long reg;
|
||||||
|
unsigned long trim_value;
|
||||||
|
unsigned int index;
|
||||||
|
|
||||||
|
ocotp_base = 0x401F4000;
|
||||||
|
ocotp_fuse_bank0_base = ocotp_base + 0x400;
|
||||||
|
dcdc_base = 0x40080000;
|
||||||
|
|
||||||
|
dcdc_trim_loaded = 0;
|
||||||
|
|
||||||
|
reg = _RDWORD(ocotp_fuse_bank0_base + 0x90);
|
||||||
|
if (reg & (1<<10))
|
||||||
|
{
|
||||||
|
// DCDC: REG0->VBG_TRM
|
||||||
|
trim_value = (reg & (0x1F << 11)) >> 11;
|
||||||
|
reg = (_RDWORD(dcdc_base + 0x4) & ~(0x1F << 24)) | (trim_value << 24);
|
||||||
|
_WDWORD(dcdc_base + 0x4, reg);
|
||||||
|
dcdc_trim_loaded = 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
reg = _RDWORD(ocotp_fuse_bank0_base + 0x80);
|
||||||
|
if (reg & (1<<30))
|
||||||
|
{
|
||||||
|
index = (reg & (3 << 28)) >> 28;
|
||||||
|
if (index < 4)
|
||||||
|
{
|
||||||
|
// DCDC: REG3->TRG
|
||||||
|
reg = (_RDWORD(dcdc_base + 0xC) & ~(0x1F)) | ((0xF + index));
|
||||||
|
_WDWORD(dcdc_base + 0xC, reg);
|
||||||
|
dcdc_trim_loaded = 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (dcdc_trim_loaded)
|
||||||
|
{
|
||||||
|
// delay about 400us till dcdc is stable.
|
||||||
|
_Sleep_(1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
FUNC void SDRAM_WaitIpCmdDone(void)
|
||||||
|
{
|
||||||
|
unsigned long reg;
|
||||||
|
do
|
||||||
|
{
|
||||||
|
reg = _RDWORD(0x402F003C);
|
||||||
|
}while((reg & 0x3) == 0);
|
||||||
|
|
||||||
|
_WDWORD(0x402F003C,0x00000003); // clear IPCMDERR and IPCMDDONE bits
|
||||||
|
}
|
||||||
|
|
||||||
|
FUNC void _clock_init(void)
|
||||||
|
{
|
||||||
|
unsigned int reg;
|
||||||
|
// Enable all clocks
|
||||||
|
_WDWORD(0x400FC068,0xffffffff);
|
||||||
|
_WDWORD(0x400FC06C,0xffffffff);
|
||||||
|
_WDWORD(0x400FC070,0xffffffff);
|
||||||
|
_WDWORD(0x400FC074,0xffffffff);
|
||||||
|
_WDWORD(0x400FC078,0xffffffff);
|
||||||
|
_WDWORD(0x400FC07C,0xffffffff);
|
||||||
|
_WDWORD(0x400FC080,0xffffffff);
|
||||||
|
|
||||||
|
// PERCLK_PODF: 1 divide by 2
|
||||||
|
_WDWORD(0x400FC01C, 0x04900001);
|
||||||
|
// Enable SYS PLL but keep it bypassed.
|
||||||
|
_WDWORD(0x400D8030, 0x00012001);
|
||||||
|
do
|
||||||
|
{
|
||||||
|
reg = _RDWORD(0x400D8030);
|
||||||
|
}while((reg & 0x80000000) == 0);
|
||||||
|
// Disable bypass of SYS PLL
|
||||||
|
_WDWORD(0x400D8030, 0x00002001);
|
||||||
|
|
||||||
|
// PFD2_FRAC: 29, PLL2 PFD2=528*18/PFD2_FRAC=327
|
||||||
|
// Ungate SYS PLL PFD2
|
||||||
|
reg = _RDWORD(0x400D8100);
|
||||||
|
reg &= ~0xBF0000;
|
||||||
|
reg |= 0x1D0000;
|
||||||
|
_WDWORD(0x400D8100,reg);
|
||||||
|
|
||||||
|
// SEMC_PODF: 001, AHB_PODF: 011, IPG_PODF: 01
|
||||||
|
// SEMC_ALT_CLK_SEL: 0 PLL2 (SYS PLL) PFD2
|
||||||
|
// SEMC_CLK_SEL: 1 SEMC_ALT_CLK
|
||||||
|
_WDWORD(0x400FC014, 0x00010D40);
|
||||||
|
}
|
||||||
|
|
||||||
|
FUNC void _sdr_Init(void)
|
||||||
|
{
|
||||||
|
// Config IOMUX
|
||||||
|
_WDWORD(0x401F8014, 0x00000000);
|
||||||
|
_WDWORD(0x401F8018, 0x00000000);
|
||||||
|
_WDWORD(0x401F801C, 0x00000000);
|
||||||
|
_WDWORD(0x401F8020, 0x00000000);
|
||||||
|
_WDWORD(0x401F8024, 0x00000000);
|
||||||
|
_WDWORD(0x401F8028, 0x00000000);
|
||||||
|
_WDWORD(0x401F802C, 0x00000000);
|
||||||
|
_WDWORD(0x401F8030, 0x00000000);
|
||||||
|
_WDWORD(0x401F8034, 0x00000000);
|
||||||
|
_WDWORD(0x401F8038, 0x00000000);
|
||||||
|
_WDWORD(0x401F803C, 0x00000000);
|
||||||
|
_WDWORD(0x401F8040, 0x00000000);
|
||||||
|
_WDWORD(0x401F8044, 0x00000000);
|
||||||
|
_WDWORD(0x401F8048, 0x00000000);
|
||||||
|
_WDWORD(0x401F804C, 0x00000000);
|
||||||
|
_WDWORD(0x401F8050, 0x00000000);
|
||||||
|
_WDWORD(0x401F8054, 0x00000000);
|
||||||
|
_WDWORD(0x401F8058, 0x00000000);
|
||||||
|
_WDWORD(0x401F805C, 0x00000000);
|
||||||
|
_WDWORD(0x401F8060, 0x00000000);
|
||||||
|
_WDWORD(0x401F8064, 0x00000000);
|
||||||
|
_WDWORD(0x401F8068, 0x00000000);
|
||||||
|
_WDWORD(0x401F806C, 0x00000000);
|
||||||
|
_WDWORD(0x401F8070, 0x00000000);
|
||||||
|
_WDWORD(0x401F8074, 0x00000000);
|
||||||
|
_WDWORD(0x401F8078, 0x00000000);
|
||||||
|
_WDWORD(0x401F807C, 0x00000000);
|
||||||
|
_WDWORD(0x401F8080, 0x00000000);
|
||||||
|
_WDWORD(0x401F8084, 0x00000000);
|
||||||
|
_WDWORD(0x401F8088, 0x00000000);
|
||||||
|
_WDWORD(0x401F808C, 0x00000000);
|
||||||
|
_WDWORD(0x401F8090, 0x00000000);
|
||||||
|
_WDWORD(0x401F8094, 0x00000000);
|
||||||
|
_WDWORD(0x401F8098, 0x00000000);
|
||||||
|
_WDWORD(0x401F809C, 0x00000000);
|
||||||
|
_WDWORD(0x401F80A0, 0x00000000);
|
||||||
|
_WDWORD(0x401F80A4, 0x00000000);
|
||||||
|
_WDWORD(0x401F80A8, 0x00000000);
|
||||||
|
_WDWORD(0x401F80AC, 0x00000000);
|
||||||
|
_WDWORD(0x401F80B0, 0x00000010); // EMC_39, DQS PIN, enable SION
|
||||||
|
|
||||||
|
// PAD ctrl
|
||||||
|
// drive strength = 0x7 to increase drive strength
|
||||||
|
// otherwise the data7 bit may fail.
|
||||||
|
_WDWORD(0x401F8204, 0x000110F9);
|
||||||
|
_WDWORD(0x401F8208, 0x000110F9);
|
||||||
|
_WDWORD(0x401F820C, 0x000110F9);
|
||||||
|
_WDWORD(0x401F8210, 0x000110F9);
|
||||||
|
_WDWORD(0x401F8214, 0x000110F9);
|
||||||
|
_WDWORD(0x401F8218, 0x000110F9);
|
||||||
|
_WDWORD(0x401F821C, 0x000110F9);
|
||||||
|
_WDWORD(0x401F8220, 0x000110F9);
|
||||||
|
_WDWORD(0x401F8224, 0x000110F9);
|
||||||
|
_WDWORD(0x401F8228, 0x000110F9);
|
||||||
|
_WDWORD(0x401F822C, 0x000110F9);
|
||||||
|
_WDWORD(0x401F8230, 0x000110F9);
|
||||||
|
_WDWORD(0x401F8234, 0x000110F9);
|
||||||
|
_WDWORD(0x401F8238, 0x000110F9);
|
||||||
|
_WDWORD(0x401F823C, 0x000110F9);
|
||||||
|
_WDWORD(0x401F8240, 0x000110F9);
|
||||||
|
_WDWORD(0x401F8244, 0x000110F9);
|
||||||
|
_WDWORD(0x401F8248, 0x000110F9);
|
||||||
|
_WDWORD(0x401F824C, 0x000110F9);
|
||||||
|
_WDWORD(0x401F8250, 0x000110F9);
|
||||||
|
_WDWORD(0x401F8254, 0x000110F9);
|
||||||
|
_WDWORD(0x401F8258, 0x000110F9);
|
||||||
|
_WDWORD(0x401F825C, 0x000110F9);
|
||||||
|
_WDWORD(0x401F8260, 0x000110F9);
|
||||||
|
_WDWORD(0x401F8264, 0x000110F9);
|
||||||
|
_WDWORD(0x401F8268, 0x000110F9);
|
||||||
|
_WDWORD(0x401F826C, 0x000110F9);
|
||||||
|
_WDWORD(0x401F8270, 0x000110F9);
|
||||||
|
_WDWORD(0x401F8274, 0x000110F9);
|
||||||
|
_WDWORD(0x401F8278, 0x000110F9);
|
||||||
|
_WDWORD(0x401F827C, 0x000110F9);
|
||||||
|
_WDWORD(0x401F8280, 0x000110F9);
|
||||||
|
_WDWORD(0x401F8284, 0x000110F9);
|
||||||
|
_WDWORD(0x401F8288, 0x000110F9);
|
||||||
|
_WDWORD(0x401F828C, 0x000110F9);
|
||||||
|
_WDWORD(0x401F8290, 0x000110F9);
|
||||||
|
_WDWORD(0x401F8294, 0x000110F9);
|
||||||
|
_WDWORD(0x401F8298, 0x000110F9);
|
||||||
|
_WDWORD(0x401F829C, 0x000110F9);
|
||||||
|
_WDWORD(0x401F82A0, 0x000110F9);
|
||||||
|
|
||||||
|
// Config SDR Controller Registers/
|
||||||
|
_WDWORD(0x402F0000,0x10000004); // MCR
|
||||||
|
_WDWORD(0x402F0008,0x00000081); // BMCR0
|
||||||
|
_WDWORD(0x402F000C,0x00000081); // BMCR1
|
||||||
|
_WDWORD(0x402F0010,0x8000001B); // BR0, 32MB
|
||||||
|
|
||||||
|
_WDWORD(0x402F0040,0x00000F31); // SDRAMCR0
|
||||||
|
_WDWORD(0x402F0044,0x00652922); // SDRAMCR1
|
||||||
|
_WDWORD(0x402F0048,0x00010920); // SDRAMCR2
|
||||||
|
_WDWORD(0x402F004C,0x50210A08); // SDRAMCR3
|
||||||
|
|
||||||
|
_WDWORD(0x402F0090,0x80000000); // IPCR0
|
||||||
|
_WDWORD(0x402F0094,0x00000002); // IPCR1
|
||||||
|
_WDWORD(0x402F0098,0x00000000); // IPCR2
|
||||||
|
|
||||||
|
|
||||||
|
_WDWORD(0x402F009C,0xA55A000F); // IPCMD, SD_CC_IPREA
|
||||||
|
SDRAM_WaitIpCmdDone();
|
||||||
|
_WDWORD(0x402F009C,0xA55A000C); // SD_CC_IAF
|
||||||
|
SDRAM_WaitIpCmdDone();
|
||||||
|
_WDWORD(0x402F009C,0xA55A000C); // SD_CC_IAF
|
||||||
|
SDRAM_WaitIpCmdDone();
|
||||||
|
_WDWORD(0x402F00A0,0x00000033); // IPTXDAT
|
||||||
|
_WDWORD(0x402F009C,0xA55A000A); // SD_CC_IMS
|
||||||
|
SDRAM_WaitIpCmdDone();
|
||||||
|
_WDWORD(0x402F004C,0x08080A01 ); // enable sdram self refresh again after initialization done.
|
||||||
|
}
|
||||||
|
|
||||||
|
FUNC void restoreFlexRAM(void)
|
||||||
|
{
|
||||||
|
unsigned int value;
|
||||||
|
unsigned int base;
|
||||||
|
|
||||||
|
base = 0x400AC000;
|
||||||
|
|
||||||
|
value = _RDWORD(base + 0x44);
|
||||||
|
value &= ~(0xFFFFFFFF);
|
||||||
|
value |= 0x55AFFA55;
|
||||||
|
_WDWORD(base + 0x44, value);
|
||||||
|
|
||||||
|
value = _RDWORD(base + 0x40);
|
||||||
|
value |= (1 << 2);
|
||||||
|
_WDWORD(base + 0x40, value);
|
||||||
|
}
|
||||||
|
|
||||||
|
FUNC void Setup (void) {
|
||||||
|
_loadDcdcTrim();
|
||||||
|
SP = _RDWORD(0x00000000); // Setup Stack Pointer
|
||||||
|
PC = _RDWORD(0x00000004); // Setup Program Counter
|
||||||
|
_WDWORD(0xE000ED08, 0x00000000); // Setup Vector Table Offset Register
|
||||||
|
}
|
||||||
|
|
||||||
|
FUNC void OnResetExec (void) { // executes upon software RESET
|
||||||
|
restoreFlexRAM();
|
||||||
|
_clock_init();
|
||||||
|
_sdr_Init();
|
||||||
|
Setup(); // Setup for Running
|
||||||
|
}
|
||||||
|
|
||||||
|
restoreFlexRAM();
|
||||||
|
_clock_init();
|
||||||
|
_sdr_Init();
|
||||||
|
|
||||||
|
LOAD %L INCREMENTAL // Download
|
||||||
|
|
||||||
|
Setup(); // Setup for Running
|
||||||
|
|
||||||
|
// g, main
|
|
@ -239,6 +239,9 @@ static void _enet_clk_init(void)
|
||||||
// IOMUXC_GPR->GPR1 |= 1 << 23;
|
// IOMUXC_GPR->GPR1 |= 1 << 23;
|
||||||
/* Set 50MHz output clock required by PHY. */
|
/* Set 50MHz output clock required by PHY. */
|
||||||
const clock_enet_pll_config_t config = {.enableClkOutput = true, .loopDivider = 1};
|
const clock_enet_pll_config_t config = {.enableClkOutput = true, .loopDivider = 1};
|
||||||
|
#if defined(SOC_IMXRT1020_SERIES)
|
||||||
|
const clock_enet_pll_config_t config = {.enableClkOutput = true, .enableClkOutput500M = true, .loopDivider = 1};
|
||||||
|
#endif
|
||||||
CLOCK_InitEnetPll(&config);
|
CLOCK_InitEnetPll(&config);
|
||||||
|
|
||||||
/* Output 50M clock to PHY. */
|
/* Output 50M clock to PHY. */
|
||||||
|
|
|
@ -519,7 +519,7 @@ void GPIO13_Combined_0_31_IRQHandler(void)
|
||||||
rt_interrupt_leave();
|
rt_interrupt_leave();
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
static void imxrt_pin_mode(rt_device_t dev, rt_base_t pin, rt_base_t mode)
|
static void imxrt_pin_mode(rt_device_t dev, rt_base_t pin, rt_uint8_t mode)
|
||||||
{
|
{
|
||||||
gpio_pin_config_t gpio;
|
gpio_pin_config_t gpio;
|
||||||
rt_int8_t port, pin_num;
|
rt_int8_t port, pin_num;
|
||||||
|
@ -622,7 +622,7 @@ static void imxrt_pin_mode(rt_device_t dev, rt_base_t pin, rt_base_t mode)
|
||||||
GPIO_PinInit(mask_tab[port].gpio, pin_num, &gpio);
|
GPIO_PinInit(mask_tab[port].gpio, pin_num, &gpio);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int imxrt_pin_read(rt_device_t dev, rt_base_t pin)
|
static rt_int8_t imxrt_pin_read(rt_device_t dev, rt_base_t pin)
|
||||||
{
|
{
|
||||||
int value;
|
int value;
|
||||||
rt_int8_t port, pin_num;
|
rt_int8_t port, pin_num;
|
||||||
|
@ -640,7 +640,7 @@ static int imxrt_pin_read(rt_device_t dev, rt_base_t pin)
|
||||||
return GPIO_PinReadPadStatus(mask_tab[port].gpio, pin_num);
|
return GPIO_PinReadPadStatus(mask_tab[port].gpio, pin_num);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void imxrt_pin_write(rt_device_t dev, rt_base_t pin, rt_base_t value)
|
static void imxrt_pin_write(rt_device_t dev, rt_base_t pin, rt_uint8_t value)
|
||||||
{
|
{
|
||||||
rt_int8_t port, pin_num;
|
rt_int8_t port, pin_num;
|
||||||
|
|
||||||
|
@ -656,8 +656,8 @@ static void imxrt_pin_write(rt_device_t dev, rt_base_t pin, rt_base_t value)
|
||||||
GPIO_PinWrite(mask_tab[port].gpio, pin_num, value);
|
GPIO_PinWrite(mask_tab[port].gpio, pin_num, value);
|
||||||
}
|
}
|
||||||
|
|
||||||
static rt_err_t imxrt_pin_attach_irq(struct rt_device *device, rt_int32_t pin,
|
static rt_err_t imxrt_pin_attach_irq(struct rt_device *device, rt_base_t pin,
|
||||||
rt_uint32_t mode, void (*hdr)(void *args), void *args)
|
rt_uint8_t mode, void (*hdr)(void *args), void *args)
|
||||||
{
|
{
|
||||||
rt_base_t level;
|
rt_base_t level;
|
||||||
rt_int8_t port, pin_num;
|
rt_int8_t port, pin_num;
|
||||||
|
@ -690,7 +690,7 @@ static rt_err_t imxrt_pin_attach_irq(struct rt_device *device, rt_int32_t pin,
|
||||||
return RT_EOK;
|
return RT_EOK;
|
||||||
}
|
}
|
||||||
|
|
||||||
static rt_err_t imxrt_pin_detach_irq(struct rt_device *device, rt_int32_t pin)
|
static rt_err_t imxrt_pin_detach_irq(struct rt_device *device, rt_base_t pin)
|
||||||
{
|
{
|
||||||
rt_base_t level;
|
rt_base_t level;
|
||||||
rt_int8_t port, pin_num;
|
rt_int8_t port, pin_num;
|
||||||
|
@ -719,7 +719,7 @@ static rt_err_t imxrt_pin_detach_irq(struct rt_device *device, rt_int32_t pin)
|
||||||
return RT_EOK;
|
return RT_EOK;
|
||||||
}
|
}
|
||||||
|
|
||||||
static rt_err_t imxrt_pin_irq_enable(struct rt_device *device, rt_base_t pin, rt_uint32_t enabled)
|
static rt_err_t imxrt_pin_irq_enable(struct rt_device *device, rt_base_t pin, rt_uint8_t enabled)
|
||||||
{
|
{
|
||||||
gpio_interrupt_mode_t int_mode;
|
gpio_interrupt_mode_t int_mode;
|
||||||
rt_int8_t port, pin_num, irq_index;
|
rt_int8_t port, pin_num, irq_index;
|
||||||
|
|
Loading…
Reference in New Issue