| 
						 | 
				
			
			@ -4,12 +4,12 @@
 | 
			
		|||
[submodule "Ubiquitous/RT_Thread/aiit_board/k210/kendryte-sdk/kendryte-sdk-source"]
 | 
			
		||||
	path = Ubiquitous/RT_Thread/aiit_board/k210/kendryte-sdk/kendryte-sdk-source
 | 
			
		||||
	url = https://code.gitlink.org.cn/chunyexixiaoyu/kendryte-sdk-source.git
 | 
			
		||||
[submodule "Ubiquitous/Nuttx/apps"]
 | 
			
		||||
	path = Ubiquitous/Nuttx/apps
 | 
			
		||||
	url = https://gitlink.org.cn/wgzAIIT/incubator-nuttx-apps.git
 | 
			
		||||
[submodule "Ubiquitous/Nuttx/nuttx"]
 | 
			
		||||
	path = Ubiquitous/Nuttx/nuttx
 | 
			
		||||
	url = https://gitlink.org.cn/wgzAIIT/incubator-nuttx.git
 | 
			
		||||
[submodule "Ubiquitous/RT_Thread/aiit_board/aiit-riscv64-board/kendryte-sdk/kendryte-sdk-source"]
 | 
			
		||||
	path = Ubiquitous/RT_Thread/aiit_board/aiit-riscv64-board/kendryte-sdk/kendryte-sdk-source
 | 
			
		||||
	url = https://code.gitlink.org.cn/chunyexixiaoyu/kendryte-sdk-source.git
 | 
			
		||||
[submodule "Ubiquitous/Nuttx/apps"]
 | 
			
		||||
	path = Ubiquitous/Nuttx/apps
 | 
			
		||||
	url = https://code.gitlink.org.cn/wgzAIIT/incubator-nuttx-apps.git
 | 
			
		||||
[submodule "Ubiquitous/Nuttx/nuttx"]
 | 
			
		||||
	path = Ubiquitous/Nuttx/nuttx
 | 
			
		||||
	url = https://code.gitlink.org.cn/wgzAIIT/incubator-nuttx.git
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -47,6 +47,14 @@ ifeq ($(CONFIG_ADD_NUTTX_FETURES),y)
 | 
			
		|||
        CSRCS += temperature_hs300x.c
 | 
			
		||||
    endif
 | 
			
		||||
 | 
			
		||||
    ifeq ($(CONFIG_APPLICATION_SENSOR_WINDDIRECTION_QS_FX), y)
 | 
			
		||||
        CSRCS += winddirection_qs_fx.c
 | 
			
		||||
    endif
 | 
			
		||||
 | 
			
		||||
    ifeq ($(CONFIG_APPLICATION_SENSOR_WINDSPEED_QS_FS), y)
 | 
			
		||||
        CSRCS += windspeed_qs_fs.c
 | 
			
		||||
    endif
 | 
			
		||||
 | 
			
		||||
    include $(APPDIR)/Application.mk
 | 
			
		||||
 | 
			
		||||
endif
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -34,5 +34,7 @@ void WindDirectionQsFx(void)
 | 
			
		|||
    printf("wind direction : %d degree\n", result);
 | 
			
		||||
    SensorQuantityClose(wind_direction);
 | 
			
		||||
}
 | 
			
		||||
#ifdef ADD_XIZI_FETURES
 | 
			
		||||
SHELL_EXPORT_CMD(SHELL_CMD_PERMISSION(0)|SHELL_CMD_TYPE(SHELL_TYPE_CMD_FUNC)|SHELL_CMD_PARAM_NUM(0)|SHELL_CMD_DISABLE_RETURN, WindDirectionQsFx, WindDirectionQsFx, WindDirectionQsFx function);
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -34,5 +34,7 @@ void WindSpeedQsFs(void)
 | 
			
		|||
    printf("wind speed : %d.%d m/s\n", result/10, result%10);
 | 
			
		||||
    SensorQuantityClose(wind_speed);
 | 
			
		||||
}
 | 
			
		||||
#ifdef ADD_XIZI_FETURES
 | 
			
		||||
SHELL_EXPORT_CMD(SHELL_CMD_PERMISSION(0)|SHELL_CMD_TYPE(SHELL_TYPE_CMD_FUNC)|SHELL_CMD_PARAM_NUM(0)|SHELL_CMD_DISABLE_RETURN, WindSpeedQsFs, WindSpeedQsFs, WindSpeedQsFs function);
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -34,6 +34,11 @@ config SENSOR_QS_FX
 | 
			
		|||
                endif
 | 
			
		||||
 | 
			
		||||
                if ADD_NUTTX_FETURES
 | 
			
		||||
                        config SENSOR_DEVICE_QS_FX_DEV
 | 
			
		||||
                                string "qs-fx device name"
 | 
			
		||||
                                default "/dev/ttyS1"
 | 
			
		||||
                               ---help---
 | 
			
		||||
                                   If USART1 is selected, then fill in /dev/ttyS1 here.
 | 
			
		||||
 | 
			
		||||
                endif
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -0,0 +1,4 @@
 | 
			
		|||
############################################################################
 | 
			
		||||
# APP_Framework/Framework/sensor/winddirection/Make.defs
 | 
			
		||||
############################################################################
 | 
			
		||||
include $(wildcard $(APPDIR)/../../../APP_Framework/Framework/sensor/winddirection/*/Make.defs)
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,6 @@
 | 
			
		|||
############################################################################
 | 
			
		||||
# APP_Framework/Framework/sensor/winddirection/qs-fx/Make.defs
 | 
			
		||||
############################################################################
 | 
			
		||||
ifneq ($(CONFIG_SENSOR_QS_FX),)
 | 
			
		||||
CONFIGURED_APPS += $(APPDIR)/../../../APP_Framework/Framework/sensor/winddirection/qs-fx
 | 
			
		||||
endif
 | 
			
		||||
| 
						 | 
				
			
			@ -1,3 +1,11 @@
 | 
			
		|||
SRC_FILES := qs-fx.c
 | 
			
		||||
include $(KERNEL_ROOT)/.config
 | 
			
		||||
ifeq ($(CONFIG_ADD_NUTTX_FETURES),y)
 | 
			
		||||
    include $(APPDIR)/Make.defs
 | 
			
		||||
    CSRCS += qs-fx.c
 | 
			
		||||
    include $(APPDIR)/Application.mk
 | 
			
		||||
endif
 | 
			
		||||
 | 
			
		||||
include $(KERNEL_ROOT)/compiler.mk
 | 
			
		||||
ifeq ($(CONFIG_ADD_XIZI_FETURES),y)
 | 
			
		||||
    SRC_FILES := qs-fx.c
 | 
			
		||||
    include $(KERNEL_ROOT)/compiler.mk
 | 
			
		||||
endif
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -35,6 +35,18 @@ static struct SensorProductInfo info =
 | 
			
		|||
 * @param sdev - sensor device pointer
 | 
			
		||||
 * @return success: 1 , failure: other
 | 
			
		||||
 */
 | 
			
		||||
#ifdef ADD_NUTTX_FETURES
 | 
			
		||||
static int SensorDeviceOpen(struct SensorDevice *sdev)
 | 
			
		||||
{
 | 
			
		||||
    sdev->fd = PrivOpen(SENSOR_DEVICE_QS_FX_DEV, O_RDWR);
 | 
			
		||||
    if (sdev->fd < 0) {
 | 
			
		||||
        printf("open %s error\n", SENSOR_DEVICE_QS_FX_DEV);
 | 
			
		||||
        return -1;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    return sdev->fd ;
 | 
			
		||||
}
 | 
			
		||||
#else
 | 
			
		||||
static int SensorDeviceOpen(struct SensorDevice *sdev)
 | 
			
		||||
{
 | 
			
		||||
    int result = 0;
 | 
			
		||||
| 
						 | 
				
			
			@ -65,6 +77,7 @@ static int SensorDeviceOpen(struct SensorDevice *sdev)
 | 
			
		|||
 | 
			
		||||
    return result;
 | 
			
		||||
}    
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @description: Read sensor device
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -34,6 +34,11 @@ config SENSOR_QS_FS
 | 
			
		|||
                endif
 | 
			
		||||
 | 
			
		||||
                if ADD_NUTTX_FETURES
 | 
			
		||||
                        config SENSOR_DEVICE_QS_FS_DEV
 | 
			
		||||
                                string "qs-fx device name"
 | 
			
		||||
                                default "/dev/ttyS1"
 | 
			
		||||
                               ---help---
 | 
			
		||||
                                   If USART1 is selected, then fill in /dev/ttyS1 here.
 | 
			
		||||
 | 
			
		||||
                endif
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -0,0 +1,4 @@
 | 
			
		|||
############################################################################
 | 
			
		||||
# APP_Framework/Framework/sensor/windspeed/Make.defs
 | 
			
		||||
############################################################################
 | 
			
		||||
include $(wildcard $(APPDIR)/../../../APP_Framework/Framework/sensor/windspeed/*/Make.defs)
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,6 @@
 | 
			
		|||
############################################################################
 | 
			
		||||
# APP_Framework/Framework/sensor/windspeed/qs-fs/Make.defs
 | 
			
		||||
############################################################################
 | 
			
		||||
ifneq ($(CONFIG_SENSOR_QS_FS),)
 | 
			
		||||
CONFIGURED_APPS += $(APPDIR)/../../../APP_Framework/Framework/sensor/windspeed/qs-fs
 | 
			
		||||
endif
 | 
			
		||||
| 
						 | 
				
			
			@ -1,3 +1,11 @@
 | 
			
		|||
SRC_FILES := qs-fs.c
 | 
			
		||||
include $(KERNEL_ROOT)/.config
 | 
			
		||||
ifeq ($(CONFIG_ADD_NUTTX_FETURES),y)
 | 
			
		||||
    include $(APPDIR)/Make.defs
 | 
			
		||||
    CSRCS += qs-fs.c
 | 
			
		||||
    include $(APPDIR)/Application.mk
 | 
			
		||||
endif
 | 
			
		||||
 | 
			
		||||
include $(KERNEL_ROOT)/compiler.mk
 | 
			
		||||
ifeq ($(CONFIG_ADD_XIZI_FETURES),y)
 | 
			
		||||
    SRC_FILES := qs-fs.c
 | 
			
		||||
    include $(KERNEL_ROOT)/compiler.mk
 | 
			
		||||
endif
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -35,6 +35,17 @@ static struct SensorProductInfo info =
 | 
			
		|||
 * @param sdev - sensor device pointer
 | 
			
		||||
 * @return success: 1 , failure: other
 | 
			
		||||
 */
 | 
			
		||||
#ifdef ADD_NUTTX_FETURES
 | 
			
		||||
static int SensorDeviceOpen(struct SensorDevice *sdev)
 | 
			
		||||
{
 | 
			
		||||
    sdev->fd = PrivOpen(SENSOR_DEVICE_QS_FS_DEV, O_RDWR);
 | 
			
		||||
    if (sdev->fd < 0) {
 | 
			
		||||
        printf("open %s error\n", SENSOR_DEVICE_QS_FS_DEV);
 | 
			
		||||
        return -1;
 | 
			
		||||
    }
 | 
			
		||||
    return sdev->fd;
 | 
			
		||||
}
 | 
			
		||||
#else
 | 
			
		||||
static int SensorDeviceOpen(struct SensorDevice *sdev)
 | 
			
		||||
{
 | 
			
		||||
    int result = 0;
 | 
			
		||||
| 
						 | 
				
			
			@ -65,6 +76,7 @@ static int SensorDeviceOpen(struct SensorDevice *sdev)
 | 
			
		|||
 | 
			
		||||
    return result;
 | 
			
		||||
}
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @description: Read sensor device
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -0,0 +1,27 @@
 | 
			
		|||
#
 | 
			
		||||
# For a description of the syntax of this configuration file,
 | 
			
		||||
# see the file kconfig-language.txt in the NuttX tools repository.
 | 
			
		||||
#
 | 
			
		||||
 | 
			
		||||
if ARCH_BOARD_XIDATONG
 | 
			
		||||
 | 
			
		||||
choice
 | 
			
		||||
	prompt "Boot Flash"
 | 
			
		||||
	default XIDATONG_HYPER_FLASH
 | 
			
		||||
 | 
			
		||||
config XIDATONG_HYPER_FLASH
 | 
			
		||||
	bool "HYPER Flash"
 | 
			
		||||
 | 
			
		||||
config XIDATONG_QSPI_FLASH
 | 
			
		||||
	bool "QSPI Flash"
 | 
			
		||||
 | 
			
		||||
endchoice # Boot Flash
 | 
			
		||||
 | 
			
		||||
config XIDATONG_SDRAM
 | 
			
		||||
	bool "Enable SDRAM"
 | 
			
		||||
	default n
 | 
			
		||||
	select IMXRT_SEMC_INIT_DONE
 | 
			
		||||
	---help---
 | 
			
		||||
		Activate DCD configuration of SDRAM
 | 
			
		||||
 | 
			
		||||
endif
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,74 @@
 | 
			
		|||
############################################################################
 | 
			
		||||
# boards/arm/imxrt/xidatong/configs/knsh/Make.defs
 | 
			
		||||
#
 | 
			
		||||
# Licensed to the Apache Software Foundation (ASF) under one or more
 | 
			
		||||
# contributor license agreements.  See the NOTICE file distributed with
 | 
			
		||||
# this work for additional information regarding copyright ownership.  The
 | 
			
		||||
# ASF licenses this file to you under the Apache License, Version 2.0 (the
 | 
			
		||||
# "License"); you may not use this file except in compliance with the
 | 
			
		||||
# License.  You may obtain a copy of the License at
 | 
			
		||||
#
 | 
			
		||||
#   http://www.apache.org/licenses/LICENSE-2.0
 | 
			
		||||
#
 | 
			
		||||
# Unless required by applicable law or agreed to in writing, software
 | 
			
		||||
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
 | 
			
		||||
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the
 | 
			
		||||
# License for the specific language governing permissions and limitations
 | 
			
		||||
# under the License.
 | 
			
		||||
#
 | 
			
		||||
############################################################################
 | 
			
		||||
 | 
			
		||||
include $(TOPDIR)/.config
 | 
			
		||||
include $(TOPDIR)/tools/Config.mk
 | 
			
		||||
include $(TOPDIR)/arch/arm/src/armv7-m/Toolchain.defs
 | 
			
		||||
 | 
			
		||||
LDSCRIPT1 = memory.ld
 | 
			
		||||
LDSCRIPT2 = kernel-space.ld
 | 
			
		||||
 | 
			
		||||
ifeq ($(CONFIG_CYGWIN_WINTOOL),y)
 | 
			
		||||
  ARCHSCRIPT = -T "${shell cygpath -w $(BOARD_DIR)$(DELIM)scripts$(DELIM)$(LDSCRIPT1)}"
 | 
			
		||||
  ARCHSCRIPT += -T "${shell cygpath -w $(BOARD_DIR)$(DELIM)scripts$(DELIM)$(LDSCRIPT2)}"
 | 
			
		||||
else
 | 
			
		||||
  ARCHSCRIPT = -T$(BOARD_DIR)$(DELIM)scripts$(DELIM)$(LDSCRIPT1)
 | 
			
		||||
  ARCHSCRIPT += -T$(BOARD_DIR)$(DELIM)scripts$(DELIM)$(LDSCRIPT2)
 | 
			
		||||
endif
 | 
			
		||||
 | 
			
		||||
ifeq ($(CONFIG_DEBUG_SYMBOLS),y)
 | 
			
		||||
  ARCHOPTIMIZATION = -g
 | 
			
		||||
endif
 | 
			
		||||
 | 
			
		||||
ifneq ($(CONFIG_DEBUG_NOOPT),y)
 | 
			
		||||
  ARCHOPTIMIZATION += $(MAXOPTIMIZATION)
 | 
			
		||||
endif
 | 
			
		||||
 | 
			
		||||
ARCHCFLAGS = -fno-builtin
 | 
			
		||||
ARCHCXXFLAGS = -fno-builtin -fno-exceptions -fcheck-new -fno-rtti
 | 
			
		||||
ARCHWARNINGS = -Wall -Wstrict-prototypes -Wshadow -Wundef -fno-strict-aliasing
 | 
			
		||||
ARCHWARNINGSXX = -Wall -Wshadow -Wundef
 | 
			
		||||
ARCHPICFLAGS = -fpic -msingle-pic-base -mpic-register=r10
 | 
			
		||||
 | 
			
		||||
CFLAGS := $(ARCHCFLAGS) $(ARCHWARNINGS) $(ARCHOPTIMIZATION) $(ARCHCPUFLAGS) $(ARCHINCLUDES) $(ARCHDEFINES) $(EXTRAFLAGS) -pipe
 | 
			
		||||
CPICFLAGS = $(ARCHPICFLAGS) $(CFLAGS)
 | 
			
		||||
CXXFLAGS := $(ARCHCXXFLAGS) $(ARCHWARNINGSXX) $(ARCHOPTIMIZATION) $(ARCHCPUFLAGS) $(ARCHXXINCLUDES) $(ARCHDEFINES) $(EXTRAFLAGS) -pipe
 | 
			
		||||
CXXPICFLAGS = $(ARCHPICFLAGS) $(CXXFLAGS)
 | 
			
		||||
CPPFLAGS := $(ARCHINCLUDES) $(ARCHDEFINES) $(EXTRAFLAGS)
 | 
			
		||||
AFLAGS := $(CFLAGS) -D__ASSEMBLY__
 | 
			
		||||
 | 
			
		||||
NXFLATLDFLAGS1 = -r -d -warn-common
 | 
			
		||||
NXFLATLDFLAGS2 = $(NXFLATLDFLAGS1) -T$(TOPDIR)/binfmt/libnxflat/gnu-nxflat-pcrel.ld -no-check-sections
 | 
			
		||||
LDNXFLATFLAGS = -e main -s 2048
 | 
			
		||||
 | 
			
		||||
# Loadable module definitions
 | 
			
		||||
 | 
			
		||||
CMODULEFLAGS = $(CFLAGS) -mlong-calls # --target1-abs
 | 
			
		||||
 | 
			
		||||
LDMODULEFLAGS = -r -e module_initialize
 | 
			
		||||
ifeq ($(CONFIG_CYGWIN_WINTOOL),y)
 | 
			
		||||
  LDMODULEFLAGS += -T "${shell cygpath -w $(TOPDIR)/libs/libc/modlib/gnu-elf.ld}"
 | 
			
		||||
else
 | 
			
		||||
  LDMODULEFLAGS += -T $(TOPDIR)/libs/libc/modlib/gnu-elf.ld
 | 
			
		||||
endif
 | 
			
		||||
 | 
			
		||||
ifeq ($(CONFIG_DEBUG_SYMBOLS),y)
 | 
			
		||||
  LDFLAGS += -g
 | 
			
		||||
endif
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,46 @@
 | 
			
		|||
#
 | 
			
		||||
# This file is autogenerated: PLEASE DO NOT EDIT IT.
 | 
			
		||||
#
 | 
			
		||||
# You can use "make menuconfig" to make any modifications to the installed .config file.
 | 
			
		||||
# You can then do "make savedefconfig" to generate a new defconfig file that includes your
 | 
			
		||||
# modifications.
 | 
			
		||||
#
 | 
			
		||||
# CONFIG_ARCH_RAMFUNCS is not set
 | 
			
		||||
CONFIG_ADD_NUTTX_FETURES=y
 | 
			
		||||
CONFIG_ARCH="arm"
 | 
			
		||||
CONFIG_ARCH_BOARD="xidatong"
 | 
			
		||||
CONFIG_ARCH_BOARD_XIDATONG=y
 | 
			
		||||
CONFIG_ARCH_CHIP="imxrt"
 | 
			
		||||
CONFIG_ARCH_CHIP_IMXRT=y
 | 
			
		||||
CONFIG_ARCH_CHIP_MIMXRT1052CVL5B=y
 | 
			
		||||
CONFIG_ARCH_INTERRUPTSTACK=10240
 | 
			
		||||
CONFIG_ARCH_STACKDUMP=y
 | 
			
		||||
CONFIG_ARMV7M_DCACHE=y
 | 
			
		||||
CONFIG_ARMV7M_DCACHE_WRITETHROUGH=y
 | 
			
		||||
CONFIG_ARMV7M_ICACHE=y
 | 
			
		||||
CONFIG_ARMV7M_LAZYFPU=y
 | 
			
		||||
CONFIG_ARMV7M_USEBASEPRI=y
 | 
			
		||||
CONFIG_ARM_MPU=y
 | 
			
		||||
CONFIG_BOARD_LOOPSPERMSEC=104926
 | 
			
		||||
CONFIG_BUILD_PROTECTED=y
 | 
			
		||||
CONFIG_FS_PROCFS=y
 | 
			
		||||
CONFIG_IDLETHREAD_STACKSIZE=2048
 | 
			
		||||
CONFIG_IMXRT_LPUART1=y
 | 
			
		||||
CONFIG_INTELHEX_BINARY=y
 | 
			
		||||
CONFIG_LPUART1_SERIAL_CONSOLE=y
 | 
			
		||||
CONFIG_NSH_ARCHINIT=y
 | 
			
		||||
CONFIG_NSH_DISABLE_MKRD=y
 | 
			
		||||
CONFIG_NSH_FILEIOSIZE=512
 | 
			
		||||
CONFIG_NSH_LINELEN=64
 | 
			
		||||
CONFIG_NSH_READLINE=y
 | 
			
		||||
CONFIG_NUTTX_USERSPACE=0x60200000
 | 
			
		||||
CONFIG_PASS1_BUILDIR="boards/arm/imxrt/xidatong/kernel"
 | 
			
		||||
CONFIG_RAM_SIZE=524288
 | 
			
		||||
CONFIG_RAM_START=0x20200000
 | 
			
		||||
CONFIG_SCHED_HPWORK=y
 | 
			
		||||
CONFIG_SCHED_WAITPID=y
 | 
			
		||||
CONFIG_START_DAY=8
 | 
			
		||||
CONFIG_START_MONTH=6
 | 
			
		||||
CONFIG_SYSTEM_NSH=y
 | 
			
		||||
CONFIG_SYS_RESERVED=9
 | 
			
		||||
CONFIG_USER_ENTRYPOINT="nsh_main"
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,85 @@
 | 
			
		|||
############################################################################
 | 
			
		||||
# boards/arm/imxrt/xidatong/configs/libcxxtest/Make.defs
 | 
			
		||||
#
 | 
			
		||||
# Licensed to the Apache Software Foundation (ASF) under one or more
 | 
			
		||||
# contributor license agreements.  See the NOTICE file distributed with
 | 
			
		||||
# this work for additional information regarding copyright ownership.  The
 | 
			
		||||
# ASF licenses this file to you under the Apache License, Version 2.0 (the
 | 
			
		||||
# "License"); you may not use this file except in compliance with the
 | 
			
		||||
# License.  You may obtain a copy of the License at
 | 
			
		||||
#
 | 
			
		||||
#   http://www.apache.org/licenses/LICENSE-2.0
 | 
			
		||||
#
 | 
			
		||||
# Unless required by applicable law or agreed to in writing, software
 | 
			
		||||
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
 | 
			
		||||
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the
 | 
			
		||||
# License for the specific language governing permissions and limitations
 | 
			
		||||
# under the License.
 | 
			
		||||
#
 | 
			
		||||
############################################################################
 | 
			
		||||
 | 
			
		||||
include $(TOPDIR)/.config
 | 
			
		||||
include $(TOPDIR)/tools/Config.mk
 | 
			
		||||
include $(TOPDIR)/arch/arm/src/armv7-m/Toolchain.defs
 | 
			
		||||
 | 
			
		||||
ifeq ($(CONFIG_ARMV7M_DTCM),y)
 | 
			
		||||
  LDSCRIPT = flash-dtcm.ld
 | 
			
		||||
else
 | 
			
		||||
  LDSCRIPT = flash-ocram.ld
 | 
			
		||||
endif
 | 
			
		||||
 | 
			
		||||
ifeq ($(CONFIG_CYGWIN_WINTOOL),y)
 | 
			
		||||
  ARCHSCRIPT = -T "${shell cygpath -w $(BOARD_DIR)$(DELIM)scripts$(DELIM)$(LDSCRIPT)}"
 | 
			
		||||
else
 | 
			
		||||
  ARCHSCRIPT = -T$(BOARD_DIR)$(DELIM)scripts$(DELIM)$(LDSCRIPT)
 | 
			
		||||
endif
 | 
			
		||||
 | 
			
		||||
ifeq ($(CONFIG_DEBUG_SYMBOLS),y)
 | 
			
		||||
  ARCHOPTIMIZATION = -g
 | 
			
		||||
endif
 | 
			
		||||
 | 
			
		||||
ifneq ($(CONFIG_DEBUG_NOOPT),y)
 | 
			
		||||
  ARCHOPTIMIZATION += $(MAXOPTIMIZATION) -fno-strict-aliasing \
 | 
			
		||||
                      -fno-strength-reduce -fomit-frame-pointer
 | 
			
		||||
endif
 | 
			
		||||
 | 
			
		||||
ARCHCFLAGS = -fno-builtin
 | 
			
		||||
ifeq ($(CONFIG_CXX_EXCEPTION),y)
 | 
			
		||||
  ARCHCPUFLAGSXX = -fno-builtin
 | 
			
		||||
else
 | 
			
		||||
  ARCHCPUFLAGSXX = -fno-builtin -fno-exceptions -fcheck-new
 | 
			
		||||
endif
 | 
			
		||||
ARCHWARNINGS = -Wall -Wstrict-prototypes -Wshadow -Wundef #-fno-strict-aliasing
 | 
			
		||||
ARCHWARNINGSXX = -Wall -Wshadow -Wundef
 | 
			
		||||
ARCHPICFLAGS = -fpic -msingle-pic-base -mpic-register=r10
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
CFLAGS := $(ARCHCFLAGS) $(ARCHWARNINGS) $(ARCHOPTIMIZATION) $(ARCHCPUFLAGS) $(ARCHINCLUDES) $(ARCHDEFINES) $(EXTRAFLAGS) -pipe
 | 
			
		||||
CPICFLAGS = $(ARCHPICFLAGS) $(CFLAGS)
 | 
			
		||||
CXXFLAGS  = $(ARCHCXXFLAGS) $(ARCHWARNINGSXX) $(ARCHOPTIMIZATION) \
 | 
			
		||||
            $(ARCHCPUFLAGS) $(ARCHXXINCLUDES)
 | 
			
		||||
CXXFLAGS += $(ARCHDEFINES) $(EXTRAFLAGS) -pipe -std=c++11
 | 
			
		||||
CXXFLAGS += -fno-builtin -fno-exceptions -fcheck-new -fno-rtti
 | 
			
		||||
CXXFLAGS += -pedantic -D_DEBUG -D_LIBCPP_BUILD_STATIC -D_LIBCPP_NO_EXCEPTIONS
 | 
			
		||||
CXXPICFLAGS = $(ARCHPICFLAGS) $(CXXFLAGS)
 | 
			
		||||
CPPFLAGS := $(ARCHINCLUDES) $(ARCHDEFINES) $(EXTRAFLAGS)
 | 
			
		||||
AFLAGS := $(CFLAGS) -D__ASSEMBLY__
 | 
			
		||||
 | 
			
		||||
NXFLATLDFLAGS1 = -r -d -warn-common
 | 
			
		||||
NXFLATLDFLAGS2 = $(NXFLATLDFLAGS1) -T$(TOPDIR)/binfmt/libnxflat/gnu-nxflat-pcrel.ld -no-check-sections
 | 
			
		||||
LDNXFLATFLAGS = -e main -s 2048
 | 
			
		||||
 | 
			
		||||
# Loadable module definitions
 | 
			
		||||
 | 
			
		||||
CMODULEFLAGS = $(CFLAGS) -mlong-calls # --target1-abs
 | 
			
		||||
 | 
			
		||||
LDMODULEFLAGS = -r -e module_initialize
 | 
			
		||||
ifeq ($(CONFIG_CYGWIN_WINTOOL),y)
 | 
			
		||||
  LDMODULEFLAGS += -T "${shell cygpath -w $(TOPDIR)/libs/libc/modlib/gnu-elf.ld}"
 | 
			
		||||
else
 | 
			
		||||
  LDMODULEFLAGS += -T $(TOPDIR)/libs/libc/modlib/gnu-elf.ld
 | 
			
		||||
endif
 | 
			
		||||
 | 
			
		||||
ifeq ($(CONFIG_DEBUG_SYMBOLS),y)
 | 
			
		||||
  LDFLAGS += -g
 | 
			
		||||
endif
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,45 @@
 | 
			
		|||
#
 | 
			
		||||
# This file is autogenerated: PLEASE DO NOT EDIT IT.
 | 
			
		||||
#
 | 
			
		||||
# You can use "make menuconfig" to make any modifications to the installed .config file.
 | 
			
		||||
# You can then do "make savedefconfig" to generate a new defconfig file that includes your
 | 
			
		||||
# modifications.
 | 
			
		||||
#
 | 
			
		||||
CONFIG_ADD_NUTTX_FETURES=y
 | 
			
		||||
CONFIG_ARCH="arm"
 | 
			
		||||
CONFIG_ARCH_BOARD="xidatong"
 | 
			
		||||
CONFIG_ARCH_BOARD_XIDATONG=y
 | 
			
		||||
CONFIG_ARCH_CHIP="imxrt"
 | 
			
		||||
CONFIG_ARCH_CHIP_IMXRT=y
 | 
			
		||||
CONFIG_ARCH_CHIP_MIMXRT1052CVL5B=y
 | 
			
		||||
CONFIG_ARCH_INTERRUPTSTACK=10240
 | 
			
		||||
CONFIG_ARCH_STACKDUMP=y
 | 
			
		||||
CONFIG_BOARD_LATE_INITIALIZE=y
 | 
			
		||||
CONFIG_BOARD_LOOPSPERMSEC=20000
 | 
			
		||||
CONFIG_BUILTIN=y
 | 
			
		||||
CONFIG_CLOCK_MONOTONIC=y
 | 
			
		||||
CONFIG_C99_BOOL8=y
 | 
			
		||||
CONFIG_FS_PROCFS=y
 | 
			
		||||
CONFIG_HAVE_CXX=y
 | 
			
		||||
CONFIG_IDLETHREAD_STACKSIZE=2048
 | 
			
		||||
CONFIG_IMXRT_LPUART1=y
 | 
			
		||||
CONFIG_INTELHEX_BINARY=y
 | 
			
		||||
CONFIG_LIBCXX=y
 | 
			
		||||
CONFIG_LIBCXXABI=y
 | 
			
		||||
CONFIG_LIBC_FLOATINGPOINT=y
 | 
			
		||||
CONFIG_LIBC_LOCALTIME=y
 | 
			
		||||
CONFIG_LIBM=y
 | 
			
		||||
CONFIG_LPUART1_SERIAL_CONSOLE=y
 | 
			
		||||
CONFIG_NSH_BUILTIN_APPS=y
 | 
			
		||||
CONFIG_NSH_FILEIOSIZE=512
 | 
			
		||||
CONFIG_NSH_LINELEN=64
 | 
			
		||||
CONFIG_NSH_READLINE=y
 | 
			
		||||
CONFIG_RAM_SIZE=536870912
 | 
			
		||||
CONFIG_RAM_START=0x20200000
 | 
			
		||||
CONFIG_SCHED_CPULOAD=y
 | 
			
		||||
CONFIG_SCHED_HPWORK=y
 | 
			
		||||
CONFIG_SCHED_WAITPID=y
 | 
			
		||||
CONFIG_START_DAY=14
 | 
			
		||||
CONFIG_START_MONTH=3
 | 
			
		||||
CONFIG_SYSTEM_NSH=y
 | 
			
		||||
CONFIG_USER_ENTRYPOINT="nsh_main"
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,67 @@
 | 
			
		|||
#
 | 
			
		||||
# This file is autogenerated: PLEASE DO NOT EDIT IT.
 | 
			
		||||
#
 | 
			
		||||
# You can use "make menuconfig" to make any modifications to the installed .config file.
 | 
			
		||||
# You can then do "make savedefconfig" to generate a new defconfig file that includes your
 | 
			
		||||
# modifications.
 | 
			
		||||
#
 | 
			
		||||
# CONFIG_ARCH_LEDS is not set
 | 
			
		||||
CONFIG_ADD_NUTTX_FETURES=y
 | 
			
		||||
CONFIG_ARCH="arm"
 | 
			
		||||
CONFIG_ARCH_BOARD="xidatong"
 | 
			
		||||
CONFIG_ARCH_BOARD_XIDATONG=y
 | 
			
		||||
CONFIG_ARCH_CHIP="imxrt"
 | 
			
		||||
CONFIG_ARCH_CHIP_IMXRT=y
 | 
			
		||||
CONFIG_ARCH_CHIP_MIMXRT1052CVL5B=y
 | 
			
		||||
CONFIG_ARCH_INTERRUPTSTACK=10240
 | 
			
		||||
CONFIG_ARCH_STACKDUMP=y
 | 
			
		||||
CONFIG_ARMV7M_DCACHE=y
 | 
			
		||||
CONFIG_ARMV7M_DCACHE_WRITETHROUGH=y
 | 
			
		||||
CONFIG_ARMV7M_ICACHE=y
 | 
			
		||||
CONFIG_ARMV7M_USEBASEPRI=y
 | 
			
		||||
CONFIG_BOARD_LOOPSPERMSEC=104926
 | 
			
		||||
CONFIG_BUILTIN=y
 | 
			
		||||
CONFIG_CLOCK_MONOTONIC=y
 | 
			
		||||
CONFIG_ETH0_PHY_KSZ8081=y
 | 
			
		||||
CONFIG_FS_PROCFS=y
 | 
			
		||||
CONFIG_IDLETHREAD_STACKSIZE=2048
 | 
			
		||||
CONFIG_IMXRT_ENET=y
 | 
			
		||||
CONFIG_IMXRT_LPUART1=y
 | 
			
		||||
CONFIG_INTELHEX_BINARY=y
 | 
			
		||||
CONFIG_LIBC_HOSTNAME="i.MXRT1050 EVK"
 | 
			
		||||
CONFIG_LPUART1_SERIAL_CONSOLE=y
 | 
			
		||||
CONFIG_NET=y
 | 
			
		||||
CONFIG_NETDEV_STATISTICS=y
 | 
			
		||||
CONFIG_NETINIT_NOMAC=y
 | 
			
		||||
CONFIG_NETUTILS_TELNETD=y
 | 
			
		||||
CONFIG_NET_ARP_SEND=y
 | 
			
		||||
CONFIG_NET_BROADCAST=y
 | 
			
		||||
CONFIG_NET_ICMP=y
 | 
			
		||||
CONFIG_NET_ICMP_SOCKET=y
 | 
			
		||||
CONFIG_NET_ICMPv6=y
 | 
			
		||||
CONFIG_NET_ICMPv6_NEIGHBOR=y
 | 
			
		||||
CONFIG_NET_ICMPv6_SOCKET=y
 | 
			
		||||
CONFIG_NET_IPv6=y
 | 
			
		||||
CONFIG_NET_SOCKOPTS=y
 | 
			
		||||
CONFIG_NET_STATISTICS=y
 | 
			
		||||
CONFIG_NET_TCP=y
 | 
			
		||||
CONFIG_NET_TCPBACKLOG=y
 | 
			
		||||
CONFIG_NET_TCP_WRITE_BUFFERS=y
 | 
			
		||||
CONFIG_NET_UDP=y
 | 
			
		||||
CONFIG_NET_UDP_WRITE_BUFFERS=y
 | 
			
		||||
CONFIG_NSH_ARCHINIT=y
 | 
			
		||||
CONFIG_NSH_BUILTIN_APPS=y
 | 
			
		||||
CONFIG_NSH_FILEIOSIZE=512
 | 
			
		||||
CONFIG_NSH_LINELEN=64
 | 
			
		||||
CONFIG_NSH_READLINE=y
 | 
			
		||||
CONFIG_RAM_SIZE=524288
 | 
			
		||||
CONFIG_RAM_START=0x20200000
 | 
			
		||||
CONFIG_SCHED_LPWORK=y
 | 
			
		||||
CONFIG_SCHED_HPWORK=y
 | 
			
		||||
CONFIG_SCHED_WAITPID=y
 | 
			
		||||
CONFIG_START_DAY=14
 | 
			
		||||
CONFIG_START_MONTH=3
 | 
			
		||||
CONFIG_SYSTEM_NSH=y
 | 
			
		||||
CONFIG_SYSTEM_PING6=y
 | 
			
		||||
CONFIG_SYSTEM_PING=y
 | 
			
		||||
CONFIG_USER_ENTRYPOINT="nsh_main"
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,43 @@
 | 
			
		|||
#
 | 
			
		||||
# This file is autogenerated: PLEASE DO NOT EDIT IT.
 | 
			
		||||
#
 | 
			
		||||
# You can use "make menuconfig" to make any modifications to the installed .config file.
 | 
			
		||||
# You can then do "make savedefconfig" to generate a new defconfig file that includes your
 | 
			
		||||
# modifications.
 | 
			
		||||
#
 | 
			
		||||
CONFIG_ADD_NUTTX_FETURES=y
 | 
			
		||||
CONFIG_ARCH="arm"
 | 
			
		||||
CONFIG_ARCH_BOARD="xidatong"
 | 
			
		||||
CONFIG_ARCH_BOARD_XIDATONG=y
 | 
			
		||||
CONFIG_ARCH_CHIP="imxrt"
 | 
			
		||||
CONFIG_ARCH_CHIP_IMXRT=y
 | 
			
		||||
CONFIG_ARCH_CHIP_MIMXRT1052CVL5B=y
 | 
			
		||||
CONFIG_ARCH_INTERRUPTSTACK=10240
 | 
			
		||||
CONFIG_ARCH_STACKDUMP=y
 | 
			
		||||
CONFIG_ARMV7M_DCACHE=y
 | 
			
		||||
CONFIG_ARMV7M_DCACHE_WRITETHROUGH=y
 | 
			
		||||
CONFIG_ARMV7M_ICACHE=y
 | 
			
		||||
CONFIG_ARMV7M_USEBASEPRI=y
 | 
			
		||||
CONFIG_BOARD_LOOPSPERMSEC=104926
 | 
			
		||||
CONFIG_BUILTIN=y
 | 
			
		||||
CONFIG_CLOCK_MONOTONIC=y
 | 
			
		||||
CONFIG_EXAMPLES_HELLO=y
 | 
			
		||||
CONFIG_FS_PROCFS=y
 | 
			
		||||
CONFIG_IDLETHREAD_STACKSIZE=2048
 | 
			
		||||
CONFIG_IMXRT_LPUART1=y
 | 
			
		||||
CONFIG_INTELHEX_BINARY=y
 | 
			
		||||
CONFIG_LPUART1_SERIAL_CONSOLE=y
 | 
			
		||||
CONFIG_NSH_ARCHINIT=y
 | 
			
		||||
CONFIG_NSH_BUILTIN_APPS=y
 | 
			
		||||
CONFIG_NSH_DISABLE_IFUPDOWN=y
 | 
			
		||||
CONFIG_NSH_FILEIOSIZE=512
 | 
			
		||||
CONFIG_NSH_LINELEN=64
 | 
			
		||||
CONFIG_NSH_READLINE=y
 | 
			
		||||
CONFIG_RAM_SIZE=524288
 | 
			
		||||
CONFIG_RAM_START=0x20200000
 | 
			
		||||
CONFIG_SCHED_HPWORK=y
 | 
			
		||||
CONFIG_SCHED_WAITPID=y
 | 
			
		||||
CONFIG_START_DAY=14
 | 
			
		||||
CONFIG_START_MONTH=3
 | 
			
		||||
CONFIG_SYSTEM_NSH=y
 | 
			
		||||
CONFIG_USER_ENTRYPOINT="nsh_main"
 | 
			
		||||
| 
		 After Width: | Height: | Size: 63 KiB  | 
| 
		 After Width: | Height: | Size: 63 KiB  | 
| 
		 After Width: | Height: | Size: 70 KiB  | 
| 
		 After Width: | Height: | Size: 31 KiB  | 
| 
		 After Width: | Height: | Size: 18 KiB  | 
| 
		 After Width: | Height: | Size: 11 KiB  | 
| 
		 After Width: | Height: | Size: 14 KiB  | 
| 
		 After Width: | Height: | Size: 56 KiB  | 
| 
						 | 
				
			
			@ -0,0 +1,367 @@
 | 
			
		|||
/****************************************************************************
 | 
			
		||||
 * boards/arm/imxrt/xidatong/include/board.h
 | 
			
		||||
 *
 | 
			
		||||
 * Licensed to the Apache Software Foundation (ASF) under one or more
 | 
			
		||||
 * contributor license agreements.  See the NOTICE file distributed with
 | 
			
		||||
 * this work for additional information regarding copyright ownership.  The
 | 
			
		||||
 * ASF licenses this file to you under the Apache License, Version 2.0 (the
 | 
			
		||||
 * "License"); you may not use this file except in compliance with the
 | 
			
		||||
 * License.  You may obtain a copy of the License at
 | 
			
		||||
 *
 | 
			
		||||
 *   http://www.apache.org/licenses/LICENSE-2.0
 | 
			
		||||
 *
 | 
			
		||||
 * Unless required by applicable law or agreed to in writing, software
 | 
			
		||||
 * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
 | 
			
		||||
 * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the
 | 
			
		||||
 * License for the specific language governing permissions and limitations
 | 
			
		||||
 * under the License.
 | 
			
		||||
 *
 | 
			
		||||
 ****************************************************************************/
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
* @file board.h
 | 
			
		||||
* @brief nuttx source code
 | 
			
		||||
*                https://github.com/apache/incubator-nuttx.git
 | 
			
		||||
* @version 10.2.0 
 | 
			
		||||
* @author AIIT XUOS Lab
 | 
			
		||||
* @date 2022-03-23
 | 
			
		||||
*/
 | 
			
		||||
 | 
			
		||||
#ifndef __BOARDS_ARM_IMXRT_XIDATONG_INCLUDE_BOARD_H
 | 
			
		||||
#define __BOARDS_ARM_IMXRT_XIDATONG_INCLUDE_BOARD_H
 | 
			
		||||
 | 
			
		||||
/****************************************************************************
 | 
			
		||||
 * Included Files
 | 
			
		||||
 ****************************************************************************/
 | 
			
		||||
 | 
			
		||||
#include <nuttx/config.h>
 | 
			
		||||
 | 
			
		||||
/* Do not include i.MXRT header files here */
 | 
			
		||||
 | 
			
		||||
/****************************************************************************
 | 
			
		||||
 * Pre-processor Definitions
 | 
			
		||||
 ****************************************************************************/
 | 
			
		||||
 | 
			
		||||
/* Clocking *****************************************************************/
 | 
			
		||||
 | 
			
		||||
/* Set VDD_SOC to 1.25V */
 | 
			
		||||
 | 
			
		||||
#define IMXRT_VDD_SOC (0x12)
 | 
			
		||||
 | 
			
		||||
/* Set Arm PLL (PLL1) to  fOut    = (24Mhz * ARM_PLL_DIV_SELECT/2) /
 | 
			
		||||
 *                                  ARM_PODF_DIVISOR
 | 
			
		||||
 *                        600Mhz  = (24Mhz * ARM_PLL_DIV_SELECT/2) /
 | 
			
		||||
 *                                  ARM_PODF_DIVISOR
 | 
			
		||||
 *                        ARM_PLL_DIV_SELECT = 100
 | 
			
		||||
 *                        ARM_PODF_DIVISOR   = 2
 | 
			
		||||
 *                        600Mhz  = (24Mhz * 100/2) / 2
 | 
			
		||||
 *
 | 
			
		||||
 *     AHB_CLOCK_ROOT             = PLL1fOut / IMXRT_AHB_PODF_DIVIDER
 | 
			
		||||
 *     1Hz to 600 MHz             = 600Mhz / IMXRT_ARM_CLOCK_DIVIDER
 | 
			
		||||
 *                        IMXRT_ARM_CLOCK_DIVIDER = 1
 | 
			
		||||
 *                        600Mhz  = 600Mhz / 1
 | 
			
		||||
 *
 | 
			
		||||
 *     PRE_PERIPH_CLK_SEL         = PRE_PERIPH_CLK_SEL_PLL1
 | 
			
		||||
 *     PERIPH_CLK_SEL             = 1 (0 select PERIPH_CLK2_PODF,
 | 
			
		||||
 *                                     1 select PRE_PERIPH_CLK_SEL_PLL1)
 | 
			
		||||
 *     PERIPH_CLK                 = 600Mhz
 | 
			
		||||
 *
 | 
			
		||||
 *     IPG_CLOCK_ROOT             = AHB_CLOCK_ROOT / IMXRT_IPG_PODF_DIVIDER
 | 
			
		||||
 *                       IMXRT_IPG_PODF_DIVIDER = 4
 | 
			
		||||
 *                       150Mhz = 600Mhz / 4
 | 
			
		||||
 *
 | 
			
		||||
 *     PERCLK_CLOCK_ROOT          = IPG_CLOCK_ROOT /
 | 
			
		||||
 *                                  IMXRT_PERCLK_PODF_DIVIDER
 | 
			
		||||
 *                       IMXRT_PERCLK_PODF_DIVIDER = 9
 | 
			
		||||
 *                       16.6Mhz  = 150Mhz / 9
 | 
			
		||||
 *
 | 
			
		||||
 *     SEMC_CLK_ROOT              = 600Mhz / IMXRT_SEMC_PODF_DIVIDER
 | 
			
		||||
 *                                           (labeled AIX_PODF in 18.2)
 | 
			
		||||
 *                       IMXRT_SEMC_PODF_DIVIDER = 8
 | 
			
		||||
 *                       75Mhz    = 600Mhz / 8
 | 
			
		||||
 *
 | 
			
		||||
 * Set Sys PLL (PLL2) to  fOut    = (24Mhz * (20+(2*(DIV_SELECT)))
 | 
			
		||||
 *                        528Mhz  = (24Mhz * (20+(2*(1)))
 | 
			
		||||
 *
 | 
			
		||||
 * Set USB1 PLL (PLL3) to fOut    = (24Mhz * 20)
 | 
			
		||||
 *                         480Mhz = (24Mhz * 20)
 | 
			
		||||
 *
 | 
			
		||||
 * Set LPSPI PLL3 PFD0 to fOut    = (480Mhz / 12 * 18)
 | 
			
		||||
 *                        720Mhz  = (480Mhz / 12 * 18)
 | 
			
		||||
 *                         90Mhz  = (720Mhz / LSPI_PODF_DIVIDER)
 | 
			
		||||
 *
 | 
			
		||||
 * Set LPI2C PLL3 / 8 to   fOut   = (480Mhz / 8)
 | 
			
		||||
 *                         60Mhz  = (480Mhz / 8)
 | 
			
		||||
 *                         12Mhz  = (60Mhz / LSPI_PODF_DIVIDER)
 | 
			
		||||
 *
 | 
			
		||||
 * These clock frequencies can be verified via the CCM_CLKO1 pin and sending
 | 
			
		||||
 * the appropriate clock to it with something like;
 | 
			
		||||
 *
 | 
			
		||||
 *   putreg32( <Clk number> | CCM_CCOSR_CLKO1_EN ,   IMXRT_CCM_CCOSR);
 | 
			
		||||
 *   imxrt_config_gpio(GPIO_CCM_CLKO1);
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#define BOARD_XTAL_FREQUENCY       24000000
 | 
			
		||||
#define BOARD_CPU_FREQUENCY        528000000
 | 
			
		||||
 | 
			
		||||
#define IMXRT_PRE_PERIPH_CLK_SEL   CCM_CBCMR_PRE_PERIPH_CLK_SEL_PLL1
 | 
			
		||||
#define IMXRT_PERIPH_CLK_SEL       CCM_CBCDR_PERIPH_CLK_SEL_PRE_PERIPH
 | 
			
		||||
#define IMXRT_ARM_PLL_DIV_SELECT   100
 | 
			
		||||
#define IMXRT_ARM_PODF_DIVIDER     2
 | 
			
		||||
#define IMXRT_AHB_PODF_DIVIDER     1
 | 
			
		||||
#define IMXRT_IPG_PODF_DIVIDER     4
 | 
			
		||||
#define IMXRT_PERCLK_CLK_SEL       CCM_CSCMR1_PERCLK_CLK_SEL_IPG_CLK_ROOT
 | 
			
		||||
#define IMXRT_PERCLK_PODF_DIVIDER  9
 | 
			
		||||
#define IMXRT_SEMC_PODF_DIVIDER    8
 | 
			
		||||
#define IMXRT_LPSPI_CLK_SELECT     CCM_CBCMR_LPSPI_CLK_SEL_PLL3_PFD0
 | 
			
		||||
#define IMXRT_LSPI_PODF_DIVIDER    8
 | 
			
		||||
 | 
			
		||||
#define IMXRT_LPSPI_CLK_SELECT     CCM_CBCMR_LPSPI_CLK_SEL_PLL3_PFD0
 | 
			
		||||
#define IMXRT_LSPI_PODF_DIVIDER    8
 | 
			
		||||
 | 
			
		||||
#define IMXRT_LPI2C_CLK_SELECT     CCM_CSCDR2_LPI2C_CLK_SEL_PLL3_60M
 | 
			
		||||
#define IMXRT_LSI2C_PODF_DIVIDER   5
 | 
			
		||||
 | 
			
		||||
#define IMXRT_USDHC1_CLK_SELECT    CCM_CSCMR1_USDHC1_CLK_SEL_PLL2_PFD0
 | 
			
		||||
#define IMXRT_USDHC1_PODF_DIVIDER  2
 | 
			
		||||
 | 
			
		||||
#define IMXRT_SYS_PLL_SELECT       CCM_ANALOG_PLL_SYS_DIV_SELECT_22
 | 
			
		||||
 | 
			
		||||
#define IMXRT_USB1_PLL_DIV_SELECT  CCM_ANALOG_PLL_USB1_DIV_SELECT_20
 | 
			
		||||
 | 
			
		||||
// #define BOARD_CPU_FREQUENCY \
 | 
			
		||||
//   (BOARD_XTAL_FREQUENCY * (IMXRT_ARM_PLL_DIV_SELECT / 2)) / IMXRT_ARM_PODF_DIVIDER
 | 
			
		||||
 | 
			
		||||
/* Define this to enable tracing */
 | 
			
		||||
 | 
			
		||||
#if 0
 | 
			
		||||
#  define IMXRT_TRACE_PODF_DIVIDER 1
 | 
			
		||||
#  define IMXRT_TRACE_CLK_SELECT   CCM_CBCMR_TRACE_CLK_SEL_PLL2_PFD0
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
/* LED definitions **********************************************************/
 | 
			
		||||
 | 
			
		||||
/* There are four LED status indicators located on the EVK Board.
 | 
			
		||||
 *  The functions of these LEDs include:
 | 
			
		||||
 *
 | 
			
		||||
 *   - Main Power Supply(D3)
 | 
			
		||||
 *     Green: DC 5V main supply is normal.
 | 
			
		||||
 *     Red:   J2 input voltage is over 5.6V.
 | 
			
		||||
 *     Off:   The board is not powered.
 | 
			
		||||
 *   - Reset RED LED(D15)
 | 
			
		||||
 *   - OpenSDA LED(D16)
 | 
			
		||||
 *   - USER LED(D18)
 | 
			
		||||
 *
 | 
			
		||||
 * Only a single LED, D18, is under software control.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
/* LED index values for use with board_userled() */
 | 
			
		||||
 | 
			
		||||
#define BOARD_USERLED     0
 | 
			
		||||
#define BOARD_NLEDS       1
 | 
			
		||||
 | 
			
		||||
/* LED bits for use with board_userled_all() */
 | 
			
		||||
 | 
			
		||||
#define BOARD_USERLED_BIT (1 << BOARD_USERLED)
 | 
			
		||||
 | 
			
		||||
/* This LED is not used by the board port unless CONFIG_ARCH_LEDS is
 | 
			
		||||
 * defined.  In that case, the usage by the board port is defined in
 | 
			
		||||
 * include/board.h and src/imxrt_autoleds.c. The LED is used to encode
 | 
			
		||||
 * OS-related events as follows:
 | 
			
		||||
 *
 | 
			
		||||
 *   -------------------- ----------------------------- ------
 | 
			
		||||
 *   SYMBOL                   Meaning                   LED
 | 
			
		||||
 *   -------------------- ----------------------------- ------
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#define LED_STARTED       0  /* NuttX has been started  OFF    */
 | 
			
		||||
#define LED_HEAPALLOCATE  0  /* Heap has been allocated OFF    */
 | 
			
		||||
#define LED_IRQSENABLED   0  /* Interrupts enabled      OFF    */
 | 
			
		||||
#define LED_STACKCREATED  1  /* Idle stack created      ON     */
 | 
			
		||||
#define LED_INIRQ         2  /* In an interrupt         N/C    */
 | 
			
		||||
#define LED_SIGNAL        2  /* In a signal handler     N/C    */
 | 
			
		||||
#define LED_ASSERTION     2  /* An assertion failed     N/C    */
 | 
			
		||||
#define LED_PANIC         3  /* The system has crashed  FLASH  */
 | 
			
		||||
#undef  LED_IDLE             /* Not used                       */
 | 
			
		||||
 | 
			
		||||
/* Thus if the LED is statically on, NuttX has successfully  booted and is,
 | 
			
		||||
 * apparently, running normally.  If the LED is flashing at approximately
 | 
			
		||||
 * 2Hz, then a fatal error has been detected and the system has halted.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
/* Button definitions *******************************************************/
 | 
			
		||||
 | 
			
		||||
/* The IMXRT board has one external user button
 | 
			
		||||
 *
 | 
			
		||||
 * 1. SW8 (IRQ88)   GPIO5-00
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#define BUTTON_SW8        0
 | 
			
		||||
 | 
			
		||||
#define BUTTON_SW8_BIT    (1 << BUTTON_SW8)
 | 
			
		||||
 | 
			
		||||
/* SDIO *********************************************************************/
 | 
			
		||||
 | 
			
		||||
/* Pin drive characteristics - drive strength in particular may need tuning
 | 
			
		||||
 * for specific boards, but has been checked by scope on the EVKB to make
 | 
			
		||||
 * sure shapes are square with minimal ringing.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#define GPIO_USDHC1_DATA0   GPIO_USDHC1_DATA0_1  /* GPIO_SD_B0_02 */
 | 
			
		||||
#define GPIO_USDHC1_DATA1   GPIO_USDHC1_DATA1_1  /* GPIO_SD_B0_03 */
 | 
			
		||||
#define GPIO_USDHC1_DATA2   GPIO_USDHC1_DATA2_1  /* GPIO_SD_B0_04 */
 | 
			
		||||
#define GPIO_USDHC1_DATA3   GPIO_USDHC1_DATA3_1  /* GPIO_SD_B0_05 */
 | 
			
		||||
#define GPIO_USDHC1_CLK     GPIO_USDHC1_CLK_1    /* GPIO_SD_B0_01 */
 | 
			
		||||
#define GPIO_USDHC1_CMD     GPIO_USDHC1_CMD_1    /* GPIO_SD_B0_00 */
 | 
			
		||||
 | 
			
		||||
#define PIN_USDHC1_D0       (GPIO_USDHC1_DATA0 | IOMUX_USDHC1_DATAX_DEFAULT)
 | 
			
		||||
#define PIN_USDHC1_D1       (GPIO_USDHC1_DATA1 | IOMUX_USDHC1_DATAX_DEFAULT)
 | 
			
		||||
#define PIN_USDHC1_D2       (GPIO_USDHC1_DATA2 | IOMUX_USDHC1_DATAX_DEFAULT)
 | 
			
		||||
#define PIN_USDHC1_D3       (GPIO_USDHC1_DATA3 | IOMUX_USDHC1_DATAX_DEFAULT)
 | 
			
		||||
#define PIN_USDHC1_DCLK     (GPIO_USDHC1_CLK   | IOMUX_USDHC1_CLK_DEFAULT)
 | 
			
		||||
#define PIN_USDHC1_CMD      (GPIO_USDHC1_CMD   | IOMUX_USDHC1_CMD_DEFAULT)
 | 
			
		||||
#define PIN_USDHC1_CD       (GPIO_USDHC1_CD_2  | IOMUX_USDHC1_CLK_DEFAULT)
 | 
			
		||||
 | 
			
		||||
/* 386 KHz for initial inquiry stuff */
 | 
			
		||||
 | 
			
		||||
#define BOARD_USDHC_IDMODE_PRESCALER    USDHC_SYSCTL_SDCLKFS_DIV256
 | 
			
		||||
#define BOARD_USDHC_IDMODE_DIVISOR      USDHC_SYSCTL_DVS_DIV(2)
 | 
			
		||||
 | 
			
		||||
/* 24.8MHz for other modes */
 | 
			
		||||
 | 
			
		||||
#define BOARD_USDHC_MMCMODE_PRESCALER   USDHC_SYSCTL_SDCLKFS_DIV8
 | 
			
		||||
#define BOARD_USDHC_MMCMODE_DIVISOR     USDHC_SYSCTL_DVS_DIV(1)
 | 
			
		||||
 | 
			
		||||
#define BOARD_USDHC_SD1MODE_PRESCALER   USDHC_SYSCTL_SDCLKFS_DIV8
 | 
			
		||||
#define BOARD_USDHC_SD1MODE_DIVISOR     USDHC_SYSCTL_DVS_DIV(1)
 | 
			
		||||
 | 
			
		||||
#define BOARD_USDHC_SD4MODE_PRESCALER   USDHC_SYSCTL_SDCLKFS_DIV8
 | 
			
		||||
#define BOARD_USDHC_SD4MODE_DIVISOR     USDHC_SYSCTL_DVS_DIV(1)
 | 
			
		||||
 | 
			
		||||
/* LCD **********************************************************************/
 | 
			
		||||
 | 
			
		||||
#ifdef CONFIG_IMXRT_LCD
 | 
			
		||||
/* LCD controller */
 | 
			
		||||
 | 
			
		||||
#  define GPIO_LCD_DATA23    (GPIO_LCD_DATA23_1 | IOMUX_LCD_DEFAULT)
 | 
			
		||||
#  define GPIO_LCD_DATA22    (GPIO_LCD_DATA22_1 | IOMUX_LCD_DEFAULT)
 | 
			
		||||
#  define GPIO_LCD_DATA21    (GPIO_LCD_DATA21_1 | IOMUX_LCD_DEFAULT)
 | 
			
		||||
#  define GPIO_LCD_DATA20    (GPIO_LCD_DATA20_1 | IOMUX_LCD_DEFAULT)
 | 
			
		||||
#  define GPIO_LCD_DATA19    (GPIO_LCD_DATA19_1 | IOMUX_LCD_DEFAULT)
 | 
			
		||||
#  define GPIO_LCD_DATA18    (GPIO_LCD_DATA18_1 | IOMUX_LCD_DEFAULT)
 | 
			
		||||
#  define GPIO_LCD_DATA17    (GPIO_LCD_DATA17_1 | IOMUX_LCD_DEFAULT)
 | 
			
		||||
#  define GPIO_LCD_DATA16    (GPIO_LCD_DATA16_1 | IOMUX_LCD_DEFAULT)
 | 
			
		||||
#  define GPIO_LCD_DATA15    (GPIO_LCD_DATA15_1 | IOMUX_LCD_DEFAULT)
 | 
			
		||||
#  define GPIO_LCD_DATA14    (GPIO_LCD_DATA14_1 | IOMUX_LCD_DEFAULT)
 | 
			
		||||
#  define GPIO_LCD_DATA13    (GPIO_LCD_DATA13_1 | IOMUX_LCD_DEFAULT)
 | 
			
		||||
#  define GPIO_LCD_DATA12    (GPIO_LCD_DATA12_1 | IOMUX_LCD_DEFAULT)
 | 
			
		||||
#  define GPIO_LCD_DATA11    (GPIO_LCD_DATA11_1 | IOMUX_LCD_DEFAULT)
 | 
			
		||||
#  define GPIO_LCD_DATA10    (GPIO_LCD_DATA10_1 | IOMUX_LCD_DEFAULT)
 | 
			
		||||
#  define GPIO_LCD_DATA09    (GPIO_LCD_DATA09_1 | IOMUX_LCD_DEFAULT)
 | 
			
		||||
#  define GPIO_LCD_DATA08    (GPIO_LCD_DATA08_1 | IOMUX_LCD_DEFAULT)
 | 
			
		||||
#  define GPIO_LCD_DATA07    (GPIO_LCD_DATA07_1 | IOMUX_LCD_DEFAULT)
 | 
			
		||||
#  define GPIO_LCD_DATA06    (GPIO_LCD_DATA06_1 | IOMUX_LCD_DEFAULT)
 | 
			
		||||
#  define GPIO_LCD_DATA05    (GPIO_LCD_DATA05_1 | IOMUX_LCD_DEFAULT)
 | 
			
		||||
#  define GPIO_LCD_DATA04    (GPIO_LCD_DATA04_1 | IOMUX_LCD_DEFAULT)
 | 
			
		||||
#  define GPIO_LCD_DATA03    (GPIO_LCD_DATA03_1 | IOMUX_LCD_DEFAULT)
 | 
			
		||||
#  define GPIO_LCD_DATA02    (GPIO_LCD_DATA02_1 | IOMUX_LCD_DEFAULT)
 | 
			
		||||
#  define GPIO_LCD_DATA01    (GPIO_LCD_DATA01_1 | IOMUX_LCD_DEFAULT)
 | 
			
		||||
#  define GPIO_LCD_DATA00    (GPIO_LCD_DATA00_1 | IOMUX_LCD_DEFAULT)
 | 
			
		||||
#  define GPIO_LCD_ENABLE    (GPIO_LCD_ENABLE_1 | IOMUX_LCD_DEFAULT)
 | 
			
		||||
#  define GPIO_LCD_HSYNC     (GPIO_LCD_HSYNC_1 | IOMUX_LCD_DEFAULT)
 | 
			
		||||
#  define GPIO_LCD_VSYNC     (GPIO_LCD_VSYNC_1 | IOMUX_LCD_DEFAULT)
 | 
			
		||||
#  define GPIO_LCD_CLK       (GPIO_LCD_CLK_1 | IOMUX_LCD_DEFAULT)
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
/* ETH Disambiguation *******************************************************/
 | 
			
		||||
 | 
			
		||||
#define GPIO_ENET_TX_DATA00  (GPIO_ENET_TX_DATA00_1| \
 | 
			
		||||
                              IOMUX_ENET_DATA_DEFAULT)                    /* GPIO_B1_07 */
 | 
			
		||||
#define GPIO_ENET_TX_DATA01  (GPIO_ENET_TX_DATA01_1| \
 | 
			
		||||
                              IOMUX_ENET_DATA_DEFAULT)                    /* GPIO_B1_08 */
 | 
			
		||||
#define GPIO_ENET_RX_DATA00  (GPIO_ENET_RX_DATA00_1| \
 | 
			
		||||
                              IOMUX_ENET_DATA_DEFAULT)                    /* GPIO_B1_04 */
 | 
			
		||||
