未验证 提交 746d7a01 编写于 作者: W Wayne 提交者: GitHub

[bsp/nuvoton] Support NuMaker-IoT-M467 board (#6448)

Co-authored-by: NWayne Lin <wclin@nuvoton.com>
上级 4e9786cd
......@@ -11,3 +11,4 @@ Current supported BSP shown in below table:
| [nk-n9h30](nk-n9h30) | Nuvoton NK-N9H30 |
| [numaker-m032ki](numaker-m032ki) | Nuvoton NuMaker-M032KI |
| [numaker-m467hj](numaker-m467hj) | Nuvoton NuMaker-M467HJ |
| [numaker-iot-m467](numaker-iot-m467) | Nuvoton NuMaker-IoT-M467 |
......@@ -11,6 +11,7 @@ Current supported LVGL running environment on Nuvoton's boards shown in below ta
| nk-n9h30 | Music | No | .config |
| numaker-m032ki | Widgets | Nu-TFT v1.3 | config_lvgl |
| numaker-m467hj | Widgets | NuMaker-TFT-LCD43 v1.0 | config_lvgl |
| numaker-iot-m467 | Widgets | Nu-TFT v1.3 | config_lvgl |
## Download related packages
......
......@@ -130,7 +130,7 @@ typedef enum
{
eCANFD_NORMAL = 0, /*!< None, Normal mode. */
/*
/*
Support:
(1) to receive data frames
(2) to receive remote frames
......@@ -139,34 +139,34 @@ typedef enum
(1) data frames sending
(2) remote frames sending
(3) active error frames or overload frames sending
*/
*/
eCANFD_RESTRICTED_OPERATION, /*!< Receive external RX frame and always keep recessive state or send dominate bit on ACK bit on TX pin. */
/*
/*
Support:
(1) to receive valid data frames
(2) to receive valid remote frames
Not support:
(1) transmission start
(2) acknowledge to valid frames
*/
*/
eCANFD_BUS_MONITOR, /*!< Receive external RX frame and always keep recessive state on TX pin. */
/*
/*
Support:
(1) Loopback
(2) Also send out frames
Not support:
(1) to receive external frame
*/
*/
eCANFD_LOOPBACK_EXTERNAL, /*!< Won't receive external RX frame. */
/*
/*
Support:
(1) Loopback
Not support:
(1) to receive external frame
(2) transmission start
*/
*/
eCANFD_LOOPBACK_INTERNAL /*!< Won't receive external RX frame and always keep recessive state on TX pin */
} E_CANFD_TEST_MODE;
......@@ -458,7 +458,7 @@ int32_t CANFD_RunToNormal(CANFD_T *canfd, uint8_t u8Enable);
void CANFD_GetDefaultConfig(CANFD_FD_T *psConfig, uint8_t u8OpMode);
void CANFD_ClearStatusFlag(CANFD_T *canfd, uint32_t u32InterruptFlag);
uint32_t CANFD_GetStatusFlag(CANFD_T *canfd, uint32_t u32IntTypeFlag);
uint32_t CANFD_ReadReg(__I uint32_t* pu32RegAddr);
uint32_t CANFD_ReadReg(__I uint32_t *pu32RegAddr);
/*@}*/ /* end of group CANFD_EXPORTED_FUNCTIONS */
......
......@@ -137,6 +137,8 @@ extern int32_t g_CCAP_i32ErrCode;
*/
#define CCAP_GET_INT_STS(ccap) (ccap->INT)
#define CCAP_SET_CTL(ccap, u32IntMask) (ccap->CTL |= u32IntMask)
#define CCAP_CLR_CTL(ccap, u32IntMask) (ccap->CTL &= ~u32IntMask)
void CCAP_Open(CCAP_T *ccap, uint32_t u32InFormat, uint32_t u32OutFormat);
void CCAP_SetCroppingWindow(CCAP_T *ccap, uint32_t u32VStart, uint32_t u32HStart, uint32_t u32Height, uint32_t u32Width);
......
......@@ -117,39 +117,39 @@ static void nu_bpwmcap_isr(nu_bpwmcap_t psNuBpwmCapBase)
for (i = 0; i < BPWM_CHANNEL_NUM ; i++)
{
nu_bpwmcap_t psNuBpwmCap = psNuBpwmCapBase + i;
if (psNuBpwmCap->u8DummyData < NU_DUMMY_DATA)
{
psNuBpwmCap->u8DummyData++;
}
else
{
u32Status = BPWM_GetCaptureIntFlag(psNuBpwmCap->base, psNuBpwmCap->u8Channel);
switch (u32Status)
{
case NU_NO_EDGE:
break;
case NU_RISING_EDGE:
BPWM_ClearCaptureIntFlag(psNuBpwmCap->base, psNuBpwmCap->u8Channel, BPWM_CAPTURE_INT_RISING_LATCH);
psNuBpwmCap->u32CurrentRisingCnt = BPWM_GET_CAPTURE_RISING_DATA(psNuBpwmCap->base, psNuBpwmCap->u8Channel);
rt_hw_inputcapture_isr(&psNuBpwmCap->parent, psNuBpwmCap->input_data_level);
break;
case NU_FALLING_EDGE:
BPWM_ClearCaptureIntFlag(psNuBpwmCap->base, psNuBpwmCap->u8Channel, BPWM_CAPTURE_INT_FALLING_LATCH);
psNuBpwmCap->u32CurrentFallingCnt = BPWM_GET_CAPTURE_FALLING_DATA(psNuBpwmCap->base, psNuBpwmCap->u8Channel);
rt_hw_inputcapture_isr(&psNuBpwmCap->parent, psNuBpwmCap->input_data_level);
break;
default:
BPWM_ClearCaptureIntFlag(psNuBpwmCap->base, psNuBpwmCap->u8Channel, BPWM_CAPTURE_INT_RISING_LATCH | BPWM_CAPTURE_INT_FALLING_LATCH);
BPWM_GET_CAPTURE_RISING_DATA(psNuBpwmCap->base, psNuBpwmCap->u8Channel);
BPWM_GET_CAPTURE_FALLING_DATA(psNuBpwmCap->base, psNuBpwmCap->u8Channel);
break;
}
}
if (psNuBpwmCap->u8DummyData < NU_DUMMY_DATA)
{
psNuBpwmCap->u8DummyData++;
}
else
{
u32Status = BPWM_GetCaptureIntFlag(psNuBpwmCap->base, psNuBpwmCap->u8Channel);
switch (u32Status)
{
case NU_NO_EDGE:
break;
case NU_RISING_EDGE:
BPWM_ClearCaptureIntFlag(psNuBpwmCap->base, psNuBpwmCap->u8Channel, BPWM_CAPTURE_INT_RISING_LATCH);
psNuBpwmCap->u32CurrentRisingCnt = BPWM_GET_CAPTURE_RISING_DATA(psNuBpwmCap->base, psNuBpwmCap->u8Channel);
rt_hw_inputcapture_isr(&psNuBpwmCap->parent, psNuBpwmCap->input_data_level);
break;
case NU_FALLING_EDGE:
BPWM_ClearCaptureIntFlag(psNuBpwmCap->base, psNuBpwmCap->u8Channel, BPWM_CAPTURE_INT_FALLING_LATCH);
psNuBpwmCap->u32CurrentFallingCnt = BPWM_GET_CAPTURE_FALLING_DATA(psNuBpwmCap->base, psNuBpwmCap->u8Channel);
rt_hw_inputcapture_isr(&psNuBpwmCap->parent, psNuBpwmCap->input_data_level);
break;
default:
BPWM_ClearCaptureIntFlag(psNuBpwmCap->base, psNuBpwmCap->u8Channel, BPWM_CAPTURE_INT_RISING_LATCH | BPWM_CAPTURE_INT_FALLING_LATCH);
BPWM_GET_CAPTURE_RISING_DATA(psNuBpwmCap->base, psNuBpwmCap->u8Channel);
BPWM_GET_CAPTURE_FALLING_DATA(psNuBpwmCap->base, psNuBpwmCap->u8Channel);
break;
}
}
}
}
......@@ -185,7 +185,7 @@ static rt_err_t nu_bpwmcap_get_pulsewidth(struct rt_inputcapture_device *inputca
nu_bpwmcap_t psNuBpwmCap;
float fTempCnt;
psNuBpwmCap = (nu_bpwmcap_t )inputcapture;
psNuBpwmCap = (nu_bpwmcap_t)inputcapture;
if (psNuBpwmCap->u32CurrentFallingCnt)
{
......@@ -225,14 +225,14 @@ static rt_err_t nu_bpwmcap_init(struct rt_inputcapture_device *inputcapture)
RT_ASSERT(inputcapture);
psNuBpwmCap = (nu_bpwmcap_t ) inputcapture;
psNuBpwmCap = (nu_bpwmcap_t) inputcapture;
psNuBpwmCap->u8DummyData = 0;
psNuBpwmCap->u32CurrentFallingCnt = 0;
psNuBpwmCap->u32CurrentRisingCnt = 0;
psNuBpwmCap->u32LastRisingCnt = 0;
psNuBpwmCap->u32LastFallingCnt = 0;
psNuBpwmCap->parent.ops = &nu_bpwmcap_ops;
psNuBpwmCap->u8DummyData = 0;
psNuBpwmCap->u32CurrentFallingCnt = 0;
psNuBpwmCap->u32CurrentRisingCnt = 0;
psNuBpwmCap->u32LastRisingCnt = 0;
psNuBpwmCap->u32LastFallingCnt = 0;
psNuBpwmCap->parent.ops = &nu_bpwmcap_ops;
if ((psNuBpwmCap->u8Channel % BPWM_CHANNEL_NUM) == 0)
{
......@@ -250,9 +250,9 @@ static rt_err_t nu_bpwmcap_open(struct rt_inputcapture_device *inputcapture)
RT_ASSERT(inputcapture);
psNuBpwmCap = (nu_bpwmcap_t ) inputcapture;
psNuBpwmCap = (nu_bpwmcap_t) inputcapture;
/* Set capture time as 500 nano second */
/* Set capture time as 500 nano second */
psNuBpwmCap->fUsPerTick = (float)BPWM_ConfigCaptureChannel(psNuBpwmCap->base, 0, 500, 0) / 1000;
/* Set counter type as up count */
......@@ -268,7 +268,7 @@ static rt_err_t nu_bpwmcap_open(struct rt_inputcapture_device *inputcapture)
BPWM_EnableCapture(psNuBpwmCap->base, 0x1 << psNuBpwmCap->u8Channel);
/* Enable BPWM NVIC interrupt */
if ( (psNuBpwmCap->base->CAPCTL & ((0x1 << BPWM_CHANNEL_NUM)-1) ) != 0u)
if ((psNuBpwmCap->base->CAPCTL & ((0x1 << BPWM_CHANNEL_NUM) - 1)) != 0u)
NVIC_EnableIRQ(psNuBpwmCap->irqn);
return RT_EOK;
......@@ -280,7 +280,7 @@ static rt_err_t nu_bpwmcap_close(struct rt_inputcapture_device *inputcapture)
RT_ASSERT(inputcapture);
psNuBpwmCap = (nu_bpwmcap_t ) inputcapture;
psNuBpwmCap = (nu_bpwmcap_t) inputcapture;
/* Enable Capture Function for BPWM */
BPWM_DisableCapture(psNuBpwmCap->base, 0x1 << psNuBpwmCap->u8Channel);
......@@ -289,7 +289,7 @@ static rt_err_t nu_bpwmcap_close(struct rt_inputcapture_device *inputcapture)
BPWM_DisableCaptureInt(psNuBpwmCap->base, psNuBpwmCap->u8Channel, BPWM_CAPTURE_INT_FALLING_LATCH | BPWM_CAPTURE_INT_RISING_LATCH);
/* Disable BPWM NVIC interrupt */
if ( (psNuBpwmCap->base->CAPCTL & ((0x1 << BPWM_CHANNEL_NUM)-1) ) == 0u)
if ((psNuBpwmCap->base->CAPCTL & ((0x1 << BPWM_CHANNEL_NUM) - 1)) == 0u)
NVIC_DisableIRQ(psNuBpwmCap->irqn);
return RT_EOK;
......@@ -301,17 +301,17 @@ static int nu_bpwm_capture_device_init(void)
int i;
rt_err_t ret = RT_EOK;
for (i = (BPWM_START+1); i < BPWM_CNT; i++)
for (i = (BPWM_START + 1); i < BPWM_CNT; i++)
{
nu_bpwmcap_t psNuBpwmCap = &nu_bpwmcap_arr[i];
psNuBpwmCap->u8Channel = i % BPWM_CHANNEL_NUM;
psNuBpwmCap->u8DummyData = 0;
psNuBpwmCap->u32CurrentFallingCnt = 0;
psNuBpwmCap->u32CurrentRisingCnt = 0;
psNuBpwmCap->u32LastRisingCnt = 0;
psNuBpwmCap->u32LastFallingCnt = 0;
psNuBpwmCap->parent.ops = &nu_bpwmcap_ops;
psNuBpwmCap->u8Channel = i % BPWM_CHANNEL_NUM;
psNuBpwmCap->u8DummyData = 0;
psNuBpwmCap->u32CurrentFallingCnt = 0;
psNuBpwmCap->u32CurrentRisingCnt = 0;
psNuBpwmCap->u32LastRisingCnt = 0;
psNuBpwmCap->u32LastFallingCnt = 0;
psNuBpwmCap->parent.ops = &nu_bpwmcap_ops;
if ((psNuBpwmCap->u8Channel % BPWM_CHANNEL_NUM) == 0)
{
......@@ -320,8 +320,8 @@ static int nu_bpwm_capture_device_init(void)
SYS_ResetModule(psNuBpwmCap->rstidx);
}
/* register inputcapture device */
ret = rt_device_inputcapture_register(&psNuBpwmCap->parent, psNuBpwmCap->name, psNuBpwmCap);
/* register inputcapture device */
ret = rt_device_inputcapture_register(&psNuBpwmCap->parent, psNuBpwmCap->name, psNuBpwmCap);
RT_ASSERT(ret == RT_EOK);
}
......
......@@ -182,14 +182,14 @@ static rt_err_t ccap_pipe_configure(nu_ccap_t psNuCcap, ccap_view_info_t psViewI
/* Set Packet Scaling Vertical/Horizontal Factor Register */
if (psCcapConf->sPipeInfo_Packet.u32Height < psRectCropping->height)
{
u32HN = psRectCropping->height;
u32HM = psCcapConf->sPipeInfo_Packet.u32Height;
u32HN = psCcapConf->sPipeInfo_Packet.u32Height;
u32HM = psRectCropping->height;
}
if (psCcapConf->sPipeInfo_Packet.u32Width < psRectCropping->width)
{
u32WN = psRectCropping->width;
u32WM = psCcapConf->sPipeInfo_Packet.u32Width;
u32WN = psCcapConf->sPipeInfo_Packet.u32Width;
u32WM = psRectCropping->width;
}
CCAP_SetPacketScaling(psNuCcap->base,
......@@ -217,23 +217,23 @@ static rt_err_t ccap_pipe_configure(nu_ccap_t psNuCcap, ccap_view_info_t psViewI
/* Set System Memory Planar U Base Address Register */
CCAP_SetPlanarUBuf(psNuCcap->base, (uint32_t)psCcapConf->sPipeInfo_Planar.pu8FarmAddr + u32Offset);
u32Offset += (psCcapConf->sPipeInfo_Planar.u32Height * psCcapConf->sPipeInfo_Planar.u32Width) / 2;
u32Offset += ((psCcapConf->sPipeInfo_Planar.u32Height * psCcapConf->sPipeInfo_Planar.u32Width) / 2);
/* Set System Memory Planar V Base Address Register */
CCAP_SetPlanarVBuf(psNuCcap->base, (uint32_t)psCcapConf->sPipeInfo_Planar.pu8FarmAddr + u32Offset);
u32WM = u32WN = u32HM = u32HN = 0;
/* Set Packet Scaling Vertical/Horizontal Factor Register */
/* Set Planar Scaling Vertical/Horizontal Factor Register */
if (psCcapConf->sPipeInfo_Planar.u32Height < psRectCropping->height)
{
u32HN = psRectCropping->height;
u32HM = psCcapConf->sPipeInfo_Planar.u32Height;
u32HN = psCcapConf->sPipeInfo_Planar.u32Height;
u32HM = psRectCropping->height;
}
if (psCcapConf->sPipeInfo_Planar.u32Width < psRectCropping->width)
{
u32WN = psRectCropping->width;
u32WM = psCcapConf->sPipeInfo_Planar.u32Width;
u32WN = psCcapConf->sPipeInfo_Planar.u32Width;
u32WM = psRectCropping->width;
}
/* Set Planar Scaling Vertical/Horizontal Factor Register */
......@@ -368,6 +368,38 @@ static rt_err_t ccap_control(rt_device_t dev, int cmd, void *args)
}
break;
case CCAP_CMD_SET_OPMODE:
{
RT_ASSERT(args);
int i32IsOneSutterMode = *((int *)args);
/* Set shutter or continuous mode */
CCAP_SET_CTL(psNuCcap->base, (i32IsOneSutterMode > 0) ? CCAP_CTL_SHUTTER_Msk : 0);
}
break;
case CCAP_CMD_SET_BASEADDR:
{
uint32_t u32Offset = 0;
ccap_config_t psCcapConf;
RT_ASSERT(args);
psCcapConf = (ccap_config_t)args;
/* Set System Memory Packet Base Address Register */
CCAP_SetPacketBuf(psNuCcap->base, (uint32_t)psCcapConf->sPipeInfo_Packet.pu8FarmAddr);
/* Set System Memory Planar Y Base Address Register */
CCAP_SetPlanarYBuf(psNuCcap->base, (uint32_t)psCcapConf->sPipeInfo_Planar.pu8FarmAddr + u32Offset);
u32Offset = psCcapConf->sPipeInfo_Planar.u32Height * psCcapConf->sPipeInfo_Planar.u32Width;
/* Set System Memory Planar U Base Address Register */
CCAP_SetPlanarUBuf(psNuCcap->base, (uint32_t)psCcapConf->sPipeInfo_Planar.pu8FarmAddr + u32Offset);
u32Offset += ((psCcapConf->sPipeInfo_Planar.u32Height * psCcapConf->sPipeInfo_Planar.u32Width) / 2);
/* Set System Memory Planar V Base Address Register */
CCAP_SetPlanarVBuf(psNuCcap->base, (uint32_t)psCcapConf->sPipeInfo_Planar.pu8FarmAddr + u32Offset);
}
break;
default:
return -RT_ENOSYS;
}
......
......@@ -29,6 +29,8 @@ typedef enum
CCAP_CMD_STOP_CAPTURE,
CCAP_CMD_SET_SENCLK,
CCAP_CMD_SET_PIPES,
CCAP_CMD_SET_OPMODE,
CCAP_CMD_SET_BASEADDR,
} ccap_cmd;
typedef struct
......
......@@ -165,14 +165,14 @@ void EPWM1P2_IRQHandler(void)
static void nu_epwmcap_isr(nu_epwmcap_t psNuEpwmCap)
{
if (EPWM_GetCaptureIntFlag(psNuEpwmCap->base, psNuEpwmCap->u8Channel) != 0)
if (EPWM_GetCaptureIntFlag(psNuEpwmCap->base, psNuEpwmCap->u8Channel) != 0)
{
/* Calculate pulse width */
if (CalPulseWidth(psNuEpwmCap) == RT_EOK)
{
/* Calculate pulse width */
if (CalPulseWidth(psNuEpwmCap) == RT_EOK)
{
rt_hw_inputcapture_isr(&psNuEpwmCap->parent, psNuEpwmCap->input_data_level);
}
rt_hw_inputcapture_isr(&psNuEpwmCap->parent, psNuEpwmCap->input_data_level);
}
}
}
static rt_err_t CalPulseWidth(nu_epwmcap_t psNuEpwmCap)
......
......@@ -242,20 +242,20 @@ static rt_err_t vpost_layer_init(rt_device_t dev)
static void nu_vpost_calculate_fps(void)
{
#define DEF_PERIOD_SEC 10
static uint32_t u32LastTick=0;
static uint32_t u32VSyncBlank=0;
static uint32_t u32UnderRun=0;
#define DEF_PERIOD_SEC 10
static uint32_t u32LastTick = 0;
static uint32_t u32VSyncBlank = 0;
static uint32_t u32UnderRun = 0;
uint32_t u32CurrTick = rt_tick_get();
if ( (u32CurrTick-u32LastTick) > (DEF_PERIOD_SEC*RT_TICK_PER_SECOND) )
if ((u32CurrTick - u32LastTick) > (DEF_PERIOD_SEC * RT_TICK_PER_SECOND))
{
rt_kprintf("VPOST: %d FPS, URPS: %d\n",
(s_u32VSyncBlank-u32VSyncBlank)/DEF_PERIOD_SEC,
(s_u32UnderRun-u32UnderRun)/DEF_PERIOD_SEC);
rt_kprintf("VPOST: %d FPS, URPS: %d\n",
(s_u32VSyncBlank - u32VSyncBlank) / DEF_PERIOD_SEC,
(s_u32UnderRun - u32UnderRun) / DEF_PERIOD_SEC);
u32LastTick = u32CurrTick;
u32VSyncBlank = s_u32VSyncBlank;
u32UnderRun = s_u32UnderRun;
u32UnderRun = s_u32UnderRun;
}
}
......
Import('RTT_ROOT')
from building import *
cwd = GetCurrentDir()
group = []
if GetDepend('NU_PKG_USING_DEMO'):
src = Split("""
CPPPATH = [cwd]
src = Split("""
usbd_hid_dance_mouse.c
slcd_show_tick.c
usbd_cdc_vcom_echo.c
atdev_utils.c
""")
CPPPATH = [cwd]
group = DefineGroup('nu_pkgs_demo', src, depend = [''], CPPPATH = CPPPATH)
group = DefineGroup('nu_pkgs_demo', src, depend = ['NU_PKG_USING_DEMO'], CPPPATH = CPPPATH)
Return('group')
/**************************************************************************//**
*
* @copyright (C) 2019 Nuvoton Technology Corp. All rights reserved.
*
* SPDX-License-Identifier: Apache-2.0
*
* Change Logs:
* Date Author Notes
* 2022-9-19 Wayne First version
*
******************************************************************************/
#include <rtthread.h>
#if defined(PKG_USING_AT_DEVICE)
#include <at_device.h>
static void at_wifi_set(int argc, char **argv)
{
struct at_device_ssid_pwd sATDConf;
struct at_device *at_dev = RT_NULL;
/* If the number of arguments less than 2 */
if (argc != 3)
{
rt_kprintf("\n");
rt_kprintf("at_wifi_set <ssid> <password>\n");
return ;
}
sATDConf.ssid = argv[1]; //ssid
sATDConf.password = argv[2]; //password
if ((at_dev = at_device_get_first_initialized()) != RT_NULL)
at_device_control(at_dev, AT_DEVICE_CTRL_SET_WIFI_INFO, &sATDConf);
else
{
rt_kprintf("Can't find any initialized AT device.\n");
}
}
#ifdef FINSH_USING_MSH
MSH_CMD_EXPORT(at_wifi_set, AT device wifi set ssid / password function);
#endif
#endif /* #if defined(PKG_USING_AT_DEVICE) */
......@@ -92,10 +92,10 @@ static void tpc_entry(void *parameter)
u16X = read_data[i].x_coordinate;
u16Y = read_data[i].y_coordinate;
#if defined(NU_PKG_TPC_REVERSE_XY)
u16X = info.range_x - u16X;
u16Y = info.range_y - u16Y;
#endif
#if defined(NU_PKG_TPC_REVERSE_XY)
u16X = info.range_x - u16X;
u16Y = info.range_y - u16Y;
#endif
//rt_kprintf("[%d] %d %d\n", read_data[i].event, u16X, u16Y);
......
......@@ -80,7 +80,7 @@ CONFIG_RT_USING_DEVICE=y
CONFIG_RT_USING_CONSOLE=y
CONFIG_RT_CONSOLEBUF_SIZE=256
CONFIG_RT_CONSOLE_DEVICE_NAME="uart0"
CONFIG_RT_VER_NUM=0x40101
CONFIG_RT_VER_NUM=0x50000
CONFIG_ARCH_ARM=y
# CONFIG_RT_USING_CPU_FFS is not set
CONFIG_ARCH_ARM_ARM9=y
......@@ -423,23 +423,8 @@ CONFIG_UTEST_THR_PRIORITY=20
# CONFIG_PKG_USING_RW007 is not set
# CONFIG_PKG_USING_COAP is not set
# CONFIG_PKG_USING_NOPOLL is not set
CONFIG_PKG_USING_NETUTILS=y
CONFIG_PKG_NETUTILS_PATH="/packages/iot/netutils"
CONFIG_PKG_NETUTILS_TFTP=y
CONFIG_PKG_NETUTILS_IPERF=y
# CONFIG_PKG_NETUTILS_NETIO is not set
CONFIG_PKG_NETUTILS_NTP=y
CONFIG_NTP_USING_AUTO_SYNC=y
CONFIG_NTP_AUTO_SYNC_FIRST_DELAY=30
CONFIG_NTP_AUTO_SYNC_PERIOD=3600
CONFIG_NETUTILS_NTP_HOSTNAME="0.tw.pool.ntp.org"
CONFIG_NETUTILS_NTP_HOSTNAME2="1.tw.pool.ntp.org"
CONFIG_NETUTILS_NTP_HOSTNAME3="2.tw.pool.ntp.org"
# CONFIG_PKG_NETUTILS_TELNET is not set
# CONFIG_PKG_NETUTILS_TCPDUMP is not set
CONFIG_PKG_USING_NETUTILS_LATEST_VERSION=y
CONFIG_PKG_NETUTILS_VER="latest"
CONFIG_PKG_NETUTILS_VER_NUM=0x99999
# CONFIG_PKG_USING_NETUTILS is not set
# CONFIG_PKG_USING_NETUTILS_LATEST_VERSION is not set
# CONFIG_PKG_USING_CMUX is not set
# CONFIG_PKG_USING_PPP_DEVICE is not set
# CONFIG_PKG_USING_AT_DEVICE is not set
......@@ -881,66 +866,6 @@ CONFIG_PKG_OPTPARSE_VER="latest"
# CONFIG_PKG_USING_MFBD is not set
# CONFIG_PKG_USING_SLCAN2RTT is not set
# CONFIG_PKG_USING_SOEM is not set
# CONFIG_PKG_USING_QPARAM is not set
#
# Privated Packages of RealThread
#
# CONFIG_PKG_USING_CODEC is not set
# CONFIG_PKG_USING_PLAYER is not set
# CONFIG_PKG_USING_MPLAYER is not set
# CONFIG_PKG_USING_PERSIMMON_SRC is not set
# CONFIG_PKG_USING_JS_PERSIMMON is not set
# CONFIG_PKG_USING_JERRYSCRIPT_WIN32 is not set
#
# Network Utilities
#
# CONFIG_PKG_USING_MDNS is not set
# CONFIG_PKG_USING_UPNP is not set
# CONFIG_PKG_USING_WICED is not set
# CONFIG_PKG_USING_CLOUDSDK is not set
# CONFIG_PKG_USING_POWER_MANAGER is not set
# CONFIG_PKG_USING_RT_OTA is not set
# CONFIG_PKG_USING_RTINSIGHT is not set
# CONFIG_PKG_USING_SMARTCONFIG is not set
# CONFIG_PKG_USING_RTX is not set
# CONFIG_RT_USING_TESTCASE is not set
# CONFIG_PKG_USING_NGHTTP2 is not set
# CONFIG_PKG_USING_AVS is not set
# CONFIG_PKG_USING_ALI_LINKKIT is not set
# CONFIG_PKG_USING_STS is not set
# CONFIG_PKG_USING_DLMS is not set
# CONFIG_PKG_USING_AUDIO_FRAMEWORK is not set
# CONFIG_PKG_USING_ZBAR is not set
# CONFIG_PKG_USING_MCF is not set
# CONFIG_PKG_USING_URPC is not set
# CONFIG_PKG_USING_DCM is not set
# CONFIG_PKG_USING_EMQ is not set
# CONFIG_PKG_USING_CFGM is not set
# CONFIG_PKG_USING_RT_CMSIS_DAP is not set
# CONFIG_PKG_USING_SMODULE is not set
# CONFIG_PKG_USING_SNFD is not set
# CONFIG_PKG_USING_UDBD is not set
# CONFIG_PKG_USING_BENCHMARK is not set
# CONFIG_PKG_USING_UBJSON is not set
# CONFIG_PKG_USING_DATATYPE is not set
# CONFIG_PKG_USING_FASTFS is not set
# CONFIG_PKG_USING_RIL is not set
# CONFIG_PKG_USING_WATCH_DCM_SVC is not set
# CONFIG_PKG_USING_WATCH_APP_FWK is not set
# CONFIG_PKG_USING_GUI_TEST is not set
# CONFIG_PKG_USING_PMEM is not set
# CONFIG_PKG_USING_LWRDP is not set
# CONFIG_PKG_USING_MASAN is not set
# CONFIG_PKG_USING_BSDIFF_LIB is not set
# CONFIG_PKG_USING_PRC_DIFF is not set
#
# RT-Thread Smart
#
# CONFIG_PKG_USING_UKERNEL is not set
# CONFIG_PKG_USING_TRACE_AGENT is not set
#
# Hardware Drivers Config
......@@ -1060,6 +985,7 @@ CONFIG_NU_PKG_USING_DEMO=y
# CONFIG_NU_PKG_USING_LVGL is not set
# CONFIG_NU_PKG_USING_BMX055 is not set
# CONFIG_NU_PKG_USING_MAX31875 is not set
# CONFIG_NU_PKG_USING_NCT7717U is not set
# CONFIG_NU_PKG_USING_NAU88L25 is not set
CONFIG_NU_PKG_USING_NAU8822=y
# CONFIG_NU_PKG_USING_DA9062 is not set
......@@ -1069,3 +995,5 @@ CONFIG_NU_PKG_USING_NAU8822=y
# CONFIG_NU_PKG_USING_TPC is not set
# CONFIG_NU_PKG_USING_ADC_TOUCH is not set
CONFIG_NU_PKG_USING_SPINAND=y
CONFIG_UTEST_CMD_PREFIX="bsp.nuvoton.utest."
CONFIG_BOARD_USE_UTEST=y
......@@ -254,35 +254,6 @@ static int rt_hw_esp8266_port(void)
(void *) esp8266);
}
INIT_APP_EXPORT(rt_hw_esp8266_port);
static int at_wifi_set(int argc, char **argv)
{
struct at_device_ssid_pwd sATDConf;
struct at_device *at_dev = RT_NULL;
/* If the number of arguments less than 2 */
if (argc != 3)
{
rt_kprintf("\n");
rt_kprintf("at_wifi_set <ssid> <password>\n");
return -1;
}
sATDConf.ssid = argv[1]; //ssid
sATDConf.password = argv[2]; //password
if ((at_dev = at_device_get_first_initialized()) != RT_NULL)
at_device_control(at_dev, AT_DEVICE_CTRL_SET_WIFI_INFO, &sATDConf);
else
{
rt_kprintf("Can't find any initialized AT device.\n");
}
return 0;
}
#ifdef FINSH_USING_MSH
MSH_CMD_EXPORT(at_wifi_set, AT device wifi set ssid / password function);
#endif
#endif /* BOARD_USING_ESP8266 */
......
......@@ -85,8 +85,8 @@ static void nu_pin_can_init(void)
static void nu_pin_adc_init(void)
{
#if defined(BSP_USING_ADC_TOUCH)
GPIO_SetMode(PB, BIT4|BIT5|BIT6|BIT7, GPIO_MODE_INPUT);
GPIO_DISABLE_DIGITAL_PATH(PB, BIT4|BIT5|BIT6|BIT7);
GPIO_SetMode(PB, BIT4 | BIT5 | BIT6 | BIT7, GPIO_MODE_INPUT);
GPIO_DISABLE_DIGITAL_PATH(PB, BIT4 | BIT5 | BIT6 | BIT7);
#endif
}
......
......@@ -165,7 +165,6 @@ CONFIG_RT_USING_SERIAL_V1=y
CONFIG_RT_SERIAL_RB_BUFSZ=2048
CONFIG_RT_USING_CAN=y
# CONFIG_RT_CAN_USING_HDR is not set
# CONFIG_RT_CAN_USING_CANFD is not set
CONFIG_RT_USING_HWTIMER=y
# CONFIG_RT_USING_CPUTIME is not set
CONFIG_RT_USING_I2C=y
......@@ -491,7 +490,6 @@ CONFIG_UTEST_THR_PRIORITY=20
# CONFIG_PKG_USING_RAPIDJSON is not set
# CONFIG_PKG_USING_JSMN is not set
# CONFIG_PKG_USING_AGILE_JSMN is not set
# CONFIG_PKG_USING_PARSON is not set
#
# XML: Extensible Markup Language
......@@ -517,15 +515,10 @@ CONFIG_PKG_LVGL_PATH="/packages/multimedia/LVGL/LVGL"
CONFIG_PKG_LVGL_THREAD_PRIO=20
CONFIG_PKG_LVGL_THREAD_STACK_SIZE=4096
CONFIG_PKG_LVGL_DISP_REFR_PERIOD=30
# CONFIG_PKG_USING_LVGL_SQUARELINE is not set
# CONFIG_PKG_LVGL_USING_EXAMPLES is not set
CONFIG_PKG_LVGL_USING_DEMOS=y
# CONFIG_PKG_LVGL_USING_V08020 is not set
# CONFIG_PKG_LVGL_USING_V08030 is not set
CONFIG_PKG_LVGL_USING_V08031=y
# CONFIG_PKG_LVGL_USING_LATEST_VERSION is not set
CONFIG_PKG_LVGL_VER_NUM=0x08031
CONFIG_PKG_LVGL_VER="v8.3.1"
CONFIG_PKG_LVGL_VER_NUM=0x99999
CONFIG_PKG_LVGL_VER="latest"
# CONFIG_PKG_USING_LITTLEVGL2RTT is not set
# CONFIG_PKG_USING_LV_MUSIC_DEMO is not set
# CONFIG_PKG_USING_GUI_GUIDER_DEMO is not set
......@@ -606,7 +599,6 @@ CONFIG_PKG_LVGL_VER="v8.3.1"
# CONFIG_PKG_USING_SNOWFLAKE is not set
# CONFIG_PKG_USING_HASH_MATCH is not set
# CONFIG_PKG_USING_FIRE_PID_CURVE is not set
# CONFIG_PKG_USING_ARMV7M_DWT_TOOL is not set
#
# system packages
......@@ -619,6 +611,14 @@ CONFIG_PKG_LVGL_VER="v8.3.1"
# CONFIG_PKG_USING_RT_KPRINTF_THREADSAFE is not set
# CONFIG_PKG_USING_RT_VSNPRINTF_FULL is not set
#
# POSIX extension functions
#
# CONFIG_PKG_USING_POSIX_GETLINE is not set
# CONFIG_PKG_USING_POSIX_WCWIDTH is not set
# CONFIG_PKG_USING_POSIX_ITOA is not set
# CONFIG_PKG_USING_POSIX_STRINGS is not set
#
# acceleration: Assembly language or algorithmic acceleration packages
#
......@@ -643,11 +643,9 @@ CONFIG_PKG_LVGL_VER="v8.3.1"
# CONFIG_PKG_USING_UC_COMMON is not set
# CONFIG_PKG_USING_UC_MODBUS is not set
# CONFIG_PKG_USING_RTDUINO is not set
# CONFIG_PKG_USING_FREERTOS_WRAPPER is not set
# CONFIG_PKG_USING_CAIRO is not set
# CONFIG_PKG_USING_PIXMAN is not set
# CONFIG_PKG_USING_PARTITION is not set
# CONFIG_PKG_USING_PERF_COUNTER is not set
# CONFIG_PKG_USING_FLASHDB is not set
# CONFIG_PKG_USING_SQLITE is not set
# CONFIG_PKG_USING_RTI is not set
......@@ -689,10 +687,8 @@ CONFIG_PKG_RAMDISK_VER="latest"
# CONFIG_PKG_USING_REALTEK_AMEBA is not set
# CONFIG_PKG_USING_SHT2X is not set
# CONFIG_PKG_USING_SHT3X is not set
# CONFIG_PKG_USING_ADT74XX is not set
# CONFIG_PKG_USING_AS7341 is not set
# CONFIG_PKG_USING_STM32_SDIO is not set
# CONFIG_PKG_USING_ESP_IDF is not set
# CONFIG_PKG_USING_ICM20608 is not set
# CONFIG_PKG_USING_BUTTON is not set
# CONFIG_PKG_USING_PCF8574 is not set
......@@ -704,11 +700,6 @@ CONFIG_PKG_RAMDISK_VER="latest"
# CONFIG_PKG_USING_NRF5X_SDK is not set
# CONFIG_PKG_USING_NRFX is not set
# CONFIG_PKG_USING_WM_LIBRARIES is not set
#
# Kendryte SDK
#
# CONFIG_PKG_USING_K210_SDK is not set
# CONFIG_PKG_USING_KENDRYTE_SDK is not set
# CONFIG_PKG_USING_INFRARED is not set
# CONFIG_PKG_USING_MULTI_INFRARED is not set
......@@ -769,8 +760,6 @@ CONFIG_PKG_RAMDISK_VER="latest"
# CONFIG_PKG_USING_MB85RS16 is not set
# CONFIG_PKG_USING_CW2015 is not set
# CONFIG_PKG_USING_RFM300 is not set
# CONFIG_PKG_USING_IO_INPUT_FILTER is not set
# CONFIG_PKG_USING_RASPBERRYPI_PICO_SDK is not set
#
# AI packages
......@@ -846,66 +835,6 @@ CONFIG_PKG_RAMDISK_VER="latest"
# CONFIG_PKG_USING_MFBD is not set
# CONFIG_PKG_USING_SLCAN2RTT is not set
# CONFIG_PKG_USING_SOEM is not set
# CONFIG_PKG_USING_QPARAM is not set
#
# Privated Packages of RealThread
#
# CONFIG_PKG_USING_CODEC is not set
# CONFIG_PKG_USING_PLAYER is not set
# CONFIG_PKG_USING_MPLAYER is not set
# CONFIG_PKG_USING_PERSIMMON_SRC is not set
# CONFIG_PKG_USING_JS_PERSIMMON is not set
# CONFIG_PKG_USING_JERRYSCRIPT_WIN32 is not set
#
# Network Utilities
#
# CONFIG_PKG_USING_MDNS is not set
# CONFIG_PKG_USING_UPNP is not set
# CONFIG_PKG_USING_WICED is not set
# CONFIG_PKG_USING_CLOUDSDK is not set
# CONFIG_PKG_USING_POWER_MANAGER is not set
# CONFIG_PKG_USING_RT_OTA is not set
# CONFIG_PKG_USING_RTINSIGHT is not set
# CONFIG_PKG_USING_SMARTCONFIG is not set
# CONFIG_PKG_USING_RTX is not set
# CONFIG_RT_USING_TESTCASE is not set
# CONFIG_PKG_USING_NGHTTP2 is not set
# CONFIG_PKG_USING_AVS is not set
# CONFIG_PKG_USING_ALI_LINKKIT is not set
# CONFIG_PKG_USING_STS is not set
# CONFIG_PKG_USING_DLMS is not set
# CONFIG_PKG_USING_AUDIO_FRAMEWORK is not set
# CONFIG_PKG_USING_ZBAR is not set
# CONFIG_PKG_USING_MCF is not set
# CONFIG_PKG_USING_URPC is not set
# CONFIG_PKG_USING_DCM is not set
# CONFIG_PKG_USING_EMQ is not set
# CONFIG_PKG_USING_CFGM is not set
# CONFIG_PKG_USING_RT_CMSIS_DAP is not set
# CONFIG_PKG_USING_SMODULE is not set
# CONFIG_PKG_USING_SNFD is not set
# CONFIG_PKG_USING_UDBD is not set
# CONFIG_PKG_USING_BENCHMARK is not set
# CONFIG_PKG_USING_UBJSON is not set
# CONFIG_PKG_USING_DATATYPE is not set
# CONFIG_PKG_USING_FASTFS is not set
# CONFIG_PKG_USING_RIL is not set
# CONFIG_PKG_USING_WATCH_DCM_SVC is not set
# CONFIG_PKG_USING_WATCH_APP_FWK is not set
# CONFIG_PKG_USING_GUI_TEST is not set
# CONFIG_PKG_USING_PMEM is not set
# CONFIG_PKG_USING_LWRDP is not set
# CONFIG_PKG_USING_MASAN is not set
# CONFIG_PKG_USING_BSDIFF_LIB is not set
# CONFIG_PKG_USING_PRC_DIFF is not set
#
# RT-Thread Smart
#
# CONFIG_PKG_USING_UKERNEL is not set
# CONFIG_PKG_USING_TRACE_AGENT is not set
#
# Hardware Drivers Config
......
......@@ -80,7 +80,7 @@ CONFIG_RT_USING_DEVICE=y
CONFIG_RT_USING_CONSOLE=y
CONFIG_RT_CONSOLEBUF_SIZE=256
CONFIG_RT_CONSOLE_DEVICE_NAME="uart0"
CONFIG_RT_VER_NUM=0x40101
CONFIG_RT_VER_NUM=0x50000
CONFIG_ARCH_ARM=y
# CONFIG_RT_USING_CPU_FFS is not set
CONFIG_ARCH_ARM_ARM9=y
......@@ -429,23 +429,8 @@ CONFIG_UTEST_THR_PRIORITY=20
# CONFIG_PKG_USING_RW007 is not set
# CONFIG_PKG_USING_COAP is not set
# CONFIG_PKG_USING_NOPOLL is not set
CONFIG_PKG_USING_NETUTILS=y
CONFIG_PKG_NETUTILS_PATH="/packages/iot/netutils"
CONFIG_PKG_NETUTILS_TFTP=y
CONFIG_PKG_NETUTILS_IPERF=y
# CONFIG_PKG_NETUTILS_NETIO is not set
CONFIG_PKG_NETUTILS_NTP=y
CONFIG_NTP_USING_AUTO_SYNC=y
CONFIG_NTP_AUTO_SYNC_FIRST_DELAY=30
CONFIG_NTP_AUTO_SYNC_PERIOD=3600
CONFIG_NETUTILS_NTP_HOSTNAME="0.tw.pool.ntp.org"
CONFIG_NETUTILS_NTP_HOSTNAME2="1.tw.pool.ntp.org"
CONFIG_NETUTILS_NTP_HOSTNAME3="2.tw.pool.ntp.org"
# CONFIG_PKG_NETUTILS_TELNET is not set
# CONFIG_PKG_NETUTILS_TCPDUMP is not set
CONFIG_PKG_USING_NETUTILS_LATEST_VERSION=y
CONFIG_PKG_NETUTILS_VER="latest"
CONFIG_PKG_NETUTILS_VER_NUM=0x99999
# CONFIG_PKG_USING_NETUTILS is not set
# CONFIG_PKG_USING_NETUTILS_LATEST_VERSION is not set
# CONFIG_PKG_USING_CMUX is not set
# CONFIG_PKG_USING_PPP_DEVICE is not set
# CONFIG_PKG_USING_AT_DEVICE is not set
......@@ -870,66 +855,6 @@ CONFIG_PKG_OPTPARSE_VER="latest"
# CONFIG_PKG_USING_MFBD is not set
# CONFIG_PKG_USING_SLCAN2RTT is not set
# CONFIG_PKG_USING_SOEM is not set
# CONFIG_PKG_USING_QPARAM is not set
#
# Privated Packages of RealThread
#
# CONFIG_PKG_USING_CODEC is not set
# CONFIG_PKG_USING_PLAYER is not set
# CONFIG_PKG_USING_MPLAYER is not set
# CONFIG_PKG_USING_PERSIMMON_SRC is not set
# CONFIG_PKG_USING_JS_PERSIMMON is not set
# CONFIG_PKG_USING_JERRYSCRIPT_WIN32 is not set
#
# Network Utilities
#
# CONFIG_PKG_USING_MDNS is not set
# CONFIG_PKG_USING_UPNP is not set
# CONFIG_PKG_USING_WICED is not set
# CONFIG_PKG_USING_CLOUDSDK is not set
# CONFIG_PKG_USING_POWER_MANAGER is not set
# CONFIG_PKG_USING_RT_OTA is not set
# CONFIG_PKG_USING_RTINSIGHT is not set
# CONFIG_PKG_USING_SMARTCONFIG is not set
# CONFIG_PKG_USING_RTX is not set
# CONFIG_RT_USING_TESTCASE is not set
# CONFIG_PKG_USING_NGHTTP2 is not set
# CONFIG_PKG_USING_AVS is not set
# CONFIG_PKG_USING_ALI_LINKKIT is not set
# CONFIG_PKG_USING_STS is not set
# CONFIG_PKG_USING_DLMS is not set
# CONFIG_PKG_USING_AUDIO_FRAMEWORK is not set
# CONFIG_PKG_USING_ZBAR is not set
# CONFIG_PKG_USING_MCF is not set
# CONFIG_PKG_USING_URPC is not set
# CONFIG_PKG_USING_DCM is not set
# CONFIG_PKG_USING_EMQ is not set
# CONFIG_PKG_USING_CFGM is not set
# CONFIG_PKG_USING_RT_CMSIS_DAP is not set
# CONFIG_PKG_USING_SMODULE is not set
# CONFIG_PKG_USING_SNFD is not set
# CONFIG_PKG_USING_UDBD is not set
# CONFIG_PKG_USING_BENCHMARK is not set
# CONFIG_PKG_USING_UBJSON is not set
# CONFIG_PKG_USING_DATATYPE is not set
# CONFIG_PKG_USING_FASTFS is not set
# CONFIG_PKG_USING_RIL is not set
# CONFIG_PKG_USING_WATCH_DCM_SVC is not set
# CONFIG_PKG_USING_WATCH_APP_FWK is not set
# CONFIG_PKG_USING_GUI_TEST is not set
# CONFIG_PKG_USING_PMEM is not set
# CONFIG_PKG_USING_LWRDP is not set
# CONFIG_PKG_USING_MASAN is not set
# CONFIG_PKG_USING_BSDIFF_LIB is not set
# CONFIG_PKG_USING_PRC_DIFF is not set
#
# RT-Thread Smart
#
# CONFIG_PKG_USING_UKERNEL is not set
# CONFIG_PKG_USING_TRACE_AGENT is not set
#
# Hardware Drivers Config
......@@ -1040,6 +965,7 @@ CONFIG_NU_PKG_USING_DEMO=y
# CONFIG_NU_PKG_USING_LVGL is not set
# CONFIG_NU_PKG_USING_BMX055 is not set
# CONFIG_NU_PKG_USING_MAX31875 is not set
# CONFIG_NU_PKG_USING_NCT7717U is not set
# CONFIG_NU_PKG_USING_NAU88L25 is not set
# CONFIG_NU_PKG_USING_NAU8822 is not set
# CONFIG_NU_PKG_USING_DA9062 is not set
......@@ -1049,3 +975,5 @@ CONFIG_NU_PKG_USING_DEMO=y
# CONFIG_NU_PKG_USING_TPC is not set
# CONFIG_NU_PKG_USING_ADC_TOUCH is not set
# CONFIG_NU_PKG_USING_SPINAND is not set
CONFIG_UTEST_CMD_PREFIX="bsp.nuvoton.utest."
CONFIG_BOARD_USE_UTEST=y
此差异已折叠。
mainmenu "RT-Thread Configuration"
config BSP_DIR
string
option env="BSP_ROOT"
default "."
config RTT_DIR
string
option env="RTT_ROOT"
default "../../.."
# you can change the RTT_ROOT default "../../.." to your rtthread_root,
# example : default "F:/git_repositories/rt-thread"
config PKGS_DIR
string
option env="PKGS_ROOT"
default "packages"
source "$RTT_DIR/Kconfig"
source "$PKGS_DIR/Kconfig"
source "$BSP_DIR/board/Kconfig"
# NuMaker-IoT-M467
## 1. Introduction
NuMaker-IoT-M467 provides multiple networking, interfaces, and flexible extended data storage. Whether you need a sensor node or a light-weight gateway, the NuMaker-IoT-M467 is an ideal choice for IoT applications.
The M467HJ target board is based on NuMicro M467HJHAN. For the development flexibility, the M467HJ target board provides the extension connectors, the Arduino UNO, mikroBUS compatible headers and the capability of adopting multiple power supplies.
The NuMaker-IoT-M467 is an evaluation board for Nuvoton NuMicro M467HJ microcontrollers. The NuMaker-IoT-M467 consists of two parts: an M467HJ target board and an on-board Nu-Link2-Me debugger and programmer. The NuMaker-IoT-M467 is designed for project evaluation, prototype development and validation with power consumption monitoring function.
![NuMaker-IoT-M467](./figures/NuMaker-IoT-M467-V1_F.png)
### 1.1 MCU specification
| | Features |
| -- | -- |
| MCU | M467HJHAN |
| Operation frequency | 200 MHz |
| embedded Flash size | 1 MB, Dual Bank |
| SRAM size | 512 kB |
| Crypto engine | TRNG, PRNG, AES, SHA/HMAC, RSA, and ECC crypto accelerator |
| RMII interface | Support 10/100 Mbps Ethernet |
### 1.2 Interface
| Interface |
| -- |
| An Arduino UNO compatible extension connector |
| Two mikroBUS compatible extension connector |
| RJ45 Ethernet port |
| USB 1.1/2.0 OTG ports |
| A microSD slot |
| A CAN FD communication port |
| Debug through SWD interface |
### 1.3 On-board devices
| Device | Description | Driver supporting status |
| -- | -- | -- |
| SPI flash | 32Mb, W25Q32 | Supported |
| Wi-Fi | ESP8266 | Supported |
| Ethernet PHY | RTL8201F | Supported |
| Thermal Sensor | NCT7717U | Supported |
| 6-axis MotionTracking Sensor | MPU6500 | Supported |
### 1.4 Board extended module
| Device | Description | Driver supporting status |
| -- | -- | -- |
| LCD Panel(NuTFT V1.2) | ILI9341(over spi2) | Supported |
| Touch screen | ADC S/W touch(over eadc0) | Supported |
## 2. Supported compiler
Support GCC, MDK5, IAR IDE/compilers. More information of these compiler version as following:
| IDE/Compiler | Tested version |
| ---------- | ---------------------------- |
| MDK5 | 5.26.2 |
| IAR | 8.2 |
| GCC | GCC 5.4.1 20160919 (release) |
Notice: Please install Nu-Link_Keil_Driver or Nu-Link_IAR_Driver for development.
## 3. Program firmware
### Step 1
At first, you need to configure switch on the NuMaker-IoT-M467 board. Set the No.1/2 switches to ‘ON’ position. After the configuration is done, connect the NuMaker-IoT-M467 board and your computer using the USB Micro cable. After that, window manager will show a ‘NuMicro MCU’ virtual disk. Finally, you will use this virtual disk to burn firmware.
![NuLinkMe2_SwitchSetting](./figures/NuLinkMe_SwitchSetting.png)
![NuMicro MCU](./figures/NuMicro_MCU_Disk.png)
### Step 2
A simple firmware burning method is that you can drag and drop the binary image file to NuMicro MCU virtual disk or copy the binary file to NuMicro MCU disk to burn firmware.
![Sendto](./figures/Sendto.png)
## 4. Test
You can use Tera Term terminate emulator (or other software) to type commands of RTT. All parameters of serial communication are shown in below image. Here, you can find out the corresponding port number of Nuvoton Virtual Com Port in window device manager.
![Serial settings](./figures/SerialSetting.png)
## 5. Purchase
* [Nuvoton Direct][1]
## 6. Resources
* [Download Board User Manual][2]
* [Download MCU TRM][3]
* [Download MCU Datasheet][4]
[1]: https://direct.nuvoton.com/en/numaker-iot-m467
[2]: https://Coming_soon
[3]: https://www.nuvoton.com/resource-download.jsp?tp_GUID=DA05-M460
[4]: https://www.nuvoton.com/resource-download.jsp?tp_GUID=DA00-M460
# for module compiling
import os
Import('RTT_ROOT')
cwd = str(Dir('#'))
objs = []
list = os.listdir(cwd)
for d in list:
path = os.path.join(cwd, d)
if os.path.isfile(os.path.join(path, 'SConscript')):
objs = objs + SConscript(os.path.join(d, 'SConscript'))
Return('objs')
import os
import sys
import rtconfig
if os.getenv('RTT_ROOT'):
RTT_ROOT = os.getenv('RTT_ROOT')
else:
RTT_ROOT = os.path.normpath(os.getcwd() + '/../../..')
sys.path = sys.path + [os.path.join(RTT_ROOT, 'tools')]
try:
from building import *
except:
print('Cannot found RT-Thread root directory, please check RTT_ROOT')
print(RTT_ROOT)
exit(-1)
TARGET = 'rtthread.' + rtconfig.TARGET_EXT
DefaultEnvironment(tools=[])
env = Environment(tools = ['mingw'],
AS = rtconfig.AS, ASFLAGS = rtconfig.AFLAGS,
CC = rtconfig.CC, CFLAGS = rtconfig.CFLAGS,
AR = rtconfig.AR, ARFLAGS = '-rc',
LINK = rtconfig.LINK, LINKFLAGS = rtconfig.LFLAGS)
env.PrependENVPath('PATH', rtconfig.EXEC_PATH)
if rtconfig.PLATFORM in ['iccarm']:
env.Replace(CCCOM = ['$CC $CFLAGS $CPPFLAGS $_CPPDEFFLAGS $_CPPINCFLAGS -o $TARGET $SOURCES'])
env.Replace(ARFLAGS = [''])
env.Replace(LINKCOM = env["LINKCOM"] + ' --map rt-thread.map')
Export('RTT_ROOT')
Export('rtconfig')
SDK_ROOT = os.path.abspath('./')
if os.path.exists(SDK_ROOT + '/libraries'):
libraries_path_prefix = SDK_ROOT + '/libraries'
else:
libraries_path_prefix = os.path.dirname(SDK_ROOT) + '/libraries'
SDK_LIB = libraries_path_prefix
Export('SDK_LIB')
# prepare building environment
objs = PrepareBuilding(env, RTT_ROOT, has_libcpu=False)
nuvoton_library = 'm460'
rtconfig.BSP_LIBRARY_TYPE = nuvoton_library
# include libraries
objs.extend(SConscript(os.path.join(libraries_path_prefix, nuvoton_library, 'SConscript')))
# include nu_pkgs
objs.extend(SConscript(os.path.join(libraries_path_prefix, 'nu_packages', 'SConscript')))
# make a building
DoBuilding(TARGET, objs)
# RT-Thread building script for component
from building import *
cwd = GetCurrentDir()
objs = []
list = os.listdir(cwd)
for d in list:
path = os.path.join(cwd, d)
if os.path.isfile(os.path.join(path, 'SConscript')):
objs = objs + SConscript(os.path.join(d, 'SConscript'))
src = Glob('*.c') + Glob('*.cpp')
CPPPATH = [cwd, str(Dir('#'))]
group = DefineGroup('Applications', src, depend = [''], CPPPATH = CPPPATH)
objs = objs + group
Return('objs')
from building import *
cwd = GetCurrentDir()
src = Glob('*.c')
CPPPATH = [cwd]
group = DefineGroup('LVGL-port', src, depend = ['PKG_USING_LVGL'], CPPPATH = CPPPATH)
Return('group')
/*
* Copyright (c) 2006-2022, RT-Thread Development Team
*
* SPDX-License-Identifier: Apache-2.0
*
* Change Logs:
* Date Author Notes
* 2022-2-17 Wayne First version
*/
#ifndef LV_CONF_H
#define LV_CONF_H
#include "rtconfig.h"
#define LV_COLOR_DEPTH BSP_LCD_BPP
#define LV_HOR_RES_MAX BSP_LCD_WIDTH
#define LV_VER_RES_MAX BSP_LCD_HEIGHT
#define LV_FONT_MONTSERRAT_12 1
#define LV_FONT_MONTSERRAT_16 1
#define LV_USE_PERF_MONITOR 1
//#define CONFIG_LV_LOG_LEVEL LV_LOG_LEVEL_TRACE
//#define LV_USE_DEMO_RTT_MUSIC 1
#if LV_USE_DEMO_RTT_MUSIC
#define LV_COLOR_SCREEN_TRANSP 1
#define LV_DEMO_RTT_MUSIC_AUTO_PLAY 1
#define LV_USE_DEMO_MUSIC 1
#define LV_DEMO_MUSIC_AUTO_PLAY 1
#endif
/* Please comment LV_USE_DEMO_RTT_MUSIC declaration before un-comment below */
#define LV_USE_DEMO_WIDGETS 1
//#define LV_USE_DEMO_BENCHMARK 1
#endif
/*
* Copyright (c) 2006-2022, RT-Thread Development Team
*
* SPDX-License-Identifier: Apache-2.0
*
* Change Logs:
* Date Author Notes
* 2022-6-1 Wayne First version
*/
#include <lvgl.h>
void lv_user_gui_init(void)
{
/* display demo; you may replace with your LVGL application at here and disable related definitions. */
#if LV_USE_DEMO_BENCHMARK
extern void lv_demo_benchmark(void);
lv_demo_benchmark();
#endif
#if LV_USE_DEMO_WIDGETS
extern void lv_demo_widgets(void);
lv_demo_widgets();
#endif
#if LV_USE_DEMO_MUSIC || LV_USE_DEMO_RTT_MUSIC
extern void lv_demo_music(void);
lv_demo_music();
#endif
}
/*
* Copyright (c) 2006-2022, RT-Thread Development Team
*
* SPDX-License-Identifier: Apache-2.0
*
* Change Logs:
* Date Author Notes
* 2021-12-17 Wayne The first version
*/
#include <lvgl.h>
#define LOG_TAG "lvgl.disp"
#define DBG_ENABLE
#define DBG_SECTION_NAME LOG_TAG
#define DBG_LEVEL DBG_ERROR
#define DBG_COLOR
#include <rtdbg.h>
/*A static or global variable to store the buffers*/
static lv_disp_draw_buf_t disp_buf;
static lv_disp_drv_t disp_drv; /*Descriptor of a display driver*/
static rt_device_t lcd_device = 0;
static struct rt_device_graphic_info info;
static void lcd_fb_flush(lv_disp_drv_t *disp_drv, const lv_area_t *area, lv_color_t *color_p)
{
/* Rendering */
struct rt_device_rect_info rect;
rect.x = area->x1;
rect.y = area->y1;
rect.width = area->x2 - area->x1 + 1;
rect.height = area->y2 - area->y1 + 1;
rt_device_control(lcd_device, RTGRAPHIC_CTRL_RECT_UPDATE, &rect);
lv_disp_flush_ready(disp_drv);
}
void lcd_perf_monitor(struct _lv_disp_drv_t *disp_drv, uint32_t time, uint32_t px)
{
rt_kprintf("Elapsed: %dms, Pixel: %d, Bytes:%d\n", time, px, px * sizeof(lv_color_t));
}
void lv_port_disp_init(void)
{
rt_err_t result;
void *buf1 = RT_NULL;
lcd_device = rt_device_find("lcd");
if (lcd_device == 0)
{
LOG_E("error!");
return;
}
/* get framebuffer address */
result = rt_device_control(lcd_device, RTGRAPHIC_CTRL_GET_INFO, &info);
if (result != RT_EOK && info.framebuffer == RT_NULL)
{
LOG_E("error!");
/* get device information failed */
return;
}
RT_ASSERT(info.bits_per_pixel == 8 || info.bits_per_pixel == 16 ||
info.bits_per_pixel == 24 || info.bits_per_pixel == 32);
buf1 = (void *)info.framebuffer;
rt_kprintf("LVGL: Use one buffers - buf1@%08x, size: %d bytes\n", buf1, info.smem_len);
/*Initialize `disp_buf` with the buffer(s).*/
lv_disp_draw_buf_init(&disp_buf, buf1, RT_NULL, info.smem_len / (info.bits_per_pixel / 8));
result = rt_device_open(lcd_device, 0);
if (result != RT_EOK)
{
LOG_E("error!");
return;
}
lv_disp_drv_init(&disp_drv); /*Basic initialization*/
/*Set the resolution of the display*/
disp_drv.hor_res = info.width;
disp_drv.ver_res = info.height;
/*Set a display buffer*/
disp_drv.draw_buf = &disp_buf;
/*Write the internal buffer (draw_buf) to the display*/
disp_drv.flush_cb = lcd_fb_flush;
/* Called after every refresh cycle to tell the rendering and flushing time + the number of flushed pixels */
//disp_drv.monitor_cb = lcd_perf_monitor;
/*Finally register the driver*/
lv_disp_drv_register(&disp_drv);
}
/*
* Copyright (c) 2006-2022, RT-Thread Development Team
*
* SPDX-License-Identifier: Apache-2.0
*
* Change Logs:
* Date Author Notes
* 2021-10-18 Meco Man The first version
*/
#ifndef LV_PORT_DISP_H
#define LV_PORT_DISP_H
#ifdef __cplusplus
extern "C" {
#endif
void lv_port_disp_init(void);
#ifdef __cplusplus
} /*extern "C"*/
#endif
#endif
/*
* Copyright (c) 2006-2022, RT-Thread Development Team
*
* SPDX-License-Identifier: Apache-2.0
*
* Change Logs:
* Date Author Notes
* 2021-10-18 Meco Man The first version
* 2021-12-17 Wayne Add input event
*/
#include <lvgl.h>
#include <stdbool.h>
#include <rtdevice.h>
#include "touch.h"
static lv_indev_state_t last_state = LV_INDEV_STATE_REL;
static rt_int16_t last_x = 0;
static rt_int16_t last_y = 0;
static void input_read(lv_indev_drv_t *indev_drv, lv_indev_data_t *data)
{
data->point.x = last_x;
data->point.y = last_y;
data->state = last_state;
}
void nu_touch_inputevent_cb(rt_int16_t x, rt_int16_t y, rt_uint8_t state)
{
switch (state)
{
case RT_TOUCH_EVENT_UP:
last_state = LV_INDEV_STATE_RELEASED;
break;
case RT_TOUCH_EVENT_MOVE:
case RT_TOUCH_EVENT_DOWN:
last_x = x;
last_y = y;
last_state = LV_INDEV_STATE_PRESSED;
break;
}
}
void lv_port_indev_init(void)
{
static lv_indev_drv_t indev_drv;
/* Basic initialization */
lv_indev_drv_init(&indev_drv);
indev_drv.type = LV_INDEV_TYPE_POINTER;
indev_drv.read_cb = input_read;
/* Register the driver in LVGL and save the created input device object */
lv_indev_drv_register(&indev_drv);
}
/*
* Copyright (c) 2006-2022, RT-Thread Development Team
*
* SPDX-License-Identifier: Apache-2.0
*
* Change Logs:
* Date Author Notes
* 2021-10-18 Meco Man The first version
*/
#ifndef LV_PORT_INDEV_H
#define LV_PORT_INDEV_H
#ifdef __cplusplus
extern "C" {
#endif
#include <lv_hal_indev.h>
extern lv_indev_t *button_indev;
void lv_port_indev_init(void);
void lv_port_indev_input(rt_int16_t x, rt_int16_t y, lv_indev_state_t state);
#ifdef __cplusplus
} /*extern "C"*/
#endif
#endif
/**************************************************************************//**
* @copyright (C) 2019 Nuvoton Technology Corp. All rights reserved.
*
* SPDX-License-Identifier: Apache-2.0
*
* Change Logs:
* Date Author Notes
* 2020-1-16 Wayne First version
*
******************************************************************************/
#include <rtconfig.h>
#include <rtdevice.h>
#include <drv_gpio.h>
/* defined the LEDR pin: PH4 */
#define LEDR NU_GET_PININDEX(NU_PH, 4)
/* defined the LEDG pin: PH6 */
#define LEDG NU_GET_PININDEX(NU_PH, 6)
int main(int argc, char **argv)
{
#if defined(RT_USING_PIN)
int counter = 0;
/* set pin mode to output */
rt_pin_mode(LEDR, PIN_MODE_OUTPUT);
rt_pin_mode(LEDG, PIN_MODE_OUTPUT);
while (counter++ < 10)
{
rt_pin_write(LEDR, PIN_HIGH);
rt_pin_write(LEDG, PIN_LOW);
rt_thread_mdelay(500);
rt_pin_write(LEDR, PIN_LOW);
rt_pin_write(LEDG, PIN_HIGH);
rt_thread_mdelay(500);
}
#endif
return 0;
}
/**************************************************************************//**
*
* @copyright (C) 2019 Nuvoton Technology Corp. All rights reserved.
*
* SPDX-License-Identifier: Apache-2.0
*
* Change Logs:
* Date Author Notes
* 2022-3-12 Wayne First version
*
******************************************************************************/
#include <rtthread.h>
#define LOG_TAG "mnt"
#define DBG_ENABLE
#define DBG_SECTION_NAME "mnt"
#define DBG_LEVEL DBG_ERROR
#define DBG_COLOR
#include <rtdbg.h>
#include <dfs_fs.h>
#include <dfs_file.h>
#include <unistd.h>
#include <stdio.h>
#include <sys/stat.h>
#include <sys/statfs.h>
#if defined(RT_USING_FAL)
#include <fal.h>
#endif
#if defined(BOARD_USING_STORAGE_SPIFLASH)
#define PARTITION_NAME_FILESYSTEM "filesystem"
#define MOUNT_POINT_SPIFLASH0 "/"
#endif
#ifdef RT_USING_DFS_MNTTABLE
/*
const char *device_name;
const char *path;
const char *filesystemtype;
unsigned long rwflag;
const void *data;
*/
const struct dfs_mount_tbl mount_table[] =
{
{ "sd0", "/mnt/sd0", "elm", 0, RT_NULL },
{ "sd0p0", "/mnt/sd0p0", "elm", 0, RT_NULL },
{ "sd0p1", "/mnt/sd0p1", "elm", 0, RT_NULL },
{ "sd1", "/mnt/sd1", "elm", 0, RT_NULL },
{ "sd1p0", "/mnt/sd1p0", "elm", 0, RT_NULL },
{ "sd1p1", "/mnt/sd1p1", "elm", 0, RT_NULL },
{0},
};
#endif
/* Recursive mkdir */
#if defined(RT_USBH_MSTORAGE) && defined(UDISK_MOUNTPOINT)
static int mkdir_p(const char *dir, const mode_t mode)
{
int ret = -1;
char *tmp = NULL;
char *p = NULL;
struct stat sb;
rt_size_t len;
if (!dir)
goto exit_mkdir_p;
/* Copy path */
/* Get the string length */
len = strlen(dir);
tmp = rt_strdup(dir);
/* Remove trailing slash */
if (tmp[len - 1] == '/')
{
tmp[len - 1] = '\0';
len--;
}
/* check if path exists and is a directory */
if (stat(tmp, &sb) == 0)
{
if (S_ISDIR(sb.st_mode))
{
ret = 0;
goto exit_mkdir_p;
}
}
/* Recursive mkdir */
for (p = tmp + 1; p - tmp <= len; p++)
{
if ((*p == '/') || (p - tmp == len))
{
*p = 0;
/* Test path */
if (stat(tmp, &sb) != 0)
{
/* Path does not exist - create directory */
if (mkdir(tmp, mode) < 0)
{
goto exit_mkdir_p;
}
}
else if (!S_ISDIR(sb.st_mode))
{
/* Not a directory */
goto exit_mkdir_p;
}
if (p - tmp != len)
*p = '/';
}
}
ret = 0;
exit_mkdir_p:
if (tmp)
rt_free(tmp);
return ret;
}
#endif
#if defined(BOARD_USING_STORAGE_SPIFLASH)
int mnt_init_spiflash0(void)
{
#if defined(RT_USING_FAL)
extern int fal_init_check(void);
if (!fal_init_check())
fal_init();
#endif
struct rt_device *psNorFlash = fal_blk_device_create(PARTITION_NAME_FILESYSTEM);
if (!psNorFlash)
{
rt_kprintf("Failed to create block device for %s.\n", PARTITION_NAME_FILESYSTEM);
goto exit_mnt_init_spiflash0;
}
else if (dfs_mount(psNorFlash->parent.name, MOUNT_POINT_SPIFLASH0, "elm", 0, 0) != 0)
{
rt_kprintf("Failed to mount elm on %s.\n", MOUNT_POINT_SPIFLASH0);
rt_kprintf("Try to execute 'mkfs -t elm %s' first, then reboot.\n", PARTITION_NAME_FILESYSTEM);
goto exit_mnt_init_spiflash0;
}
rt_kprintf("mount %s with elmfat type: ok\n", PARTITION_NAME_FILESYSTEM);
mkdir_p("/mnt/sd0", 0x777);
mkdir_p("/mnt/sd0p0", 0x777);
mkdir_p("/mnt/sd0p1", 0x777);
mkdir_p("/mnt/sd1", 0x777);
mkdir_p("/mnt/sd1p0", 0x777);
mkdir_p("/mnt/sd1p1", 0x777);
#if defined(RT_USBH_MSTORAGE) && defined(UDISK_MOUNTPOINT)
if (mkdir_p(UDISK_MOUNTPOINT, 0) < 0)
{
rt_kprintf("Failed to create directory on %s for RT_USBH_MSTORAGE.\n", UDISK_MOUNTPOINT);
}
#endif
exit_mnt_init_spiflash0:
return 0;
}
INIT_APP_EXPORT(mnt_init_spiflash0);
#endif
menu "Hardware Drivers Config"
menu "On-chip Peripheral Drivers"
source "$BSP_DIR/../libraries/m460/rtt_port/Kconfig"
endmenu
menu "On-board Peripheral Drivers"
config BSP_USING_NULINKME
bool "Enable UART0 for RTT Console(uart0)"
select BSP_USING_UART
select BSP_USING_UART0
default y
config BOARD_USING_RTL8201FI
bool "Enable Ethernet phy supporting(over emac/mdio)"
select BSP_USING_EMAC
default n
config BOARD_USING_ESP8266
bool "ESP8266 Wi-Fi module supporting(over uart2)"
select BSP_USING_UART
select BSP_USING_UART2
select BSP_USING_UART2_RX_DMA
select BSP_USING_UART2_TX_DMA
select PKG_USING_AT_DEVICE
select AT_DEVICE_USING_ESP8266
select AT_DEVICE_ESP8266_INIT_ASYN
default y
config BOARD_USING_STORAGE_SDCARD
bool "SDCARD supporting(over sdh0)"
select BSP_USING_SDH
select BSP_USING_SDH0
default y
config BOARD_USING_STORAGE_SPIFLASH
bool "SPIFLASH supporting(over qspi0)"
select BSP_USING_QSPI
select BSP_USING_QSPI0
default y
config BOARD_USING_CANFD0
bool "CAN-FD supporting(over canfd0)"
select BSP_USING_CANFD
select BSP_USING_CANFD0
default y
config BOARD_USING_NCT7717U
bool "Thermal Sensor(over i2c2)"
select NU_PKG_USING_NCT7717U
select BSP_USING_I2C
select BSP_USING_I2C2
default y
config BOARD_USING_MPU6500
bool "MPU6500 6-axis MotionTracking Sensor(over i2c2)"
select PKG_USING_MPU6XXX
select BSP_USING_I2C
select BSP_USING_I2C2
default y
config BOARD_USING_USB_D_H
bool "Enable USB Device or Host function"
help
Choose this option if you need USB function.
if BOARD_USING_USB_D_H
choice
prompt "Select FS/HS USB Ports"
config BOARD_USING_HSUSBD
select BSP_USING_HSUSBD
bool "Enable HSUSBD(over USB2.0)"
help
Choose this option if you need HSUSBD function mode.
config BOARD_USING_HSUSBD_USBH
select BSP_USING_USBH
select BSP_USING_HSUSBD
bool "Enable HSUSBD(over USB2.0) and USBH(over USB1.1)"
help
Choose this option if you need HSUSBD and USBH function mode at the same time.
config BOARD_USING_HSUSBH
select BSP_USING_HSUSBH
bool "Enable HSUSBH(over USB2.0)"
help
Choose this option if you need HSUSBH function mode.
config BOARD_USING_HSUSBH_USBD
select BSP_USING_HSUSBH
select BSP_USING_USBD
bool "Enable HSUSBH(over USB2.0) and USBD(over USB1.1)"
help
Choose this option if you need HSUSBH and USBD function mode at the same time.
config BOARD_USING_HSOTG
select BSP_USING_HSOTG
bool "Enable HSOTG(over USB2.0)"
help
Choose this option if you need HSOTG function mode.
endchoice
endif
endmenu
menu "Board extended module drivers"
config BOARD_USING_LCD_ILI9341
bool "LCD ILI9341 (over spi2)"
select RT_USING_TOUCH
select BSP_USING_SPI2
select BSP_USING_EADC
select BSP_USING_EADC0
select NU_PKG_USING_ADC_TOUCH
select NU_PKG_USING_ADC_TOUCH_SW
select NU_PKG_USING_ILI9341
select NU_PKG_USING_ILI9341_SPI
select NU_PKG_ILI9341_WITH_OFFSCREEN_FRAMEBUFFER
select NU_PKG_ILI9341_HORIZONTAL
default n
if BOARD_USING_LCD_ILI9341
config BOARD_USING_ILI9341_PIN_BACKLIGHT
int "Specify the pin index of backlight pin index"
range 0 127
default 21
config BOARD_USING_ILI9341_PIN_RESET
int "Specify the pin index of reset pin index"
range 0 127
default 19
config BOARD_USING_ILI9341_PIN_DC
int "Specify the pin index of data&command switching"
range 0 127
default 18
endif
endmenu
source "$BSP_DIR/../libraries/nu_packages/Kconfig"
endmenu
/****************************************************************************
* @file nutool_pincfg.cfg
* @version V1.24
* @Date 2022/09/15-10:20:54
* @brief NuMicro config file
*
* @note Please do not modify this file.
* Otherwise, it may not be loaded successfully.
*
* SPDX-License-Identifier: Apache-2.0
*
* Copyright (C) 2013-2022 Nuvoton Technology Corp. All rights reserved.
*****************************************************************************/
MCU:M467HJHAE(LQFP176)
Pin1:EPWM0_CH0
Pin2:EPWM0_CH1
Pin3:UART1_TXD
Pin4:UART1_RXD
Pin5:EPWM1_CH0
Pin6:EPWM1_CH1
Pin7:EPWM1_CH2
Pin8:EPWM1_CH3
Pin9:EADC0_CH1
Pin10:EADC0_CH0
Pin11:VSS
Pin12:VDD
Pin13:SPI2_SS
Pin14:SPI2_CLK
Pin15:SPI2_MISO
Pin16:SPI2_MOSI
Pin17:PC.13
Pin18:PD.12
Pin19:EADC1_CH1
Pin20:EADC1_CH0
Pin21:VSS
Pin22:VDD
Pin23:I2C3_SCL
Pin24:I2C3_SDA
Pin25:I2C1_SCL
Pin26:I2C1_SDA
Pin27:PG.4
Pin28:PI.6
Pin29:SPI1_MISO
Pin30:SPI1_MOSI
Pin31:SPI1_CLK
Pin32:SPI1_SS
Pin33:PI.11
Pin34:UART5_TXD
Pin35:UART5_RXD
Pin36:PF.9
Pin37:PF.8
Pin38:UART4_TXD
Pin39:UART4_RXD
Pin40:VBAT
Pin41:X32_IN
Pin42:X32_OUT
Pin43:PH.0
Pin44:PH.1
Pin45:PH.2
Pin46:PH.3
Pin47:PH.4
Pin48:PH.5
Pin49:PH.6
Pin50:PH.7
Pin51:XT1_IN
Pin52:XT1_OUT
Pin53:VSS
Pin54:VDD
Pin55:EMAC0_RMII_MDC
Pin56:EMAC0_RMII_MDIO
Pin57:EMAC0_RMII_TXD0
Pin58:EMAC0_RMII_TXD1
Pin59:EMAC0_RMII_TXEN
Pin60:PE.13
Pin61:EMAC0_RMII_REFCLK
Pin62:EMAC0_RMII_RXD0
Pin63:EMAC0_RMII_RXD1
Pin64:EMAC0_RMII_CRSDV
Pin65:EMAC0_RMII_RXERR
Pin66:SPIM_SS
Pin67:SPIM_MISO
Pin68:SPIM_D2
Pin69:SPIM_D3
Pin70:SPIM_CLK
Pin71:SPIM_MOSI
Pin72:VSS
Pin73:VDD
Pin74:LDO_CAP
Pin75:QSPI0_MISO1
Pin76:QSPI0_MOSI1
Pin77:QSPI0_SS
Pin78:QSPI0_CLK
Pin79:QSPI0_MISO0
Pin80:QSPI0_MOSI0
Pin81:VDDIO
Pin82:PE.14
Pin83:PE.15
Pin84:nRESET
Pin85:ICE_DAT
Pin86:ICE_CLK
Pin87:PD.9
Pin88:PD.8
Pin89:PC.5
Pin90:PC.4
Pin91:UART2_nRTS
Pin92:UART2_nCTS
Pin93:UART2_TXD
Pin94:UART2_RXD
Pin95:VSS
Pin96:VDD
Pin97:I2C4_SCL
Pin98:I2C4_SDA
Pin99:PG.11
Pin100:PG.12
Pin101:PG.13
Pin102:PG.14
Pin103:PG.15
Pin104:PJ.2
Pin105:PJ.3
Pin106:PJ.4
Pin107:PJ.5
Pin108:PJ.6
Pin109:PJ.7
Pin110:PH.12
Pin111:PH.13
Pin112:PH.14
Pin113:PH.15
Pin114:PD.7
Pin115:PD.6
Pin116:PD.5
Pin117:PD.4
Pin118:PD.3
Pin119:PD.2
Pin120:I2C2_SCL
Pin121:I2C2_SDA
Pin122:SD0_nCD
Pin123:USB_VBUS
Pin124:USB_D-
Pin125:USB_D+
Pin126:USB_OTG_ID
Pin127:HSUSB_VRES
Pin128:HSUSB_VDD33
Pin129:HSUSB_VBUS
Pin130:HSUSB_D-
Pin131:HSUSB_VSS
Pin132:HSUSB_D+
Pin133:HSUSB_VDD12_CAP
Pin134:HSUSB_ID
Pin135:SD0_CMD
Pin136:SD0_CLK
Pin137:SD0_DAT3
Pin138:SD0_DAT2
Pin139:SD0_DAT1
Pin140:SD0_DAT0
Pin141:VSS
Pin142:VDD
Pin143:PE.1
Pin144:PE.0
Pin145:PH.8
Pin146:PH.9
Pin147:PH.10
Pin148:EPWM0_CH5
Pin149:EPWM0_CH4
Pin150:PJ.8
Pin151:PJ.9
Pin152:CAN0_TXD
Pin153:CAN0_RXD
Pin154:HSUSB_VBUS_ST
Pin155:HSUSB_VBUS_EN
Pin156:SPI3_SS
Pin157:SPI3_CLK
Pin158:SPI3_MISO
Pin159:SPI3_MOSI
Pin160:VSS
Pin161:LDO_CAP
Pin162:VDD
Pin163:USB_VBUS_ST
Pin164:USB_VBUS_EN
Pin165:PB.14
Pin166:UART0_TXD
Pin167:UART0_RXD
Pin168:AVDD
Pin169:VREF
Pin170:AVSS
Pin171:PB.11
Pin172:PB.10
Pin173:EADC0_CH9
Pin174:EADC0_CH8
Pin175:EADC0_CH7
Pin176:EADC0_CH6
GPIOpin:26
GPIOpin:27
GPIOpin:35
GPIOpin:36
GPIOpin:44
GPIOpin:45
GPIOpin:46
GPIOpin:47
GPIOpin:48
GPIOpin:49
GPIOpin:81
GPIOpin:82
GPIOpin:86
GPIOpin:87
GPIOpin:88
GPIOpin:89
GPIOpin:98
GPIOpin:99
GPIOpin:100
GPIOpin:101
GPIOpin:102
GPIOpin:103
GPIOpin:104
GPIOpin:105
GPIOpin:106
GPIOpin:107
GPIOpin:108
GPIOpin:109
GPIOpin:110
GPIOpin:111
GPIOpin:112
GPIOpin:113
GPIOpin:114
GPIOpin:115
GPIOpin:116
GPIOpin:117
GPIOpin:118
GPIOpin:142
GPIOpin:143
GPIOpin:144
GPIOpin:145
GPIOpin:146
GPIOpin:149
GPIOpin:150
SYS->GPA_MFP0 = 0x03030303
SYS->GPA_MFP1 = 0x03030303
SYS->GPA_MFP2 = 0x04040404
SYS->GPA_MFP3 = 0x0E0E0E0E
SYS->GPB_MFP0 = 0x06060101
SYS->GPB_MFP1 = 0x01010B0B
SYS->GPB_MFP2 = 0x00000101
SYS->GPB_MFP3 = 0x0E000606
SYS->GPC_MFP0 = 0x08080808
SYS->GPC_MFP1 = 0x03030000
SYS->GPC_MFP2 = 0x0C0C0C03
SYS->GPC_MFP3 = 0x000E000C
SYS->GPD_MFP0 = 0x00000606
SYS->GPD_MFP1 = 0x00000000
SYS->GPD_MFP2 = 0x01010000
SYS->GPD_MFP3 = 0x000B0300
SYS->GPE_MFP0 = 0x03030000
SYS->GPE_MFP1 = 0x03030303
SYS->GPE_MFP2 = 0x03030303
SYS->GPE_MFP3 = 0x00000003
SYS->GPF_MFP0 = 0x0A0A0E0E
SYS->GPF_MFP1 = 0x06060A0A
SYS->GPF_MFP2 = 0x06060000
SYS->GPG_MFP0 = 0x05050909
SYS->GPG_MFP1 = 0x03030300
SYS->GPG_MFP2 = 0x00080803
SYS->GPG_MFP3 = 0x00000000
SYS->GPH_MFP0 = 0x00000000
SYS->GPH_MFP1 = 0x00000000
SYS->GPH_MFP2 = 0x0B000000
SYS->GPH_MFP3 = 0x00000000
SYS->GPI_MFP1 = 0x07000000
SYS->GPI_MFP2 = 0x00070707
SYS->GPI_MFP3 = 0x03030303
SYS->GPJ_MFP0 = 0x00000303
SYS->GPJ_MFP1 = 0x00000000
SYS->GPJ_MFP2 = 0x0B0B0000
SYS->GPJ_MFP3 = 0x00000F0F
/*** (C) COPYRIGHT 2013-2022 Nuvoton Technology Corp. ***/
/****************************************************************************
* @file nutool_pincfg.h
* @version V1.24
* @Date 2022/09/15-10:20:52
* @brief NuMicro generated code file
*
* SPDX-License-Identifier: Apache-2.0
*
* Copyright (C) 2013-2022 Nuvoton Technology Corp. All rights reserved.
*****************************************************************************/
#ifndef __NUTOOL_PINCFG_H__
#define __NUTOOL_PINCFG_H__
#ifdef __cplusplus
extern "C"
{
#endif
void nutool_pincfg_init_can0(void);
void nutool_pincfg_deinit_can0(void);
void nutool_pincfg_init_eadc0(void);
void nutool_pincfg_deinit_eadc0(void);
void nutool_pincfg_init_eadc1(void);
void nutool_pincfg_deinit_eadc1(void);
void nutool_pincfg_init_emac0(void);
void nutool_pincfg_deinit_emac0(void);
void nutool_pincfg_init_epwm0(void);
void nutool_pincfg_deinit_epwm0(void);
void nutool_pincfg_init_epwm1(void);
void nutool_pincfg_deinit_epwm1(void);
void nutool_pincfg_init_hsusb(void);
void nutool_pincfg_deinit_hsusb(void);
void nutool_pincfg_init_i2c1(void);
void nutool_pincfg_deinit_i2c1(void);
void nutool_pincfg_init_i2c2(void);
void nutool_pincfg_deinit_i2c2(void);
void nutool_pincfg_init_i2c3(void);
void nutool_pincfg_deinit_i2c3(void);
void nutool_pincfg_init_i2c4(void);
void nutool_pincfg_deinit_i2c4(void);
void nutool_pincfg_init_ice(void);
void nutool_pincfg_deinit_ice(void);
void nutool_pincfg_init_pc(void);
void nutool_pincfg_deinit_pc(void);
void nutool_pincfg_init_pd(void);
void nutool_pincfg_deinit_pd(void);
void nutool_pincfg_init_pe(void);
void nutool_pincfg_deinit_pe(void);
void nutool_pincfg_init_pf(void);
void nutool_pincfg_deinit_pf(void);
void nutool_pincfg_init_pg(void);
void nutool_pincfg_deinit_pg(void);
void nutool_pincfg_init_ph(void);
void nutool_pincfg_deinit_ph(void);
void nutool_pincfg_init_pi(void);
void nutool_pincfg_deinit_pi(void);
void nutool_pincfg_init_pj(void);
void nutool_pincfg_deinit_pj(void);
void nutool_pincfg_init_qspi0(void);
void nutool_pincfg_deinit_qspi0(void);
void nutool_pincfg_init_sd0(void);
void nutool_pincfg_deinit_sd0(void);
void nutool_pincfg_init_spi1(void);
void nutool_pincfg_deinit_spi1(void);
void nutool_pincfg_init_spi2(void);
void nutool_pincfg_deinit_spi2(void);
void nutool_pincfg_init_spi3(void);
void nutool_pincfg_deinit_spi3(void);
void nutool_pincfg_init_spim(void);
void nutool_pincfg_deinit_spim(void);
void nutool_pincfg_init_uart0(void);
void nutool_pincfg_deinit_uart0(void);
void nutool_pincfg_init_uart1(void);
void nutool_pincfg_deinit_uart1(void);
void nutool_pincfg_init_uart2(void);
void nutool_pincfg_deinit_uart2(void);
void nutool_pincfg_init_uart4(void);
void nutool_pincfg_deinit_uart4(void);
void nutool_pincfg_init_uart5(void);
void nutool_pincfg_deinit_uart5(void);
void nutool_pincfg_init_usb(void);
void nutool_pincfg_deinit_usb(void);
void nutool_pincfg_init_x32(void);
void nutool_pincfg_deinit_x32(void);
void nutool_pincfg_init_xt1(void);
void nutool_pincfg_deinit_xt1(void);
void nutool_pincfg_init(void);
void nutool_pincfg_deinit(void);
#ifdef __cplusplus
}
#endif
#endif /*__NUTOOL_PINCFG_H__*/
/*** (C) COPYRIGHT 2013-2022 Nuvoton Technology Corp. ***/
# RT-Thread building script for component
from building import *
Import('RTT_ROOT')
from building import *
cwd = GetCurrentDir()
src = Split("""
NuPinConfig/nutool_pincfg.c
""")
src += Glob('*.c') + Glob('*.cpp')
CPPPATH = [cwd, cwd + '/NuPinConfig']
group = DefineGroup('Drivers', src, depend = [''], CPPPATH = CPPPATH)
Return('group')
/**************************************************************************//**
*
* @copyright (C) 2020 Nuvoton Technology Corp. All rights reserved.
*
* SPDX-License-Identifier: Apache-2.0
*
* Change Logs:
* Date Author Notes
* 2022-2-23 Wayne First version
*
******************************************************************************/
#ifndef __BOARD_H__
#define __BOARD_H__
#include "rtconfig.h"
// <o> Internal SRAM memory size[Kbytes]
#define SRAM_SIZE (512)
#define SRAM_END (0x20000000 + SRAM_SIZE * 1024)
#if defined(__ARMCC_VERSION)
extern int Image$$RW_IRAM1$$ZI$$Limit;
#define HEAP_BEGIN ((void *)&Image$$RW_IRAM1$$ZI$$Limit)
#elif __ICCARM__
#pragma section="CSTACK"
#define HEAP_BEGIN (__segment_end("CSTACK"))
#else
extern int __bss_end;
#define HEAP_BEGIN ((void *)&__bss_end)
#endif
#define HEAP_END (void *)SRAM_END
void rt_hw_board_init(void);
void rt_hw_cpu_reset(void);
#endif /* BOARD_H_ */
此差异已折叠。
/**************************************************************************//**
*
* @copyright (C) 2020 Nuvoton Technology Corp. All rights reserved.
*
* SPDX-License-Identifier: Apache-2.0
*
* Change Logs:
* Date Author Notes
* 2022-4-1 Wayne First version
*
******************************************************************************/
#ifndef _FAL_CFG_H_
#define _FAL_CFG_H_
#include <rtconfig.h>
#include <board.h>
/* ===================== Flash device Configuration ========================= */
#if defined(FAL_PART_HAS_TABLE_CFG)
#if defined(BSP_USING_FMC)
extern const struct fal_flash_dev Onchip_aprom_flash;
extern const struct fal_flash_dev Onchip_ldrom_flash;
#endif
#if defined(FAL_USING_SFUD_PORT)
extern struct fal_flash_dev nor_flash0;
#endif
#if defined(BSP_USING_FMC) && defined(FAL_USING_SFUD_PORT)
#define FAL_FLASH_DEV_TABLE \
{ \
&Onchip_aprom_flash, \
&Onchip_ldrom_flash, \
&nor_flash0, \
}
#elif defined(BSP_USING_FMC)
#define FAL_FLASH_DEV_TABLE \
{ \
&Onchip_aprom_flash, \
&Onchip_ldrom_flash, \
&nor_flash0, \
}
#elif defined(FAL_USING_SFUD_PORT)
#define FAL_FLASH_DEV_TABLE \
{ \
&nor_flash0, \
}
#else
#define FAL_FLASH_DEV_TABLE \
{ \
}
#endif
#define FAL_PART_TABLE \
{ \
{FAL_PART_MAGIC_WORD, "filesystem", FAL_USING_NOR_FLASH_DEV_NAME, 0, 4*1024*1024, 0}, \
{FAL_PART_MAGIC_WORD, "ldrom", "OnChip_LDROM", 0, 0x1000, 0}, \
{FAL_PART_MAGIC_WORD, "aprom", "OnChip_APROM", 0x60000, 0x20000, 0}, \
}
#endif /* FAL_PART_HAS_TABLE_CFG */
#endif /* _FAL_CFG_H_ */
/****************************************************************************
* @file nutool_clkcfg.h
* @version V1.05
* @Date 2020/04/15-11:28:38
* @brief NuMicro generated code file
*
* SPDX-License-Identifier: Apache-2.0
* Copyright (C) 2013-2020 Nuvoton Technology Corp. All rights reserved.
*****************************************************************************/
#ifndef __NUTOOL_CLKCFG_H__
#define __NUTOOL_CLKCFG_H__
#ifdef __cplusplus
extern "C"
{
#endif
#undef __HXT
#define __HXT (12000000UL) /*!< High Speed External Crystal Clock Frequency */
#ifdef __cplusplus
}
#endif
#endif /*__NUTOOL_CLKCFG_H__*/
/*** (C) COPYRIGHT 2013-2020 Nuvoton Technology Corp. ***/
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
<?xml version="1.0" encoding="iso-8859-1"?>
<workspace>
<project>
<path>$WS_DIR$\Template.ewp</path>
</project>
<batchBuild/>
</workspace>
此差异已折叠。
此差异已折叠。
此差异已折叠。
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册