#define GPIO_ENET_RX_DATA01  (GPIO_ENET_RX_DATA01_1| \
 | 
			
		||||
                              IOMUX_ENET_DATA_DEFAULT)                    /* GPIO_B1_05 */
 | 
			
		||||
#define GPIO_ENET_MDIO       (GPIO_ENET_MDIO_3|IOMUX_ENET_MDIO_DEFAULT)   /* GPIO_EMC_41 */
 | 
			
		||||
#define GPIO_ENET_MDC        (GPIO_ENET_MDC_3|IOMUX_ENET_MDC_DEFAULT)     /* GPIO_EMC_40 */
 | 
			
		||||
#define GPIO_ENET_RX_EN      (GPIO_ENET_RX_EN_1|IOMUX_ENET_EN_DEFAULT)    /* GPIO_B1_06 */
 | 
			
		||||
#define GPIO_ENET_RX_ER      (GPIO_ENET_RX_ER_1|IOMUX_ENET_RXERR_DEFAULT) /* GPIO_B1_11 */
 | 
			
		||||
#define GPIO_ENET_TX_CLK     (GPIO_ENET_REF_CLK_2|\
 | 
			
		||||
                              IOMUX_ENET_TX_CLK_DEFAULT)                  /* GPIO_B1_10 */
 | 
			
		||||
#define GPIO_ENET_TX_EN      (GPIO_ENET_TX_EN_1|IOMUX_ENET_EN_DEFAULT)    /* GPIO_B1_09 */
 | 
			
		||||
 | 
			
		||||
/* PIO Disambiguation *******************************************************/
 | 
			
		||||
 | 
			
		||||
/* LPUARTs
 | 
			
		||||
 *
 | 
			
		||||
 * Virtual console port provided by OpenSDA on UART1.
 | 
			
		||||
 *
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
/* LPUART1 */
 | 
			
		||||
#define GPIO_LPUART1_RX   (GPIO_LPUART1_RX_1|IOMUX_UART_DEFAULT) /* GPIO_AD_B0_13 */
 | 
			
		||||
#define GPIO_LPUART1_TX   (GPIO_LPUART1_TX_1|IOMUX_UART_DEFAULT) /* GPIO_AD_B0_12 */
 | 
			
		||||
 | 
			
		||||
/* LPUART2 */
 | 
			
		||||
#define GPIO_LPUART2_RX   (GPIO_LPUART2_RX_1|IOMUX_UART_DEFAULT) /* GPIO_AD_B1_03 */
 | 
			
		||||
#define GPIO_LPUART2_TX   (GPIO_LPUART2_TX_1|IOMUX_UART_DEFAULT) /* GPIO_AD_B1_02 */
 | 
			
		||||
 | 
			
		||||
/* LPUART3 */
 | 
			
		||||
#define GPIO_LPUART3_RX   (GPIO_LPUART3_RX_1|IOMUX_UART_DEFAULT) /* GPIO_AD_B1_07 */
 | 
			
		||||
#define GPIO_LPUART3_TX   (GPIO_LPUART3_TX_1|IOMUX_UART_DEFAULT) /* GPIO_AD_B1_06 */
 | 
			
		||||
 | 
			
		||||
/* LPUART4 */
 | 
			
		||||
#define GPIO_LPUART4_RX   (GPIO_LPUART4_RX_1|IOMUX_UART_DEFAULT) /* GPIO_SD_B1_01 */
 | 
			
		||||
#define GPIO_LPUART4_TX   (GPIO_LPUART4_TX_1|IOMUX_UART_DEFAULT) /* GPIO_SD_B1_00 */
 | 
			
		||||
 | 
			
		||||
/* LPUART8 */
 | 
			
		||||
#define GPIO_LPUART8_RX   (GPIO_LPUART8_RX_1|IOMUX_UART_DEFAULT) /* GPIO_AD_B1_11 */
 | 
			
		||||
#define GPIO_LPUART8_TX   (GPIO_LPUART8_TX_1|IOMUX_UART_DEFAULT) /* GPIO_AD_B1_10 */
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/* LPI2C1 */
 | 
			
		||||
#define GPIO_LPI2C1_SDA   (GPIO_LPI2C1_SDA_2|IOMUX_LPI2C_DEFAULT) /* GPIO_AD_B1_01 */
 | 
			
		||||
#define GPIO_LPI2C1_SCL   (GPIO_LPI2C1_SCL_2|IOMUX_LPI2C_DEFAULT) /* GPIO_AD_B1_00 */
 | 
			
		||||
 | 
			
		||||
/* LPI2C3 */
 | 
			
		||||
#define GPIO_LPI2C3_SDA   (GPIO_LPI2C3_SDA_2|IOMUX_LPI2C_DEFAULT) /* GPIO_EMC_21 */
 | 
			
		||||
#define GPIO_LPI2C3_SCL   (GPIO_LPI2C3_SCL_2|IOMUX_LPI2C_DEFAULT) /* GPIO_EMC_22 */
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/* LPSPI */
 | 
			
		||||
#define GPIO_LPSPI3_SCK   (GPIO_LPSPI3_SCK_2|IOMUX_LPSPI_DEFAULT) /* GPIO_AD_B0_00 */
 | 
			
		||||
#define GPIO_LPSPI3_MISO  (GPIO_LPSPI3_SDI_2|IOMUX_LPSPI_DEFAULT) /* GPIO_AD_B0_02 */
 | 
			
		||||
#define GPIO_LPSPI3_MOSI  (GPIO_LPSPI3_SDO_2|IOMUX_LPSPI_DEFAULT) /* GPIO_AD_B0_01 */
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/* FLEXCAN2 */
 | 
			
		||||
#define GPIO_FLEXCAN2_TX     (GPIO_FLEXCAN2_TX_3|IOMUX_CAN_DEFAULT) /* GPIO_AD_B0_14 */
 | 
			
		||||
#define GPIO_FLEXCAN2_RX     (GPIO_FLEXCAN2_RX_3|IOMUX_CAN_DEFAULT) /* GPIO_AD_B0_15 */
 | 
			
		||||
 | 
			
		||||
/****************************************************************************
 | 
			
		||||
 * Public Types
 | 
			
		||||
 ****************************************************************************/
 | 
			
		||||
 | 
			
		||||
/****************************************************************************
 | 
			
		||||
 * Public Data
 | 
			
		||||
 ****************************************************************************/
 | 
			
		||||
 | 
			
		||||
#ifndef __ASSEMBLY__
 | 
			
		||||
 | 
			
		||||
#undef EXTERN
 | 
			
		||||
#if defined(__cplusplus)
 | 
			
		||||
#define EXTERN extern "C"
 | 
			
		||||
extern "C"
 | 
			
		||||
{
 | 
			
		||||
#else
 | 
			
		||||
#define EXTERN extern
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#undef EXTERN
 | 
			
		||||
#if defined(__cplusplus)
 | 
			
		||||
}
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#endif /* __ASSEMBLY__ */
 | 
			
		||||
#endif /* __BOARDS_ARM_IMXRT_XIDATONG_INCLUDE_BOARD_H */
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,103 @@
 | 
			
		|||
############################################################################
 | 
			
		||||
# boards/arm/imxrt/xidatong/kernel/Makefile
 | 
			
		||||
#
 | 
			
		||||
# Licensed to the Apache Software Foundation (ASF) under one or more
 | 
			
		||||
# contributor license agreements.  See the NOTICE file distributed with
 | 
			
		||||
# this work for additional information regarding copyright ownership.  The
 | 
			
		||||
# ASF licenses this file to you under the Apache License, Version 2.0 (the
 | 
			
		||||
# "License"); you may not use this file except in compliance with the
 | 
			
		||||
# License.  You may obtain a copy of the License at
 | 
			
		||||
#
 | 
			
		||||
#   http://www.apache.org/licenses/LICENSE-2.0
 | 
			
		||||
#
 | 
			
		||||
# Unless required by applicable law or agreed to in writing, software
 | 
			
		||||
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
 | 
			
		||||
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the
 | 
			
		||||
# License for the specific language governing permissions and limitations
 | 
			
		||||
# under the License.
 | 
			
		||||
#
 | 
			
		||||
############################################################################
 | 
			
		||||
 | 
			
		||||
include $(TOPDIR)/Make.defs
 | 
			
		||||
 | 
			
		||||
# The entry point name (if none is provided in the .config file)
 | 
			
		||||
 | 
			
		||||
CONFIG_USER_ENTRYPOINT ?= user_start
 | 
			
		||||
ENTRYPT = $(patsubst "%",%,$(CONFIG_USER_ENTRYPOINT))
 | 
			
		||||
 | 
			
		||||
# Get the paths to the libraries and the links script path in format that
 | 
			
		||||
# is appropriate for the host OS
 | 
			
		||||
 | 
			
		||||
ifeq ($(CONFIG_CYGWIN_WINTOOL),y)
 | 
			
		||||
  # Windows-native toolchains
 | 
			
		||||
  USER_LIBPATHS = ${shell for path in $(USERLIBS); do dir=`dirname $(TOPDIR)$(DELIM)$$path`;echo "-L\"`cygpath -w $$dir`\"";done}
 | 
			
		||||
  USER_LDSCRIPT = -T "${shell cygpath -w $(BOARD_DIR)$(DELIM)scripts$(DELIM)memory.ld}"
 | 
			
		||||
  USER_LDSCRIPT += -T "${shell cygpath -w $(BOARD_DIR)$(DELIM)scripts$(DELIM)user-space.ld}"
 | 
			
		||||
  USER_HEXFILE += "${shell cygpath -w $(TOPDIR)$(DELIM)nuttx_user.hex}"
 | 
			
		||||
  USER_SRECFILE += "${shell cygpath -w $(TOPDIR)$(DELIM)nuttx_user.srec}"
 | 
			
		||||
  USER_BINFILE += "${shell cygpath -w $(TOPDIR)$(DELIM)nuttx_user.bin}"
 | 
			
		||||
else
 | 
			
		||||
  # Linux/Cygwin-native toolchain
 | 
			
		||||
  USER_LIBPATHS = $(addprefix -L$(TOPDIR)$(DELIM),$(dir $(USERLIBS)))
 | 
			
		||||
  USER_LDSCRIPT = -T$(BOARD_DIR)$(DELIM)scripts$(DELIM)memory.ld
 | 
			
		||||
  USER_LDSCRIPT += -T$(BOARD_DIR)$(DELIM)scripts$(DELIM)user-space.ld
 | 
			
		||||
  USER_HEXFILE += "$(TOPDIR)$(DELIM)nuttx_user.hex"
 | 
			
		||||
  USER_SRECFILE += "$(TOPDIR)$(DELIM)nuttx_user.srec"
 | 
			
		||||
  USER_BINFILE += "$(TOPDIR)$(DELIM)nuttx_user.bin"
 | 
			
		||||
endif
 | 
			
		||||
 | 
			
		||||
USER_LDFLAGS = --undefined=$(ENTRYPT) --entry=$(ENTRYPT) $(USER_LDSCRIPT)
 | 
			
		||||
USER_LDLIBS = $(patsubst lib%,-l%,$(basename $(notdir $(USERLIBS))))
 | 
			
		||||
USER_LIBGCC = "${shell "$(CC)" $(ARCHCPUFLAGS) -print-libgcc-file-name}"
 | 
			
		||||
 | 
			
		||||
# Source files
 | 
			
		||||
 | 
			
		||||
CSRCS = imxrt_userspace.c
 | 
			
		||||
COBJS = $(CSRCS:.c=$(OBJEXT))
 | 
			
		||||
OBJS  = $(COBJS)
 | 
			
		||||
 | 
			
		||||
# Targets:
 | 
			
		||||
 | 
			
		||||
all: $(TOPDIR)$(DELIM)nuttx_user.elf $(TOPDIR)$(DELIM)User.map
 | 
			
		||||
.PHONY: nuttx_user.elf depend clean distclean
 | 
			
		||||
 | 
			
		||||
$(COBJS): %$(OBJEXT): %.c
 | 
			
		||||
	$(call COMPILE, $<, $@)
 | 
			
		||||
 | 
			
		||||
# Create the nuttx_user.elf file containing all of the user-mode code
 | 
			
		||||
 | 
			
		||||
nuttx_user.elf: $(OBJS)
 | 
			
		||||
	$(Q) $(LD) -o $@ $(USER_LDFLAGS) $(USER_LIBPATHS) $(OBJS) --start-group $(USER_LDLIBS) --end-group $(USER_LIBGCC)
 | 
			
		||||
 | 
			
		||||
$(TOPDIR)$(DELIM)nuttx_user.elf: nuttx_user.elf
 | 
			
		||||
	@echo "LD: nuttx_user.elf"
 | 
			
		||||
	$(Q) cp -a nuttx_user.elf $(TOPDIR)$(DELIM)nuttx_user.elf
 | 
			
		||||
ifeq ($(CONFIG_INTELHEX_BINARY),y)
 | 
			
		||||
	@echo "CP: nuttx_user.hex"
 | 
			
		||||
	$(Q) $(OBJCOPY) $(OBJCOPYARGS) -O ihex nuttx_user.elf $(USER_HEXFILE)
 | 
			
		||||
endif
 | 
			
		||||
ifeq ($(CONFIG_MOTOROLA_SREC),y)
 | 
			
		||||
	@echo "CP: nuttx_user.srec"
 | 
			
		||||
	$(Q) $(OBJCOPY) $(OBJCOPYARGS) -O srec nuttx_user.elf $(USER_SRECFILE)
 | 
			
		||||
endif
 | 
			
		||||
ifeq ($(CONFIG_RAW_BINARY),y)
 | 
			
		||||
	@echo "CP: nuttx_user.bin"
 | 
			
		||||
	$(Q) $(OBJCOPY) $(OBJCOPYARGS) -O binary nuttx_user.elf $(USER_BINFILE)
 | 
			
		||||
endif
 | 
			
		||||
 | 
			
		||||
$(TOPDIR)$(DELIM)User.map: nuttx_user.elf
 | 
			
		||||
	@echo "MK: User.map"
 | 
			
		||||
	$(Q) $(NM) nuttx_user.elf >$(TOPDIR)$(DELIM)User.map
 | 
			
		||||
	$(Q) $(CROSSDEV)size nuttx_user.elf
 | 
			
		||||
 | 
			
		||||
.depend:
 | 
			
		||||
 | 
			
		||||
depend: .depend
 | 
			
		||||
 | 
			
		||||
clean:
 | 
			
		||||
	$(call DELFILE, nuttx_user.elf)
 | 
			
		||||
	$(call DELFILE, "$(TOPDIR)$(DELIM)nuttx_user.*")
 | 
			
		||||
	$(call DELFILE, "$(TOPDIR)$(DELIM)User.map")
 | 
			
		||||
	$(call CLEAN)
 | 
			
		||||
 | 
			
		||||
distclean: clean
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,122 @@
 | 
			
		|||
/****************************************************************************
 | 
			
		||||
 * boards/arm/imxrt/xidatong/kernel/imxrt_userspace.c
 | 
			
		||||
 *
 | 
			
		||||
 * Licensed to the Apache Software Foundation (ASF) under one or more
 | 
			
		||||
 * contributor license agreements.  See the NOTICE file distributed with
 | 
			
		||||
 * this work for additional information regarding copyright ownership.  The
 | 
			
		||||
 * ASF licenses this file to you under the Apache License, Version 2.0 (the
 | 
			
		||||
 * "License"); you may not use this file except in compliance with the
 | 
			
		||||
 * License.  You may obtain a copy of the License at
 | 
			
		||||
 *
 | 
			
		||||
 *   http://www.apache.org/licenses/LICENSE-2.0
 | 
			
		||||
 *
 | 
			
		||||
 * Unless required by applicable law or agreed to in writing, software
 | 
			
		||||
 * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
 | 
			
		||||
 * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the
 | 
			
		||||
 * License for the specific language governing permissions and limitations
 | 
			
		||||
 * under the License.
 | 
			
		||||
 *
 | 
			
		||||
 ****************************************************************************/
 | 
			
		||||
 | 
			
		||||
/****************************************************************************
 | 
			
		||||
 * Included Files
 | 
			
		||||
 ****************************************************************************/
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
* @file imxrt_userspace.c
 | 
			
		||||
* @brief nuttx source code
 | 
			
		||||
*                https://github.com/apache/incubator-nuttx.git
 | 
			
		||||
* @version 10.2.0 
 | 
			
		||||
* @author AIIT XUOS Lab
 | 
			
		||||
* @date 2022-03-23
 | 
			
		||||
*/
 | 
			
		||||
 | 
			
		||||
#include <nuttx/config.h>
 | 
			
		||||
 | 
			
		||||
#include <stdlib.h>
 | 
			
		||||
 | 
			
		||||
#include <nuttx/userspace.h>
 | 
			
		||||
#include <nuttx/wqueue.h>
 | 
			
		||||
#include <nuttx/mm/mm.h>
 | 
			
		||||
 | 
			
		||||
#if defined(CONFIG_BUILD_PROTECTED) && !defined(__KERNEL__)
 | 
			
		||||
 | 
			
		||||
/****************************************************************************
 | 
			
		||||
 * Pre-processor Definitions
 | 
			
		||||
 ****************************************************************************/
 | 
			
		||||
 | 
			
		||||
/* Configuration ************************************************************/
 | 
			
		||||
 | 
			
		||||
#ifndef CONFIG_NUTTX_USERSPACE
 | 
			
		||||
#  error "CONFIG_NUTTX_USERSPACE not defined"
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#if CONFIG_NUTTX_USERSPACE != 0x60200000
 | 
			
		||||
#  error "CONFIG_NUTTX_USERSPACE must be 0x60200000 to match user-space.ld"
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
/****************************************************************************
 | 
			
		||||
 * Public Data
 | 
			
		||||
 ****************************************************************************/
 | 
			
		||||
 | 
			
		||||
/* These 'addresses' of these values are setup by the linker script.
 | 
			
		||||
 * They are not actual uint32_t storage locations!
 | 
			
		||||
 * They are only used meaningfully in the following way:
 | 
			
		||||
 *
 | 
			
		||||
 *  - The linker script defines, for example, the symbol_sdata.
 | 
			
		||||
 *  - The declareion extern uint32_t _sdata; makes C happy.  C will believe
 | 
			
		||||
 *    that the value _sdata is the address of a uint32_t variable _data (it
 | 
			
		||||
 *    is not!).
 | 
			
		||||
 *  - We can recoved the linker value then by simply taking the address of
 | 
			
		||||
 *    of _data.  like:  uint32_t *pdata = &_sdata;
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
extern uint32_t _stext;           /* Start of .text */
 | 
			
		||||
extern uint32_t _etext;           /* End_1 of .text + .rodata */
 | 
			
		||||
extern const uint32_t _eronly;    /* End+1 of read only section (.text + .rodata) */
 | 
			
		||||
extern uint32_t _sdata;           /* Start of .data */
 | 
			
		||||
extern uint32_t _edata;           /* End+1 of .data */
 | 
			
		||||
extern uint32_t _sbss;            /* Start of .bss */
 | 
			
		||||
extern uint32_t _ebss;            /* End+1 of .bss */
 | 
			
		||||
 | 
			
		||||
/* This is the user space entry point */
 | 
			
		||||
 | 
			
		||||
int CONFIG_USER_ENTRYPOINT(int argc, char *argv[]);
 | 
			
		||||
 | 
			
		||||
const struct userspace_s userspace locate_data(".userspace") =
 | 
			
		||||
{
 | 
			
		||||
  /* General memory map */
 | 
			
		||||
 | 
			
		||||
  .us_entrypoint    = (main_t)CONFIG_USER_ENTRYPOINT,
 | 
			
		||||
  .us_textstart     = (uintptr_t)&_stext,
 | 
			
		||||
  .us_textend       = (uintptr_t)&_etext,
 | 
			
		||||
  .us_datasource    = (uintptr_t)&_eronly,
 | 
			
		||||
  .us_datastart     = (uintptr_t)&_sdata,
 | 
			
		||||
  .us_dataend       = (uintptr_t)&_edata,
 | 
			
		||||
  .us_bssstart      = (uintptr_t)&_sbss,
 | 
			
		||||
  .us_bssend        = (uintptr_t)&_ebss,
 | 
			
		||||
 | 
			
		||||
  /* Memory manager heap structure */
 | 
			
		||||
 | 
			
		||||
  .us_heap          = &g_mmheap,
 | 
			
		||||
 | 
			
		||||
  /* Task/thread startup routines */
 | 
			
		||||
 | 
			
		||||
  .task_startup     = nxtask_startup,
 | 
			
		||||
 | 
			
		||||
  /* Signal handler trampoline */
 | 
			
		||||
 | 
			
		||||
  .signal_handler   = up_signal_handler,
 | 
			
		||||
 | 
			
		||||
  /* User-space work queue support (declared in include/nuttx/wqueue.h) */
 | 
			
		||||
 | 
			
		||||
#ifdef CONFIG_LIBC_USRWORK
 | 
			
		||||
  .work_usrstart    = work_usrstart,
 | 
			
		||||
#endif
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
/****************************************************************************
 | 
			
		||||
 * Public Functions
 | 
			
		||||
 ****************************************************************************/
 | 
			
		||||
 | 
			
		||||
#endif /* CONFIG_BUILD_PROTECTED && !__KERNEL__ */
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,182 @@
 | 
			
		|||
# 从零开始构建矽璓工业物联操作系统:使用ARM架构的矽达通
 | 
			
		||||
 | 
			
		||||
# xidatong
 | 
			
		||||
 | 
			
		||||
[XiUOS](http://xuos.io/) (X Industrial Ubiquitous Operating System) 矽璓XiUOS是一款面向智慧车间的工业物联网操作系统,主要由一个极简的微型实时操作系统内核和其上的工业物联框架构成,通过高效管理工业物联网设备、支撑工业物联应用,在生产车间内实现智能化的“感知环境、联网传输、知悉识别、控制调整”,促进以工业设备和工业控制系统为核心的人、机、物深度互联,帮助提升生产线的数字化和智能化水平。
 | 
			
		||||
 | 
			
		||||
## 1. 简介
 | 
			
		||||
 | 
			
		||||
| 硬件 | 描述 |
 | 
			
		||||
| -- | -- |
 | 
			
		||||
|芯片型号| MIMXRT1052CVL5B |
 | 
			
		||||
|架构| cortex-m7 |
 | 
			
		||||
|主频| 600MHz |
 | 
			
		||||
|片内SRAM| 512KB shared with TCM |
 | 
			
		||||
|外设支持| UART |
 | 
			
		||||
 | 
			
		||||
XiUOS板级当前支持使用UART。
 | 
			
		||||
 | 
			
		||||
## 2. 开发环境搭建
 | 
			
		||||
 | 
			
		||||
### 推荐使用:
 | 
			
		||||
 | 
			
		||||
**操作系统:** ubuntu18.04 [https://ubuntu.com/download/desktop](https://ubuntu.com/download/desktop)
 | 
			
		||||
 | 
			
		||||
更新`ubuntu 18.04`源的方法:(根据自身情况而定,可以不更改)
 | 
			
		||||
 | 
			
		||||
第一步:打开sources.list文件
 | 
			
		||||
 | 
			
		||||
```c
 | 
			
		||||
sudo vim /etc/apt/sources.list
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
第二步:将以下内容复制到sources.list文件
 | 
			
		||||
 | 
			
		||||
```c
 | 
			
		||||
deb http://mirrors.aliyun.com/ubuntu/ bionic main restricted universe multiverse
 | 
			
		||||
deb http://mirrors.aliyun.com/ubuntu/ bionic-security main restricted universe multiverse
 | 
			
		||||
deb http://mirrors.aliyun.com/ubuntu/ bionic-updates main restricted universe multiverse
 | 
			
		||||
deb http://mirrors.aliyun.com/ubuntu/ bionic-proposed main restricted universe multiverse
 | 
			
		||||
deb http://mirrors.aliyun.com/ubuntu/ bionic-backports main restricted universe multiverse
 | 
			
		||||
deb-src http://mirrors.aliyun.com/ubuntu/ bionic main restricted universe multiverse
 | 
			
		||||
deb-src http://mirrors.aliyun.com/ubuntu/ bionic-security main restricted universe multiverse
 | 
			
		||||
deb-src http://mirrors.aliyun.com/ubuntu/ bionic-updates main restricted universe multiverse
 | 
			
		||||
deb-src http://mirrors.aliyun.com/ubuntu/ bionic-proposed main restricted universe multiverse
 | 
			
		||||
deb-src http://mirrors.aliyun.com/ubuntu/ bionic-backports main restricted universe multiverse
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
第三步:更新源和系统软件
 | 
			
		||||
 | 
			
		||||
```c
 | 
			
		||||
sudo apt-get update
 | 
			
		||||
sudo apt-get upgrade
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
**开发工具推荐使用 VSCode   ,VScode下载地址为:** VSCode  [https://code.visualstudio.com/](https://code.visualstudio.com/),推荐下载地址为 [http://vscode.cdn.azure.cn/stable/3c4e3df9e89829dce27b7b5c24508306b151f30d/code_1.55.2-1618307277_amd64.deb](http://vscode.cdn.azure.cn/stable/3c4e3df9e89829dce27b7b5c24508306b151f30d/code_1.55.2-1618307277_amd64.deb)
 | 
			
		||||
 | 
			
		||||
### 依赖包安装:
 | 
			
		||||
 | 
			
		||||
```
 | 
			
		||||
$ sudo apt install build-essential pkg-config  git
 | 
			
		||||
$ sudo apt install gcc make libncurses5-dev openssl libssl-dev bison flex libelf-dev autoconf libtool gperf libc6-dev
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
**XiUOS操作系统源码下载:** XiUOS [https://www.gitlink.org.cn/xuos/xiuos](https://www.gitlink.org.cn/xuos/xiuos)
 | 
			
		||||
 | 
			
		||||
新建一个空文件夹并进入文件夹中,并下载源码,具体命令如下:
 | 
			
		||||
 | 
			
		||||
```c
 | 
			
		||||
mkdir test  &&  cd test
 | 
			
		||||
git clone https://gitlink.org.cn/xuos/xiuos.git
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
1、打开XiUOS源码文件包可以看到以下目录:
 | 
			
		||||
| 名称 | 说明 |
 | 
			
		||||
| -- | -- |
 | 
			
		||||
| APP_Framework | 应用代码 |
 | 
			
		||||
| Ubiquitous | 板级支持包,支持NuttX、RT-Thread和XiZi内核 |
 | 
			
		||||
 | 
			
		||||
2、打开XiZi内核源码文件包可以看到以下目录:
 | 
			
		||||
| 名称 | 说明 |
 | 
			
		||||
| -- | -- |
 | 
			
		||||
| arch | 架构代码 |
 | 
			
		||||
| board | 板级支持包 |
 | 
			
		||||
| fs | 文件系统 |
 | 
			
		||||
| kernel | 内核源码 |
 | 
			
		||||
| lib | 第三方库源码 |
 | 
			
		||||
| resources | 驱动文件 |
 | 
			
		||||
| tool | 系统工具 |
 | 
			
		||||
 | 
			
		||||
使用VScode打开代码,具体操作步骤为:在源码文件夹下打开系统终端,输入`code .`即可打开VScode开发环境,如下图所示:
 | 
			
		||||
 | 
			
		||||
<div align= "center"> 
 | 
			
		||||
<img src = ./img/vscode.jpg  width =1000>
 | 
			
		||||
  </div>
 | 
			
		||||
 | 
			
		||||
### 裁减配置工具的下载
 | 
			
		||||
 | 
			
		||||
裁减配置工具:
 | 
			
		||||
 | 
			
		||||
**工具地址:** kconfig-frontends [https://www.gitlink.org.cn/xuos/kconfig-frontends](https://www.gitlink.org.cn/xuos/kconfig-frontends),下载与安装的具体命令如下:
 | 
			
		||||
 | 
			
		||||
```c
 | 
			
		||||
mkdir kfrontends  && cd kfrontends
 | 
			
		||||
git clone https://gitlink.org.cn/xuos/kconfig-frontends.git
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
下载源码后按以下步骤执行软件安装:
 | 
			
		||||
 | 
			
		||||
```c
 | 
			
		||||
cd kconfig-frontends
 | 
			
		||||
./xs_build.sh
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
### 编译工具链:
 | 
			
		||||
 | 
			
		||||
ARM: arm-none-eabi(`gcc version 6.3.1`),默认安装到Ubuntu的/usr/bin/arm-none-eabi-,使用如下命令行下载和安装。
 | 
			
		||||
 | 
			
		||||
```shell
 | 
			
		||||
$ sudo apt install gcc-arm-none-eabi
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
## 编译说明
 | 
			
		||||
 | 
			
		||||
### 编辑环境:`Ubuntu18.04`
 | 
			
		||||
 | 
			
		||||
### 编译工具链:`arm-none-eabi-gcc`
 | 
			
		||||
使用`VScode`打开工程的方法有多种,本文介绍一种快捷键,在项目目录下将`code .`输入linux系统命令终端即可打开目标项目
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
编译步骤:
 | 
			
		||||
 | 
			
		||||
1.在VScode命令终端中执行以下命令,生成配置文件
 | 
			
		||||
 | 
			
		||||
```shell
 | 
			
		||||
cd ./Ubiquitous/Nuttx/app_match_nuttx
 | 
			
		||||
source build.sh
 | 
			
		||||
 | 
			
		||||
执行完毕会自动进入./Ubiquitous/Nuttx/nuttx下,继续执行
 | 
			
		||||
 | 
			
		||||
sudo ./tools/configure.sh xidatong:nsh
 | 
			
		||||
sudo make menuconfig
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
2.在menuconfig界面配置需要关闭和开启的功能,按回车键进入下级菜单,按Y键选中需要开启的功能,按N键选中需要关闭的功能,配置结束后保存并退出(本例旨在演示简单的输出例程,所以没有需要配置的选项,双击快捷键ESC退出配置)
 | 
			
		||||
 | 
			
		||||

 | 
			
		||||
 | 
			
		||||
退出时选择`yes`保存上面所配置的内容,如下图所示:
 | 
			
		||||
 | 
			
		||||

 | 
			
		||||
 | 
			
		||||
3.继续执行以下命令,进行编译
 | 
			
		||||
 | 
			
		||||
```shell
 | 
			
		||||
sudo make
 | 
			
		||||
或
 | 
			
		||||
sudo make -j8
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
make时加上V=1参数可以看到较为详细的编译信息,但是编译过程会比较慢。
 | 
			
		||||
 | 
			
		||||
4.如果编译正确无误,会在当前目录下产生nuttx、nuttx.hex等文件。
 | 
			
		||||
 | 
			
		||||
## 3. 烧写及运行
 | 
			
		||||
 | 
			
		||||
### 3.1 烧写
 | 
			
		||||
1、烧写工具:NXP MCU Boot Utility,可参考[https://github.com/JayHeng/NXP-MCUBootUtility](https://github.com/JayHeng/NXP-MCUBootUtility)
 | 
			
		||||
 | 
			
		||||
2、xidatong开发板支持UART串口烧写程序,打开NXP MCU Boot Utility后,选择好芯片类型为i.MXRT105x,开发板上电,使用串口转USB线将开发板和PC连接,拨码开关设置为1 on 2 on 3 off 4 off,重新上电,选择对应的COM口和波特率(需关闭串口终端连接,确保该COM口空闲,否则会导致Utility工具连接失败),连接成功后,点击reconnect,等待NXP MCU Boot Utility中红色显示变成蓝色显示,则表示已正确识别并连接到了开发板。如下图所示:
 | 
			
		||||

 | 
			
		||||
 | 
			
		||||
3、同时需要匹配xidatong开发板所使用的Flash型号,点击Boot Device Configuration,在Use Typical Device中选择Winbond_W25QxxxJV,然后点击ok。如下图所示:
 | 
			
		||||

 | 
			
		||||
 | 
			
		||||
4、选择编译生成的nuttx文件路径(nuttx不带任何后缀,是一个elf文件),按照图示步骤,将文件烧写至Flash中(若烧写无误,则下列绿色进度条会执行到底)。如下图所示:
 | 
			
		||||

 | 
			
		||||
 | 
			
		||||
### 3.2 运行结果
 | 
			
		||||
 | 
			
		||||
按照3.1烧写步骤执行后,将拨码开关设置为1 off 2 off 3 off 4 off,重新上电后,重新打开该COM口串口终端,若程序正常,则串口终端上会显示启动信息打印输出。如下图所示:
 | 
			
		||||

 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,75 @@
 | 
			
		|||
############################################################################
 | 
			
		||||
# boards/arm/imxrt/xidatong/scripts/Make.defs
 | 
			
		||||
#
 | 
			
		||||
# Licensed to the Apache Software Foundation (ASF) under one or more
 | 
			
		||||
# contributor license agreements.  See the NOTICE file distributed with
 | 
			
		||||
# this work for additional information regarding copyright ownership.  The
 | 
			
		||||
# ASF licenses this file to you under the Apache License, Version 2.0 (the
 | 
			
		||||
# "License"); you may not use this file except in compliance with the
 | 
			
		||||
# License.  You may obtain a copy of the License at
 | 
			
		||||
#
 | 
			
		||||
#   http://www.apache.org/licenses/LICENSE-2.0
 | 
			
		||||
#
 | 
			
		||||
# Unless required by applicable law or agreed to in writing, software
 | 
			
		||||
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
 | 
			
		||||
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the
 | 
			
		||||
# License for the specific language governing permissions and limitations
 | 
			
		||||
# under the License.
 | 
			
		||||
#
 | 
			
		||||
############################################################################
 | 
			
		||||
 | 
			
		||||
include $(TOPDIR)/.config
 | 
			
		||||
include $(TOPDIR)/tools/Config.mk
 | 
			
		||||
include $(TOPDIR)/arch/arm/src/armv7-m/Toolchain.defs
 | 
			
		||||
 | 
			
		||||
ifeq ($(CONFIG_ARMV7M_DTCM),y)
 | 
			
		||||
  LDSCRIPT = flash-dtcm.ld
 | 
			
		||||
else
 | 
			
		||||
  LDSCRIPT = flash-ocram.ld
 | 
			
		||||
endif
 | 
			
		||||
 | 
			
		||||
ifeq ($(CONFIG_CYGWIN_WINTOOL),y)
 | 
			
		||||
  ARCHSCRIPT = -T "${shell cygpath -w $(BOARD_DIR)$(DELIM)scripts$(DELIM)$(LDSCRIPT)}"
 | 
			
		||||
else
 | 
			
		||||
  ARCHSCRIPT = -T$(BOARD_DIR)$(DELIM)scripts$(DELIM)$(LDSCRIPT)
 | 
			
		||||
endif
 | 
			
		||||
 | 
			
		||||
ifeq ($(CONFIG_DEBUG_SYMBOLS),y)
 | 
			
		||||
  ARCHOPTIMIZATION = -g
 | 
			
		||||
endif
 | 
			
		||||
 | 
			
		||||
ifneq ($(CONFIG_DEBUG_NOOPT),y)
 | 
			
		||||
  ARCHOPTIMIZATION += $(MAXOPTIMIZATION)
 | 
			
		||||
endif
 | 
			
		||||
 | 
			
		||||
ARCHCFLAGS = -fno-builtin
 | 
			
		||||
ARCHCXXFLAGS = -fno-builtin -fno-exceptions -fcheck-new -fno-rtti
 | 
			
		||||
ARCHWARNINGS = -Wall -Wstrict-prototypes -Wshadow -Wundef -fno-strict-aliasing
 | 
			
		||||
ARCHWARNINGSXX = -Wall -Wshadow -Wundef
 | 
			
		||||
ARCHPICFLAGS = -fpic -msingle-pic-base -mpic-register=r10
 | 
			
		||||
 | 
			
		||||
CFLAGS := $(APPPATHS) $(ARCHCFLAGS) $(ARCHWARNINGS) $(ARCHOPTIMIZATION) $(ARCHCPUFLAGS) $(ARCHINCLUDES) $(ARCHDEFINES) $(EXTRAFLAGS) -pipe
 | 
			
		||||
CPICFLAGS = $(ARCHPICFLAGS) $(CFLAGS)
 | 
			
		||||
CXXFLAGS := $(ARCHCXXFLAGS) $(ARCHWARNINGSXX) $(ARCHOPTIMIZATION) $(ARCHCPUFLAGS) $(ARCHXXINCLUDES) $(ARCHDEFINES) $(EXTRAFLAGS) -pipe
 | 
			
		||||
CXXPICFLAGS = $(ARCHPICFLAGS) $(CXXFLAGS)
 | 
			
		||||
CPPFLAGS := $(ARCHINCLUDES) $(ARCHDEFINES) $(EXTRAFLAGS)
 | 
			
		||||
AFLAGS := $(CFLAGS) -D__ASSEMBLY__
 | 
			
		||||
 | 
			
		||||
NXFLATLDFLAGS1 = -r -d -warn-common
 | 
			
		||||
NXFLATLDFLAGS2 = $(NXFLATLDFLAGS1) -T$(TOPDIR)/binfmt/libnxflat/gnu-nxflat-pcrel.ld -no-check-sections
 | 
			
		||||
LDNXFLATFLAGS = -e main -s 2048
 | 
			
		||||
 | 
			
		||||
# Loadable module definitions
 | 
			
		||||
 | 
			
		||||
CMODULEFLAGS = $(CFLAGS) -mlong-calls # --target1-abs
 | 
			
		||||
 | 
			
		||||
LDMODULEFLAGS = -r -e module_initialize
 | 
			
		||||
ifeq ($(CONFIG_CYGWIN_WINTOOL),y)
 | 
			
		||||
  LDMODULEFLAGS += -T "${shell cygpath -w $(TOPDIR)/libs/libc/modlib/gnu-elf.ld}"
 | 
			
		||||
else
 | 
			
		||||
  LDMODULEFLAGS += -T $(TOPDIR)/libs/libc/modlib/gnu-elf.ld
 | 
			
		||||
endif
 | 
			
		||||
 | 
			
		||||
ifeq ($(CONFIG_DEBUG_SYMBOLS),y)
 | 
			
		||||
  LDFLAGS += -g
 | 
			
		||||
endif
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,140 @@
 | 
			
		|||
/****************************************************************************
 | 
			
		||||
 * boards/arm/imxrt/xidatong/scripts/flash-ocram.ld
 | 
			
		||||
 *
 | 
			
		||||
 * Licensed to the Apache Software Foundation (ASF) under one or more
 | 
			
		||||
 * contributor license agreements.  See the NOTICE file distributed with
 | 
			
		||||
 * this work for additional information regarding copyright ownership.  The
 | 
			
		||||
 * ASF licenses this file to you under the Apache License, Version 2.0 (the
 | 
			
		||||
 * "License"); you may not use this file except in compliance with the
 | 
			
		||||
 * License.  You may obtain a copy of the License at
 | 
			
		||||
 *
 | 
			
		||||
 *   http://www.apache.org/licenses/LICENSE-2.0
 | 
			
		||||
 *
 | 
			
		||||
 * Unless required by applicable law or agreed to in writing, software
 | 
			
		||||
 * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
 | 
			
		||||
 * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the
 | 
			
		||||
 * License for the specific language governing permissions and limitations
 | 
			
		||||
 * under the License.
 | 
			
		||||
 *
 | 
			
		||||
 ****************************************************************************/
 | 
			
		||||
 | 
			
		||||
/* Specify the memory areas */
 | 
			
		||||
 | 
			
		||||
MEMORY
 | 
			
		||||
{
 | 
			
		||||
  flash (rx)  : ORIGIN = 0x60000000, LENGTH = 0x04000000
 | 
			
		||||
  sram  (rwx) : ORIGIN = 0x20200000, LENGTH = 0x00080000
 | 
			
		||||
  itcm  (rwx) : ORIGIN = 0x00000000, LENGTH = 0x00020000
 | 
			
		||||
  dtcm  (rwx) : ORIGIN = 0x20000000, LENGTH = 0x00020000
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
OUTPUT_ARCH(arm)
 | 
			
		||||
EXTERN(_vectors)
 | 
			
		||||
EXTERN(g_flash_config)
 | 
			
		||||
EXTERN(g_image_vector_table)
 | 
			
		||||
EXTERN(g_boot_data)
 | 
			
		||||
EXTERN(g_dcd_data)
 | 
			
		||||
 | 
			
		||||
ENTRY(_stext)
 | 
			
		||||
 | 
			
		||||
SECTIONS
 | 
			
		||||
{
 | 
			
		||||
    /* Image Vector Table and Boot Data for booting from external flash */
 | 
			
		||||
 | 
			
		||||
    .boot_hdr : ALIGN(4)
 | 
			
		||||
    {
 | 
			
		||||
        FILL(0xff)
 | 
			
		||||
        __boot_hdr_start__ = ABSOLUTE(.) ;
 | 
			
		||||
        KEEP(*(.boot_hdr.conf))
 | 
			
		||||
        . = 0x1000 ;
 | 
			
		||||
        KEEP(*(.boot_hdr.ivt))
 | 
			
		||||
        . = 0x1020 ;
 | 
			
		||||
        KEEP(*(.boot_hdr.boot_data))
 | 
			
		||||
        . = 0x1030 ;
 | 
			
		||||
        KEEP(*(.boot_hdr.dcd_data))
 | 
			
		||||
        __boot_hdr_end__ = ABSOLUTE(.) ;
 | 
			
		||||
        . = 0x2000 ;
 | 
			
		||||
    } >flash
 | 
			
		||||
 | 
			
		||||
    .text :
 | 
			
		||||
    {
 | 
			
		||||
        _stext = ABSOLUTE(.);
 | 
			
		||||
        *(.vectors)
 | 
			
		||||
        *(.text .text.*)
 | 
			
		||||
        *(.fixup)
 | 
			
		||||
        *(.gnu.warning)
 | 
			
		||||
        *(.rodata .rodata.*)
 | 
			
		||||
        *(.gnu.linkonce.t.*)
 | 
			
		||||
        *(.glue_7)
 | 
			
		||||
        *(.glue_7t)
 | 
			
		||||
        *(.got)
 | 
			
		||||
        *(.gcc_except_table)
 | 
			
		||||
        *(.gnu.linkonce.r.*)
 | 
			
		||||
        _etext = ABSOLUTE(.);
 | 
			
		||||
    } > flash
 | 
			
		||||
 | 
			
		||||
    .init_section :
 | 
			
		||||
    {
 | 
			
		||||
        _sinit = ABSOLUTE(.);
 | 
			
		||||
        *(.init_array .init_array.*)
 | 
			
		||||
        _einit = ABSOLUTE(.);
 | 
			
		||||
    } > flash
 | 
			
		||||
 | 
			
		||||
    .ARM.extab :
 | 
			
		||||
    {
 | 
			
		||||
        *(.ARM.extab*)
 | 
			
		||||
    } > flash
 | 
			
		||||
 | 
			
		||||
    .ARM.exidx :
 | 
			
		||||
    {
 | 
			
		||||
        __exidx_start = ABSOLUTE(.);
 | 
			
		||||
        *(.ARM.exidx*)
 | 
			
		||||
        __exidx_end = ABSOLUTE(.);
 | 
			
		||||
    } > flash
 | 
			
		||||
 | 
			
		||||
    _eronly = ABSOLUTE(.);
 | 
			
		||||
 | 
			
		||||
    .data :
 | 
			
		||||
    {
 | 
			
		||||
        _sdata = ABSOLUTE(.);
 | 
			
		||||
        *(.data .data.*)
 | 
			
		||||
        *(.gnu.linkonce.d.*)
 | 
			
		||||
        CONSTRUCTORS
 | 
			
		||||
        . = ALIGN(4);
 | 
			
		||||
        _edata = ABSOLUTE(.);
 | 
			
		||||
    } > sram AT > flash
 | 
			
		||||
 | 
			
		||||
    .ramfunc ALIGN(4):
 | 
			
		||||
    {
 | 
			
		||||
        _sramfuncs = ABSOLUTE(.);
 | 
			
		||||
        *(.ramfunc  .ramfunc.*)
 | 
			
		||||
        _eramfuncs = ABSOLUTE(.);
 | 
			
		||||
    } > sram AT > flash
 | 
			
		||||
 | 
			
		||||
    _framfuncs = LOADADDR(.ramfunc);
 | 
			
		||||
 | 
			
		||||
    .bss :
 | 
			
		||||
    {
 | 
			
		||||
        _sbss = ABSOLUTE(.);
 | 
			
		||||
        *(.bss .bss.*)
 | 
			
		||||
        *(.gnu.linkonce.b.*)
 | 
			
		||||
        *(COMMON)
 | 
			
		||||
        . = ALIGN(4);
 | 
			
		||||
        _ebss = ABSOLUTE(.);
 | 
			
		||||
    } > sram
 | 
			
		||||
 | 
			
		||||
    /* Stabs debugging sections. */
 | 
			
		||||
 | 
			
		||||
    .stab 0 : { *(.stab) }
 | 
			
		||||
    .stabstr 0 : { *(.stabstr) }
 | 
			
		||||
    .stab.excl 0 : { *(.stab.excl) }
 | 
			
		||||
    .stab.exclstr 0 : { *(.stab.exclstr) }
 | 
			
		||||
    .stab.index 0 : { *(.stab.index) }
 | 
			
		||||
    .stab.indexstr 0 : { *(.stab.indexstr) }
 | 
			
		||||
    .comment 0 : { *(.comment) }
 | 
			
		||||
    .debug_abbrev 0 : { *(.debug_abbrev) }
 | 
			
		||||
    .debug_info 0 : { *(.debug_info) }
 | 
			
		||||
    .debug_line 0 : { *(.debug_line) }
 | 
			
		||||
    .debug_pubnames 0 : { *(.debug_pubnames) }
 | 
			
		||||
    .debug_aranges 0 : { *(.debug_aranges) }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,104 @@
 | 
			
		|||
/****************************************************************************
 | 
			
		||||
 * boards/arm/imxrt/xidatong/scripts/kernel-space.ld
 | 
			
		||||
 *
 | 
			
		||||
 * Licensed to the Apache Software Foundation (ASF) under one or more
 | 
			
		||||
 * contributor license agreements.  See the NOTICE file distributed with
 | 
			
		||||
 * this work for additional information regarding copyright ownership.  The
 | 
			
		||||
 * ASF licenses this file to you under the Apache License, Version 2.0 (the
 | 
			
		||||
 * "License"); you may not use this file except in compliance with the
 | 
			
		||||
 * License.  You may obtain a copy of the License at
 | 
			
		||||
 *
 | 
			
		||||
 *   http://www.apache.org/licenses/LICENSE-2.0
 | 
			
		||||
 *
 | 
			
		||||
 * Unless required by applicable law or agreed to in writing, software
 | 
			
		||||
 * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
 | 
			
		||||
 * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the
 | 
			
		||||
 * License for the specific language governing permissions and limitations
 | 
			
		||||
 * under the License.
 | 
			
		||||
 *
 | 
			
		||||
 ****************************************************************************/
 | 
			
		||||
 | 
			
		||||
/* NOTE:  This depends on the memory.ld script having been included prior to
 | 
			
		||||
 * this script.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
OUTPUT_ARCH(arm)
 | 
			
		||||
EXTERN(_vectors)
 | 
			
		||||
ENTRY(_stext)
 | 
			
		||||
 | 
			
		||||
SECTIONS
 | 
			
		||||
{
 | 
			
		||||
  .text :
 | 
			
		||||
  {
 | 
			
		||||
    _stext = ABSOLUTE(.);
 | 
			
		||||
    *(.vectors)
 | 
			
		||||
    *(.text .text.*)
 | 
			
		||||
    *(.fixup)
 | 
			
		||||
    *(.gnu.warning)
 | 
			
		||||
    *(.rodata .rodata.*)
 | 
			
		||||
    *(.gnu.linkonce.t.*)
 | 
			
		||||
    *(.glue_7)
 | 
			
		||||
    *(.glue_7t)
 | 
			
		||||
    *(.got)
 | 
			
		||||
    *(.gcc_except_table)
 | 
			
		||||
    *(.gnu.linkonce.r.*)
 | 
			
		||||
    _etext = ABSOLUTE(.);
 | 
			
		||||
  } > kflash
 | 
			
		||||
 | 
			
		||||
  .init_section :
 | 
			
		||||
  {
 | 
			
		||||
    _sinit = ABSOLUTE(.);
 | 
			
		||||
    KEEP(*(.init_array .init_array.*))
 | 
			
		||||
    _einit = ABSOLUTE(.);
 | 
			
		||||
  } > kflash
 | 
			
		||||
 | 
			
		||||
  .ARM.extab :
 | 
			
		||||
  {
 | 
			
		||||
    *(.ARM.extab*)
 | 
			
		||||
  } > kflash
 | 
			
		||||
 | 
			
		||||
  __exidx_start = ABSOLUTE(.);
 | 
			
		||||
  .ARM.exidx :
 | 
			
		||||
  {
 | 
			
		||||
    *(.ARM.exidx*)
 | 
			
		||||
  } > kflash
 | 
			
		||||
 | 
			
		||||
  __exidx_end = ABSOLUTE(.);
 | 
			
		||||
 | 
			
		||||
  _eronly = ABSOLUTE(.);
 | 
			
		||||
 | 
			
		||||
  .data :
 | 
			
		||||
  {
 | 
			
		||||
    _sdata = ABSOLUTE(.);
 | 
			
		||||
    *(.data .data.*)
 | 
			
		||||
    *(.gnu.linkonce.d.*)
 | 
			
		||||
    CONSTRUCTORS
 | 
			
		||||
    . = ALIGN(4);
 | 
			
		||||
    _edata = ABSOLUTE(.);
 | 
			
		||||
  } > kocram AT > kflash
 | 
			
		||||
 | 
			
		||||
  .bss :
 | 
			
		||||
  {
 | 
			
		||||
    _sbss = ABSOLUTE(.);
 | 
			
		||||
    *(.bss .bss.*)
 | 
			
		||||
    *(.gnu.linkonce.b.*)
 | 
			
		||||
    *(COMMON)
 | 
			
		||||
    . = ALIGN(4);
 | 
			
		||||
    _ebss = ABSOLUTE(.);
 | 
			
		||||
  } > kocram
 | 
			
		||||
 | 
			
		||||
  /* Stabs debugging sections */
 | 
			
		||||
 | 
			
		||||
  .stab 0 : { *(.stab) }
 | 
			
		||||
  .stabstr 0 : { *(.stabstr) }
 | 
			
		||||
  .stab.excl 0 : { *(.stab.excl) }
 | 
			
		||||
  .stab.exclstr 0 : { *(.stab.exclstr) }
 | 
			
		||||
  .stab.index 0 : { *(.stab.index) }
 | 
			
		||||
  .stab.indexstr 0 : { *(.stab.indexstr) }
 | 
			
		||||
  .comment 0 : { *(.comment) }
 | 
			
		||||
  .debug_abbrev 0 : { *(.debug_abbrev) }
 | 
			
		||||
  .debug_info 0 : { *(.debug_info) }
 | 
			
		||||
  .debug_line 0 : { *(.debug_line) }
 | 
			
		||||
  .debug_pubnames 0 : { *(.debug_pubnames) }
 | 
			
		||||
  .debug_aranges 0 : { *(.debug_aranges) }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,67 @@
 | 
			
		|||
/****************************************************************************
 | 
			
		||||
 * boards/arm/imxrt/xidatong/scripts/memory.ld
 | 
			
		||||
 *
 | 
			
		||||
 * Licensed to the Apache Software Foundation (ASF) under one or more
 | 
			
		||||
 * contributor license agreements.  See the NOTICE file distributed with
 | 
			
		||||
 * this work for additional information regarding copyright ownership.  The
 | 
			
		||||
 * ASF licenses this file to you under the Apache License, Version 2.0 (the
 | 
			
		||||
 * "License"); you may not use this file except in compliance with the
 | 
			
		||||
 * License.  You may obtain a copy of the License at
 | 
			
		||||
 *
 | 
			
		||||
 *   http://www.apache.org/licenses/LICENSE-2.0
 | 
			
		||||
 *
 | 
			
		||||
 * Unless required by applicable law or agreed to in writing, software
 | 
			
		||||
 * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
 | 
			
		||||
 * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the
 | 
			
		||||
 * License for the specific language governing permissions and limitations
 | 
			
		||||
 * under the License.
 | 
			
		||||
 *
 | 
			
		||||
 ****************************************************************************/
 | 
			
		||||
 | 
			
		||||
/* The i.MXRT1050-EVK has 64Mb of Hyper FLASH beginning at address,
 | 
			
		||||
 * 0x0060:0000, 512Kb of DTCM RAM beginning at 0x2000:0000, and 512Kb OCRAM
 | 
			
		||||
 * beginning at 0x2020:0000.  Neither DTCM or SDRAM are used in this
 | 
			
		||||
 * configuration.
 | 
			
		||||
 *
 | 
			
		||||
 * The user and kernel space partitions will be spanned with a single
 | 
			
		||||
 * region of size 2**n bytes.  As a consequence, as the partitions increase
 | 
			
		||||
 * in size, the alignment requirement also increases.  The sizes below give
 | 
			
		||||
 * the largest possible user address spaces (but leave far too much for the
 | 
			
		||||
 * OS).
 | 
			
		||||
 *
 | 
			
		||||
 * The solution to this wasted memory is to (1) use more than one region to
 | 
			
		||||
 * span the user spaces, or (2) poke holes in a larger region (via sub-
 | 
			
		||||
 * regions) to trim it to fit better.
 | 
			
		||||
 *
 | 
			
		||||
 * A detailed memory map for the 512KB SRAM region is as follows:
 | 
			
		||||
 *
 | 
			
		||||
 *   0x2020 0000:  Kernel .data region.  Typical size: 0.1KB
 | 
			
		||||
 *   ------ ----   Kernel .bss  region.  Typical size: 1.8KB
 | 
			
		||||
 *   0x2020 0800:  Kernel IDLE thread stack (approximate).  Size is
 | 
			
		||||
 *                 determined by CONFIG_IDLETHREAD_STACKSIZE and
 | 
			
		||||
 *                 adjustments for alignment.  Typical is 1KB.
 | 
			
		||||
 *   ------ ----   Padded to 4KB
 | 
			
		||||
 *   0x2040 0000:  User .data region.  Size is variable.
 | 
			
		||||
 *   ------- ----  User .bss region  Size is variable.
 | 
			
		||||
 *   0x2042 0000:  Beginning of kernel heap.  Size determined by
 | 
			
		||||
 *                 CONFIG_MM_KERNEL_HEAPSIZE.
 | 
			
		||||
 *   ------ ----   Beginning of user heap.  Can vary with other settings.
 | 
			
		||||
 *   0x2080 0000:  End+1 of mappable OCRAM
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
/* Specify the memory areas */
 | 
			
		||||
 | 
			
		||||
MEMORY
 | 
			
		||||
{
 | 
			
		||||
  /* 64Mb of HyperFLASH */
 | 
			
		||||
 | 
			
		||||
  kflash (rx)  : ORIGIN = 0x60000000, LENGTH = 1M
 | 
			
		||||
  uflash (rx)  : ORIGIN = 0x60200000, LENGTH = 1M
 | 
			
		||||
  flash  (rx)  : ORIGIN = 0x60400000, LENGTH = 62M
 | 
			
		||||
 | 
			
		||||
  /* 512Kb of OCRAM */
 | 
			
		||||
 | 
			
		||||
  dtcm   (rwx) : ORIGIN = 0x20000000, LENGTH = 512K
 | 
			
		||||
  kocram (rwx) : ORIGIN = 0x20200000, LENGTH = 256K
 | 
			
		||||
  uocram (rwx) : ORIGIN = 0x20240000, LENGTH = 256K
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,118 @@
 | 
			
		|||
/****************************************************************************
 | 
			
		||||
 * boards/arm/imxrt/xidatong/scripts/user-space.ld
 | 
			
		||||
 *
 | 
			
		||||
 * Licensed to the Apache Software Foundation (ASF) under one or more
 | 
			
		||||
 * contributor license agreements.  See the NOTICE file distributed with
 | 
			
		||||
 * this work for additional information regarding copyright ownership.  The
 | 
			
		||||
 * ASF licenses this file to you under the Apache License, Version 2.0 (the
 | 
			
		||||
 * "License"); you may not use this file except in compliance with the
 | 
			
		||||
 * License.  You may obtain a copy of the License at
 | 
			
		||||
 *
 | 
			
		||||
 *   http://www.apache.org/licenses/LICENSE-2.0
 | 
			
		||||
 *
 | 
			
		||||
 * Unless required by applicable law or agreed to in writing, software
 | 
			
		||||
 * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
 | 
			
		||||
 * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the
 | 
			
		||||
 * License for the specific language governing permissions and limitations
 | 
			
		||||
 * under the License.
 | 
			
		||||
 *
 | 
			
		||||
 ****************************************************************************/
 | 
			
		||||
 | 
			
		||||
/* NOTE:  This depends on the memory.ld script having been included prior to
 | 
			
		||||
 * this script.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
/* Make sure that the critical memory management functions are in user-space.
 | 
			
		||||
 * the user heap memory manager will reside in user-space but be usable both
 | 
			
		||||
 * by kernel- and user-space code
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
EXTERN(umm_initialize)
 | 
			
		||||
EXTERN(umm_addregion)
 | 
			
		||||
 | 
			
		||||
EXTERN(malloc)
 | 
			
		||||
EXTERN(realloc)
 | 
			
		||||
EXTERN(zalloc)
 | 
			
		||||
EXTERN(free)
 | 
			
		||||
 | 
			
		||||
OUTPUT_ARCH(arm)
 | 
			
		||||
SECTIONS
 | 
			
		||||
{
 | 
			
		||||
  .userspace :
 | 
			
		||||
  {
 | 
			
		||||
    *(.userspace)
 | 
			
		||||
  } > uflash
 | 
			
		||||
 | 
			
		||||
  .text :
 | 
			
		||||
  {
 | 
			
		||||
    _stext = ABSOLUTE(.);
 | 
			
		||||
    *(.text .text.*)
 | 
			
		||||
    *(.fixup)
 | 
			
		||||
    *(.gnu.warning)
 | 
			
		||||
    *(.rodata .rodata.*)
 | 
			
		||||
    *(.gnu.linkonce.t.*)
 | 
			
		||||
    *(.glue_7)
 | 
			
		||||
    *(.glue_7t)
 | 
			
		||||
    *(.got)
 | 
			
		||||
    *(.gcc_except_table)
 | 
			
		||||
    *(.gnu.linkonce.r.*)
 | 
			
		||||
    _etext = ABSOLUTE(.);
 | 
			
		||||
  } > uflash
 | 
			
		||||
 | 
			
		||||
  .init_section :
 | 
			
		||||
  {
 | 
			
		||||
    _sinit = ABSOLUTE(.);
 | 
			
		||||
    KEEP(*(.init_array .init_array.*))
 | 
			
		||||
    _einit = ABSOLUTE(.);
 | 
			
		||||
  } > uflash
 | 
			
		||||
 | 
			
		||||
  .ARM.extab :
 | 
			
		||||
  {
 | 
			
		||||
    *(.ARM.extab*)
 | 
			
		||||
  } > uflash
 | 
			
		||||
 | 
			
		||||
  __exidx_start = ABSOLUTE(.);
 | 
			
		||||
  .ARM.exidx :
 | 
			
		||||
  {
 | 
			
		||||
    *(.ARM.exidx*)
 | 
			
		||||
  } > uflash
 | 
			
		||||
 | 
			
		||||
  __exidx_end = ABSOLUTE(.);
 | 
			
		||||
 | 
			
		||||
  _eronly = ABSOLUTE(.);
 | 
			
		||||
 | 
			
		||||
  .data :
 | 
			
		||||
  {
 | 
			
		||||
    _sdata = ABSOLUTE(.);
 | 
			
		||||
    *(.data .data.*)
 | 
			
		||||
    *(.gnu.linkonce.d.*)
 | 
			
		||||
    CONSTRUCTORS
 | 
			
		||||
    . = ALIGN(4);
 | 
			
		||||
    _edata = ABSOLUTE(.);
 | 
			
		||||
  } > uocram AT > uflash
 | 
			
		||||
 | 
			
		||||
  .bss :
 | 
			
		||||
  {
 | 
			
		||||
    _sbss = ABSOLUTE(.);
 | 
			
		||||
    *(.bss .bss.*)
 | 
			
		||||
    *(.gnu.linkonce.b.*)
 | 
			
		||||
    *(COMMON)
 | 
			
		||||
    . = ALIGN(4);
 | 
			
		||||
    _ebss = ABSOLUTE(.);
 | 
			
		||||
  } > uocram
 | 
			
		||||
 | 
			
		||||
  /* Stabs debugging sections */
 | 
			
		||||
 | 
			
		||||
  .stab 0 : { *(.stab) }
 | 
			
		||||
  .stabstr 0 : { *(.stabstr) }
 | 
			
		||||
  .stab.excl 0 : { *(.stab.excl) }
 | 
			
		||||
  .stab.exclstr 0 : { *(.stab.exclstr) }
 | 
			
		||||
  .stab.index 0 : { *(.stab.index) }
 | 
			
		||||
  .stab.indexstr 0 : { *(.stab.indexstr) }
 | 
			
		||||
  .comment 0 : { *(.comment) }
 | 
			
		||||
  .debug_abbrev 0 : { *(.debug_abbrev) }
 | 
			
		||||
  .debug_info 0 : { *(.debug_info) }
 | 
			
		||||
  .debug_line 0 : { *(.debug_line) }
 | 
			
		||||
  .debug_pubnames 0 : { *(.debug_pubnames) }
 | 
			
		||||
  .debug_aranges 0 : { *(.debug_aranges) }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,69 @@
 | 
			
		|||
############################################################################
 | 
			
		||||
# boards/arm/imxrt/xidatong/src/Makefile
 | 
			
		||||
#
 | 
			
		||||
# Licensed to the Apache Software Foundation (ASF) under one or more
 | 
			
		||||
# contributor license agreements.  See the NOTICE file distributed with
 | 
			
		||||
# this work for additional information regarding copyright ownership.  The
 | 
			
		||||
# ASF licenses this file to you under the Apache License, Version 2.0 (the
 | 
			
		||||
# "License"); you may not use this file except in compliance with the
 | 
			
		||||
# License.  You may obtain a copy of the License at
 | 
			
		||||
#
 | 
			
		||||
#   http://www.apache.org/licenses/LICENSE-2.0
 | 
			
		||||
#
 | 
			
		||||
# Unless required by applicable law or agreed to in writing, software
 | 
			
		||||
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
 | 
			
		||||
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the
 | 
			
		||||
# License for the specific language governing permissions and limitations
 | 
			
		||||
# under the License.
 | 
			
		||||
#
 | 
			
		||||
############################################################################
 | 
			
		||||
 | 
			
		||||
include $(TOPDIR)/Make.defs
 | 
			
		||||
 | 
			
		||||
CSRCS = imxrt_boot.c imxrt_flexspi_nor_boot.c imxrt_flexspi_nor_flash.c
 | 
			
		||||
 | 
			
		||||
ifeq ($(CONFIG_IMXRT_SDRAMC),y)
 | 
			
		||||
CSRCS += imxrt_sdram.c
 | 
			
		||||
endif
 | 
			
		||||
 | 
			
		||||
ifeq ($(CONFIG_BOARDCTL),y)
 | 
			
		||||
CSRCS += imxrt_appinit.c imxrt_bringup.c
 | 
			
		||||
else ifeq ($(CONFIG_BOARD_LATE_INITIALIZE),y)
 | 
			
		||||
CSRCS += imxrt_bringup.c
 | 
			
		||||
endif
 | 
			
		||||
 | 
			
		||||
ifeq ($(CONFIG_ARCH_LEDS),y)
 | 
			
		||||
CSRCS += imxrt_autoleds.c
 | 
			
		||||
else
 | 
			
		||||
CSRCS += imxrt_userleds.c
 | 
			
		||||
endif
 | 
			
		||||
 | 
			
		||||
ifeq ($(CONFIG_ARCH_BUTTONS),y)
 | 
			
		||||
CSRCS += imxrt_buttons.c
 | 
			
		||||
endif
 | 
			
		||||
 | 
			
		||||
ifeq ($(CONFIG_IMXRT_ENET),y)
 | 
			
		||||
CSRCS += imxrt_ethernet.c
 | 
			
		||||
endif
 | 
			
		||||
 | 
			
		||||
ifeq ($(CONFIG_IMXRT_LPSPI),y)
 | 
			
		||||
CSRCS += imxrt_spi.c
 | 
			
		||||
endif
 | 
			
		||||
 | 
			
		||||
ifeq ($(CONFIG_IMXRT_LCD),y)
 | 
			
		||||
CSRCS += imxrt_lcd.c
 | 
			
		||||
endif
 | 
			
		||||
 | 
			
		||||
ifeq ($(CONFIG_MMCSD_SPI),y)
 | 
			
		||||
CSRCS += imxrt_mmcsd_spi.c
 | 
			
		||||
endif
 | 
			
		||||
 | 
			
		||||
ifeq ($(CONFIG_DEV_GPIO),y)
 | 
			
		||||
CSRCS += imxrt_gpio.c
 | 
			
		||||
endif
 | 
			
		||||
 | 
			
		||||
ifeq ($(CONFIG_XIDATONG_SDRAM),y)
 | 
			
		||||
CSRCS += imxrt_sdram_ini_dcd.c
 | 
			
		||||
endif
 | 
			
		||||
 | 
			
		||||
include $(TOPDIR)/boards/Board.mk
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,84 @@
 | 
			
		|||
/****************************************************************************
 | 
			
		||||
 * boards/arm/imxrt/xidatong/src/imxrt_appinit.c
 | 
			
		||||
 *
 | 
			
		||||
 * Licensed to the Apache Software Foundation (ASF) under one or more
 | 
			
		||||
 * contributor license agreements.  See the NOTICE file distributed with
 | 
			
		||||
 * this work for additional information regarding copyright ownership.  The
 | 
			
		||||
 * ASF licenses this file to you under the Apache License, Version 2.0 (the
 | 
			
		||||
 * "License"); you may not use this file except in compliance with the
 | 
			
		||||
 * License.  You may obtain a copy of the License at
 | 
			
		||||
 *
 | 
			
		||||
 *   http://www.apache.org/licenses/LICENSE-2.0
 | 
			
		||||
 *
 | 
			
		||||
 * Unless required by applicable law or agreed to in writing, software
 | 
			
		||||
 * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
 | 
			
		||||
 * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the
 | 
			
		||||
 * License for the specific language governing permissions and limitations
 | 
			
		||||
 * under the License.
 | 
			
		||||
 *
 | 
			
		||||
 ****************************************************************************/
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
* @file imxrt_appinit.c
 | 
			
		||||
* @brief nuttx source code
 | 
			
		||||
*                https://github.com/apache/incubator-nuttx.git
 | 
			
		||||
* @version 10.2.0 
 | 
			
		||||
* @author AIIT XUOS Lab
 | 
			
		||||
* @date 2022-03-23
 | 
			
		||||
*/
 | 
			
		||||
 | 
			
		||||
/****************************************************************************
 | 
			
		||||
 * Included Files
 | 
			
		||||
 ****************************************************************************/
 | 
			
		||||
 | 
			
		||||
#include <nuttx/config.h>
 | 
			
		||||
 | 
			
		||||
#include <sys/types.h>
 | 
			
		||||
 | 
			
		||||
#include <nuttx/board.h>
 | 
			
		||||
 | 
			
		||||
#include "xidatong.h"
 | 
			
		||||
 | 
			
		||||
#ifdef CONFIG_BOARDCTL
 | 
			
		||||
 | 
			
		||||
/****************************************************************************
 | 
			
		||||
 * Public Functions
 | 
			
		||||
 ****************************************************************************/
 | 
			
		||||
 | 
			
		||||
/****************************************************************************
 | 
			
		||||
 * Name: board_app_initialize
 | 
			
		||||
 *
 | 
			
		||||
 * Description:
 | 
			
		||||
 *   Perform application specific initialization.  This function is never
 | 
			
		||||
 *   called directly from application code, but only indirectly via the
 | 
			
		||||
 *   (non-standard) boardctl() interface using the command BOARDIOC_INIT.
 | 
			
		||||
 *
 | 
			
		||||
 * Input Parameters:
 | 
			
		||||
 *   arg - The boardctl() argument is passed to the board_app_initialize()
 | 
			
		||||
 *         implementation without modification.  The argument has no
 | 
			
		||||
 *         meaning to NuttX; the meaning of the argument is a contract
 | 
			
		||||
 *         between the board-specific initialization logic and the
 | 
			
		||||
 *         matching application logic.  The value could be such things as a
 | 
			
		||||
 *         mode enumeration value, a set of DIP switch switch settings, a
 | 
			
		||||
 *         pointer to configuration data read from a file or serial FLASH,
 | 
			
		||||
 *         or whatever you would like to do with it.  Every implementation
 | 
			
		||||
 *         should accept zero/NULL as a default configuration.
 | 
			
		||||
 *
 | 
			
		||||
 * Returned Value:
 | 
			
		||||
 *   Zero (OK) is returned on success; a negated errno value is returned on
 | 
			
		||||
 *   any failure to indicate the nature of the failure.
 | 
			
		||||
 *
 | 
			
		||||
 ****************************************************************************/
 | 
			
		||||
 | 
			
		||||
int board_app_initialize(uintptr_t arg)
 | 
			
		||||
{
 | 
			
		||||
#ifndef CONFIG_BOARD_LATE_INITIALIZE
 | 
			
		||||
  /* Perform board initialization */
 | 
			
		||||
 | 
			
		||||
  return imxrt_bringup();
 | 
			
		||||
#else
 | 
			
		||||
  return OK;
 | 
			
		||||
#endif
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#endif /* CONFIG_BOARDCTL */
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,175 @@
 | 
			
		|||
/****************************************************************************
 | 
			
		||||
 * boards/arm/imxrt/xidatong/src/imxrt_autoleds.c
 | 
			
		||||
 *
 | 
			
		||||
 * Licensed to the Apache Software Foundation (ASF) under one or more
 | 
			
		||||
 * contributor license agreements.  See the NOTICE file distributed with
 | 
			
		||||
 * this work for additional information regarding copyright ownership.  The
 | 
			
		||||
 * ASF licenses this file to you under the Apache License, Version 2.0 (the
 | 
			
		||||
 * "License"); you may not use this file except in compliance with the
 | 
			
		||||
 * License.  You may obtain a copy of the License at
 | 
			
		||||
 *
 | 
			
		||||
 *   http://www.apache.org/licenses/LICENSE-2.0
 | 
			
		||||
 *
 | 
			
		||||
 * Unless required by applicable law or agreed to in writing, software
 | 
			
		||||
 * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
 | 
			
		||||
 * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the
 | 
			
		||||
 * License for the specific language governing permissions and limitations
 | 
			
		||||
 * under the License.
 | 
			
		||||
 *
 | 
			
		||||
 ****************************************************************************/
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
* @file imxrt_autoleds.c
 | 
			
		||||
* @brief nuttx source code
 | 
			
		||||
*                https://github.com/apache/incubator-nuttx.git
 | 
			
		||||
* @version 10.2.0 
 | 
			
		||||
* @author AIIT XUOS Lab
 | 
			
		||||
* @date 2022-03-23
 | 
			
		||||
*/
 | 
			
		||||
 | 
			
		||||
/* There are four LED status indicators located on the EVK Board.  The
 | 
			
		||||
 * functions of these LEDs include:
 | 
			
		||||
 *
 | 
			
		||||
 *   - Main Power Supply(D3)
 | 
			
		||||
 *     Green: DC 5V main supply is normal.
 | 
			
		||||
 *     Red:   J2 input voltage is over 5.6V.
 | 
			
		||||
 *     Off:   The board is not powered.
 | 
			
		||||
 *   - Reset RED LED(D15)
 | 
			
		||||
 *   - OpenSDA LED(D16)
 | 
			
		||||
 *   - USER LED(D18)
 | 
			
		||||
 *
 | 
			
		||||
 * Only a single LED, D18, is under software control.
 | 
			
		||||
 *
 | 
			
		||||
 * This LED is not used by the board port unless CONFIG_ARCH_LEDS is
 | 
			
		||||
 * defined.  In that case, the usage by the board port is defined in
 | 
			
		||||
 * include/board.h and src/imxrt_autoleds.c. The LED is used to encode
 | 
			
		||||
 * OS-related events as follows:
 | 
			
		||||
 *
 | 
			
		||||
 *   -------------------- ----------------------- ------
 | 
			
		||||
 *   SYMBOL               Meaning                 LED
 | 
			
		||||
 *   -------------------- ----------------------- ------
 | 
			
		||||
 *
 | 
			
		||||
 *   LED_STARTED       0  NuttX has been started  OFF
 | 
			
		||||
 *   LED_HEAPALLOCATE  0  Heap has been allocated OFF
 | 
			
		||||
 *   LED_IRQSENABLED   0  Interrupts enabled      OFF
 | 
			
		||||
 *   LED_STACKCREATED  1  Idle stack created      ON
 | 
			
		||||
 *   LED_INIRQ         2  In an interrupt         N/C
 | 
			
		||||
 *   LED_SIGNAL        2  In a signal handler     N/C
 | 
			
		||||
 *   LED_ASSERTION     2  An assertion failed     N/C
 | 
			
		||||
 *   LED_PANIC         3  The system has crashed  FLASH
 | 
			
		||||
 *   LED_IDLE             Not used
 | 
			
		||||
 *
 | 
			
		||||
 * Thus if the LED is statically on, NuttX has successfully  booted and is,
 | 
			
		||||
 * apparently, running normally.  If the LED is flashing at approximately
 | 
			
		||||
 * 2Hz, then a fatal error has been detected and the system has halted.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
/****************************************************************************
 | 
			
		||||
 * Included Files
 | 
			
		||||
 ****************************************************************************/
 | 
			
		||||
 | 
			
		||||
#include <nuttx/config.h>
 | 
			
		||||
 | 
			
		||||
#include <nuttx/board.h>
 | 
			
		||||
 | 
			
		||||
#include "imxrt_gpio.h"
 | 
			
		||||
#include "imxrt_iomuxc.h"
 | 
			
		||||
#include "xidatong.h"
 | 
			
		||||
 | 
			
		||||
#include <arch/board/board.h>
 | 
			
		||||
 | 
			
		||||
#ifdef CONFIG_ARCH_LEDS
 | 
			
		||||
 | 
			
		||||
/****************************************************************************
 | 
			
		||||
 * Public Functions
 | 
			
		||||
 ****************************************************************************/
 | 
			
		||||
 | 
			
		||||
/****************************************************************************
 | 
			
		||||
 * Name: imxrt_autoled_initialize
 | 
			
		||||
 *
 | 
			
		||||
 * Description:
 | 
			
		||||
 *   Initialize NuttX-controlled LED logic
 | 
			
		||||
 *
 | 
			
		||||
 * Input Parameters:
 | 
			
		||||
 *   None
 | 
			
		||||
 *
 | 
			
		||||
 * Returned Value:
 | 
			
		||||
 *   None
 | 
			
		||||
 *
 | 
			
		||||
 ****************************************************************************/
 | 
			
		||||
 | 
			
		||||
void imxrt_autoled_initialize(void)
 | 
			
		||||
{
 | 
			
		||||
  /* Configure LED GPIO for output */
 | 
			
		||||
 | 
			
		||||
  imxrt_config_gpio(GPIO_LED);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/****************************************************************************
 | 
			
		||||
 * Name: board_autoled_on
 | 
			
		||||
 *
 | 
			
		||||
 * Description:
 | 
			
		||||
 *   Turn on the "logical" LED state
 | 
			
		||||
 *
 | 
			
		||||
 * Input Parameters:
 | 
			
		||||
 *   led - Identifies the "logical" LED state (see definitions in
 | 
			
		||||
 *         include/board.h)
 | 
			
		||||
 *
 | 
			
		||||
 * Returned Value:
 | 
			
		||||
 *   None
 | 
			
		||||
 *
 | 
			
		||||
 ****************************************************************************/
 | 
			
		||||
 | 
			
		||||
void board_autoled_on(int led)
 | 
			
		||||
{
 | 
			
		||||
  bool ledoff = false;
 | 
			
		||||
 | 
			
		||||
  switch (led)
 | 
			
		||||
    {
 | 
			
		||||
      case 0:  /* LED Off */
 | 
			
		||||
        ledoff = true;
 | 
			
		||||
        break;
 | 
			
		||||
 | 
			
		||||
      case 2:  /* LED No change */
 | 
			
		||||
        return;
 | 
			
		||||
 | 
			
		||||
      case 1:  /* LED On */
 | 
			
		||||
      case 3:  /* LED On */
 | 
			
		||||
        break;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
  imxrt_gpio_write(GPIO_LED, ledoff); /* Low illuminates */
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/****************************************************************************
 | 
			
		||||
 * Name: board_autoled_off
 | 
			
		||||
 *
 | 
			
		||||
 * Description:
 | 
			
		||||
 *   Turn off the "logical" LED state
 | 
			
		||||
 *
 | 
			
		||||
 * Input Parameters:
 | 
			
		||||
 *   led - Identifies the "logical" LED state (see definitions in
 | 
			
		||||
 *         include/board.h)
 | 
			
		||||
 *
 | 
			
		||||
 * Returned Value:
 | 
			
		||||
 *   None
 | 
			
		||||
 *
 | 
			
		||||
 ****************************************************************************/
 | 
			
		||||
 | 
			
		||||
void board_autoled_off(int led)
 | 
			
		||||
{
 | 
			
		||||
  switch (led)
 | 
			
		||||
    {
 | 
			
		||||
      case 0:  /* LED Off */
 | 
			
		||||
      case 1:  /* LED Off */
 | 
			
		||||
      case 3:  /* LED Off */
 | 
			
		||||
        break;
 | 
			
		||||
 | 
			
		||||
      case 2:  /* LED No change */
 | 
			
		||||
        return;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
  imxrt_gpio_write(GPIO_LED, true); /* Low illuminates */
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#endif /* CONFIG_ARCH_LEDS */
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,86 @@
 | 
			
		|||
/****************************************************************************
 | 
			
		||||
 * boards/arm/imxrt/xidatong/src/imxrt_boot.c
 | 
			
		||||
 *
 | 
			
		||||
 * Licensed to the Apache Software Foundation (ASF) under one or more
 | 
			
		||||
 * contributor license agreements.  See the NOTICE file distributed with
 | 
			
		||||
 * this work for additional information regarding copyright ownership.  The
 | 
			
		||||
 * ASF licenses this file to you under the Apache License, Version 2.0 (the
 | 
			
		||||
 * "License"); you may not use this file except in compliance with the
 | 
			
		||||
 * License.  You may obtain a copy of the License at
 | 
			
		||||
 *
 | 
			
		||||
 *   http://www.apache.org/licenses/LICENSE-2.0
 | 
			
		||||
 *
 | 
			
		||||
 * Unless required by applicable law or agreed to in writing, software
 | 
			
		||||
 * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
 | 
			
		||||
 * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the
 | 
			
		||||
 * License for the specific language governing permissions and limitations
 | 
			
		||||
 * under the License.
 | 
			
		||||
 *
 | 
			
		||||
 ****************************************************************************/
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
* @file imxrt_boot.c
 | 
			
		||||
* @brief nuttx source code
 | 
			
		||||
*                https://github.com/apache/incubator-nuttx.git
 | 
			
		||||
* @version 10.2.0 
 | 
			
		||||
* @author AIIT XUOS Lab
 | 
			
		||||
* @date 2022-03-23
 | 
			
		||||
*/
 | 
			
		||||
 | 
			
		||||
/****************************************************************************
 | 
			
		||||
 * Included Files
 | 
			
		||||
 ****************************************************************************/
 | 
			
		||||
 | 
			
		||||
#include <nuttx/config.h>
 | 
			
		||||
 | 
			
		||||
#include <nuttx/board.h>
 | 
			
		||||
#include <arch/board/board.h>
 | 
			
		||||
 | 
			
		||||
#include "imxrt_start.h"
 | 
			
		||||
#include "xidatong.h"
 | 
			
		||||
 | 
			
		||||
/****************************************************************************
 | 
			
		||||
 * Public Functions
 | 
			
		||||
 ****************************************************************************/
 | 
			
		||||
 | 
			
		||||
/****************************************************************************
 | 
			
		||||
 * Name: imxrt_boardinitialize
 | 
			
		||||
 *
 | 
			
		||||
 * Description:
 | 
			
		||||
 *   All i.MX RT architectures must provide the following entry point.  This
 | 
			
		||||
 *   entry point is called early in the initialization -- after clocking and
 | 
			
		||||
 *   memory have been configured but before caches have been enabled and
 | 
			
		||||
 *   before any devices have been initialized.
 | 
			
		||||
 *
 | 
			
		||||
 ****************************************************************************/
 | 
			
		||||
 | 
			
		||||
void imxrt_boardinitialize(void)
 | 
			
		||||
{
 | 
			
		||||
  /* Configure on-board LEDs if LED support has been selected. */
 | 
			
		||||
 | 
			
		||||
#ifdef CONFIG_ARCH_LEDS
 | 
			
		||||
  imxrt_autoled_initialize();
 | 
			
		||||
#endif
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/****************************************************************************
 | 
			
		||||
 * Name: board_late_initialize
 | 
			
		||||
 *
 | 
			
		||||
 * Description:
 | 
			
		||||
 *   If CONFIG_BOARD_LATE_INITIALIZE is selected, then an additional
 | 
			
		||||
 *   initialization call will be performed in the boot-up sequence to a
 | 
			
		||||
 *   function called board_late_initialize(). board_late_initialize() will be
 | 
			
		||||
 *   called immediately after up_intitialize() is called and just before the
 | 
			
		||||
 *   initial application is started.  This additional initialization phase
 | 
			
		||||
 *   may be used, for example, to initialize board-specific device drivers.
 | 
			
		||||
 *
 | 
			
		||||
 ****************************************************************************/
 | 
			
		||||
 | 
			
		||||
#ifdef CONFIG_BOARD_LATE_INITIALIZE
 | 
			
		||||
void board_late_initialize(void)
 | 
			
		||||
{
 | 
			
		||||
  /* Perform board initialization */
 | 
			
		||||
 | 
			
		||||
  imxrt_bringup();
 | 
			
		||||
}
 | 
			
		||||
#endif /* CONFIG_BOARD_LATE_INITIALIZE */
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,199 @@
 | 
			
		|||
/****************************************************************************
 | 
			
		||||
 * boards/arm/imxrt/xidatong/src/imxrt_bringup.c
 | 
			
		||||
 *
 | 
			
		||||
 * Licensed to the Apache Software Foundation (ASF) under one or more
 | 
			
		||||
 * contributor license agreements.  See the NOTICE file distributed with
 | 
			
		||||
 * this work for additional information regarding copyright ownership.  The
 | 
			
		||||
 * ASF licenses this file to you under the Apache License, Version 2.0 (the
 | 
			
		||||
 * "License"); you may not use this file except in compliance with the
 | 
			
		||||
 * License.  You may obtain a copy of the License at
 | 
			
		||||
 *
 | 
			
		||||
 *   http://www.apache.org/licenses/LICENSE-2.0
 | 
			
		||||
 *
 | 
			
		||||
 * Unless required by applicable law or agreed to in writing, software
 | 
			
		||||
 * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
 | 
			
		||||
 * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the
 | 
			
		||||
 * License for the specific language governing permissions and limitations
 | 
			
		||||
 * under the License.
 | 
			
		||||
 *
 | 
			
		||||
 ****************************************************************************/
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
* @file imxrt_bringup.c
 | 
			
		||||
* @brief nuttx source code
 | 
			
		||||
*                https://github.com/apache/incubator-nuttx.git
 | 
			
		||||
* @version 10.2.0 
 | 
			
		||||
* @author AIIT XUOS Lab
 | 
			
		||||
* @date 2022-03-23
 | 
			
		||||
*/
 | 
			
		||||
 | 
			
		||||
/****************************************************************************
 | 
			
		||||
 * Included Files
 | 
			
		||||
 ****************************************************************************/
 | 
			
		||||
 | 
			
		||||
#include <nuttx/config.h>
 | 
			
		||||
 | 
			
		||||
#include <sys/types.h>
 | 
			
		||||
#include <debug.h>
 | 
			
		||||
 | 
			
		||||
#include <syslog.h>
 | 
			
		||||
#include <nuttx/fs/fs.h>
 | 
			
		||||
#include <nuttx/i2c/i2c_master.h>
 | 
			
		||||
#include <nuttx/video/fb.h>
 | 
			
		||||
#include <imxrt_lpi2c.h>
 | 
			
		||||
#include <imxrt_lpspi.h>
 | 
			
		||||
 | 
			
		||||
#ifdef CONFIG_IMXRT_USDHC
 | 
			
		||||
#  include "imxrt_usdhc.h"
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#include "xidatong.h"
 | 
			
		||||
 | 
			
		||||
#include <arch/board/board.h>  /* Must always be included last */
 | 
			
		||||
 | 
			
		||||
/****************************************************************************
 | 
			
		||||
 * Pre-processor Definitions
 | 
			
		||||
 ****************************************************************************/
 | 
			
		||||
 | 
			
		||||
/* Checking needed by MMC/SDCard */
 | 
			
		||||
 | 
			
		||||
#ifdef CONFIG_NSH_MMCSDMINOR
 | 
			
		||||
#  define MMCSD_MINOR CONFIG_NSH_MMCSDMINOR
 | 
			
		||||
#else
 | 
			
		||||
#  define MMCSD_MINOR 0
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
/****************************************************************************
 | 
			
		||||
 * Private Functions
 | 
			
		||||
 ****************************************************************************/
 | 
			
		||||
 | 
			
		||||
#if defined(CONFIG_I2C_DRIVER) && defined(CONFIG_IMXRT_LPI2C)
 | 
			
		||||
static void imxrt_i2c_register(int bus)
 | 
			
		||||
{
 | 
			
		||||
  FAR struct i2c_master_s *i2c;
 | 
			
		||||
  int ret;
 | 
			
		||||
 | 
			
		||||
  i2c = imxrt_i2cbus_initialize(bus);
 | 
			
		||||
  if (i2c == NULL)
 | 
			
		||||
    {
 | 
			
		||||
      serr("ERROR: Failed to get I2C%d interface\n", bus);
 | 
			
		||||
    }
 | 
			
		||||
  else
 | 
			
		||||
    {
 | 
			
		||||
      ret = i2c_register(i2c, bus);
 | 
			
		||||
      if (ret < 0)
 | 
			
		||||
        {
 | 
			
		||||
          serr("ERROR: Failed to register I2C%d driver: %d\n", bus, ret);
 | 
			
		||||
          imxrt_i2cbus_uninitialize(i2c);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#ifdef CONFIG_IMXRT_USDHC
 | 
			
		||||
static int nsh_sdmmc_initialize(void)
 | 
			
		||||
{
 | 
			
		||||
  struct sdio_dev_s *sdmmc;
 | 
			
		||||
  int ret = 0;
 | 
			
		||||
 | 
			
		||||
  /* Get an instance of the SDIO interface */
 | 
			
		||||
 | 
			
		||||
  sdmmc = imxrt_usdhc_initialize(0);
 | 
			
		||||
  if (!sdmmc)
 | 
			
		||||
    {
 | 
			
		||||
      syslog(LOG_ERR, "ERROR: Failed to initialize SD/MMC\n");
 | 
			
		||||
    }
 | 
			
		||||
  else
 | 
			
		||||
    {
 | 
			
		||||
      /* Bind the SDIO interface to the MMC/SD driver */
 | 
			
		||||
 | 
			
		||||
      ret = mmcsd_slotinitialize(0, sdmmc);
 | 
			
		||||
      if (ret != OK)
 | 
			
		||||
        {
 | 
			
		||||
          syslog(LOG_ERR,
 | 
			
		||||
                 "ERROR: Failed to bind SDIO to the MMC/SD driver: %d\n",
 | 
			
		||||
                 ret);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
  return OK;
 | 
			
		||||
}
 | 
			
		||||
#else
 | 
			
		||||
#  define nsh_sdmmc_initialize() (OK)
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
/****************************************************************************
 | 
			
		||||
 * Public Functions
 | 
			
		||||
 ****************************************************************************/
 | 
			
		||||
 | 
			
		||||
/****************************************************************************
 | 
			
		||||
 * Name: imxrt_bringup
 | 
			
		||||
 *
 | 
			
		||||
 * Description:
 | 
			
		||||
 *   Bring up board features
 | 
			
		||||
 *
 | 
			
		||||
 ****************************************************************************/
 | 
			
		||||
 | 
			
		||||
int imxrt_bringup(void)
 | 
			
		||||
{
 | 
			
		||||
  int ret;
 | 
			
		||||
 | 
			
		||||
  /* If we got here then perhaps not all initialization was successful, but
 | 
			
		||||
   * at least enough succeeded to bring-up NSH with perhaps reduced
 | 
			
		||||
   * capabilities.
 | 
			
		||||
   */
 | 
			
		||||
 | 
			
		||||
#ifdef CONFIG_FS_PROCFS
 | 
			
		||||
  /* Mount the procfs file system */
 | 
			
		||||
 | 
			
		||||
  ret = nx_mount(NULL, "/proc", "procfs", 0, NULL);
 | 
			
		||||
  if (ret < 0)
 | 
			
		||||
    {
 | 
			
		||||
      syslog(LOG_ERR, "ERROR: Failed to mount procfs at /proc: %d\n", ret);
 | 
			
		||||
    }
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#if defined(CONFIG_I2C_DRIVER) && defined(CONFIG_IMXRT_LPI2C1)
 | 
			
		||||
  imxrt_i2c_register(1);
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#ifdef CONFIG_IMXRT_USDHC
 | 
			
		||||
  /* Initialize SDHC-base MMC/SD card support */
 | 
			
		||||
 | 
			
		||||
  nsh_sdmmc_initialize();
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#ifdef CONFIG_MMCSD_SPI
 | 
			
		||||
  /* Initialize SPI-based MMC/SD card support */
 | 
			
		||||
 | 
			
		||||
  imxrt_spidev_initialize();
 | 
			
		||||
 | 
			
		||||
  ret = imxrt_mmcsd_spi_initialize(MMCSD_MINOR);
 | 
			
		||||
  if (ret < 0)
 | 
			
		||||
    {
 | 
			
		||||
      syslog(LOG_ERR, "ERROR: Failed to initialize SD slot %d: %d\n", ret);
 | 
			
		||||
    }
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#ifdef CONFIG_DEV_GPIO
 | 
			
		||||
  ret = imxrt_gpio_initialize();
 | 
			
		||||
  if (ret < 0)
 | 
			
		||||
    {
 | 
			
		||||
      syslog(LOG_ERR, "Failed to initialize GPIO Driver: %d\n", ret);
 | 
			
		||||
      return ret;
 | 
			
		||||
    }
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#ifdef CONFIG_VIDEO_FB
 | 
			
		||||
  /* Initialize and register the framebuffer driver */
 | 
			
		||||
 | 
			
		||||
  ret = fb_register(0, 0);
 | 
			
		||||
  if (ret < 0)
 | 
			
		||||
    {
 | 
			
		||||
      syslog(LOG_ERR, "ERROR: fb_register() failed: %d\n", ret);
 | 
			
		||||
    }
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
  UNUSED(ret);
 | 
			
		||||
  return OK;
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,138 @@
 | 
			
		|||
/****************************************************************************
 | 
			
		||||
 * boards/arm/imxrt/xidatong/src/imxrt_buttons.c
 | 
			
		||||
 *
 | 
			
		||||
 * Licensed to the Apache Software Foundation (ASF) under one or more
 | 
			
		||||
 * contributor license agreements.  See the NOTICE file distributed with
 | 
			
		||||
 * this work for additional information regarding copyright ownership.  The
 | 
			
		||||
 * ASF licenses this file to you under the Apache License, Version 2.0 (the
 | 
			
		||||
 * "License"); you may not use this file except in compliance with the
 | 
			
		||||
 * License.  You may obtain a copy of the License at
 | 
			
		||||
 *
 | 
			
		||||
 *   http://www.apache.org/licenses/LICENSE-2.0
 | 
			
		||||
 *
 | 
			
		||||
 * Unless required by applicable law or agreed to in writing, software
 | 
			
		||||
 * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
 | 
			
		||||
 * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the
 | 
			
		||||
 * License for the specific language governing permissions and limitations
 | 
			
		||||
 * under the License.
 | 
			
		||||
 *
 | 
			
		||||
 ****************************************************************************/
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
* @file imxrt_buttons.c
 | 
			
		||||
* @brief nuttx source code
 | 
			
		||||
*                https://github.com/apache/incubator-nuttx.git
 | 
			
		||||
* @version 10.2.0 
 | 
			
		||||
* @author AIIT XUOS Lab
 | 
			
		||||
* @date 2022-03-23
 | 
			
		||||
*/
 | 
			
		||||
 | 
			
		||||
/****************************************************************************
 | 
			
		||||
 * Included Files
 | 
			
		||||
 ****************************************************************************/
 | 
			
		||||
 | 
			
		||||
#include <nuttx/config.h>
 | 
			
		||||
 | 
			
		||||
#include <sys/types.h>
 | 
			
		||||
#include <errno.h>
 | 
			
		||||
 | 
			
		||||
#include <nuttx/arch.h>
 | 
			
		||||
#include <nuttx/irq.h>
 | 
			
		||||
#include <arch/board/board.h>
 | 
			
		||||
 | 
			
		||||
#include "arm_arch.h"
 | 
			
		||||
 | 
			
		||||
#include "imxrt_config.h"
 | 
			
		||||
#include "imxrt_irq.h"
 | 
			
		||||
#include "imxrt_gpio.h"
 | 
			
		||||
#include "xidatong.h"
 | 
			
		||||
 | 
			
		||||
#ifdef CONFIG_ARCH_BUTTONS
 | 
			
		||||
 | 
			
		||||
/****************************************************************************
 | 
			
		||||
 * Pre-processor Definitions
 | 
			
		||||
 ****************************************************************************/
 | 
			
		||||
 | 
			
		||||
/* The IMXRT has 1 user button (SW8)):
 | 
			
		||||
 *
 | 
			
		||||
 * 1. SW8 (IRQ88)   GPIO5-00
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
/****************************************************************************
 | 
			
		||||
 * Public Functions
 | 
			
		||||
 ****************************************************************************/
 | 
			
		||||
 | 
			
		||||
/****************************************************************************
 | 
			
		||||
 * Name: board_button_initialize
 | 
			
		||||
 *
 | 
			
		||||
 * Description:
 | 
			
		||||
 *   board_button_initialize() must be called to initialize button resources.
 | 
			
		||||
 *   After that, board_buttons() may be called to collect the current state
 | 
			
		||||
 *   of all buttons or board_button_irq() may be called to register button
 | 
			
		||||
 *   interrupt handlers.
 | 
			
		||||
 *
 | 
			
		||||
 ****************************************************************************/
 | 
			
		||||
 | 
			
		||||
uint32_t board_button_initialize(void)
 | 
			
		||||
{
 | 
			
		||||
  /* Configure the button as input */
 | 
			
		||||
 | 
			
		||||
  imxrt_config_gpio(GPIO_SW8);
 | 
			
		||||
  return 1;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/****************************************************************************
 | 
			
		||||
 * Name: board_buttons
 | 
			
		||||
 *
 | 
			
		||||
 * Description:
 | 
			
		||||
 *   After board_button_initialize() has been called, board_buttons() may be
 | 
			
		||||
 *   called to collect the state of all buttons.  board_buttons() returns an
 | 
			
		||||
 *   8-bit bit set with each bit associated with a button.  See the
 | 
			
		||||
 *   BUTTON_*_BIT  definitions in board.h for the meaning of each bit.
 | 
			
		||||
 *
 | 
			
		||||
 ****************************************************************************/
 | 
			
		||||
 | 
			
		||||
uint8_t board_buttons(void)
 | 
			
		||||
{
 | 
			
		||||
  uint8_t ret = 0;
 | 
			
		||||
 | 
			
		||||
  if (!imxrt_gpio_read(GPIO_SW8))
 | 
			
		||||
    {
 | 
			
		||||
      ret |= BUTTON_SW8_BIT;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
  return ret;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/****************************************************************************
 | 
			
		||||
 * Name: board_button_irq
 | 
			
		||||
 *
 | 
			
		||||
 * Description:
 | 
			
		||||
 *   board_button_irq() may be called to register an interrupt handler that
 | 
			
		||||
 *   will be called when a button is depressed or released.  The ID value is
 | 
			
		||||
 *   a button enumeration value that uniquely identifies a button resource.
 | 
			
		||||
 *   See the BUTTON_* definitions in board.h for the meaning of enumeration
 | 
			
		||||
 *   value.
 | 
			
		||||
 *
 | 
			
		||||
 ****************************************************************************/
 | 
			
		||||
 | 
			
		||||
#ifdef CONFIG_ARCH_IRQBUTTONS
 | 
			
		||||
int board_button_irq(int id, xcpt_t irqhandler)
 | 
			
		||||
{
 | 
			
		||||
  int ret = -EINVAL;
 | 
			
		||||
 | 
			
		||||
  /* The button has already been configured as an interrupting input (by
 | 
			
		||||
   * board_button_initialize() above).
 | 
			
		||||
   *
 | 
			
		||||
   * Attach the new button handler.
 | 
			
		||||
   */
 | 
			
		||||
 | 
			
		||||
  ret = irq_attach(id, irqhandler, NULL);
 | 
			
		||||
 | 
			
		||||
  /* Then make sure that interrupts are enabled on the pin */
 | 
			
		||||
 | 
			
		||||
  up_enable_irq(id);
 | 
			
		||||
  return ret;
 | 
			
		||||
}
 | 
			
		||||
#endif
 | 
			
		||||
#endif /* CONFIG_ARCH_BUTTONS */
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,293 @@
 | 
			
		|||
/****************************************************************************
 | 
			
		||||
 * boards/arm/imxrt/xidatong/src/imxrt_ethernet.c
 | 
			
		||||
 *
 | 
			
		||||
 * Licensed to the Apache Software Foundation (ASF) under one or more
 | 
			
		||||
 * contributor license agreements.  See the NOTICE file distributed with
 | 
			
		||||
 * this work for additional information regarding copyright ownership.  The
 | 
			
		||||
 * ASF licenses this file to you under the Apache License, Version 2.0 (the
 | 
			
		||||
 * "License"); you may not use this file except in compliance with the
 | 
			
		||||
 * License.  You may obtain a copy of the License at
 | 
			
		||||
 *
 | 
			
		||||
 *   http://www.apache.org/licenses/LICENSE-2.0
 | 
			
		||||
 *
 | 
			
		||||
 * Unless required by applicable law or agreed to in writing, software
 | 
			
		||||
 * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
 | 
			
		||||
 * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the
 | 
			
		||||
 * License for the specific language governing permissions and limitations
 | 
			
		||||
 * under the License.
 | 
			
		||||
 *
 | 
			
		||||
 ****************************************************************************/
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
* @file imxrt_ethernet.c
 | 
			
		||||
* @brief nuttx source code
 | 
			
		||||
*                https://github.com/apache/incubator-nuttx.git
 | 
			
		||||
* @version 10.2.0 
 | 
			
		||||
* @author AIIT XUOS Lab
 | 
			
		||||
* @date 2022-03-23
 | 
			
		||||
*/
 | 
			
		||||
 | 
			
		||||
/****************************************************************************
 | 
			
		||||
 * Included Files
 | 
			
		||||
 ****************************************************************************/
 | 
			
		||||
 | 
			
		||||
#include <nuttx/config.h>
 | 
			
		||||
 | 
			
		||||
/* Force verbose debug on in this file only to support unit-level testing. */
 | 
			
		||||
 | 
			
		||||
#ifdef CONFIG_NETDEV_PHY_DEBUG
 | 
			
		||||
#  undef  CONFIG_DEBUG_INFO
 | 
			
		||||
#  define CONFIG_DEBUG_INFO 1
 | 
			
		||||
#  undef  CONFIG_DEBUG_NET
 | 
			
		||||
#  define CONFIG_DEBUG_NET 1
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#include <string.h>
 | 
			
		||||
#include <assert.h>
 | 
			
		||||
#include <errno.h>
 | 
			
		||||
#include <debug.h>
 | 
			
		||||
 | 
			
		||||
#include <nuttx/irq.h>
 | 
			
		||||
#include <nuttx/arch.h>
 | 
			
		||||
#include <nuttx/spinlock.h>
 | 
			
		||||
 | 
			
		||||
#include "imxrt_gpio.h"
 | 
			
		||||
#include "imxrt_enet.h"
 | 
			
		||||
 | 
			
		||||
#include "xidatong.h"
 | 
			
		||||
 | 
			
		||||
#include <arch/board/board.h>
 | 
			
		||||
 | 
			
		||||
#ifdef CONFIG_IMXRT_ENET
 | 
			
		||||
 | 
			
		||||
/****************************************************************************
 | 
			
		||||
 * Pre-processor Definitions
 | 
			
		||||
 ****************************************************************************/
 | 
			
		||||
 | 
			
		||||
#define IMXRT_ENET_DEVNAME "eth0"
 | 
			
		||||
 | 
			
		||||
/* Debug ********************************************************************/
 | 
			
		||||
 | 
			
		||||
/* Extra, in-depth debug output that is only available if
 | 
			
		||||
 * CONFIG_NETDEV_PHY_DEBUG us defined.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#ifdef CONFIG_NETDEV_PHY_DEBUG
 | 
			
		||||
#  define phyerr    _err
 | 
			
		||||
#  define phywarn   _warn
 | 
			
		||||
#  define phyinfo   _info
 | 
			
		||||
#else
 | 
			
		||||
#  define phyerr(x...)
 | 
			
		||||
#  define phywarn(x...)
 | 
			
		||||
#  define phyinfo(x...)
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
/****************************************************************************
 | 
			
		||||
 * Private Functions
 | 
			
		||||
 ****************************************************************************/
 | 
			
		||||
 | 
			
		||||
/****************************************************************************
 | 
			
		||||
 * Name: imxrt_enet_phy_enable
 | 
			
		||||
 ****************************************************************************/
 | 
			
		||||
 | 
			
		||||
#ifdef CONFIG_IMXRT_GPIO1_0_15_IRQ
 | 
			
		||||
static void imxrt_enet_phy_enable(bool enable)
 | 
			
		||||
{
 | 
			
		||||
  phyinfo("IRQ%d: enable=%d\n", GPIO_ENET_INT, enable);
 | 
			
		||||
 | 
			
		||||
  if (enable)
 | 
			
		||||
    {
 | 
			
		||||
      up_enable_irq(GPIO_ENET_IRQ);
 | 
			
		||||
    }
 | 
			
		||||
  else
 | 
			
		||||
    {
 | 
			
		||||
      up_disable_irq(GPIO_ENET_IRQ);
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
/****************************************************************************
 | 
			
		||||
 * Public Functions
 | 
			
		||||
 ****************************************************************************/
 | 
			
		||||
 | 
			
		||||
/****************************************************************************
 | 
			
		||||
 * Function: imxrt_phy_boardinitialize
 | 
			
		||||
 *
 | 
			
		||||
 * Description:
 | 
			
		||||
 *  Some boards require specialized initialization of the PHY before it can
 | 
			
		||||
 *  be used.
 | 
			
		||||
 *  This may include such things as configuring GPIOs, resetting the PHY,
 | 
			
		||||
 *  etc.
 | 
			
		||||
 *  If CONFIG_IMXRT_ENET_PHYINIT is defined in the configuration then the
 | 
			
		||||
 *  board specific logic must provide imxrt_phyinitialize();
 | 
			
		||||
 *  The i.MX RT Ethernet driver will call this function one time before it
 | 
			
		||||
 *  first uses the PHY.
 | 
			
		||||
 *
 | 
			
		||||
 * Input Parameters:
 | 
			
		||||
 *  intf - Always zero for now.
 | 
			
		||||
 *
 | 
			
		||||
 * Returned Value:
 | 
			
		||||
 *  OK on success; Negated errno on failure.
 | 
			
		||||
 *
 | 
			
		||||
 ****************************************************************************/
 | 
			
		||||
 | 
			
		||||
int imxrt_phy_boardinitialize(int intf)
 | 
			
		||||
{
 | 
			
		||||
#ifdef CONFIG_IMXRT_GPIO1_0_15_IRQ
 | 
			
		||||
  /* Configure the PHY interrupt pin */
 | 
			
		||||
 | 
			
		||||
  phyinfo("Configuring interrupt: %08x\n", GPIO_ENET_INT);
 | 
			
		||||
  imxrt_config_gpio(GPIO_ENET_INT);
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
  /* Configure the PHY reset pin.
 | 
			
		||||
   *
 | 
			
		||||
   * The #RST uses inverted logic.  The initial value of zero will put the
 | 
			
		||||
   * PHY into the reset state.
 | 
			
		||||
   */
 | 
			
		||||
#ifdef GPIO_ENET_RST
 | 
			
		||||
  /* On the EVK the RST pin is combined with LED, so sometimes can't be
 | 
			
		||||
   * accessed. Only stress about it if we've got a definition.
 | 
			
		||||
   */
 | 
			
		||||
 | 
			
		||||
  phyinfo("Configuring reset: %08x\n", GPIO_ENET_RST);
 | 
			
		||||
  imxrt_config_gpio(GPIO_ENET_RST);
 | 
			
		||||
 | 
			
		||||
  /* Take the PHY out of reset. */
 | 
			
		||||
 | 
			
		||||
  imxrt_gpio_write(GPIO_ENET_RST, true);
 | 
			
		||||
#endif
 | 
			
		||||
  return OK;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/****************************************************************************
 | 
			
		||||
 * Name: arch_phy_irq
 | 
			
		||||
 *
 | 
			
		||||
 * Description:
 | 
			
		||||
 *   This function may be called to register an interrupt handler that will
 | 
			
		||||
 *   be called when a PHY interrupt occurs.  This function both attaches
 | 
			
		||||
 *   the interrupt handler and enables the interrupt if 'handler' is non-
 | 
			
		||||
 *   NULL.  If handler is NULL, then the interrupt is detached and disabled
 | 
			
		||||
 *   instead.
 | 
			
		||||
 *
 | 
			
		||||
 *   The PHY interrupt is always disabled upon return.  The caller must
 | 
			
		||||
 *   call back through the enable function point to control the state of
 | 
			
		||||
 *   the interrupt.
 | 
			
		||||
 *
 | 
			
		||||
 *   This interrupt may or may not be available on a given platform depending
 | 
			
		||||
 *   on how the network hardware architecture is implemented.  In a typical
 | 
			
		||||
 *   case, the PHY interrupt is provided to board-level logic as a GPIO
 | 
			
		||||
 *   interrupt (in which case this is a board-specific interface and really
 | 
			
		||||
 *   should be called board_phy_irq()); In other cases, the PHY interrupt
 | 
			
		||||
 *   may be cause by the chip's MAC logic (in which case arch_phy_irq()) is
 | 
			
		||||
 *   an appropriate name.  Other other boards, there may be no PHY interrupts
 | 
			
		||||
 *   available at all.  If client attachable PHY interrupts are available
 | 
			
		||||
 *   from the board or from the chip, then CONFIG_ARCH_PHY_INTERRUPT should
 | 
			
		||||
 *   be defined to indicate that fact.
 | 
			
		||||
 *
 | 
			
		||||
 *   Typical usage:
 | 
			
		||||
 *   a. OS service logic (not application logic*) attaches to the PHY
 | 
			
		||||
 *      PHY interrupt and enables the PHY interrupt.
 | 
			
		||||
 *   b. When the PHY interrupt occurs:  (1) the interrupt should be
 | 
			
		||||
 *      disabled and () work should be scheduled on the worker thread (or
 | 
			
		||||
 *      perhaps a dedicated application thread).
 | 
			
		||||
 *   c. That worker thread should use the SIOCGMIIPHY, SIOCGMIIREG,
 | 
			
		||||
 *      and SIOCSMIIREG ioctl calls** to communicate with the PHY,
 | 
			
		||||
 *      determine what network event took place (Link Up/Down?), and
 | 
			
		||||
 *      take the appropriate actions.
 | 
			
		||||
 *   d. It should then interact the PHY to clear any pending
 | 
			
		||||
 *      interrupts, then re-enable the PHY interrupt.
 | 
			
		||||
 *
 | 
			
		||||
 *    * This is an OS internal interface and should not be used from
 | 
			
		||||
 *      application space.  Rather applications should use the SIOCMIISIG
 | 
			
		||||
 *      ioctl to receive a signal when a PHY event occurs.
 | 
			
		||||
 *   ** This interrupt is really of no use if the Ethernet MAC driver
 | 
			
		||||
 *      does not support these ioctl calls.
 | 
			
		||||
 *
 | 
			
		||||
 * Input Parameters:
 | 
			
		||||
 *   intf    - Identifies the network interface.  For example "eth0".  Only
 | 
			
		||||
 *             useful on platforms that support multiple Ethernet interfaces
 | 
			
		||||
 *             and, hence, multiple PHYs and PHY interrupts.
 | 
			
		||||
 *   handler - The client interrupt handler to be invoked when the PHY
 | 
			
		||||
 *             asserts an interrupt.  Must reside in OS space, but can
 | 
			
		||||
 *             signal tasks in user space.  A value of NULL can be passed
 | 
			
		||||
 *             in order to detach and disable the PHY interrupt.
 | 
			
		||||
 *   arg     - The argument that will accompany the interrupt
 | 
			
		||||
 *   enable  - A function pointer that be unused to enable or disable the
 | 
			
		||||
 *             PHY interrupt.
 | 
			
		||||
 *
 | 
			
		||||
 * Returned Value:
 | 
			
		||||
 *   Zero (OK) returned on success; a negated errno value is returned on
 | 
			
		||||
 *   failure.
 | 
			
		||||
 *
 | 
			
		||||
 ****************************************************************************/
 | 
			
		||||
 | 
			
		||||
#ifdef CONFIG_IMXRT_GPIO1_0_15_IRQ
 | 
			
		||||
int arch_phy_irq(FAR const char *intf, xcpt_t handler, void *arg,
 | 
			
		||||
                 phy_enable_t *enable)
 | 
			
		||||
{
 | 
			
		||||
  irqstate_t flags;
 | 
			
		||||
  phy_enable_t enabler;
 | 
			
		||||
  int irq;
 | 
			
		||||
 | 
			
		||||
  DEBUGASSERT(intf);
 | 
			
		||||
 | 
			
		||||
  ninfo("%s: handler=%p\n", intf, handler);
 | 
			
		||||
  phyinfo("EMAC: devname=%s\n", IMXRT_ENET_DEVNAME);
 | 
			
		||||
 | 
			
		||||
  if (strcmp(intf, IMXRT_ENET_DEVNAME) == 0)
 | 
			
		||||
    {
 | 
			
		||||
      irq     = GPIO_ENET_IRQ;
 | 
			
		||||
      enabler = imxrt_enet_phy_enable;
 | 
			
		||||
    }
 | 
			
		||||
  else
 | 
			
		||||
    {
 | 
			
		||||
      nerr("ERROR: Unsupported interface: %s\n", intf);
 | 
			
		||||
      return -EINVAL;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
  /* Disable interrupts until we are done.  This guarantees that the
 | 
			
		||||
   * following operations are atomic.
 | 
			
		||||
   */
 | 
			
		||||
 | 
			
		||||
  flags = spin_lock_irqsave(NULL);
 | 
			
		||||
 | 
			
		||||
  /* Configure the interrupt */
 | 
			
		||||
 | 
			
		||||
  if (handler)
 | 
			
		||||
    {
 | 
			
		||||
      /* The interrupt pin has already been configured as an interrupting
 | 
			
		||||
       * input (by imxrt_phy_boardinitialize() above).
 | 
			
		||||
       *
 | 
			
		||||
       * Attach the new button handler.
 | 
			
		||||
       */
 | 
			
		||||
 | 
			
		||||
      phyinfo("Attach IRQ%d\n", irq);
 | 
			
		||||
      irq_attach(irq, handler, arg);
 | 
			
		||||
    }
 | 
			
		||||
  else
 | 
			
		||||
    {
 | 
			
		||||
      phyinfo("Detach IRQ%d\n", irq);
 | 
			
		||||
      irq_detach(irq);
 | 
			
		||||
      enabler = NULL;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
  /* Return with the interrupt disabled in either case */
 | 
			
		||||
 | 
			
		||||
  up_disable_irq(GPIO_ENET_IRQ);
 | 
			
		||||
 | 
			
		||||
  /* Return the enabling function pointer */
 | 
			
		||||
 | 
			
		||||
  if (enable)
 | 
			
		||||
    {
 | 
			
		||||
      *enable = enabler;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
  /* Return the old handler (so that it can be restored) */
 | 
			
		||||
 | 
			
		||||
  spin_unlock_irqrestore(NULL, flags);
 | 
			
		||||
  return OK;
 | 
			
		||||
}
 | 
			
		||||
#endif /* CONFIG_IMXRT_GPIO1_0_15_IRQ */
 | 
			
		||||
 | 
			
		||||
#endif /* CONFIG_IMXRT_ENET */
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,64 @@
 | 
			
		|||
/****************************************************************************
 | 
			
		||||
 * boards/arm/imxrt/xidatong/src/imxrt_flexspi_nor_boot.c
 | 
			
		||||
 *
 | 
			
		||||
 * Licensed to the Apache Software Foundation (ASF) under one or more
 | 
			
		||||
 * contributor license agreements.  See the NOTICE file distributed with
 | 
			
		||||
 * this work for additional information regarding copyright ownership.  The
 | 
			
		||||
 * ASF licenses this file to you under the Apache License, Version 2.0 (the
 | 
			
		||||
 * "License"); you may not use this file except in compliance with the
 | 
			
		||||
 * License.  You may obtain a copy of the License at
 | 
			
		||||
 *
 | 
			
		||||
 *   http://www.apache.org/licenses/LICENSE-2.0
 | 
			
		||||
 *
 | 
			
		||||
 * Unless required by applicable law or agreed to in writing, software
 | 
			
		||||
 * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
 | 
			
		||||
 * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the
 | 
			
		||||
 * License for the specific language governing permissions and limitations
 | 
			
		||||
 * under the License.
 | 
			
		||||
 *
 | 
			
		||||
 ****************************************************************************/
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
* @file imxrt_flexspi_nor_boot.c
 | 
			
		||||
* @brief nuttx source code
 | 
			
		||||
*                https://github.com/apache/incubator-nuttx.git
 | 
			
		||||
* @version 10.2.0 
 | 
			
		||||
* @author AIIT XUOS Lab
 | 
			
		||||
* @date 2022-03-23
 | 
			
		||||
*/
 | 
			
		||||
 | 
			
		||||
/****************************************************************************
 | 
			
		||||
 * Included Files
 | 
			
		||||
 ****************************************************************************/
 | 
			
		||||
 | 
			
		||||
#include "imxrt_flexspi_nor_boot.h"
 | 
			
		||||
 | 
			
		||||
/****************************************************************************
 | 
			
		||||
 * Public Data
 | 
			
		||||
 ****************************************************************************/
 | 
			
		||||
 | 
			
		||||
locate_data(".boot_hdr.ivt")
 | 
			
		||||
const struct ivt_s g_image_vector_table =
 | 
			
		||||
{
 | 
			
		||||
  IVT_HEADER,                         /* IVT Header */
 | 
			
		||||
  0x60002000,                         /* Image  Entry Function */
 | 
			
		||||
  IVT_RSVD,                           /* Reserved = 0 */
 | 
			
		||||
  (uint32_t)DCD_ADDRESS,              /* Address where DCD information is stored */
 | 
			
		||||
  (uint32_t)BOOT_DATA_ADDRESS,        /* Address where BOOT Data Structure is stored */
 | 
			
		||||
  (uint32_t)&g_image_vector_table,    /* Pointer to IVT Self (absolute address */
 | 
			
		||||
  (uint32_t)CSF_ADDRESS,              /* Address where CSF file is stored */
 | 
			
		||||
  IVT_RSVD                            /* Reserved = 0 */
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
locate_data(".boot_hdr.boot_data")
 | 
			
		||||
const struct boot_data_s g_boot_data =
 | 
			
		||||
{
 | 
			
		||||
  FLASH_BASE,                         /* boot start location */
 | 
			
		||||
  (FLASH_END - FLASH_BASE),           /* size */
 | 
			
		||||
  PLUGIN_FLAG,                        /* Plugin flag */
 | 
			
		||||
  0xffffffff                          /* empty - extra data word */
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
/****************************************************************************
 | 
			
		||||
 * Public Functions
 | 
			
		||||
 ****************************************************************************/
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,151 @@
 | 
			
		|||
/****************************************************************************
 | 
			
		||||
 * boards/arm/imxrt/xidatong/src/imxrt_flexspi_nor_boot.h
 | 
			
		||||
 *
 | 
			
		||||
 * Licensed to the Apache Software Foundation (ASF) under one or more
 | 
			
		||||
 * contributor license agreements.  See the NOTICE file distributed with
 | 
			
		||||
 * this work for additional information regarding copyright ownership.  The
 | 
			
		||||
 * ASF licenses this file to you under the Apache License, Version 2.0 (the
 | 
			
		||||
 * "License"); you may not use this file except in compliance with the
 | 
			
		||||
 * License.  You may obtain a copy of the License at
 | 
			
		||||
 *
 | 
			
		||||
 *   http://www.apache.org/licenses/LICENSE-2.0
 | 
			
		||||
 *
 | 
			
		||||
 * Unless required by applicable law or agreed to in writing, software
 | 
			
		||||
 * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
 | 
			
		||||
 * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the
 | 
			
		||||
 * License for the specific language governing permissions and limitations
 | 
			
		||||
 * under the License.
 | 
			
		||||
 *
 | 
			
		||||
 ****************************************************************************/
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
* @file imxrt_flexspi_nor_boot.h
 | 
			
		||||
* @brief nuttx source code
 | 
			
		||||
*                https://github.com/apache/incubator-nuttx.git
 | 
			
		||||
* @version 10.2.0 
 | 
			
		||||
* @author AIIT XUOS Lab
 | 
			
		||||
* @date 2022-03-23
 | 
			
		||||
*/
 | 
			
		||||
 | 
			
		||||
#ifndef __BOARDS_ARM_IMXRT_XIDATONG_SRC_IMXRT_FLEXSPI_NOR_BOOT_H
 | 
			
		||||
#define __BOARDS_ARM_IMXRT_XIDATONG_SRC_IMXRT_FLEXSPI_NOR_BOOT_H
 | 
			
		||||
 | 
			
		||||
/****************************************************************************
 | 
			
		||||
 * Included Files
 | 
			
		||||
 ****************************************************************************/
 | 
			
		||||
 | 
			
		||||
#include <stdint.h>
 | 
			
		||||
 | 
			
		||||
/****************************************************************************
 | 
			
		||||
 * Pre-processor Definitions
 | 
			
		||||
 ****************************************************************************/
 | 
			
		||||
 | 
			
		||||
/* IVT Data */
 | 
			
		||||
 | 
			
		||||
#define IVT_MAJOR_VERSION           0x4
 | 
			
		||||
#define IVT_MAJOR_VERSION_SHIFT     0x4
 | 
			
		||||
#define IVT_MAJOR_VERSION_MASK      0xf
 | 
			
		||||
#define IVT_MINOR_VERSION           0x1
 | 
			
		||||
#define IVT_MINOR_VERSION_SHIFT     0x0
 | 
			
		||||
#define IVT_MINOR_VERSION_MASK      0xf
 | 
			
		||||
 | 
			
		||||
#define IVT_VERSION(major, minor)   \
 | 
			
		||||
  ((((major) & IVT_MAJOR_VERSION_MASK) << IVT_MAJOR_VERSION_SHIFT) |  \
 | 
			
		||||
  (((minor) & IVT_MINOR_VERSION_MASK) << IVT_MINOR_VERSION_SHIFT))
 | 
			
		||||
 | 
			
		||||
#define IVT_TAG_HEADER              (0xd1)       /* Image Vector Table */
 | 
			
		||||
#define IVT_SIZE                    0x2000
 | 
			
		||||
#define IVT_PAR                     IVT_VERSION(IVT_MAJOR_VERSION, IVT_MINOR_VERSION)
 | 
			
		||||
 | 
			
		||||
#define IVT_HEADER                  (IVT_TAG_HEADER | (IVT_SIZE << 8) | (IVT_PAR << 24))
 | 
			
		||||
#define IVT_RSVD                    (uint32_t)(0x00000000)
 | 
			
		||||
 | 
			
		||||
/* DCD Data */
 | 
			
		||||
 | 
			
		||||
#define DCD_TAG_HEADER              (0xd2)
 | 
			
		||||
#define DCD_TAG_HEADER_SHIFT        (24)
 | 
			
		||||
#define DCD_VERSION                 (0x40)
 | 
			
		||||
#define DCD_ARRAY_SIZE              1
 | 
			
		||||
 | 
			
		||||
#define FLASH_BASE                  0x60000000
 | 
			
		||||
#define FLASH_END                   0x7f7fffff
 | 
			
		||||
#define SCLK 1
 | 
			
		||||
 | 
			
		||||
#ifdef CONFIG_XIDATONG_SDRAM
 | 
			
		||||
#  define DCD_ADDRESS               &g_dcd_data
 | 
			
		||||
#else
 | 
			
		||||
#  define DCD_ADDRESS               0
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#define BOOT_DATA_ADDRESS           &g_boot_data
 | 
			
		||||
#define CSF_ADDRESS                 0
 | 
			
		||||
#define PLUGIN_FLAG                 (uint32_t)0
 | 
			
		||||
 | 
			
		||||
/****************************************************************************
 | 
			
		||||
 * Public Types
 | 
			
		||||
 ****************************************************************************/
 | 
			
		||||
 | 
			
		||||
/* IVT Data */
 | 
			
		||||
 | 
			
		||||
struct ivt_s
 | 
			
		||||
{
 | 
			
		||||
  /* Header with tag #HAB_TAG_IVT, length and HAB version fields
 | 
			
		||||
   * (see data)
 | 
			
		||||
   */
 | 
			
		||||
 | 
			
		||||
  uint32_t hdr;
 | 
			
		||||
 | 
			
		||||
  /* Absolute address of the first instruction to execute from the
 | 
			
		||||
   * image
 | 
			
		||||
   */
 | 
			
		||||
 | 
			
		||||
  uint32_t entry;
 | 
			
		||||
 | 
			
		||||
  /* Reserved in this version of HAB: should be NULL. */
 | 
			
		||||
 | 
			
		||||
  uint32_t reserved1;
 | 
			
		||||
 | 
			
		||||
  /* Absolute address of the image DCD: may be NULL. */
 | 
			
		||||
 | 
			
		||||
  uint32_t dcd;
 | 
			
		||||
 | 
			
		||||
  /* Absolute address of the Boot Data: may be NULL, but not interpreted
 | 
			
		||||
   * any further by HAB
 | 
			
		||||
   */
 | 
			
		||||
 | 
			
		||||
  uint32_t boot_data;
 | 
			
		||||
 | 
			
		||||
  /* Absolute address of the IVT. */
 | 
			
		||||
 | 
			
		||||
  uint32_t self;
 | 
			
		||||
 | 
			
		||||
  /* Absolute address of the image CSF. */
 | 
			
		||||
 | 
			
		||||
  uint32_t csf;
 | 
			
		||||
 | 
			
		||||
  /* Reserved in this version of HAB: should be zero. */
 | 
			
		||||
 | 
			
		||||
  uint32_t reserved2;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
/* Boot Data */
 | 
			
		||||
 | 
			
		||||
struct boot_data_s
 | 
			
		||||
{
 | 
			
		||||
  uint32_t start;           /* boot start location */
 | 
			
		||||
  uint32_t size;            /* size */
 | 
			
		||||
  uint32_t plugin;          /* plugin flag - 1 if downloaded application is plugin */
 | 
			
		||||
  uint32_t placeholder;     /* placeholder to make even 0x10 size */
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
/****************************************************************************
 | 
			
		||||
 * Public Data
 | 
			
		||||
 ****************************************************************************/
 | 
			
		||||
 | 
			
		||||
extern const struct boot_data_s g_boot_data;
 | 
			
		||||
 | 
			
		||||
#ifdef CONFIG_XIDATONG_SDRAM
 | 
			
		||||
extern const uint8_t g_dcd_data[];
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#endif /* __BOARDS_ARM_IMXRT_XIDATONG_SRC_IMXRT_FLEXSPI_NOR_BOOT_H */
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,215 @@
 | 
			
		|||
/****************************************************************************
 | 
			
		||||
 * boards/arm/imxrt/xidatong/src/imxrt_flexspi_nor_flash.c
 | 
			
		||||
 *
 | 
			
		||||
 * Licensed to the Apache Software Foundation (ASF) under one or more
 | 
			
		||||
 * contributor license agreements.  See the NOTICE file distributed with
 | 
			
		||||
 * this work for additional information regarding copyright ownership.  The
 | 
			
		||||
 * ASF licenses this file to you under the Apache License, Version 2.0 (the
 | 
			
		||||
 * "License"); you may not use this file except in compliance with the
 | 
			
		||||
 * License.  You may obtain a copy of the License at
 | 
			
		||||
 *
 | 
			
		||||
 *   http://www.apache.org/licenses/LICENSE-2.0
 | 
			
		||||
 *
 | 
			
		||||
 * Unless required by applicable law or agreed to in writing, software
 | 
			
		||||
 * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
 | 
			
		||||
 * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the
 | 
			
		||||
 * License for the specific language governing permissions and limitations
 | 
			
		||||
 * under the License.
 | 
			
		||||
 *
 | 
			
		||||
 ****************************************************************************/
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
* @file imxrt_flexspi_nor_flash.c
 | 
			
		||||
* @brief nuttx source code
 | 
			
		||||
*                https://github.com/apache/incubator-nuttx.git
 | 
			
		||||
* @version 10.2.0 
 | 
			
		||||
* @author AIIT XUOS Lab
 | 
			
		||||
* @date 2022-03-23
 | 
			
		||||
*/
 | 
			
		||||
 | 
			
		||||
/****************************************************************************
 | 
			
		||||
 * Included Files
 | 
			
		||||
 ****************************************************************************/
 | 
			
		||||
 | 
			
		||||
#include "imxrt_flexspi_nor_flash.h"
 | 
			
		||||
 | 
			
		||||
/****************************************************************************
 | 
			
		||||
 * Public Data
 | 
			
		||||
 ****************************************************************************/
 | 
			
		||||
 | 
			
		||||
#if defined (CONFIG_XIDATONG_HYPER_FLASH)
 | 
			
		||||
locate_data(".boot_hdr.conf")
 | 
			
		||||
const struct flexspi_nor_config_s g_flash_config =
 | 
			
		||||
{
 | 
			
		||||
  .mem_config              =
 | 
			
		||||
  {
 | 
			
		||||
    .tag                   = FLEXSPI_CFG_BLK_TAG,
 | 
			
		||||
    .version               = FLEXSPI_CFG_BLK_VERSION,
 | 
			
		||||
    .read_sample_clksrc    = FLASH_READ_SAMPLE_CLK_EXT_INPUT_FROM_DQSPAD,
 | 
			
		||||
    .cs_hold_time          = 3u,
 | 
			
		||||
    .cs_setup_time         = 3u,
 | 
			
		||||
    .column_address_width  = 3u,
 | 
			
		||||
 | 
			
		||||
  /* Enable DDR mode, Word addassable,
 | 
			
		||||
   * Safe configuration, Differential clock
 | 
			
		||||
   */
 | 
			
		||||
 | 
			
		||||
    .controller_misc_option =
 | 
			
		||||
                      (1u << FLEXSPIMISC_OFFSET_DDR_MODE_EN) |
 | 
			
		||||
                      (1u << FLEXSPIMISC_OFFSET_WORD_ADDRESSABLE_EN) |
 | 
			
		||||
                      (1u << FLEXSPIMISC_OFFSET_SAFECONFIG_FREQ_EN) |
 | 
			
		||||
                      (1u << FLEXSPIMISC_OFFSET_DIFFCLKEN),
 | 
			
		||||
    .sflash_pad_type       = SERIAL_FLASH_8PADS,
 | 
			
		||||
    .serial_clk_freq       = FLEXSPI_SERIAL_CLKFREQ_133MHz,
 | 
			
		||||
    .sflash_a1size         = 64u * 1024u * 1024u,
 | 
			
		||||
    .data_valid_time       =
 | 
			
		||||
      {
 | 
			
		||||
        16u, 16u
 | 
			
		||||
      },
 | 
			
		||||
    .lookup_table          =
 | 
			
		||||
    {
 | 
			
		||||
      /* Read LUTs */
 | 
			
		||||
 | 
			
		||||
      FLEXSPI_LUT_SEQ(CMD_DDR,
 | 
			
		||||
                      FLEXSPI_8PAD, 0xa0, RADDR_DDR, FLEXSPI_8PAD, 0x18),
 | 
			
		||||
      FLEXSPI_LUT_SEQ(CADDR_DDR,
 | 
			
		||||
                      FLEXSPI_8PAD, 0x10, DUMMY_DDR, FLEXSPI_8PAD, 0x06),
 | 
			
		||||
      FLEXSPI_LUT_SEQ(READ_DDR,
 | 
			
		||||
                      FLEXSPI_8PAD, 0x04, STOP, FLEXSPI_1PAD, 0x0),
 | 
			
		||||
    },
 | 
			
		||||
  },
 | 
			
		||||
  .page_size                = 512u,
 | 
			
		||||
  .sector_size              = 256u * 1024u,
 | 
			
		||||
  .blocksize                = 256u * 1024u,
 | 
			
		||||
  .is_uniform_blocksize     = 1,
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
#elif defined (CONFIG_XIDATONG_QSPI_FLASH)
 | 
			
		||||
locate_data(".boot_hdr.conf")
 | 
			
		||||
const struct flexspi_nor_config_s g_flash_config =
 | 
			
		||||
{
 | 
			
		||||
  .mem_config =
 | 
			
		||||
  {
 | 
			
		||||
    .tag                    = FLEXSPI_CFG_BLK_TAG,
 | 
			
		||||
    .version                = FLEXSPI_CFG_BLK_VERSION,
 | 
			
		||||
    .read_sample_clksrc     = FLASH_READ_SAMPLE_CLK_LOOPBACK_FROM_SCKPAD,
 | 
			
		||||
    .cs_hold_time           = 3u,
 | 
			
		||||
    .cs_setup_time          = 3u,
 | 
			
		||||
    .column_address_width   = 0u,
 | 
			
		||||
    .device_type            = FLEXSPI_DEVICE_TYPE_SERIAL_NOR,
 | 
			
		||||
    .sflash_pad_type        = SERIAL_FLASH_4PADS,
 | 
			
		||||
    .serial_clk_freq        = FLEXSPI_SERIAL_CLKFREQ_60MHz,
 | 
			
		||||
    .sflash_a1size          = 8u * 1024u * 1024u,
 | 
			
		||||
    .data_valid_time        =
 | 
			
		||||
      {
 | 
			
		||||
        16u, 16u
 | 
			
		||||
      },
 | 
			
		||||
    .lookup_table           =
 | 
			
		||||
    {
 | 
			
		||||
      /* LUTs */
 | 
			
		||||
 | 
			
		||||
      /* 0 Fast read Quad IO DTR Mode Operation in SPI Mode (normal read) */
 | 
			
		||||
 | 
			
		||||
      FLEXSPI_LUT_SEQ(CMD_SDR,
 | 
			
		||||
                      FLEXSPI_1PAD, 0xed, RADDR_DDR, FLEXSPI_4PAD, 0x18),
 | 
			
		||||
      FLEXSPI_LUT_SEQ(DUMMY_DDR,
 | 
			
		||||
                      FLEXSPI_4PAD, 0x0c, READ_DDR, FLEXSPI_4PAD, 0x08),
 | 
			
		||||
      FLEXSPI_LUT_SEQ(STOP,
 | 
			
		||||
                      FLEXSPI_1PAD, 0x0, STOP, FLEXSPI_1PAD, 0x0),
 | 
			
		||||
      FLEXSPI_LUT_SEQ(STOP,
 | 
			
		||||
                      FLEXSPI_1PAD, 0x0, STOP, FLEXSPI_1PAD, 0x0),
 | 
			
		||||
 | 
			
		||||
      /* 1 Read Status */
 | 
			
		||||
 | 
			
		||||
      FLEXSPI_LUT_SEQ(CMD_SDR,
 | 
			
		||||
                      FLEXSPI_1PAD, 0x05, READ_SDR, FLEXSPI_1PAD, 0x1),
 | 
			
		||||
      FLEXSPI_LUT_SEQ(STOP, FLEXSPI_1PAD, 0x0, STOP, FLEXSPI_1PAD, 0x0),
 | 
			
		||||
      FLEXSPI_LUT_SEQ(STOP, FLEXSPI_1PAD, 0x0, STOP, FLEXSPI_1PAD, 0x0),
 | 
			
		||||
      FLEXSPI_LUT_SEQ(STOP, FLEXSPI_1PAD, 0x0, STOP, FLEXSPI_1PAD, 0x0),
 | 
			
		||||
 | 
			
		||||
      /* 2 */
 | 
			
		||||
 | 
			
		||||
      0x00000000,
 | 
			
		||||
      0x00000000,
 | 
			
		||||
      0x00000000,
 | 
			
		||||
      0x00000000,
 | 
			
		||||
 | 
			
		||||
      /* 3 */
 | 
			
		||||
 | 
			
		||||
      FLEXSPI_LUT_SEQ(CMD_SDR, FLEXSPI_1PAD, 0x06, STOP, FLEXSPI_1PAD, 0x0),
 | 
			
		||||
      FLEXSPI_LUT_SEQ(STOP, FLEXSPI_1PAD, 0x0, STOP, FLEXSPI_1PAD, 0x0),
 | 
			
		||||
      FLEXSPI_LUT_SEQ(STOP, FLEXSPI_1PAD, 0x0, STOP, FLEXSPI_1PAD, 0x0),
 | 
			
		||||
      FLEXSPI_LUT_SEQ(STOP, FLEXSPI_1PAD, 0x0, STOP, FLEXSPI_1PAD, 0x0),
 | 
			
		||||
 | 
			
		||||
      /* 4 */
 | 
			
		||||
 | 
			
		||||
      0x00000000,
 | 
			
		||||
      0x00000000,
 | 
			
		||||
      0x00000000,
 | 
			
		||||
      0x00000000,
 | 
			
		||||
 | 
			
		||||
      /* 5 Erase Sector */
 | 
			
		||||
 | 
			
		||||
      FLEXSPI_LUT_SEQ(CMD_SDR,
 | 
			
		||||
                      FLEXSPI_1PAD, 0xd7, RADDR_SDR, FLEXSPI_1PAD, 0x18),
 | 
			
		||||
      FLEXSPI_LUT_SEQ(STOP, FLEXSPI_1PAD, 0x0, STOP, FLEXSPI_1PAD, 0x0),
 | 
			
		||||
      FLEXSPI_LUT_SEQ(STOP, FLEXSPI_1PAD, 0x0, STOP, FLEXSPI_1PAD, 0x0),
 | 
			
		||||
      FLEXSPI_LUT_SEQ(STOP, FLEXSPI_1PAD, 0x0, STOP, FLEXSPI_1PAD, 0x0),
 | 
			
		||||
 | 
			
		||||
      /* 6 */
 | 
			
		||||
 | 
			
		||||
      0x00000000,
 | 
			
		||||
      0x00000000,
 | 
			
		||||
      0x00000000,
 | 
			
		||||
      0x00000000,
 | 
			
		||||
 | 
			
		||||
      /* 7 */
 | 
			
		||||
 | 
			
		||||
      0x00000000,
 | 
			
		||||
      0x00000000,
 | 
			
		||||
      0x00000000,
 | 
			
		||||
      0x00000000,
 | 
			
		||||
 | 
			
		||||
      /* 8 */
 | 
			
		||||
 | 
			
		||||
      0x00000000,
 | 
			
		||||
      0x00000000,
 | 
			
		||||
      0x00000000,
 | 
			
		||||
      0x00000000,
 | 
			
		||||
 | 
			
		||||
      /* 9 Page Program */
 | 
			
		||||
 | 
			
		||||
      FLEXSPI_LUT_SEQ(CMD_SDR,
 | 
			
		||||
                      FLEXSPI_1PAD, 0x02, RADDR_SDR, FLEXSPI_1PAD, 0x18),
 | 
			
		||||
      FLEXSPI_LUT_SEQ(WRITE_SDR, FLEXSPI_1PAD, 0x8, STOP, FLEXSPI_1PAD, 0x0),
 | 
			
		||||
      FLEXSPI_LUT_SEQ(STOP, FLEXSPI_1PAD, 0x0, STOP, FLEXSPI_1PAD, 0x0),
 | 
			
		||||
      FLEXSPI_LUT_SEQ(STOP, FLEXSPI_1PAD, 0x0, STOP, FLEXSPI_1PAD, 0x0),
 | 
			
		||||
 | 
			
		||||
      /* 10 */
 | 
			
		||||
 | 
			
		||||
      0x00000000,
 | 
			
		||||
      0x00000000,
 | 
			
		||||
      0x00000000,
 | 
			
		||||
      0x00000000,
 | 
			
		||||
 | 
			
		||||
      /* 11 Chip Erase */
 | 
			
		||||
 | 
			
		||||
      FLEXSPI_LUT_SEQ(CMD_SDR, FLEXSPI_1PAD, 0xc7, STOP, FLEXSPI_1PAD, 0x0),
 | 
			
		||||
      FLEXSPI_LUT_SEQ(STOP, FLEXSPI_1PAD, 0x0, STOP, FLEXSPI_1PAD, 0x0),
 | 
			
		||||
      FLEXSPI_LUT_SEQ(STOP, FLEXSPI_1PAD, 0x0, STOP, FLEXSPI_1PAD, 0x0),
 | 
			
		||||
      FLEXSPI_LUT_SEQ(STOP, FLEXSPI_1PAD, 0x0, STOP, FLEXSPI_1PAD, 0x0),
 | 
			
		||||
    },
 | 
			
		||||
  },
 | 
			
		||||
 | 
			
		||||
  .page_size                = 256u,
 | 
			
		||||
  .sector_size              = 4u * 1024u,
 | 
			
		||||
  .blocksize                = 32u * 1024u,
 | 
			
		||||
  .is_uniform_blocksize     = false,
 | 
			
		||||
};
 | 
			
		||||
#else
 | 
			
		||||
# error Boot Flash type not chosen!
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
/****************************************************************************
 | 
			
		||||
 * Public Functions
 | 
			
		||||
 ****************************************************************************/
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,359 @@
 | 
			
		|||
/****************************************************************************
 | 
			
		||||
 * boards/arm/imxrt/xidatong/src/imxrt_flexspi_nor_flash.h
 | 
			
		||||
 *
 | 
			
		||||
 * Licensed to the Apache Software Foundation (ASF) under one or more
 | 
			
		||||
 * contributor license agreements.  See the NOTICE file distributed with
 | 
			
		||||
 * this work for additional information regarding copyright ownership.  The
 | 
			
		||||
 * ASF licenses this file to you under the Apache License, Version 2.0 (the
 | 
			
		||||
 * "License"); you may not use this file except in compliance with the
 | 
			
		||||
 * License.  You may obtain a copy of the License at
 | 
			
		||||
 *
 | 
			
		||||
 *   http://www.apache.org/licenses/LICENSE-2.0
 | 
			
		||||
 *
 | 
			
		||||
 * Unless required by applicable law or agreed to in writing, software
 | 
			
		||||
 * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
 | 
			
		||||
 * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the
 | 
			
		||||
 * License for the specific language governing permissions and limitations
 | 
			
		||||
 * under the License.
 | 
			
		||||
 *
 | 
			
		||||
 ****************************************************************************/
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
* @file imxrt_flexspi_nor_flash.h
 | 
			
		||||
* @brief nuttx source code
 | 
			
		||||
*                https://github.com/apache/incubator-nuttx.git
 | 
			
		||||
* @version 10.2.0 
 | 
			
		||||
* @author AIIT XUOS Lab
 | 
			
		||||
* @date 2022-03-23
 | 
			
		||||
*/
 | 
			
		||||
 | 
			
		||||
#ifndef __BOARDS_ARM_IMXRT_XIDATONG_SRC_IMXRT_FLEXSPI_NOR_FLASH_H
 | 
			
		||||
#define __BOARDS_ARM_IMXRT_XIDATONG_SRC_IMXRT_FLEXSPI_NOR_FLASH_H
 | 
			
		||||
 | 
			
		||||
/****************************************************************************
 | 
			
		||||
 * Included Files
 | 
			
		||||
 ****************************************************************************/
 | 
			
		||||
 | 
			
		||||
#include <stdint.h>
 | 
			
		||||
#include <stdbool.h>
 | 
			
		||||
 | 
			
		||||
/****************************************************************************
 | 
			
		||||
 * Pre-processor Definitions
 | 
			
		||||
 ****************************************************************************/
 | 
			
		||||
 | 
			
		||||
/* FLEXSPI memory config block related definitions */
 | 
			
		||||
 | 
			
		||||
#define FLEXSPI_CFG_BLK_TAG         (0x42464346ul)
 | 
			
		||||
#define FLEXSPI_CFG_BLK_VERSION     (0x56010400ul)
 | 
			
		||||
#define FLEXSPI_CFG_BLK_SIZE        (512)
 | 
			
		||||
 | 
			
		||||
/* FLEXSPI Feature related definitions */
 | 
			
		||||
 | 
			
		||||
#define FLEXSPI_FEATURE_HAS_PARALLEL_MODE 1
 | 
			
		||||
 | 
			
		||||
/* Lookup table related definitions */
 | 
			
		||||
 | 
			
		||||
#define CMD_INDEX_READ              0
 | 
			
		||||
#define CMD_INDEX_READSTATUS        1
 | 
			
		||||
#define CMD_INDEX_WRITEENABLE       2
 | 
			
		||||
#define CMD_INDEX_WRITE             4
 | 
			
		||||
 | 
			
		||||
#define CMD_LUT_SEQ_IDX_READ        0
 | 
			
		||||
#define CMD_LUT_SEQ_IDX_READSTATUS  1
 | 
			
		||||
#define CMD_LUT_SEQ_IDX_WRITEENABLE 3
 | 
			
		||||
#define CMD_LUT_SEQ_IDX_WRITE       9
 | 
			
		||||
 | 
			
		||||
#define CMD_SDR                     0x01
 | 
			
		||||
#define CMD_DDR                     0x21
 | 
			
		||||
#define RADDR_SDR                   0x02
 | 
			
		||||
#define RADDR_DDR                   0x22
 | 
			
		||||
#define CADDR_SDR                   0x03
 | 
			
		||||
#define CADDR_DDR                   0x23
 | 
			
		||||
#define MODE1_SDR                   0x04
 | 
			
		||||
#define MODE1_DDR                   0x24
 | 
			
		||||
#define MODE2_SDR                   0x05
 | 
			
		||||
#define MODE2_DDR                   0x25
 | 
			
		||||
#define MODE4_SDR                   0x06
 | 
			
		||||
#define MODE4_DDR                   0x26
 | 
			
		||||
#define MODE8_SDR                   0x07
 | 
			
		||||
#define MODE8_DDR                   0x27
 | 
			
		||||
#define WRITE_SDR                   0x08
 | 
			
		||||
#define WRITE_DDR                   0x28
 | 
			
		||||
#define READ_SDR                    0x09
 | 
			
		||||
#define READ_DDR                    0x29
 | 
			
		||||
#define LEARN_SDR                   0x0a
 | 
			
		||||
#define LEARN_DDR                   0x2a
 | 
			
		||||
#define DATSZ_SDR                   0x0b
 | 
			
		||||
#define DATSZ_DDR                   0x2b
 | 
			
		||||
#define DUMMY_SDR                   0x0c
 | 
			
		||||
#define DUMMY_DDR                   0x2c
 | 
			
		||||
#define DUMMY_RWDS_SDR              0x0d
 | 
			
		||||
#define DUMMY_RWDS_DDR              0x2d
 | 
			
		||||
#define JMP_ON_CS                   0x1f
 | 
			
		||||
#define STOP                        0
 | 
			
		||||
 | 
			
		||||
#define FLEXSPI_1PAD                0
 | 
			
		||||
#define FLEXSPI_2PAD                1
 | 
			
		||||
#define FLEXSPI_4PAD                2
 | 
			
		||||
#define FLEXSPI_8PAD                3
 | 
			
		||||
 | 
			
		||||
#define FLEXSPI_LUT_OPERAND0_MASK   (0xffu)
 | 
			
		||||
#define FLEXSPI_LUT_OPERAND0_SHIFT  (0U)
 | 
			
		||||
#define FLEXSPI_LUT_OPERAND0(x)     (((uint32_t) \
 | 
			
		||||
                                     (((uint32_t)(x)) << FLEXSPI_LUT_OPERAND0_SHIFT)) & \
 | 
			
		||||
                                     FLEXSPI_LUT_OPERAND0_MASK)
 | 
			
		||||
#define FLEXSPI_LUT_NUM_PADS0_MASK  (0x300u)
 | 
			
		||||
#define FLEXSPI_LUT_NUM_PADS0_SHIFT (8u)
 | 
			
		||||
#define FLEXSPI_LUT_NUM_PADS0(x)    (((uint32_t) \
 | 
			
		||||
                                     (((uint32_t)(x)) << FLEXSPI_LUT_NUM_PADS0_SHIFT)) & \
 | 
			
		||||
                                     FLEXSPI_LUT_NUM_PADS0_MASK)
 | 
			
		||||
#define FLEXSPI_LUT_OPCODE0_MASK    (0xfc00u)
 | 
			
		||||
#define FLEXSPI_LUT_OPCODE0_SHIFT   (10u)
 | 
			
		||||
#define FLEXSPI_LUT_OPCODE0(x)      (((uint32_t) \
 | 
			
		||||
                                     (((uint32_t)(x)) << FLEXSPI_LUT_OPCODE0_SHIFT)) & \
 | 
			
		||||
                                     FLEXSPI_LUT_OPCODE0_MASK)
 | 
			
		||||
#define FLEXSPI_LUT_OPERAND1_MASK   (0xff0000u)
 | 
			
		||||
#define FLEXSPI_LUT_OPERAND1_SHIFT  (16U)
 | 
			
		||||
#define FLEXSPI_LUT_OPERAND1(x)     (((uint32_t) \
 | 
			
		||||
                                     (((uint32_t)(x)) << FLEXSPI_LUT_OPERAND1_SHIFT)) & \
 | 
			
		||||
                                     FLEXSPI_LUT_OPERAND1_MASK)
 | 
			
		||||
#define FLEXSPI_LUT_NUM_PADS1_MASK  (0x3000000u)
 | 
			
		||||
#define FLEXSPI_LUT_NUM_PADS1_SHIFT (24u)
 | 
			
		||||
#define FLEXSPI_LUT_NUM_PADS1(x)    (((uint32_t) \
 | 
			
		||||
                                     (((uint32_t)(x)) << FLEXSPI_LUT_NUM_PADS1_SHIFT)) & \
 | 
			
		||||
                                     FLEXSPI_LUT_NUM_PADS1_MASK)
 | 
			
		||||
#define FLEXSPI_LUT_OPCODE1_MASK    (0xfc000000u)
 | 
			
		||||
#define FLEXSPI_LUT_OPCODE1_SHIFT   (26u)
 | 
			
		||||
#define FLEXSPI_LUT_OPCODE1(x)      (((uint32_t)(((uint32_t)(x)) << FLEXSPI_LUT_OPCODE1_SHIFT)) & \
 | 
			
		||||
                                    FLEXSPI_LUT_OPCODE1_MASK)
 | 
			
		||||
 | 
			
		||||
#define FLEXSPI_LUT_SEQ(cmd0, pad0, op0, cmd1, pad1, op1)  \
 | 
			
		||||
    (FLEXSPI_LUT_OPERAND0(op0) | FLEXSPI_LUT_NUM_PADS0(pad0) | \
 | 
			
		||||
     FLEXSPI_LUT_OPCODE0(cmd0) | FLEXSPI_LUT_OPERAND1(op1) | \
 | 
			
		||||
     FLEXSPI_LUT_NUM_PADS1(pad1) | FLEXSPI_LUT_OPCODE1(cmd1))
 | 
			
		||||
 | 
			
		||||
#define NOR_CMD_INDEX_READ          CMD_INDEX_READ
 | 
			
		||||
#define NOR_CMD_INDEX_READSTATUS    CMD_INDEX_READSTATUS
 | 
			
		||||
#define NOR_CMD_INDEX_WRITEENABLE   CMD_INDEX_WRITEENABLE
 | 
			
		||||
#define NOR_CMD_INDEX_ERASESECTOR   3
 | 
			
		||||
#define NOR_CMD_INDEX_PAGEPROGRAM   CMD_INDEX_WRITE
 | 
			
		||||
#define NOR_CMD_INDEX_CHIPERASE     5
 | 
			
		||||
#define NOR_CMD_INDEX_DUMMY         6
 | 
			
		||||
#define NOR_CMD_INDEX_ERASEBLOCK    7
 | 
			
		||||
 | 
			
		||||
/*  READ LUT sequence id in lookupTable stored in config block */
 | 
			
		||||
 | 
			
		||||
#define NOR_CMD_LUT_SEQ_IDX_READ    CMD_LUT_SEQ_IDX_READ
 | 
			
		||||
 | 
			
		||||
/* Read Status LUT sequence id in lookupTable stored in config block */
 | 
			
		||||
 | 
			
		||||
#define NOR_CMD_LUT_SEQ_IDX_READSTATUS CMD_LUT_SEQ_IDX_READSTATUS
 | 
			
		||||
 | 
			
		||||
/* 2  Read status DPI/QPI/OPI sequence id in lookupTable stored in config
 | 
			
		||||
 * block
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#define NOR_CMD_LUT_SEQ_IDX_READSTATUS_XPI 2
 | 
			
		||||
 | 
			
		||||
/* 3  Write Enable sequence id in lookupTable stored in config block */
 | 
			
		||||
 | 
			
		||||
#define NOR_CMD_LUT_SEQ_IDX_WRITEENABLE CMD_LUT_SEQ_IDX_WRITEENABLE
 | 
			
		||||
 | 
			
		||||
/* 4  Write Enable DPI/QPI/OPI sequence id in lookupTable stored in config
 | 
			
		||||
 * block
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#define NOR_CMD_LUT_SEQ_IDX_WRITEENABLE_XPI 4
 | 
			
		||||
 | 
			
		||||
/* 5  Erase Sector sequence id in lookupTable stored in config block */
 | 
			
		||||
 | 
			
		||||
#define NOR_CMD_LUT_SEQ_IDX_ERASESECTOR 5
 | 
			
		||||
 | 
			
		||||
/* 8 Erase Block sequence id in lookupTable stored in config block */
 | 
			
		||||
 | 
			
		||||
#define NOR_CMD_LUT_SEQ_IDX_ERASEBLOCK 8
 | 
			
		||||
 | 
			
		||||
/* 9  Program sequence id in lookupTable stored in config block */
 | 
			
		||||
 | 
			
		||||
#define NOR_CMD_LUT_SEQ_IDX_PAGEPROGRAM CMD_LUT_SEQ_IDX_WRITE
 | 
			
		||||
 | 
			
		||||
/* 11 Chip Erase sequence in lookupTable id stored in config block */
 | 
			
		||||
 | 
			
		||||
#define NOR_CMD_LUT_SEQ_IDX_CHIPERASE 11
 | 
			
		||||
 | 
			
		||||
/* 13 Read SFDP sequence in lookupTable id stored in config block */
 | 
			
		||||
 | 
			
		||||
#define NOR_CMD_LUT_SEQ_IDX_READ_SFDP 13
 | 
			
		||||
 | 
			
		||||
/* 14 Restore 0-4-4/0-8-8 mode sequence id in lookupTable stored in config
 | 
			
		||||
 * block
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#define NOR_CMD_LUT_SEQ_IDX_RESTORE_NOCMD 14
 | 
			
		||||
 | 
			
		||||
/* 15 Exit 0-4-4/0-8-8 mode sequence id in lookupTable stored in config
 | 
			
		||||
 * blobk
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#define NOR_CMD_LUT_SEQ_IDX_EXIT_NOCMD 15
 | 
			
		||||
 | 
			
		||||
/****************************************************************************
 | 
			
		||||
 * Public Types
 | 
			
		||||
 ****************************************************************************/
 | 
			
		||||
 | 
			
		||||
/* Definitions for FlexSPI Serial Clock Frequency */
 | 
			
		||||
 | 
			
		||||
enum flexspi_serial_clkfreq_e
 | 
			
		||||
{
 | 
			
		||||
  FLEXSPI_SERIAL_CLKFREQ_30MHz  = 1,
 | 
			
		||||
  FLEXSPI_SERIAL_CLKFREQ_50MHz  = 2,
 | 
			
		||||
  FLEXSPI_SERIAL_CLKFREQ_60MHz  = 3,
 | 
			
		||||
  FLEXSPI_SERIAL_CLKFREQ_75MHz  = 4,
 | 
			
		||||
  FLEXSPI_SERIAL_CLKFREQ_80MHz  = 5,
 | 
			
		||||
  FLEXSPI_SERIAL_CLKFREQ_100MHz = 6,
 | 
			
		||||
  FLEXSPI_SERIAL_CLKFREQ_133MHz = 7,
 | 
			
		||||
  FLEXSPI_SERIAL_CLKFREQ_166MHz = 8,
 | 
			
		||||
  FLEXSPI_SERIAL_CLKFREQ_200MHz = 9,
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
/* FlexSPI clock configuration type */
 | 
			
		||||
 | 
			
		||||
enum flexspi_serial_clockmode_e
 | 
			
		||||
{
 | 
			
		||||
  FLEXSPI_CLKMODE_SDR,
 | 
			
		||||
  FLEXSPI_CLKMODE_DDR,
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
/* FlexSPI Read Sample Clock Source definition */
 | 
			
		||||
 | 
			
		||||
enum flash_read_sample_clk_e
 | 
			
		||||
{
 | 
			
		||||
  FLASH_READ_SAMPLE_CLK_LOOPBACK_INTERNELLY = 0,
 | 
			
		||||
  FLASH_READ_SAMPLE_CLK_LOOPBACK_FROM_DQSPAD = 1,
 | 
			
		||||
  FLASH_READ_SAMPLE_CLK_LOOPBACK_FROM_SCKPAD = 2,
 | 
			
		||||
  FLASH_READ_SAMPLE_CLK_EXT_INPUT_FROM_DQSPAD = 3,
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
/*  Misc feature bit definitions */
 | 
			
		||||
 | 
			
		||||
enum flash_misc_feature_e
 | 
			
		||||
{
 | 
			
		||||
  FLEXSPIMISC_OFFSET_DIFFCLKEN = 0,                /* Bit for Differential clock enable */
 | 
			
		||||
  FLEXSPIMISC_OFFSET_CK2EN = 1,                    /* Bit for CK2 enable */
 | 
			
		||||
  FLEXSPIMISC_OFFSET_PARALLELEN = 2,               /* Bit for Parallel mode enable */
 | 
			
		||||
  FLEXSPIMISC_OFFSET_WORD_ADDRESSABLE_EN = 3,      /* Bit for Word Addressable enable */
 | 
			
		||||
  FLEXSPIMISC_OFFSET_SAFECONFIG_FREQ_EN = 4,       /* Bit for Safe Configuration Frequency enable */
 | 
			
		||||
  FLEXSPIMISC_OFFSET_PAD_SETTING_OVERRIDE_EN = 5,  /* Bit for Pad setting override enable */
 | 
			
		||||
  FLEXSPIMISC_OFFSET_DDR_MODE_EN = 6,              /* Bit for DDR clock confiuration indication. */
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
/* Flash Type Definition */
 | 
			
		||||
 | 
			
		||||
enum flash_flash_type_e
 | 
			
		||||
{
 | 
			
		||||
  FLEXSPI_DEVICE_TYPE_SERIAL_NOR = 1,              /* Flash devices are Serial NOR */
 | 
			
		||||
  FLEXSPI_DEVICE_TYPE_SERIAL_NAND = 2,             /* Flash devices are Serial NAND */
 | 
			
		||||
  FLEXSPI_DEVICE_TYPE_SERIAL_RAM = 3,              /* Flash devices are Serial RAM/HyperFLASH */
 | 
			
		||||
  FLEXSPI_DEVICE_TYPE_MCP_NOR_NAND = 0x12,         /* Flash device is MCP device, A1 is Serial NOR, A2 is Serial NAND */
 | 
			
		||||
  FLEXSPI_DEVICE_TYPE_MCP_NOR_RAM = 0x13,          /* Flash device is MCP device, A1 is Serial NOR, A2 is Serial RAMs */
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
/* Flash Pad Definitions */
 | 
			
		||||
 | 
			
		||||
enum flash_flash_pad_e
 | 
			
		||||
{
 | 
			
		||||
  SERIAL_FLASH_1PAD  = 1,
 | 
			
		||||
  SERIAL_FLASH_2PADS = 2,
 | 
			
		||||
  SERIAL_FLASH_4PADS = 4,
 | 
			
		||||
  SERIAL_FLASH_8PADS = 8,
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
/* Flash Configuration Command Type */
 | 
			
		||||
 | 
			
		||||
enum flash_config_cmd_e
 | 
			
		||||
{
 | 
			
		||||
  DEVICE_CONFIG_CMD_TYPE_GENERIC,     /* Generic command, for example: configure dummy cycles, drive strength, etc */
 | 
			
		||||
  DEVICE_CONFIG_CMD_TYPE_QUADENABLE,  /* Quad Enable command */
 | 
			
		||||
  DEVICE_CONFIG_CMD_TYPE_SPI2XPI,     /* Switch from SPI to DPI/QPI/OPI mode */
 | 
			
		||||
  DEVICE_CONFIG_CMD_TYPE_XPI2SPI,     /* Switch from DPI/QPI/OPI to SPI mode */
 | 
			
		||||
  DEVICE_CONFIG_CMD_TYPE_SPI2NO_CMD,  /* Switch to 0-4-4/0-8-8 mode */
 | 
			
		||||
  DEVICE_CONFIG_CMD_TYPE_RESET,       /* Reset device command */
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
/* FlexSPI LUT Sequence structure */
 | 
			
		||||
 | 
			
		||||
struct flexspi_lut_seq_s
 | 
			
		||||
{
 | 
			
		||||
  uint8_t seq_num;                    /* Sequence Number, valid number: 1-16 */
 | 
			
		||||
  uint8_t seq_id;                     /* Sequence Index, valid number: 0-15 */
 | 
			
		||||
  uint16_t reserved;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
/* FlexSPI Memory Configuration Block */
 | 
			
		||||
 | 
			
		||||
struct flexspi_mem_config_s
 | 
			
		||||
{
 | 
			
		||||
  uint32_t tag;
 | 
			
		||||
  uint32_t version;
 | 
			
		||||
  uint32_t reserved0;
 | 
			
		||||
  uint8_t read_sample_clksrc;
 | 
			
		||||
  uint8_t cs_hold_time;
 | 
			
		||||
  uint8_t cs_setup_time;
 | 
			
		||||
  uint8_t column_address_width;       /* [0x00f-0x00f] Column Address with, for
 | 
			
		||||
                                       * HyperBus protocol, it is fixed to 3, For
 | 
			
		||||
                                       * Serial NAND, need to refer to datasheet
 | 
			
		||||
                                       */
 | 
			
		||||
  uint8_t device_mode_cfg_enable;
 | 
			
		||||
  uint8_t device_mode_type;
 | 
			
		||||
  uint16_t wait_time_cfg_commands;
 | 
			
		||||
  struct flexspi_lut_seq_s device_mode_seq;
 | 
			
		||||
  uint32_t device_mode_arg;
 | 
			
		||||
  uint8_t config_cmd_enable;
 | 
			
		||||
  uint8_t config_mode_type[3];
 | 
			
		||||
  struct flexspi_lut_seq_s config_cmd_seqs[3];
 | 
			
		||||
  uint32_t reserved1;
 | 
			
		||||
  uint32_t config_cmd_args[3];
 | 
			
		||||
  uint32_t reserved2;
 | 
			
		||||
  uint32_t controller_misc_option;
 | 
			
		||||
  uint8_t device_type;
 | 
			
		||||
  uint8_t sflash_pad_type;
 | 
			
		||||
  uint8_t serial_clk_freq;
 | 
			
		||||
  uint8_t lut_custom_seq_enable;
 | 
			
		||||
  uint32_t reserved3[2];
 | 
			
		||||
  uint32_t sflash_a1size;
 | 
			
		||||
  uint32_t sflash_a2size;
 | 
			
		||||
  uint32_t sflash_b1size;
 | 
			
		||||
  uint32_t sflash_b2size;
 | 
			
		||||
  uint32_t cspad_setting_override;
 | 
			
		||||
  uint32_t sclkpad_setting_override;
 | 
			
		||||
  uint32_t datapad_setting_override;
 | 
			
		||||
  uint32_t dqspad_setting_override;
 | 
			
		||||
  uint32_t timeout_in_ms;
 | 
			
		||||
  uint32_t command_interval;
 | 
			
		||||
  uint16_t data_valid_time[2];
 | 
			
		||||
  uint16_t busy_offset;
 | 
			
		||||
  uint16_t busybit_polarity;
 | 
			
		||||
  uint32_t lookup_table[64];
 | 
			
		||||
  struct flexspi_lut_seq_s lut_customseq[12];
 | 
			
		||||
  uint32_t reserved4[4];
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
/* Serial NOR configuration block */
 | 
			
		||||
 | 
			
		||||
struct flexspi_nor_config_s
 | 
			
		||||
{
 | 
			
		||||
  struct flexspi_mem_config_s mem_config; /* Common memory configuration info via FlexSPI */
 | 
			
		||||
  uint32_t page_size;                     /* Page size of Serial NOR */
 | 
			
		||||
  uint32_t sector_size;                   /* Sector size of Serial NOR */
 | 
			
		||||
  uint8_t ipcmd_serial_clkfreq;           /* Clock frequency for IP command */
 | 
			
		||||
  uint8_t is_uniform_blocksize;           /* Sector/Block size is the same */
 | 
			
		||||
  uint8_t reserved0[2];                   /* Reserved for future use */
 | 
			
		||||
  uint8_t serial_nor_type;                /* Serial NOR Flash type: 0/1/2/3 */
 | 
			
		||||
  uint8_t need_exit_nocmdmode;            /* Need to exit NoCmd mode before other IP command */
 | 
			
		||||
  uint8_t halfclk_for_nonreadcmd;         /* Half the Serial Clock for non-read command: true/false */
 | 
			
		||||
  uint8_t need_restore_nocmdmode;         /* Need to Restore NoCmd mode after IP command execution */
 | 
			
		||||
  uint32_t blocksize;                     /* Block size */
 | 
			
		||||
  uint32_t reserve2[11];                  /* Reserved for future use */
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
#endif /* __BOARDS_ARM_IMXRT_XIDATONG_SRC_IMXRT_FLEXSPI_NOR_FLASH_H */
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,224 @@
 | 
			
		|||
/****************************************************************************
 | 
			
		||||
 * boards/arm/imxrt/xidatong/src/imxrt_gpio.c
 | 
			
		||||
 *
 | 
			
		||||
 * Licensed to the Apache Software Foundation (ASF) under one or more
 | 
			
		||||
 * contributor license agreements.  See the NOTICE file distributed with
 | 
			
		||||
 * this work for additional information regarding copyright ownership.  The
 | 
			
		||||
 * ASF licenses this file to you under the Apache License, Version 2.0 (the
 | 
			
		||||
 * "License"); you may not use this file except in compliance with the
 | 
			
		||||
 * License.  You may obtain a copy of the License at
 | 
			
		||||
 *
 | 
			
		||||
 *   http://www.apache.org/licenses/LICENSE-2.0
 | 
			
		||||
 *
 | 
			
		||||
 * Unless required by applicable law or agreed to in writing, software
 | 
			
		||||
 * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
 | 
			
		||||
 * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the
 | 
			
		||||
 * License for the specific language governing permissions and limitations
 | 
			
		||||
 * under the License.
 | 
			
		||||
 *
 | 
			
		||||
 ****************************************************************************/
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
* @file imxrt_gpio.c
 | 
			
		||||
* @brief nuttx source code
 | 
			
		||||
*                https://github.com/apache/incubator-nuttx.git
 | 
			
		||||
* @version 10.2.0 
 | 
			
		||||
* @author AIIT XUOS Lab
 | 
			
		||||
* @date 2022-03-23
 | 
			
		||||
*/
 | 
			
		||||
 | 
			
		||||
/****************************************************************************
 | 
			
		||||
 * Included Files
 | 
			
		||||
 ****************************************************************************/
 | 
			
		||||
 | 
			
		||||
#include <nuttx/config.h>
 | 
			
		||||
 | 
			
		||||
#include <stdbool.h>
 | 
			
		||||
#include <assert.h>
 | 
			
		||||
#include <debug.h>
 | 
			
		||||
 | 
			
		||||
#include <nuttx/clock.h>
 | 
			
		||||
#include <nuttx/wdog.h>
 | 
			
		||||
#include <nuttx/ioexpander/gpio.h>
 | 
			
		||||
 | 
			
		||||
#include <arch/board/board.h>
 | 
			
		||||
 | 
			
		||||
#include "chip.h"
 | 
			
		||||
 | 
			
		||||
#include <imxrt_gpio.h>
 | 
			
		||||
#include "xidatong.h"
 | 
			
		||||
 | 
			
		||||
#if defined(CONFIG_DEV_GPIO) && !defined(CONFIG_GPIO_LOWER_HALF)
 | 
			
		||||
 | 
			
		||||
/****************************************************************************
 | 
			
		||||
 * Private Types
 | 
			
		||||
 ****************************************************************************/
 | 
			
		||||
 | 
			
		||||
struct imxrtgpio_dev_s
 | 
			
		||||
{
 | 
			
		||||
  struct gpio_dev_s gpio;
 | 
			
		||||
  uint8_t id;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
/****************************************************************************
 | 
			
		||||
 * Private Function Prototypes
 | 
			
		||||
 ****************************************************************************/
 | 
			
		||||
 | 
			
		||||
#if BOARD_NGPIOIN > 0
 | 
			
		||||
static int gpin_read(FAR struct gpio_dev_s *dev, FAR bool *value);
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#if BOARD_NGPIOOUT > 0
 | 
			
		||||
static int gpout_read(FAR struct gpio_dev_s *dev, FAR bool *value);
 | 
			
		||||
static int gpout_write(FAR struct gpio_dev_s *dev, bool value);
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
/****************************************************************************
 | 
			
		||||
 * Private Data
 | 
			
		||||
 ****************************************************************************/
 | 
			
		||||
 | 
			
		||||
 #if BOARD_NGPIOIN > 0
 | 
			
		||||
static const struct gpio_operations_s gpin_ops =
 | 
			
		||||
{
 | 
			
		||||
  .go_read   = gpin_read,
 | 
			
		||||
  .go_write  = NULL,
 | 
			
		||||
  .go_attach = NULL,
 | 
			
		||||
  .go_enable = NULL,
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
/* This array maps the GPIO pins used as INPUT */
 | 
			
		||||
 | 
			
		||||
static const uint32_t g_gpioinputs[BOARD_NGPIOIN] =
 | 
			
		||||
{
 | 
			
		||||
  GPIO_IN1,
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
static struct imxrtgpio_dev_s g_gpin[BOARD_NGPIOIN];
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#if BOARD_NGPIOOUT > 0
 | 
			
		||||
 | 
			
		||||
static const struct gpio_operations_s gpout_ops =
 | 
			
		||||
{
 | 
			
		||||
  .go_read   = gpout_read,
 | 
			
		||||
  .go_write  = gpout_write,
 | 
			
		||||
  .go_attach = NULL,
 | 
			
		||||
  .go_enable = NULL,
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
/* This array maps the GPIO pins used as OUTPUT */
 | 
			
		||||
 | 
			
		||||
static const uint32_t g_gpiooutputs[BOARD_NGPIOOUT] =
 | 
			
		||||
{
 | 
			
		||||
  GPIO_GOUT1,
 | 
			
		||||
  GPIO_GOUT2,
 | 
			
		||||
  GPIO_GOUT3,
 | 
			
		||||
  GPIO_GOUT4,
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
static struct imxrtgpio_dev_s g_gpout[BOARD_NGPIOOUT];
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
/****************************************************************************
 | 
			
		||||
 * Private Functions
 | 
			
		||||
 ****************************************************************************/
 | 
			
		||||
 | 
			
		||||
#if BOARD_NGPIOIN > 0
 | 
			
		||||
static int gpin_read(FAR struct gpio_dev_s *dev, FAR bool *value)
 | 
			
		||||
{
 | 
			
		||||
  FAR struct imxrtgpio_dev_s *imxrtgpio = (FAR struct imxrtgpio_dev_s *)dev;
 | 
			
		||||
 | 
			
		||||
  DEBUGASSERT(imxrtgpio != NULL && value != NULL);
 | 
			
		||||
  DEBUGASSERT(imxrtgpio->id < BOARD_NGPIOIN);
 | 
			
		||||
  gpioinfo("Reading...\n");
 | 
			
		||||
 | 
			
		||||
  *value = imxrt_gpio_read(g_gpioinputs[imxrtgpio->id]);
 | 
			
		||||
  return OK;
 | 
			
		||||
}
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#if BOARD_NGPIOOUT > 0
 | 
			
		||||
static int gpout_read(FAR struct gpio_dev_s *dev, FAR bool *value)
 | 
			
		||||
{
 | 
			
		||||
  FAR struct imxrtgpio_dev_s *imxrtgpio = (FAR struct imxrtgpio_dev_s *)dev;
 | 
			
		||||
 | 
			
		||||
  DEBUGASSERT(imxrtgpio != NULL && value != NULL);
 | 
			
		||||
  DEBUGASSERT(imxrtgpio->id < BOARD_NGPIOOUT);
 | 
			
		||||
  gpioinfo("Reading...\n");
 | 
			
		||||
 | 
			
		||||
  *value = imxrt_gpio_read(g_gpiooutputs[imxrtgpio->id]);
 | 
			
		||||
  return OK;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static int gpout_write(FAR struct gpio_dev_s *dev, bool value)
 | 
			
		||||
{
 | 
			
		||||
  FAR struct imxrtgpio_dev_s *imxrtgpio = (FAR struct imxrtgpio_dev_s *)dev;
 | 
			
		||||
 | 
			
		||||
  DEBUGASSERT(imxrtgpio != NULL);
 | 
			
		||||
  DEBUGASSERT(imxrtgpio->id < BOARD_NGPIOOUT);
 | 
			
		||||
  gpioinfo("Writing %d\n", (int)value);
 | 
			
		||||
 | 
			
		||||
  imxrt_gpio_write(g_gpiooutputs[imxrtgpio->id], value);
 | 
			
		||||
  return OK;
 | 
			
		||||
}
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
/****************************************************************************
 | 
			
		||||
 * Public Functions
 | 
			
		||||
 ****************************************************************************/
 | 
			
		||||
 | 
			
		||||
/****************************************************************************
 | 
			
		||||
 * Name: imxrt_gpio_initialize
 | 
			
		||||
 *
 | 
			
		||||
 * Description:
 | 
			
		||||
 *   Initialize GPIO drivers for use with /apps/examples/gpio
 | 
			
		||||
 *
 | 
			
		||||
 ****************************************************************************/
 | 
			
		||||
 | 
			
		||||
int imxrt_gpio_initialize(void)
 | 
			
		||||
{
 | 
			
		||||
  int pincount = 0;
 | 
			
		||||
  int i;
 | 
			
		||||
 | 
			
		||||
#if BOARD_NGPIOIN > 0
 | 
			
		||||
  for (i = 0; i < BOARD_NGPIOIN; i++)
 | 
			
		||||
    {
 | 
			
		||||
      /* Setup and register the GPIO pin */
 | 
			
		||||
 | 
			
		||||
      g_gpin[i].gpio.gp_pintype = GPIO_INPUT_PIN;
 | 
			
		||||
      g_gpin[i].gpio.gp_ops     = &gpin_ops;
 | 
			
		||||
      g_gpin[i].id              = i;
 | 
			
		||||
 | 
			
		||||
      gpio_pin_register(&g_gpin[i].gpio, pincount);
 | 
			
		||||
 | 
			
		||||
      /* Configure the pin that will be used as input */
 | 
			
		||||
 | 
			
		||||
      imxrt_config_gpio(g_gpioinputs[i]);
 | 
			
		||||
 | 
			
		||||
      pincount++;
 | 
			
		||||
    }
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#if BOARD_NGPIOOUT > 0
 | 
			
		||||
  for (i = 0; i < BOARD_NGPIOOUT; i++)
 | 
			
		||||
    {
 | 
			
		||||
      /* Setup and register the GPIO pin */
 | 
			
		||||
 | 
			
		||||
      g_gpout[i].gpio.gp_pintype = GPIO_OUTPUT_PIN;
 | 
			
		||||
      g_gpout[i].gpio.gp_ops     = &gpout_ops;
 | 
			
		||||
      g_gpout[i].id              = i;
 | 
			
		||||
 | 
			
		||||
      gpio_pin_register(&g_gpout[i].gpio, pincount);
 | 
			
		||||
 | 
			
		||||
      /* Configure the pin that will be used as output */
 | 
			
		||||
 | 
			
		||||
      imxrt_gpio_write(g_gpiooutputs[i], 0);
 | 
			
		||||
      imxrt_config_gpio(g_gpiooutputs[i]);
 | 
			
		||||
 | 
			
		||||
      pincount++;
 | 
			
		||||
    }
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
  return 0;
 | 
			
		||||
}
 | 
			
		||||
#endif /* CONFIG_DEV_GPIO && !CONFIG_GPIO_LOWER_HALF */
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,77 @@
 | 
			
		|||
/****************************************************************************
 | 
			
		||||
 * boards/arm/imxrt/xidatong/src/imxrt_lcd.c
 | 
			
		||||
 *
 | 
			
		||||
 * Licensed to the Apache Software Foundation (ASF) under one or more
 | 
			
		||||
 * contributor license agreements.  See the NOTICE file distributed with
 | 
			
		||||
 * this work for additional information regarding copyright ownership.  The
 | 
			
		||||
 * ASF licenses this file to you under the Apache License, Version 2.0 (the
 | 
			
		||||
 * "License"); you may not use this file except in compliance with the
 | 
			
		||||
 * License.  You may obtain a copy of the License at
 | 
			
		||||
 *
 | 
			
		||||
 *   http://www.apache.org/licenses/LICENSE-2.0
 | 
			
		||||
 *
 | 
			
		||||
 * Unless required by applicable law or agreed to in writing, software
 | 
			
		||||
 * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
 | 
			
		||||
 * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the
 | 
			
		||||
 * License for the specific language governing permissions and limitations
 | 
			
		||||
 * under the License.
 | 
			
		||||
 *
 | 
			
		||||
 ****************************************************************************/
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
* @file imxrt_lcd.c
 | 
			
		||||
* @brief nuttx source code
 | 
			
		||||
*                https://github.com/apache/incubator-nuttx.git
 | 
			
		||||
* @version 10.2.0 
 | 
			
		||||
* @author AIIT XUOS Lab
 | 
			
		||||
* @date 2022-03-23
 | 
			
		||||
*/
 | 
			
		||||
 | 
			
		||||
/****************************************************************************
 | 
			
		||||
 * Included Files
 | 
			
		||||
 ****************************************************************************/
 | 
			
		||||
 | 
			
		||||
#include <nuttx/config.h>
 | 
			
		||||
 | 
			
		||||
#include <stdbool.h>
 | 
			
		||||
#include <debug.h>
 | 
			
		||||
 | 
			
		||||
#include "imxrt_lcd.h"
 | 
			
		||||
#include "imxrt_gpio.h"
 | 
			
		||||
 | 
			
		||||
#include "xidatong.h"
 | 
			
		||||
 | 
			
		||||
/****************************************************************************
 | 
			
		||||
 * Public Functions
 | 
			
		||||
 ****************************************************************************/
 | 
			
		||||
 | 
			
		||||
/****************************************************************************
 | 
			
		||||
 * Name: imxrt_lcd_initialize
 | 
			
		||||
 *
 | 
			
		||||
 * Description:
 | 
			
		||||
 *   Initialize the LCD.  Setup backlight (initially off)
 | 
			
		||||
 *
 | 
			
		||||
 ****************************************************************************/
 | 
			
		||||
 | 
			
		||||
void imxrt_lcd_initialize(void)
 | 
			
		||||
{
 | 
			
		||||
  /* Configure the LCD backlight (and turn the backlight off) */
 | 
			
		||||
 | 
			
		||||
  imxrt_config_gpio(GPIO_LCD_BL);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/****************************************************************************
 | 
			
		||||
 * Name: imxrt_backlight
 | 
			
		||||
 *
 | 
			
		||||
 * Description:
 | 
			
		||||
 *   If CONFIG_IMXRT_LCD_BACKLIGHT is defined, then the board-specific
 | 
			
		||||
 *   logic must provide this interface to turn the backlight on and off.
 | 
			
		||||
 *
 | 
			
		||||
 ****************************************************************************/
 | 
			
		||||
 | 
			
		||||
#ifdef CONFIG_IMXRT_LCD_BACKLIGHT
 | 
			
		||||
void imxrt_backlight(bool blon)
 | 
			
		||||
{
 | 
			
		||||
  imxrt_gpio_write(GPIO_LCD_BL, blon); /* High illuminates */
 | 
			
		||||
}
 | 
			
		||||
#endif
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,131 @@
 | 
			
		|||
/****************************************************************************
 | 
			
		||||
 * boards/arm/imxrt/xidatong/src/imxrt_mmcsd_spi.c
 | 
			
		||||
 *
 | 
			
		||||
 * Licensed to the Apache Software Foundation (ASF) under one or more
 | 
			
		||||
 * contributor license agreements.  See the NOTICE file distributed with
 | 
			
		||||
 * this work for additional information regarding copyright ownership.  The
 | 
			
		||||
 * ASF licenses this file to you under the Apache License, Version 2.0 (the
 | 
			
		||||
 * "License"); you may not use this file except in compliance with the
 | 
			
		||||
 * License.  You may obtain a copy of the License at
 | 
			
		||||
 *
 | 
			
		||||
 *   http://www.apache.org/licenses/LICENSE-2.0
 | 
			
		||||
 *
 | 
			
		||||
 * Unless required by applicable law or agreed to in writing, software
 | 
			
		||||
 * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
 | 
			
		||||
 * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the
 | 
			
		||||
 * License for the specific language governing permissions and limitations
 | 
			
		||||
 * under the License.
 | 
			
		||||
 *
 | 
			
		||||
 ****************************************************************************/
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
* @file imxrt_mmcsd_spi.c
 | 
			
		||||
* @brief nuttx source code
 | 
			
		||||
*                https://github.com/apache/incubator-nuttx.git
 | 
			
		||||
* @version 10.2.0 
 | 
			
		||||
* @author AIIT XUOS Lab
 | 
			
		||||
* @date 2022-03-23
 | 
			
		||||
*/
 | 
			
		||||
 | 
			
		||||
/****************************************************************************
 | 
			
		||||
 * Included Files
 | 
			
		||||
 ****************************************************************************/
 | 
			
		||||
 | 
			
		||||
#include <debug.h>
 | 
			
		||||
#include <nuttx/config.h>
 | 
			
		||||
#include <nuttx/mmcsd.h>
 | 
			
		||||
#include <stdint.h>
 | 
			
		||||
#include <stdbool.h>
 | 
			
		||||
 | 
			
		||||
#include <nuttx/spi/spi.h>
 | 
			
		||||
#include <arch/board/board.h>
 | 
			
		||||
 | 
			
		||||
#include "arm_arch.h"
 | 
			
		||||
#include "chip.h"
 | 
			
		||||
#include "imxrt_lpspi.h"
 | 
			
		||||
 | 
			
		||||
#ifdef CONFIG_MMCSD_SPI
 | 
			
		||||
 | 
			
		||||
/****************************************************************************
 | 
			
		||||
 * Pre-processor Definitions
 | 
			
		||||
 ****************************************************************************/
 | 
			
		||||
 | 
			
		||||
#ifndef CONFIG_IMXRT_LPSPI1
 | 
			
		||||
#  error "SD driver requires CONFIG_IMXRT_LPSPI1 to be enabled"
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#ifdef CONFIG_DISABLE_MOUNTPOINT
 | 
			
		||||
#  error "SD driver requires CONFIG_DISABLE_MOUNTPOINT to be disabled"
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
/****************************************************************************
 | 
			
		||||
 * Private Definitions
 | 
			
		||||
 ****************************************************************************/
 | 
			
		||||
 | 
			
		||||
static const int SD_SPI_PORT = CONFIG_NSH_MMCSDSPIPORTNO; /* SD is connected to SPI1 port */
 | 
			
		||||
 | 
			
		||||
static const int SD_SLOT_NO  = 0; /* There is only one SD slot */
 | 
			
		||||
 | 
			
		||||
/****************************************************************************
 | 
			
		||||
 * Private Functions
 | 
			
		||||
 ****************************************************************************/
 | 
			
		||||
 | 
			
		||||
/* NOTE:  We are using a SDCard adapter/module without Card Detect pin!
 | 
			
		||||
 * Then we don't need to Card Detect callback here.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
/****************************************************************************
 | 
			
		||||
 * Public Functions
 | 
			
		||||
 ****************************************************************************/
 | 
			
		||||
 | 
			
		||||
/****************************************************************************
 | 
			
		||||
 * Name: imxrt_spi1register
 | 
			
		||||
 *
 | 
			
		||||
 * Description:
 | 
			
		||||
 *   Registers media change callback
 | 
			
		||||
 ****************************************************************************/
 | 
			
		||||
 | 
			
		||||
#ifdef CONFIG_IMXRT_LPSPI1
 | 
			
		||||
int imxrt_lpspi1register(struct spi_dev_s *dev, spi_mediachange_t callback,
 | 
			
		||||
                       void *arg)
 | 
			
		||||
{
 | 
			
		||||
  spiinfo("INFO: Registering spi1 device\n");
 | 
			
		||||
  return OK;
 | 
			
		||||
}
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
/****************************************************************************
 | 
			
		||||
 * Name: imxrt_mmcsd_spi_initialize
 | 
			
		||||
 *
 | 
			
		||||
 * Description:
 | 
			
		||||
 *   Initialize SPI-based SD card and card detect thread.
 | 
			
		||||
 *
 | 
			
		||||
 ****************************************************************************/
 | 
			
		||||
 | 
			
		||||
int imxrt_mmcsd_spi_initialize(int minor)
 | 
			
		||||
{
 | 
			
		||||
  struct spi_dev_s *spi;
 | 
			
		||||
  int rv;
 | 
			
		||||
 | 
			
		||||
  mcinfo("INFO: Initializing mmcsd card\n");
 | 
			
		||||
 | 
			
		||||
  spi = imxrt_lpspibus_initialize(SD_SPI_PORT);
 | 
			
		||||
  if (spi == NULL)
 | 
			
		||||
    {
 | 
			
		||||
      mcerr("ERROR: Failed to initialize SPI port %d\n", SD_SPI_PORT);
 | 
			
		||||
      return -ENODEV;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
  rv = mmcsd_spislotinitialize(minor, SD_SLOT_NO, spi);
 | 
			
		||||
  if (rv < 0)
 | 
			
		||||
    {
 | 
			
		||||
      mcerr("ERROR: Failed to bind SPI port %d to SD slot %d\n",
 | 
			
		||||
            SD_SPI_PORT, SD_SLOT_NO);
 | 
			
		||||
      return rv;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
  spiinfo("INFO: mmcsd card has been initialized successfully\n");
 | 
			
		||||
  return OK;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#endif /* CONFIG_MMCSD_SPI */
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,220 @@
 | 
			
		|||
/****************************************************************************
 | 
			
		||||
 * boards/arm/imxrt/xidatong/src/imxrt_spi.c
 | 
			
		||||
 *
 | 
			
		||||
 * Licensed to the Apache Software Foundation (ASF) under one or more
 | 
			
		||||
 * contributor license agreements.  See the NOTICE file distributed with
 | 
			
		||||
 * this work for additional information regarding copyright ownership.  The
 | 
			
		||||
 * ASF licenses this file to you under the Apache License, Version 2.0 (the
 | 
			
		||||
 * "License"); you may not use this file except in compliance with the
 | 
			
		||||
 * License.  You may obtain a copy of the License at
 | 
			
		||||
 *
 | 
			
		||||
 *   http://www.apache.org/licenses/LICENSE-2.0
 | 
			
		||||
 *
 | 
			
		||||
 * Unless required by applicable law or agreed to in writing, software
 | 
			
		||||
 * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
 | 
			
		||||
 * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the
 | 
			
		||||
 * License for the specific language governing permissions and limitations
 | 
			
		||||
 * under the License.
 | 
			
		||||
 *
 | 
			
		||||
 ****************************************************************************/
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
* @file imxrt_spi.c
 | 
			
		||||
* @brief nuttx source code
 | 
			
		||||
*                https://github.com/apache/incubator-nuttx.git
 | 
			
		||||
* @version 10.2.0 
 | 
			
		||||
* @author AIIT XUOS Lab
 | 
			
		||||
* @date 2022-03-23
 | 
			
		||||
*/
 | 
			
		||||
 | 
			
		||||
/****************************************************************************
 | 
			
		||||
 * Included Files
 | 
			
		||||
 ****************************************************************************/
 | 
			
		||||
 | 
			
		||||
#include <nuttx/config.h>
 | 
			
		||||
 | 
			
		||||
#include <stdint.h>
 | 
			
		||||
#include <stdbool.h>
 | 
			
		||||
#include <errno.h>
 | 
			
		||||
#include <debug.h>
 | 
			
		||||
 | 
			
		||||
#include <nuttx/spi/spi.h>
 | 
			
		||||
#include <arch/board/board.h>
 | 
			
		||||
 | 
			
		||||
#include "arm_arch.h"
 | 
			
		||||
 | 
			
		||||
#include "imxrt_config.h"
 | 
			
		||||
#include "imxrt_lpspi.h"
 | 
			
		||||
#include "imxrt_gpio.h"
 | 
			
		||||
#include "xidatong.h"
 | 
			
		||||
 | 
			
		||||
#if defined(CONFIG_IMXRT_LPSPI1) || defined(CONFIG_IMXRT_LPSPI2) || \
 | 
			
		||||
    defined(CONFIG_IMXRT_LPSPI3) || defined(CONFIG_IMXRT_LPSPI4)
 | 
			
		||||
 | 
			
		||||
/****************************************************************************
 | 
			
		||||
 * Public Functions
 | 
			
		||||
 ****************************************************************************/
 | 
			
		||||
 | 
			
		||||
/****************************************************************************
 | 
			
		||||
 * Name: imxrt_spidev_initialize
 | 
			
		||||
 *
 | 
			
		||||
 * Description:
 | 
			
		||||
 *   Called to configure SPI chip select GPIO pins for the xidatong
 | 
			
		||||
 *    board.
 | 
			
		||||
 *
 | 
			
		||||
 ****************************************************************************/
 | 
			
		||||
 | 
			
		||||
void weak_function imxrt_spidev_initialize(void)
 | 
			
		||||
{
 | 
			
		||||
#ifdef CONFIG_IMXRT_LPSPI1
 | 
			
		||||
  imxrt_config_gpio(GPIO_LPSPI1_CS); /* LPSPI1 chip select */
 | 
			
		||||
  imxrt_config_gpio(GPIO_MMCSD_EN);
 | 
			
		||||
#endif
 | 
			
		||||
#ifdef CONFIG_IMXRT_LPSPI3
 | 
			
		||||
  imxrt_config_gpio(GPIO_LPSPI3_CS); /* LPSPI3 chip select */
 | 
			
		||||
#endif
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/****************************************************************************
 | 
			
		||||
 * Name:  imxrt_lpspi1/2/3select and imxrt_lpspi1/2/3status
 | 
			
		||||
 *
 | 
			
		||||
 * Description:
 | 
			
		||||
 *   The external functions, imxrt_lpspi1/2/3select and
 | 
			
		||||
 *   imxrt_lpspi1/2/3status must be provided by board-specific logic.
 | 
			
		||||
 *   They are implementations of the select and status methods of the SPI
 | 
			
		||||
 *   interface defined by struct spi_ops_s (see include/nuttx/spi/spi.h).
 | 
			
		||||
 *   All other methods (including imxrt_lpspibus_initialize()) are provided
 | 
			
		||||
 *   by common STM32 logic.  To use this common SPI logic on your board:
 | 
			
		||||
 *
 | 
			
		||||
 *   1. Provide logic in imxrt_boardinitialize() to configure SPI chip select
 | 
			
		||||
 *      pins.
 | 
			
		||||
 *   2. Provide imxrt_lpspi1/2/3select() and imxrt_lpspi1/2/3status()
 | 
			
		||||
 *      functions in your board-specific logic.
 | 
			
		||||
 *      These functions will perform chip selection and status operations
 | 
			
		||||
 *      using GPIOs in the way your board is configured.
 | 
			
		||||
 *   3. Add a calls to imxrt_lpspibus_initialize() in your low level
 | 
			
		||||
 *      application initialization logic
 | 
			
		||||
 *   4. The handle returned by imxrt_lpspibus_initialize() may then be used
 | 
			
		||||
 *      to bind the SPI driver to higher level logic (e.g., calling
 | 
			
		||||
 *      mmcsd_spislotinitialize(), for example, will bind the SPI driver to
 | 
			
		||||
 *      the SPI MMC/SD driver).
 | 
			
		||||
 *
 | 
			
		||||
 ****************************************************************************/
 | 
			
		||||
 | 
			
		||||
#ifdef CONFIG_IMXRT_LPSPI1
 | 
			
		||||
void imxrt_lpspi1select(FAR struct spi_dev_s *dev, uint32_t devid,
 | 
			
		||||
                        bool selected)
 | 
			
		||||
{
 | 
			
		||||
  spiinfo("devid: %d CS: %s\n", (int)devid,
 | 
			
		||||
          selected ? "assert" : "de-assert");
 | 
			
		||||
 | 
			
		||||
  imxrt_gpio_write(GPIO_LPSPI1_CS, !selected);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
uint8_t imxrt_lpspi1status(FAR struct spi_dev_s *dev, uint32_t devid)
 | 
			
		||||
{
 | 
			
		||||
  return 0;
 | 
			
		||||
}
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#ifdef CONFIG_IMXRT_LPSPI2
 | 
			
		||||
void imxrt_lpspi2select(FAR struct spi_dev_s *dev, uint32_t devid,
 | 
			
		||||
                        bool selected)
 | 
			
		||||
{
 | 
			
		||||
  spiinfo("devid: %d CS: %s\n", (int)devid,
 | 
			
		||||
          selected ? "assert" : "de-assert");
 | 
			
		||||
 | 
			
		||||
  imxrt_gpio_write(GPIO_LPSPI2_CS, !selected);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
uint8_t imxrt_lpspi2status(FAR struct spi_dev_s *dev, uint32_t devid)
 | 
			
		||||
{
 | 
			
		||||
  return 0;
 | 
			
		||||
}
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#ifdef CONFIG_IMXRT_LPSPI3
 | 
			
		||||
void imxrt_lpspi3select(FAR struct spi_dev_s *dev, uint32_t devid,
 | 
			
		||||
                        bool selected)
 | 
			
		||||
{
 | 
			
		||||
  spiinfo("devid: %d CS: %s\n", (int)devid,
 | 
			
		||||
          selected ? "assert" : "de-assert");
 | 
			
		||||
 | 
			
		||||
  imxrt_gpio_write(GPIO_LPSPI3_CS, !selected);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
uint8_t imxrt_lpspi3status(FAR struct spi_dev_s *dev, uint32_t devid)
 | 
			
		||||
{
 | 
			
		||||
  return 0;
 | 
			
		||||
}
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#ifdef CONFIG_IMXRT_LPSPI4
 | 
			
		||||
void imxrt_lpspi4select(FAR struct spi_dev_s *dev, uint32_t devid,
 | 
			
		||||
                        bool selected)
 | 
			
		||||
{
 | 
			
		||||
  spiinfo("devid: %d CS: %s\n", (int)devid,
 | 
			
		||||
          selected ? "assert" : "de-assert");
 | 
			
		||||
 | 
			
		||||
  imxrt_gpio_write(GPIO_LPSPI4_CS, !selected);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
uint8_t imxrt_lpspi4status(FAR struct spi_dev_s *dev, uint32_t devid)
 | 
			
		||||
{
 | 
			
		||||
  return 0;
 | 
			
		||||
}
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
/****************************************************************************
 | 
			
		||||
 * Name: imxrt_lpspi1cmddata
 | 
			
		||||
 *
 | 
			
		||||
 * Description:
 | 
			
		||||
 *   Set or clear the SH1101A A0 or SD1306 D/C n bit to select data (true)
 | 
			
		||||
 *   or command (false). This function must be provided by platform-specific
 | 
			
		||||
 *   logic. This is an implementation of the cmddata method of the SPI
 | 
			
		||||
 *   interface defined by struct spi_ops_s (see include/nuttx/spi/spi.h).
 | 
			
		||||
 *
 | 
			
		||||
 * Input Parameters:
 | 
			
		||||
 *
 | 
			
		||||
 *   spi - SPI device that controls the bus the device that requires the CMD/
 | 
			
		||||
 *         DATA selection.
 | 
			
		||||
 *   devid - If there are multiple devices on the bus, this selects which one
 | 
			
		||||
 *         to select cmd or data.  NOTE:  This design restricts, for example,
 | 
			
		||||
 *         one one SPI display per SPI bus.
 | 
			
		||||
 *   cmd - true: select command; false: select data
 | 
			
		||||
 *
 | 
			
		||||
 * Returned Value:
 | 
			
		||||
 *   None
 | 
			
		||||
 *
 | 
			
		||||
 ****************************************************************************/
 | 
			
		||||
 | 
			
		||||
#ifdef CONFIG_SPI_CMDDATA
 | 
			
		||||
#ifdef CONFIG_IMXRT_LPSPI1
 | 
			
		||||
int imxrt_lpspi1cmddata(FAR struct spi_dev_s *dev, uint32_t devid, bool cmd)
 | 
			
		||||
{
 | 
			
		||||
  return -ENODEV;
 | 
			
		||||
}
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#ifdef CONFIG_IMXRT_LPSPI2
 | 
			
		||||
int imxrt_lpspi2cmddata(FAR struct spi_dev_s *dev, uint32_t devid, bool cmd)
 | 
			
		||||
{
 | 
			
		||||
  return -ENODEV;
 | 
			
		||||
}
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#ifdef CONFIG_IMXRT_LPSPI3
 | 
			
		||||
int imxrt_lpspi3cmddata(FAR struct spi_dev_s *dev, uint32_t devid, bool cmd)
 | 
			
		||||
{
 | 
			
		||||
  return -ENODEV;
 | 
			
		||||
}
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#ifdef CONFIG_IMXRT_LPSPI4
 | 
			
		||||
int imxrt_lpspi4cmddata(FAR struct spi_dev_s *dev, uint32_t devid, bool cmd)
 | 
			
		||||
{
 | 
			
		||||
  return -ENODEV;
 | 
			
		||||
}
 | 
			
		||||
#endif
 | 
			
		||||
#endif /* CONFIG_SPI_CMDDATA */
 | 
			
		||||
#endif /* CONFIG_IMXRT_LPSPI1 || CONFIG_IMXRT_LPSPI2 */
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,94 @@
 | 
			
		|||
/****************************************************************************
 | 
			
		||||
 * boards/arm/imxrt/xidatong/src/imxrt_userleds.c
 | 
			
		||||
 *
 | 
			
		||||
 * Licensed to the Apache Software Foundation (ASF) under one or more
 | 
			
		||||
 * contributor license agreements.  See the NOTICE file distributed with
 | 
			
		||||
 * this work for additional information regarding copyright ownership.  The
 | 
			
		||||
 * ASF licenses this file to you under the Apache License, Version 2.0 (the
 | 
			
		||||
 * "License"); you may not use this file except in compliance with the
 | 
			
		||||
 * License.  You may obtain a copy of the License at
 | 
			
		||||
 *
 | 
			
		||||
 *   http://www.apache.org/licenses/LICENSE-2.0
 | 
			
		||||
 *
 | 
			
		||||
 * Unless required by applicable law or agreed to in writing, software
 | 
			
		||||
 * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
 | 
			
		||||
 * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the
 | 
			
		||||
 * License for the specific language governing permissions and limitations
 | 
			
		||||
 * under the License.
 | 
			
		||||
 *
 | 
			
		||||
 ****************************************************************************/
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
* @file imxrt_userleds.c
 | 
			
		||||
* @brief nuttx source code
 | 
			
		||||
*                https://github.com/apache/incubator-nuttx.git
 | 
			
		||||
* @version 10.2.0 
 | 
			
		||||
* @author AIIT XUOS Lab
 | 
			
		||||
* @date 2022-03-23
 | 
			
		||||
*/
 | 
			
		||||
 | 
			
		||||
/* There are four LED status indicators located on the EVK Board.  The
 | 
			
		||||
 * functions of these LEDs include:
 | 
			
		||||
 *
 | 
			
		||||
 *   - Main Power Supply(D3)
 | 
			
		||||
 *     Green: DC 5V main supply is normal.
 | 
			
		||||
 *     Red:   J2 input voltage is over 5.6V.
 | 
			
		||||
 *     Off:   The board is not powered.
 | 
			
		||||
 *   - Reset RED LED(D15)
 | 
			
		||||
 *   - OpenSDA LED(D16)
 | 
			
		||||
 *   - USER LED(D18)
 | 
			
		||||
 *
 | 
			
		||||
 * Only a single LED, D18, is under software control.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
/****************************************************************************
 | 
			
		||||
 * Included Files
 | 
			
		||||
 ****************************************************************************/
 | 
			
		||||
 | 
			
		||||
#include <nuttx/config.h>
 | 
			
		||||
 | 
			
		||||
#include "imxrt_gpio.h"
 | 
			
		||||
#include "imxrt_iomuxc.h"
 | 
			
		||||
#include "xidatong.h"
 | 
			
		||||
 | 
			
		||||
#include <arch/board/board.h>
 | 
			
		||||
 | 
			
		||||
#if !defined(CONFIG_ARCH_LEDS) && defined(GPIO_LED)
 | 
			
		||||
 | 
			
		||||
/****************************************************************************
 | 
			
		||||
 * Public Functions
 | 
			
		||||
 ****************************************************************************/
 | 
			
		||||
 | 
			
		||||
/****************************************************************************
 | 
			
		||||
 * Name: board_userled_initialize
 | 
			
		||||
 ****************************************************************************/
 | 
			
		||||
 | 
			
		||||
uint32_t board_userled_initialize(void)
 | 
			
		||||
{
 | 
			
		||||
  /* Configure LED GPIO for output */
 | 
			
		||||
 | 
			
		||||
  imxrt_config_gpio(GPIO_LED);
 | 
			
		||||
  return BOARD_NLEDS;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/****************************************************************************
 | 
			
		||||
 * Name: board_userled
 | 
			
		||||
 ****************************************************************************/
 | 
			
		||||
 | 
			
		||||
void board_userled(int led, bool ledon)
 | 
			
		||||
{
 | 
			
		||||
  imxrt_gpio_write(GPIO_LED, !ledon);  /* Low illuminates */
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/****************************************************************************
 | 
			
		||||
 * Name: board_userled_all
 | 
			
		||||
 ****************************************************************************/
 | 
			
		||||
 | 
			
		||||
void board_userled_all(uint32_t ledset)
 | 
			
		||||
{
 | 
			
		||||
  /* Low illuminates */
 | 
			
		||||
 | 
			
		||||
  imxrt_gpio_write(GPIO_LED, (ledset & BOARD_USERLED_BIT) == 0);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#endif /* !CONFIG_ARCH_LEDS */
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,202 @@
 | 
			
		|||
/****************************************************************************
 | 
			
		||||
 * boards/arm/imxrt/xidatong/src/xidatong.h
 | 
			
		||||
 *
 | 
			
		||||
 * Licensed to the Apache Software Foundation (ASF) under one or more
 | 
			
		||||
 * contributor license agreements.  See the NOTICE file distributed with
 | 
			
		||||
 * this work for additional information regarding copyright ownership.  The
 | 
			
		||||
 * ASF licenses this file to you under the Apache License, Version 2.0 (the
 | 
			
		||||
 * "License"); you may not use this file except in compliance with the
 | 
			
		||||
 * License.  You may obtain a copy of the License at
 | 
			
		||||
 *
 | 
			
		||||
 *   http://www.apache.org/licenses/LICENSE-2.0
 | 
			
		||||
 *
 | 
			
		||||
 * Unless required by applicable law or agreed to in writing, software
 | 
			
		||||
 * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
 | 
			
		||||
 * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the
 | 
			
		||||
 * License for the specific language governing permissions and limitations
 | 
			
		||||
 * under the License.
 | 
			
		||||
 *
 | 
			
		||||
 ****************************************************************************/
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
* @file xidatong.h
 | 
			
		||||
* @brief nuttx source code
 | 
			
		||||
*                https://github.com/apache/incubator-nuttx.git
 | 
			
		||||
* @version 10.2.0 
 | 
			
		||||
* @author AIIT XUOS Lab
 | 
			
		||||
* @date 2022-03-23
 | 
			
		||||
*/
 | 
			
		||||
 | 
			
		||||
#ifndef __BOARDS_ARM_IMXRT_XIDATONG_SRC_XIDATONG_H
 | 
			
		||||
#define __BOARDS_ARM_IMXRT_XIDATONG_SRC_XIDATONG_H
 | 
			
		||||
 | 
			
		||||
/****************************************************************************
 | 
			
		||||
 * Included Files
 | 
			
		||||
 ****************************************************************************/
 | 
			
		||||
 | 
			
		||||
#include <nuttx/config.h>
 | 
			
		||||
 | 
			
		||||
#include <stdint.h>
 | 
			
		||||
#include <stdbool.h>
 | 
			
		||||
 | 
			
		||||
#include <arch/irq.h>
 | 
			
		||||
#include <nuttx/irq.h>
 | 
			
		||||
 | 
			
		||||
#include "imxrt_gpio.h"
 | 
			
		||||
#include "imxrt_iomuxc.h"
 | 
			
		||||
 | 
			
		||||
/****************************************************************************
 | 
			
		||||
 * Pre-processor Definitions
 | 
			
		||||
 ****************************************************************************/
 | 
			
		||||
 | 
			
		||||
/* LEDs */
 | 
			
		||||
 | 
			
		||||
#define GPIO_LED        (GPIO_OUTPUT | IOMUX_LED_DEFAULT | \
 | 
			
		||||
                         GPIO_OUTPUT_ZERO | GPIO_PORT1 | GPIO_PIN9)       /* AD_BO_09 */
 | 
			
		||||
 | 
			
		||||
/* Buttons ******************************************************************/
 | 
			
		||||
 | 
			
		||||
#define GPIO_SW8       (GPIO_INTERRUPT | GPIO_INT_FALLINGEDGE | \
 | 
			
		||||
                        IOMUX_SW_DEFAULT | \
 | 
			
		||||
                        GPIO_PORT5 | GPIO_PIN0 | )              /* WAKEUP */
 | 
			
		||||
 | 
			
		||||
/* Test Pins ****************************************************************/
 | 
			
		||||
 | 
			
		||||
#define BOARD_NGPIOIN   0 /* Amount of GPIO Input pins */
 | 
			
		||||
#define BOARD_NGPIOOUT  4 /* Amount of GPIO Output pins */
 | 
			
		||||
#define BOARD_NGPIOINT  0 /* Amount of GPIO Input w/ Interruption pins */
 | 
			
		||||
 | 
			
		||||
#define GPIO_GOUT1      (GPIO_OUTPUT | GPIO_OUTPUT_ZERO | IOMUX_GOUT_DEFAULT | \
 | 
			
		||||
                         GPIO_PORT1 | GPIO_PIN19)
 | 
			
		||||
 | 
			
		||||
#define GPIO_GOUT2      (GPIO_OUTPUT | GPIO_OUTPUT_ZERO | IOMUX_GOUT_DEFAULT | \
 | 
			
		||||
                         GPIO_PIN18 | GPIO_PORT1)
 | 
			
		||||
 | 
			
		||||
#define GPIO_GOUT3      (GPIO_OUTPUT | GPIO_OUTPUT_ZERO | IOMUX_GOUT_DEFAULT | \
 | 
			
		||||
                         GPIO_PIN10 | GPIO_PORT1)
 | 
			
		||||
 | 
			
		||||
#define GPIO_GOUT4      (GPIO_OUTPUT | GPIO_OUTPUT_ZERO | IOMUX_GOUT_DEFAULT | \
 | 
			
		||||
                         GPIO_PIN9 | GPIO_PORT1)
 | 
			
		||||
 | 
			
		||||
/* Backlight */
 | 
			
		||||
 | 
			
		||||
#define GPIO_LCD_BL     (GPIO_OUTPUT | GPIO_OUTPUT_ZERO | GPIO_PORT2 | \
 | 
			
		||||
                         GPIO_PIN31 | IOMUX_LCD_BL_DEFAULT)
 | 
			
		||||
 | 
			
		||||
/* Ethernet */
 | 
			
		||||
 | 
			
		||||
#define GPIO_ENET_INT   (IOMUX_ENET_INT_DEFAULT | \
 | 
			
		||||
                         GPIO_PORT1 | GPIO_PIN10)                    /* AD_B0_10 */
 | 
			
		||||
#define GPIO_ENET_IRQ   IMXRT_IRQ_GPIO1_10
 | 
			
		||||
#define GPIO_ENET_RST   (GPIO_OUTPUT | GPIO_OUTPUT_ZERO | \
 | 
			
		||||
                         GPIO_PORT1 | GPIO_PIN9 | IOMUX_ENET_RST_DEFAULT)
 | 
			
		||||
 | 
			
		||||
#ifdef CONFIG_ETH0_PHY_KSZ8081
 | 
			
		||||
#ifdef GPIO_LED
 | 
			
		||||
#warning LED interferes with ETH reset unless R323 is removed.
 | 
			
		||||
#endif
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
/* LPSPI CS: */
 | 
			
		||||
 | 
			
		||||
#define IOMUX_LPSPI3_CS (IOMUX_SLEW_FAST | IOMUX_DRIVE_50OHM | \
 | 
			
		||||
                         IOMUX_SPEED_MEDIUM | IOMUX_PULL_UP_100K | \
 | 
			
		||||
                         _IOMUX_PULL_ENABLE)
 | 
			
		||||
#define GPIO_LPSPI3_CS  (GPIO_OUTPUT | GPIO_OUTPUT_ONE | \
 | 
			
		||||
                         GPIO_PORT1 | GPIO_PIN3 | IOMUX_LPSPI3_CS) /* GPIO_AD_B0_03 */
 | 
			
		||||
 | 
			
		||||
/* LPSPI1 CS:  GPIO_SD_B0_01 */
 | 
			
		||||
 | 
			
		||||
#define IOMUX_LPSPI1_CS (IOMUX_SLEW_FAST | IOMUX_DRIVE_50OHM | \
 | 
			
		||||
                         IOMUX_SPEED_MEDIUM | IOMUX_PULL_UP_100K | \
 | 
			
		||||
                         _IOMUX_PULL_ENABLE)
 | 
			
		||||
#define GPIO_LPSPI1_CS  (GPIO_OUTPUT | GPIO_OUTPUT_ONE | \
 | 
			
		||||
                         GPIO_PORT3 | GPIO_PIN13 | IOMUX_LPSPI1_CS)
 | 
			
		||||
 | 
			
		||||
#define IOMUX_MMCSD_EN  (IOMUX_SLEW_FAST | IOMUX_DRIVE_50OHM | \
 | 
			
		||||
                         IOMUX_SPEED_MEDIUM | IOMUX_PULL_UP_100K | \
 | 
			
		||||
                         _IOMUX_PULL_ENABLE)
 | 
			
		||||
#define GPIO_MMCSD_EN   (GPIO_OUTPUT | GPIO_OUTPUT_ZERO | \
 | 
			
		||||
                         GPIO_PORT3 | GPIO_PIN2 | IOMUX_MMCSD_EN)
 | 
			
		||||
 | 
			
		||||
/****************************************************************************
 | 
			
		||||
 * Public Types
 | 
			
		||||
 ****************************************************************************/
 | 
			
		||||
 | 
			
		||||
/****************************************************************************
 | 
			
		||||
 * Public Data
 | 
			
		||||
 ****************************************************************************/
 | 
			
		||||
 | 
			
		||||
#ifndef __ASSEMBLY__
 | 
			
		||||
 | 
			
		||||
/****************************************************************************
 | 
			
		||||
 * Public Functions Definitions
 | 
			
		||||
 ****************************************************************************/
 | 
			
		||||
 | 
			
		||||
/****************************************************************************
 | 
			
		||||
 * Name: imxrt_bringup
 | 
			
		||||
 *
 | 
			
		||||
 * Description:
 | 
			
		||||
 *   Bring up board features
 | 
			
		||||
 *
 | 
			
		||||
 ****************************************************************************/
 | 
			
		||||
 | 
			
		||||
#if defined(CONFIG_BOARDCTL) || defined(CONFIG_BOARD_LATE_INITIALIZE)
 | 
			
		||||
int imxrt_bringup(void);
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
/****************************************************************************
 | 
			
		||||
 * Name: imxrt_spidev_initialize
 | 
			
		||||
 *
 | 
			
		||||
 * Description:
 | 
			
		||||
 *   Called to configure SPI chip select GPIO pins for the i.MXRT1050 EVK.
 | 
			
		||||
 *
 | 
			
		||||
 ****************************************************************************/
 | 
			
		||||
 | 
			
		||||
void imxrt_spidev_initialize(void);
 | 
			
		||||
 | 
			
		||||
/****************************************************************************
 | 
			
		||||
 * Name: imxrt_mmcsd_spi_initialize
 | 
			
		||||
 *
 | 
			
		||||
 * Description:
 | 
			
		||||
 *   Initialize SPI-based SD card and card detect thread.
 | 
			
		||||
 *
 | 
			
		||||
 ****************************************************************************/
 | 
			
		||||
 | 
			
		||||
#ifdef CONFIG_MMCSD_SPI
 | 
			
		||||
int imxrt_mmcsd_spi_initialize(int minor);
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
/****************************************************************************
 | 
			
		||||
 * Name: imxrt_autoled_initialize
 | 
			
		||||
 *
 | 
			
		||||
 * Description:
 | 
			
		||||
 *   Initialize NuttX-controlled LED logic
 | 
			
		||||
 *
 | 
			
		||||
 * Input Parameters:
 | 
			
		||||
 *   None
 | 
			
		||||
 *
 | 
			
		||||
 * Returned Value:
 | 
			
		||||
 *   None
 | 
			
		||||
 *
 | 
			
		||||
 ****************************************************************************/
 | 
			
		||||
 | 
			
		||||
#ifdef CONFIG_ARCH_LEDS
 | 
			
		||||
void imxrt_autoled_initialize(void);
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#ifdef CONFIG_DEV_GPIO
 | 
			
		||||
 | 
			
		||||
/****************************************************************************
 | 
			
		||||
 * Name: imxrt_gpio_initialize
 | 
			
		||||
 *
 | 
			
		||||
 * Description:
 | 
			
		||||
 *   Initialize GPIO drivers for use with /apps/examples/gpio
 | 
			
		||||
 *
 | 
			
		||||
 ****************************************************************************/
 | 
			
		||||
 | 
			
		||||
int imxrt_gpio_initialize(void);
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#endif /* __ASSEMBLY__ */
 | 
			
		||||
#endif /* __BOARDS_ARM_IMXRT_XIDATONG_SRC_XIDATONG_H */
 | 
			
		||||
| 
						 | 
				
			
			@ -631,6 +631,14 @@ config NSH_DISABLE_HUMIHS300X
 | 
			
		|||
	bool "Disable the humidity function of the sensor Hs300x."
 | 
			
		||||
	default n
 | 
			
		||||
 | 
			
		||||
config NSH_DISABLE_QS_FX
 | 
			
		||||
	bool "Disable the winddirection function of the sensor QS-FX."
 | 
			
		||||
	default n
 | 
			
		||||
 | 
			
		||||
config NSH_DISABLE_QS_FS
 | 
			
		||||
	bool "Disable the windspeed function of the sensor QS-FS."
 | 
			
		||||
	default n
 | 
			
		||||
    
 | 
			
		||||
config NSH_DISABLE_OPENZIGBEE
 | 
			
		||||
	bool "Disable the open function of the zigebee."
 | 
			
		||||
	default n
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1461,6 +1461,14 @@ int nsh_foreach_var(FAR struct nsh_vtbl_s *vtbl, nsh_foreach_var_t cb,
 | 
			
		|||
  int cmd_HumiHs300x(FAR struct nsh_vtbl_s *vtbl, int argc, char **argv);
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#if defined(CONFIG_APPLICATION_SENSOR_WINDDIRECTION_QS_FX) && !defined(CONFIG_NSH_DISABLE_QS_FX)
 | 
			
		||||
  int cmd_WindDirectionQsFx(FAR struct nsh_vtbl_s *vtbl, int argc, char **argv);
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#if defined(CONFIG_APPLICATION_SENSOR_WINDSPEED_QS_FS) && !defined(CONFIG_NSH_DISABLE_QS_FS)
 | 
			
		||||
  int cmd_WindSpeedQsFs(FAR struct nsh_vtbl_s *vtbl, int argc, char **argv);
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#if defined(CONFIG_CONNECTION_ADAPTER_ZIGBEE) && !defined(CONFIG_NSH_DISABLE_OPENZIGBEE)
 | 
			
		||||
  int cmd_openzigbee(FAR struct nsh_vtbl_s *vtbl, int argc, char **argv);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -204,6 +204,35 @@ int cmd_HumiHs300x(FAR struct nsh_vtbl_s *vtbl, int argc, char **argv)
 | 
			
		|||
}
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
/****************************************************************************
 | 
			
		||||
 * Name: cmd_WindDirectionQsFx
 | 
			
		||||
 ****************************************************************************/
 | 
			
		||||
 | 
			
		||||
#if defined(CONFIG_APPLICATION_SENSOR_WINDDIRECTION_QS_FX) && !defined(CONFIG_NSH_DISABLE_QS_FX)
 | 
			
		||||
extern void WindDirectionQsFx(void);
 | 
			
		||||
int cmd_WindDirectionQsFx(FAR struct nsh_vtbl_s *vtbl, int argc, char **argv)
 | 
			
		||||
{
 | 
			
		||||
    nsh_output(vtbl, "Hello, world!\n");
 | 
			
		||||
    FrameworkInit();
 | 
			
		||||
    WindDirectionQsFx();
 | 
			
		||||
    return OK;
 | 
			
		||||
}
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
/****************************************************************************
 | 
			
		||||
 * Name: cmd_WindSpeedQsFs
 | 
			
		||||
 ****************************************************************************/
 | 
			
		||||
 | 
			
		||||
#if defined(CONFIG_APPLICATION_SENSOR_WINDSPEED_QS_FS) && !defined(CONFIG_NSH_DISABLE_QS_FS)
 | 
			
		||||
extern void WindSpeedQsFs(void);
 | 
			
		||||
int cmd_WindSpeedQsFs(FAR struct nsh_vtbl_s *vtbl, int argc, char **argv)
 | 
			
		||||
{
 | 
			
		||||
    nsh_output(vtbl, "Hello, world!\n");
 | 
			
		||||
    FrameworkInit();
 | 
			
		||||
    WindSpeedQsFs();
 | 
			
		||||
    return OK;
 | 
			
		||||
}
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
/****************************************************************************
 | 
			
		||||
 * Name: cmd_openzigbee
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -634,6 +634,14 @@ static const struct cmdmap_s g_cmdmap[] =
 | 
			
		|||
  { "humi",       cmd_HumiHs300x,       1, 1, "[get humidity with sensor HS300x.]" },
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#if defined(CONFIG_APPLICATION_SENSOR_WINDDIRECTION_QS_FX) && !defined(CONFIG_NSH_DISABLE_QS_FX)
 | 
			
		||||
  { "WindDirectionQsFx",       cmd_WindDirectionQsFx,       1, 1, "[get WindDirection with sensor QsFx.]" },
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#if defined(CONFIG_APPLICATION_SENSOR_WINDSPEED_QS_FS) && !defined(CONFIG_NSH_DISABLE_QS_FS)
 | 
			
		||||
  { "WindSpeedQsFs",       cmd_WindSpeedQsFs,       1, 1, "[get WindSpeed with sensor QsFs.]" },
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#if defined(CONFIG_CONNECTION_ADAPTER_ZIGBEE) && !defined(CONFIG_NSH_DISABLE_OPENZIGBEE)
 | 
			
		||||
  { "openzigbee",       cmd_openzigbee,       1, 1, "[open the zigebee device.]" },
 | 
			
		||||
#endif
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -18,5 +18,6 @@ cp -rf $current/nuttx $nuttx
 | 
			
		|||
cp -rf $current/apps $nuttx
 | 
			
		||||
cp -rf $nuttx/aiit_board/aiit-arm32-board  $nuttx/nuttx/boards/arm/stm32
 | 
			
		||||
cp -rf $nuttx/aiit_board/aiit-riscv64-board $nuttx/nuttx/boards/risc-v/k210
 | 
			
		||||
cp -rf $nuttx/aiit_board/xidatong $nuttx/nuttx/boards/arm/imxrt
 | 
			
		||||
 | 
			
		||||
cd ../nuttx
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -0,0 +1,120 @@
 | 
			
		|||
/****************************************************************************
 | 
			
		||||
 * arch/arm/include/imxrt/chip.h
 | 
			
		||||
 *
 | 
			
		||||
 * Licensed to the Apache Software Foundation (ASF) under one or more
 | 
			
		||||
 * contributor license agreements.  See the NOTICE file distributed with
 | 
			
		||||
 * this work for additional information regarding copyright ownership.  The
 | 
			
		||||
 * ASF licenses this file to you under the Apache License, Version 2.0 (the
 | 
			
		||||
 * "License"); you may not use this file except in compliance with the
 | 
			
		||||
 * License.  You may obtain a copy of the License at
 | 
			
		||||
 *
 | 
			
		||||
 *   http://www.apache.org/licenses/LICENSE-2.0
 | 
			
		||||
 *
 | 
			
		||||
 * Unless required by applicable law or agreed to in writing, software
 | 
			
		||||
 * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
 | 
			
		||||
 * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the
 | 
			
		||||
 * License for the specific language governing permissions and limitations
 | 
			
		||||
 * under the License.
 | 
			
		||||
 *
 | 
			
		||||
 ****************************************************************************/
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
* @file chip.h
 | 
			
		||||
* @brief nuttx source code
 | 
			
		||||
*                https://github.com/apache/incubator-nuttx.git
 | 
			
		||||
* @version 10.2.0 
 | 
			
		||||
* @author AIIT XUOS Lab
 | 
			
		||||
* @date 2022-03-23
 | 
			
		||||
*/
 | 
			
		||||
 | 
			
		||||
#ifndef __ARCH_ARM_INCLUDE_IMXRT_CHIP_H
 | 
			
		||||
#define __ARCH_ARM_INCLUDE_IMXRT_CHIP_H
 | 
			
		||||
 | 
			
		||||
/****************************************************************************
 | 
			
		||||
 * Included Files
 | 
			
		||||
 ****************************************************************************/
 | 
			
		||||
 | 
			
		||||
#include <nuttx/config.h>
 | 
			
		||||
 | 
			
		||||
/****************************************************************************
 | 
			
		||||
 * Pre-processor Prototypes
 | 
			
		||||
 ****************************************************************************/
 | 
			
		||||
 | 
			
		||||
/* Get customizations for each supported chip */
 | 
			
		||||
 | 
			
		||||
#if defined(CONFIG_ARCH_CHIP_MIMXRT1021CAG4A) || \
 | 
			
		||||
    defined(CONFIG_ARCH_CHIP_MIMXRT1021CAF4A) || \
 | 
			
		||||
    defined(CONFIG_ARCH_CHIP_MIMXRT1021DAF5A) || \
 | 
			
		||||
    defined(CONFIG_ARCH_CHIP_MIMXRT1021DAG5A)
 | 
			
		||||
 | 
			
		||||
/*  MIMXRT1021CAG4A - 144 pin, 400MHz Industrial
 | 
			
		||||
 *  MIMXRT1021CAF4A - 100 pin, 400MHz Industrial
 | 
			
		||||
 *  MIMXRT1021DAF5A - 100 pin, 500MHz Consumer
 | 
			
		||||
 *  MIMXRT1021DAG5A - 144 pin, 500MHz Consumer
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#  define IMXRT_OCRAM_SIZE      (256 * 1024) /* 256Kb OCRAM */
 | 
			
		||||
#  define IMXRT_GPIO_NPORTS     5            /* Five total ports */
 | 
			
		||||
                                             /* but 4 doesn't exist */
 | 
			
		||||
 | 
			
		||||
#elif defined(CONFIG_ARCH_CHIP_MIMXRT1051DVL6A) || \
 | 
			
		||||
      defined(CONFIG_ARCH_CHIP_MIMXRT1051CVL5A) || \
 | 
			
		||||
      defined(CONFIG_ARCH_CHIP_MIMXRT1052DVL6A) || \
 | 
			
		||||
      defined(CONFIG_ARCH_CHIP_MIMXRT1052CVL5A) || \
 | 
			
		||||
      defined(CONFIG_ARCH_CHIP_MIMXRT1052CVL5B)
 | 
			
		||||
/* MIMXRT1051CVL5A - Industrial, Reduced Features, 528MHz
 | 
			
		||||
 * MIMXRT1051DVL6A - Consumer, Reduced Features, 600MHz
 | 
			
		||||
 * MIMXRT1052CVL5A - Industrial, Full Feature, 528MHz
 | 
			
		||||
 * MIMXRT1052CVL5B - Industrial, Full Feature, 528MHz
 | 
			
		||||
 * MIMXRT1052DVL6A - Consumer, Full Feature, 600MHz
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#  define IMXRT_OCRAM_SIZE            (512 * 1024) /* 512Kb OCRAM */
 | 
			
		||||
#  define IMXRT_GPIO_NPORTS            5           /* Five total ports */
 | 
			
		||||
 | 
			
		||||
#elif defined(CONFIG_ARCH_CHIP_MIMXRT1061DVL6A) || \
 | 
			
		||||
      defined(CONFIG_ARCH_CHIP_MIMXRT1061CVL5A) || \
 | 
			
		||||
      defined(CONFIG_ARCH_CHIP_MIMXRT1062DVL6A) || \
 | 
			
		||||
      defined(CONFIG_ARCH_CHIP_MIMXRT1062CVL5A) || \
 | 
			
		||||
      defined(CONFIG_ARCH_CHIP_MIMXRT1064DVL6A) || \
 | 
			
		||||
      defined(CONFIG_ARCH_CHIP_MIMXRT1064CVL5A)
 | 
			
		||||
/* MIMXRT1061CVL5A - Industrial, Reduced Features, 528MHz
 | 
			
		||||
 * MIMXRT1061DVL6A - Consumer, Reduced Features, 600MHz
 | 
			
		||||
 * MIMXRT1062CVL5A - Industrial, Full Feature, 528MHz
 | 
			
		||||
 * MIMXRT1062DVL6A - Consumer, Full Feature, 600MHz
 | 
			
		||||
 * MIMXRT1064CVL5A - Industrial, Full Feature, 528MHz
 | 
			
		||||
 * MIMXRT1064DVL6A - Consumer, Full Feature, 600MHz
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#  define IMXRT_OCRAM_SIZE            (1024 * 1024) /* 1024Kb OCRAM */
 | 
			
		||||
#  define IMXRT_GPIO_NPORTS            9            /* Nine total ports */
 | 
			
		||||
#else
 | 
			
		||||
#  error "Unknown i.MX RT chip type"
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
/* NVIC priority levels *****************************************************/
 | 
			
		||||
 | 
			
		||||
/* Each priority field holds an 8-bit priority value, 0-15. The lower the
 | 
			
		||||
 * value, the greater the priority of the corresponding interrupt.  The i.MX
 | 
			
		||||
 * RT processor implements only bits[7:4] of each field, bits[3:0] read as
 | 
			
		||||
 * zero and ignore writes.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#define NVIC_SYSH_PRIORITY_MIN        0xf0 /* All bits[7:4] set is min pri */
 | 
			
		||||
#define NVIC_SYSH_PRIORITY_DEFAULT    0x80 /* Midpoint is the default */
 | 
			
		||||
#define NVIC_SYSH_PRIORITY_MAX        0x00 /* Zero is maximum priority */
 | 
			
		||||
#define NVIC_SYSH_PRIORITY_STEP       0x40 /* Two bits of interrupt pri used */
 | 
			
		||||
 | 
			
		||||
/****************************************************************************
 | 
			
		||||
 * Public Types
 | 
			
		||||
 ****************************************************************************/
 | 
			
		||||
 | 
			
		||||
/****************************************************************************
 | 
			
		||||
 * Public Data
 | 
			
		||||
 ****************************************************************************/
 | 
			
		||||
 | 
			
		||||
/****************************************************************************
 | 
			
		||||
 * Public Functions Prototypes
 | 
			
		||||
 ****************************************************************************/
 | 
			
		||||
 | 
			
		||||
#endif /* __ARCH_ARM_INCLUDE_IMXRT_CHIP_H */
 | 
			
		||||
| 
						 | 
				
			
			@ -445,6 +445,16 @@ config ARCH_BOARD_IMXRT1050_EVK
 | 
			
		|||
		This is the board configuration for the port of NuttX to the NXP i.MXRT
 | 
			
		||||
		evaluation kit, MIMXRT1050-EVKB.  This board features the MIMXRT1052DVL6A MCU.
 | 
			
		||||
 | 
			
		||||
config ARCH_BOARD_XIDATONG
 | 
			
		||||
	bool "NXP i.MX RT 1052 XIDATONG"
 | 
			
		||||
	depends on ARCH_CHIP_MIMXRT1052CVL5B
 | 
			
		||||
	select ARCH_HAVE_LEDS
 | 
			
		||||
	select ARCH_HAVE_BUTTONS
 | 
			
		||||
	select ARCH_HAVE_IRQBUTTONS
 | 
			
		||||
	---help---
 | 
			
		||||
		This is the board configuration for the port of NuttX to the NXP i.MXRT
 | 
			
		||||
		evaluation kit, MIMXRT1052-XIDATONG.  This board features the MIMXRT1052CVL5B MCU.
 | 
			
		||||
 | 
			
		||||
config ARCH_BOARD_IMXRT1060_EVK
 | 
			
		||||
	bool "NXP i.MX RT 1060 EVK"
 | 
			
		||||
	depends on ARCH_CHIP_MIMXRT1062DVL6A
 | 
			
		||||
| 
						 | 
				
			
			@ -2382,6 +2392,7 @@ config ARCH_BOARD
 | 
			
		|||
	default "hymini-stm32v"            if ARCH_BOARD_HYMINI_STM32V
 | 
			
		||||
	default "imxrt1020-evk"            if ARCH_BOARD_IMXRT1020_EVK
 | 
			
		||||
	default "imxrt1050-evk"            if ARCH_BOARD_IMXRT1050_EVK
 | 
			
		||||
	default "xidatong"                 if ARCH_BOARD_XIDATONG
 | 
			
		||||
	default "imxrt1060-evk"            if ARCH_BOARD_IMXRT1060_EVK
 | 
			
		||||
	default "imxrt1064-evk"            if ARCH_BOARD_IMXRT1064_EVK
 | 
			
		||||
	default "kwikstik-k40"             if ARCH_BOARD_KWIKSTIK_K40
 | 
			
		||||
| 
						 | 
				
			
			@ -2660,6 +2671,9 @@ endif
 | 
			
		|||
if ARCH_BOARD_IMXRT1050_EVK
 | 
			
		||||
source "boards/arm/imxrt/imxrt1050-evk/Kconfig"
 | 
			
		||||
endif
 | 
			
		||||
if ARCH_BOARD_XIDATONG
 | 
			
		||||
source "boards/arm/imxrt/xidatong/Kconfig"
 | 
			
		||||
endif
 | 
			
		||||
if ARCH_BOARD_IMXRT1060_EVK
 | 
			
		||||
source "boards/arm/imxrt/imxrt1060-evk/Kconfig"
 | 
			
		||||
endif
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||