[bsp][ch32] add eth driver
This commit is contained in:
parent
f4cb323919
commit
a4a5953256
|
@ -36,6 +36,9 @@ if GetDepend('SOC_RISCV_FAMILY_CH32'):
|
||||||
if GetDepend('BSP_USING_USBD'):
|
if GetDepend('BSP_USING_USBD'):
|
||||||
src += ['drv_usbd.c']
|
src += ['drv_usbd.c']
|
||||||
|
|
||||||
|
if GetDepend('BSP_USING_ETH'):
|
||||||
|
src += ['drv_eth.c']
|
||||||
|
|
||||||
if GetDepend('BSP_USING_IWDT'):
|
if GetDepend('BSP_USING_IWDT'):
|
||||||
src += ['drv_iwdt.c']
|
src += ['drv_iwdt.c']
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,775 @@
|
||||||
|
/*
|
||||||
|
* File : drv_usart.c
|
||||||
|
* This file is part of RT-Thread RTOS
|
||||||
|
* COPYRIGHT (C) 2006-2024, RT-Thread Development Team
|
||||||
|
*
|
||||||
|
* The license and distribution terms for this file may be
|
||||||
|
* found in the file LICENSE in this distribution or at
|
||||||
|
* http://www.rt-thread.org/license/LICENSE
|
||||||
|
*
|
||||||
|
* Change Logs:
|
||||||
|
* Date Author Notes
|
||||||
|
* 2021-09-09 WCH the first version
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "board.h"
|
||||||
|
#include <rtdevice.h>
|
||||||
|
|
||||||
|
|
||||||
|
#ifdef BSP_USING_ETH
|
||||||
|
#include <netif/ethernetif.h>
|
||||||
|
#include "lwipopts.h"
|
||||||
|
#include <drv_eth.h>
|
||||||
|
|
||||||
|
//#define DRV_DEBUG
|
||||||
|
#define LOG_TAG "drv.eth"
|
||||||
|
#include <drv_log.h>
|
||||||
|
|
||||||
|
#define MAX_ADDR_LEN 6
|
||||||
|
#define ETH_DMARxDesc_FrameLengthShift 16
|
||||||
|
|
||||||
|
#define define_O(a,b) \
|
||||||
|
GPIO_InitStructure.GPIO_Pin = b;\
|
||||||
|
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;\
|
||||||
|
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;\
|
||||||
|
GPIO_Init(a, &GPIO_InitStructure)
|
||||||
|
|
||||||
|
#define define_I(a,b) \
|
||||||
|
GPIO_InitStructure.GPIO_Pin = b;\
|
||||||
|
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;\
|
||||||
|
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;\
|
||||||
|
GPIO_Init(a, &GPIO_InitStructure)
|
||||||
|
|
||||||
|
|
||||||
|
/* globe variable */
|
||||||
|
extern ETH_DMADESCTypeDef *DMATxDescToSet; //set tx Desc then send it
|
||||||
|
extern ETH_DMADESCTypeDef *DMARxDescToGet; //current rx Desc
|
||||||
|
|
||||||
|
|
||||||
|
/* rt-thread eth */
|
||||||
|
struct rt_ch32_eth
|
||||||
|
{
|
||||||
|
/* inherit from ethernet device */
|
||||||
|
struct eth_device parent;
|
||||||
|
#ifndef PHY_USING_INTERRUPT_MODE
|
||||||
|
rt_timer_t poll_link_timer;
|
||||||
|
#endif
|
||||||
|
/* interface address info, hw address */
|
||||||
|
rt_uint8_t dev_addr[MAX_ADDR_LEN];
|
||||||
|
/* ETH_Speed */
|
||||||
|
uint32_t ETH_Speed;
|
||||||
|
/* ETH_Duplex_Mode */
|
||||||
|
uint32_t ETH_Mode;
|
||||||
|
};
|
||||||
|
|
||||||
|
static ETH_DMADESCTypeDef DMARxDscrTab[ETH_RXBUFNB], DMATxDscrTab[ETH_TXBUFNB];
|
||||||
|
static rt_uint8_t Rx_Buff[ETH_RXBUFNB][ETH_MAX_PACKET_SIZE],Tx_Buff[ETH_TXBUFNB][ETH_MAX_PACKET_SIZE];
|
||||||
|
struct rt_ch32_eth ch32v30x_eth_device;
|
||||||
|
|
||||||
|
|
||||||
|
//#define ETH_RX_DUMP
|
||||||
|
#if defined(ETH_RX_DUMP) || defined(ETH_TX_DUMP)
|
||||||
|
#define __is_print(ch) ((unsigned int)((ch) - ' ') < 127u - ' ')
|
||||||
|
static void dump_hex(const rt_uint8_t *ptr, rt_size_t buflen)
|
||||||
|
{
|
||||||
|
unsigned char *buf = (unsigned char *)ptr;
|
||||||
|
int i, j;
|
||||||
|
|
||||||
|
for (i = 0; i < buflen; i += 16)
|
||||||
|
{
|
||||||
|
rt_kprintf("%08X: ", i);
|
||||||
|
|
||||||
|
for (j = 0; j < 16; j++)
|
||||||
|
if (i + j < buflen)
|
||||||
|
rt_kprintf("%02X ", buf[i + j]);
|
||||||
|
else
|
||||||
|
rt_kprintf(" ");
|
||||||
|
rt_kprintf(" ");
|
||||||
|
|
||||||
|
for (j = 0; j < 16; j++)
|
||||||
|
if (i + j < buflen)
|
||||||
|
rt_kprintf("%c", __is_print(buf[i + j]) ? buf[i + j] : '.');
|
||||||
|
rt_kprintf("\r\n");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
/* received data */
|
||||||
|
FrameTypeDef ETH_RxPkt_ChainMode(void)
|
||||||
|
{
|
||||||
|
u32 framelength = 0;
|
||||||
|
FrameTypeDef frame = {0,0,NULL};
|
||||||
|
|
||||||
|
/* Check if the descriptor is owned by the ETHERNET DMA (when set) or CPU (when reset) */
|
||||||
|
if((DMARxDescToGet->Status & ETH_DMARxDesc_OWN) != (u32)RESET)
|
||||||
|
{
|
||||||
|
frame.length = ETH_ERROR;
|
||||||
|
if ((ETH->DMASR & ETH_DMASR_RBUS) != (u32)RESET)
|
||||||
|
{
|
||||||
|
/* Clear RBUS ETHERNET DMA flag */
|
||||||
|
ETH->DMASR = ETH_DMASR_RBUS;
|
||||||
|
/* Resume DMA reception */
|
||||||
|
ETH->DMARPDR = 0;
|
||||||
|
}
|
||||||
|
LOG_E("Error:ETH_DMARxDesc_OWN.\r\n");
|
||||||
|
/* Return error: OWN bit set */
|
||||||
|
return frame;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(
|
||||||
|
((DMARxDescToGet->Status & ETH_DMARxDesc_ES) == (u32)RESET) &&
|
||||||
|
((DMARxDescToGet->Status & ETH_DMARxDesc_LS) != (u32)RESET) &&
|
||||||
|
((DMARxDescToGet->Status & ETH_DMARxDesc_FS) != (u32)RESET))
|
||||||
|
{
|
||||||
|
/* Get the Frame Length of the received packet: substruct 4 bytes of the CRC */
|
||||||
|
framelength = ((DMARxDescToGet->Status & ETH_DMARxDesc_FL) >> ETH_DMARxDesc_FrameLengthShift) - 4;
|
||||||
|
|
||||||
|
/* Get the addrees of the actual buffer */
|
||||||
|
frame.buffer = DMARxDescToGet->Buffer1Addr;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
/* Return ERROR */
|
||||||
|
framelength = ETH_ERROR;
|
||||||
|
rt_kprintf("Error:recv error frame,status:0x%08x.\r\n",DMARxDescToGet->Status);
|
||||||
|
}
|
||||||
|
DMARxDescToGet->Status|=ETH_DMARxDesc_OWN;
|
||||||
|
frame.length = framelength;
|
||||||
|
frame.descriptor = DMARxDescToGet;
|
||||||
|
|
||||||
|
/* Update the ETHERNET DMA global Rx descriptor with next Rx decriptor */
|
||||||
|
/* Chained Mode */
|
||||||
|
/* Selects the next DMA Rx descriptor list for next buffer to read */
|
||||||
|
DMARxDescToGet = (ETH_DMADESCTypeDef*) (DMARxDescToGet->Buffer2NextDescAddr);
|
||||||
|
/* Return Frame */
|
||||||
|
return (frame);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/*******************************************************************************
|
||||||
|
* Function Name : GETH_pin_init
|
||||||
|
* Description : PHY RGMII interface GPIO initialization.
|
||||||
|
* Input : None.
|
||||||
|
* Return : None.
|
||||||
|
*******************************************************************************/
|
||||||
|
void GETH_pin_init(void)
|
||||||
|
{
|
||||||
|
GPIO_InitTypeDef GPIO_InitStructure;
|
||||||
|
|
||||||
|
/* PB12/13 set AF_PP_OUT */
|
||||||
|
RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE);
|
||||||
|
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOB|RCC_APB2Periph_GPIOC, ENABLE);
|
||||||
|
GPIOB->CFGHR&=~(0xff<<16);
|
||||||
|
GPIOB->CFGHR|= (0xbb<<16);
|
||||||
|
GPIOB->CFGLR&=~(0xff<<4);
|
||||||
|
|
||||||
|
define_O(GPIOA,GPIO_Pin_2);
|
||||||
|
define_O(GPIOA,GPIO_Pin_3);
|
||||||
|
define_O(GPIOA,GPIO_Pin_7);
|
||||||
|
define_O(GPIOC,GPIO_Pin_4);
|
||||||
|
define_O(GPIOC,GPIO_Pin_5);
|
||||||
|
define_O(GPIOB,GPIO_Pin_0);
|
||||||
|
|
||||||
|
define_I(GPIOC,GPIO_Pin_0);
|
||||||
|
define_I(GPIOC,GPIO_Pin_1);
|
||||||
|
define_I(GPIOC,GPIO_Pin_2);
|
||||||
|
define_I(GPIOC,GPIO_Pin_3);
|
||||||
|
define_I(GPIOA,GPIO_Pin_0);
|
||||||
|
define_I(GPIOA,GPIO_Pin_1);
|
||||||
|
|
||||||
|
define_I(GPIOB,GPIO_Pin_1);/* 125m in */
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/*******************************************************************************
|
||||||
|
* Function Name : GETH_pin_init
|
||||||
|
* Description : PHY MII/RMII interface GPIO initialization.
|
||||||
|
* Input : None.
|
||||||
|
* Return : None.
|
||||||
|
*******************************************************************************/
|
||||||
|
void FETH_pin_init(void)
|
||||||
|
{
|
||||||
|
GPIO_InitTypeDef GPIO_InitStructure;
|
||||||
|
|
||||||
|
#ifdef USE_RMII
|
||||||
|
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOB|RCC_APB2Periph_GPIOC|RCC_APB2Periph_AFIO, ENABLE);
|
||||||
|
GPIO_ETH_MediaInterfaceConfig(GPIO_ETH_MediaInterface_RMII);
|
||||||
|
define_O(GPIOA,GPIO_Pin_2);/* MDC */
|
||||||
|
define_O(GPIOC,GPIO_Pin_1);/* MDIO */
|
||||||
|
|
||||||
|
define_O(GPIOB,GPIO_Pin_11);//txen
|
||||||
|
define_O(GPIOB,GPIO_Pin_12);//txd0
|
||||||
|
define_O(GPIOB,GPIO_Pin_13);//txd1
|
||||||
|
|
||||||
|
define_I(GPIOA,GPIO_Pin_1);/* PA1 REFCLK */
|
||||||
|
define_I(GPIOA,GPIO_Pin_7);/* PA7 CRSDV */
|
||||||
|
define_I(GPIOC,GPIO_Pin_4);/* RXD0 */
|
||||||
|
define_I(GPIOC,GPIO_Pin_5);/* RXD1 */
|
||||||
|
|
||||||
|
#else
|
||||||
|
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOB|RCC_APB2Periph_GPIOC, ENABLE);
|
||||||
|
/* tx */
|
||||||
|
define_O(GPIOA,GPIO_Pin_2);/* MDC */
|
||||||
|
define_O(GPIOC,GPIO_Pin_1);/* MDIO */
|
||||||
|
|
||||||
|
define_I(GPIOC,GPIO_Pin_3);//txclk
|
||||||
|
define_O(GPIOB,GPIO_Pin_11);//txen
|
||||||
|
define_O(GPIOB,GPIO_Pin_12);//txd0
|
||||||
|
define_O(GPIOB,GPIO_Pin_13);//txd1
|
||||||
|
define_O(GPIOC,GPIO_Pin_2); //txd2
|
||||||
|
define_O(GPIOB,GPIO_Pin_8);//txd3
|
||||||
|
/* tx */
|
||||||
|
define_I(GPIOA,GPIO_Pin_1);/* PA1 RXC */
|
||||||
|
define_I(GPIOA,GPIO_Pin_7);/* PA7 RXDV */
|
||||||
|
define_I(GPIOC,GPIO_Pin_4);/* RXD0 */
|
||||||
|
define_I(GPIOC,GPIO_Pin_5);/* RXD1 */
|
||||||
|
define_I(GPIOB,GPIO_Pin_0);/* RXD2 */
|
||||||
|
define_I(GPIOB,GPIO_Pin_1);/* RXD3 */
|
||||||
|
define_I(GPIOB,GPIO_Pin_10);/* RXER */
|
||||||
|
|
||||||
|
define_O(GPIOA,GPIO_Pin_0);/* PA0 */
|
||||||
|
define_O(GPIOA,GPIO_Pin_3);/* PA3 */
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
/*******************************************************************************
|
||||||
|
* Function Name : ETH_Init
|
||||||
|
* Description : ETH initialization.
|
||||||
|
* Input : ETH_InitStruct:initialization struct.
|
||||||
|
* PHYAddress:PHY address.
|
||||||
|
* Return : Initialization status.
|
||||||
|
*******************************************************************************/
|
||||||
|
uint32_t ETH_Init(ETH_InitTypeDef* ETH_InitStruct, uint16_t PHYAddress)
|
||||||
|
{
|
||||||
|
uint32_t tmpreg = 0;
|
||||||
|
uint16_t RegValue = 0;
|
||||||
|
uint32_t tickstart=0;
|
||||||
|
/* config phy */
|
||||||
|
tmpreg = ETH->MACMIIAR;
|
||||||
|
tmpreg &= MACMIIAR_CR_MASK;
|
||||||
|
/* set SMI clock */
|
||||||
|
tmpreg |= (uint32_t)ETH_MACMIIAR_CR_Div42;
|
||||||
|
ETH->MACMIIAR = (uint32_t)tmpreg;
|
||||||
|
/* reset phy */
|
||||||
|
ETH_WritePHYRegister(PHYAddress, PHY_BCR, PHY_Reset);
|
||||||
|
tickstart= rt_tick_get_millisecond();
|
||||||
|
do{
|
||||||
|
asm("nop"); /* waiting for finish */
|
||||||
|
}while((rt_tick_get_millisecond()-tickstart)<1000);
|
||||||
|
|
||||||
|
|
||||||
|
tickstart= rt_tick_get_millisecond();
|
||||||
|
RegValue = 0;
|
||||||
|
while( (RegValue&(PHY_Reset)) )
|
||||||
|
{
|
||||||
|
RegValue = ETH_ReadPHYRegister(PHYAddress, PHY_BCR);
|
||||||
|
if((rt_tick_get_millisecond()-tickstart)>10000)
|
||||||
|
{
|
||||||
|
LOG_E("Error:Wait phy reset timeout!\r\n");
|
||||||
|
while(1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* waiting for link up */
|
||||||
|
tickstart= rt_tick_get_millisecond();
|
||||||
|
RegValue = 0;
|
||||||
|
while((RegValue&(PHY_Linked_Status)) == 0)
|
||||||
|
{
|
||||||
|
RegValue = ETH_ReadPHYRegister(PHYAddress, PHY_BSR);
|
||||||
|
if((rt_tick_get_millisecond()-tickstart)>10000)
|
||||||
|
{
|
||||||
|
LOG_E("Error:Wait phy linking timeout!\r\n");
|
||||||
|
while(1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* waiting for auto-negotiation */
|
||||||
|
tickstart= rt_tick_get_millisecond();
|
||||||
|
RegValue = 0;
|
||||||
|
while((RegValue&PHY_AutoNego_Complete) == 0)
|
||||||
|
{
|
||||||
|
RegValue = ETH_ReadPHYRegister(PHYAddress, PHY_BSR);
|
||||||
|
if((rt_tick_get_millisecond()-tickstart)>10000)
|
||||||
|
{
|
||||||
|
LOG_E("Error:Wait phy auto-negotiation complete timeout!\r\n");
|
||||||
|
while(1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#ifdef USE10BASE_T
|
||||||
|
RegValue = ETH_ReadPHYRegister(PHYAddress, PHY_BMCR);
|
||||||
|
LOG_D("PHY_BMCR:%d,value:%04x.\n",PHY_BMCR,RegValue);
|
||||||
|
if((RegValue & (1<<8)) != (uint32_t)RESET)
|
||||||
|
{
|
||||||
|
ETH_InitStruct->ETH_Mode = ETH_Mode_FullDuplex;
|
||||||
|
ch32v30x_eth_device.ETH_Mode=ETH_Mode_FullDuplex;
|
||||||
|
LOG_D("Full-Duplex.\n");
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
ETH_InitStruct->ETH_Mode = ETH_Mode_HalfDuplex;
|
||||||
|
ch32v30x_eth_device.ETH_Mode=ETH_Mode_HalfDuplex;
|
||||||
|
LOG_D("Half-Duplex.\n");
|
||||||
|
}
|
||||||
|
if(RegValue & (1<<13))
|
||||||
|
{
|
||||||
|
ETH_InitStruct->ETH_Speed = ETH_Speed_100M;
|
||||||
|
ch32v30x_eth_device.ETH_Speed=ETH_Speed_100M;
|
||||||
|
/* send link up. */
|
||||||
|
eth_device_linkchange(&ch32v30x_eth_device.parent, RT_TRUE);
|
||||||
|
LOG_D("Link speed:100M.\n");
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
ETH_InitStruct->ETH_Speed = ETH_Speed_10M;
|
||||||
|
ch32v30x_eth_device.ETH_Speed=ETH_Speed_10M;
|
||||||
|
/* send link up. */
|
||||||
|
eth_device_linkchange(&ch32v30x_eth_device.parent, RT_TRUE);
|
||||||
|
LOG_D("Link speed:10M.\n");
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef USE_FAST_MAC
|
||||||
|
/* 100M MAC,RMII */
|
||||||
|
RegValue = ETH_ReadPHYRegister(PHYAddress, PHY_BMCR);
|
||||||
|
LOG_D("PHY_BMCR:%d,value:%04x.\n",PHY_BMCR,RegValue);
|
||||||
|
if((RegValue & (1<<8)) != (uint32_t)RESET)
|
||||||
|
{
|
||||||
|
ETH_InitStruct->ETH_Mode = ETH_Mode_FullDuplex;
|
||||||
|
ch32v30x_eth_device.ETH_Mode = ETH_Mode_FullDuplex;
|
||||||
|
LOG_D("Full-Duplex.\n");
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
ETH_InitStruct->ETH_Mode = ETH_Mode_HalfDuplex;
|
||||||
|
ch32v30x_eth_device.ETH_Mode = ETH_Mode_HalfDuplex;
|
||||||
|
LOG_D("Half-Duplex.\n");
|
||||||
|
}
|
||||||
|
if(RegValue & (1<<13))
|
||||||
|
{
|
||||||
|
ETH_InitStruct->ETH_Speed = ETH_Speed_100M;
|
||||||
|
ch32v30x_eth_device.ETH_Speed=ETH_Speed_100M;
|
||||||
|
/* send link up. */
|
||||||
|
eth_device_linkchange(&ch32v30x_eth_device.parent, RT_TRUE);
|
||||||
|
LOG_D("Link speed:100M.\n");
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
ETH_InitStruct->ETH_Speed = ETH_Speed_10M;
|
||||||
|
ch32v30x_eth_device.ETH_Speed=ETH_Speed_10M;
|
||||||
|
/* send link up. */
|
||||||
|
eth_device_linkchange(&ch32v30x_eth_device.parent, RT_TRUE);
|
||||||
|
LOG_D("Link speed:10M.\n");
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef USE_GIGA_MAC
|
||||||
|
/* GMAC,RGMI */
|
||||||
|
ETH_WritePHYRegister(PHYAddress, 31,0x0a43 );
|
||||||
|
RegValue = ETH_ReadPHYRegister(PHYAddress, 26);
|
||||||
|
if( RegValue & 0x0008 )
|
||||||
|
{
|
||||||
|
ETH_InitStruct->ETH_Mode = ETH_Mode_FullDuplex;
|
||||||
|
ch32v30x_eth_device.ETH_Mode = ETH_Mode_FullDuplex;
|
||||||
|
LOG_D("full duplex.\n");
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
ETH_InitStruct->ETH_Mode = ETH_Mode_HalfDuplex;
|
||||||
|
ch32v30x_eth_device.ETH_Mode = ETH_Mode_HalfDuplex;
|
||||||
|
LOG_D("half duplex!\n");
|
||||||
|
}
|
||||||
|
if(( RegValue & 0x0030 ) == 0x0000)
|
||||||
|
{
|
||||||
|
ETH_InitStruct->ETH_Speed = ETH_Speed_10M;
|
||||||
|
ch32v30x_eth_device.ETH_Speed= ETH_Speed_10M;
|
||||||
|
eth_device_linkchange(&ch32v30x_eth_device.parent, RT_TRUE);
|
||||||
|
LOG_D("Link speed:10Mbps.\n");
|
||||||
|
}
|
||||||
|
else if(( RegValue & 0x0030 ) == 0x0010)
|
||||||
|
{
|
||||||
|
ETH_InitStruct->ETH_Speed = ETH_Speed_100M;
|
||||||
|
ch32v30x_eth_device.ETH_Speed= ETH_Speed_100M;
|
||||||
|
eth_device_linkchange(&ch32v30x_eth_device.parent, RT_TRUE);
|
||||||
|
LOG_D("Link speed:100Mbps.\n");
|
||||||
|
}
|
||||||
|
else if(( RegValue & 0x0030 ) == 0x0020)
|
||||||
|
{
|
||||||
|
ETH_InitStruct->ETH_Speed = ETH_Speed_1000M;
|
||||||
|
ch32v30x_eth_device.ETH_Speed= ETH_Speed_1000M;
|
||||||
|
eth_device_linkchange(&ch32v30x_eth_device.parent, RT_TRUE);
|
||||||
|
LOG_D("Link speed:1000Mbps.\n");
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
tickstart= rt_tick_get_millisecond();
|
||||||
|
do{
|
||||||
|
asm("nop");
|
||||||
|
}while((rt_tick_get_millisecond()-tickstart)<1000);
|
||||||
|
|
||||||
|
|
||||||
|
/* MAC config */
|
||||||
|
/* if use RGMII,should config RGMII clock delay register */
|
||||||
|
tmpreg = ETH->MACCR;
|
||||||
|
tmpreg &= MACCR_CLEAR_MASK;
|
||||||
|
tmpreg |= (uint32_t)(ETH_InitStruct->ETH_Watchdog |
|
||||||
|
ETH_InitStruct->ETH_Jabber |
|
||||||
|
ETH_InitStruct->ETH_InterFrameGap |
|
||||||
|
ETH_InitStruct->ETH_CarrierSense |
|
||||||
|
ETH_InitStruct->ETH_Speed |
|
||||||
|
ETH_InitStruct->ETH_ReceiveOwn |
|
||||||
|
ETH_InitStruct->ETH_LoopbackMode |
|
||||||
|
ETH_InitStruct->ETH_Mode |
|
||||||
|
ETH_InitStruct->ETH_ChecksumOffload |
|
||||||
|
ETH_InitStruct->ETH_RetryTransmission |
|
||||||
|
ETH_InitStruct->ETH_AutomaticPadCRCStrip |
|
||||||
|
ETH_InitStruct->ETH_BackOffLimit |
|
||||||
|
ETH_InitStruct->ETH_DeferralCheck);
|
||||||
|
ETH->MACCR = (uint32_t)tmpreg;
|
||||||
|
#ifdef USE10BASE_T
|
||||||
|
/* enable internal pull up resistance,50Ω */
|
||||||
|
ETH->MACCR|=ETH_Internal_Pull_Up_Res_Enable;
|
||||||
|
#endif
|
||||||
|
ETH->MACFFR = (uint32_t)(ETH_InitStruct->ETH_ReceiveAll |
|
||||||
|
ETH_InitStruct->ETH_SourceAddrFilter |
|
||||||
|
ETH_InitStruct->ETH_PassControlFrames |
|
||||||
|
ETH_InitStruct->ETH_BroadcastFramesReception |
|
||||||
|
ETH_InitStruct->ETH_DestinationAddrFilter |
|
||||||
|
ETH_InitStruct->ETH_PromiscuousMode |
|
||||||
|
ETH_InitStruct->ETH_MulticastFramesFilter |
|
||||||
|
ETH_InitStruct->ETH_UnicastFramesFilter);
|
||||||
|
/* Write to ETHERNET MACHTHR */
|
||||||
|
ETH->MACHTHR = (uint32_t)ETH_InitStruct->ETH_HashTableHigh;
|
||||||
|
/* Write to ETHERNET MACHTLR */
|
||||||
|
ETH->MACHTLR = (uint32_t)ETH_InitStruct->ETH_HashTableLow;
|
||||||
|
/* Get the ETHERNET MACFCR value */
|
||||||
|
tmpreg = ETH->MACFCR;
|
||||||
|
/* Clear xx bits */
|
||||||
|
tmpreg &= MACFCR_CLEAR_MASK;
|
||||||
|
|
||||||
|
tmpreg |= (uint32_t)((ETH_InitStruct->ETH_PauseTime << 16) |
|
||||||
|
ETH_InitStruct->ETH_ZeroQuantaPause |
|
||||||
|
ETH_InitStruct->ETH_PauseLowThreshold |
|
||||||
|
ETH_InitStruct->ETH_UnicastPauseFrameDetect |
|
||||||
|
ETH_InitStruct->ETH_ReceiveFlowControl |
|
||||||
|
ETH_InitStruct->ETH_TransmitFlowControl);
|
||||||
|
ETH->MACFCR = (uint32_t)tmpreg;
|
||||||
|
|
||||||
|
ETH->MACVLANTR = (uint32_t)(ETH_InitStruct->ETH_VLANTagComparison |
|
||||||
|
ETH_InitStruct->ETH_VLANTagIdentifier);
|
||||||
|
|
||||||
|
tmpreg = ETH->DMAOMR;
|
||||||
|
/* Clear xx bits */
|
||||||
|
tmpreg &= DMAOMR_CLEAR_MASK;
|
||||||
|
|
||||||
|
tmpreg |= (uint32_t)(ETH_InitStruct->ETH_DropTCPIPChecksumErrorFrame |
|
||||||
|
ETH_InitStruct->ETH_ReceiveStoreForward |
|
||||||
|
ETH_InitStruct->ETH_FlushReceivedFrame |
|
||||||
|
ETH_InitStruct->ETH_TransmitStoreForward |
|
||||||
|
ETH_InitStruct->ETH_TransmitThresholdControl |
|
||||||
|
ETH_InitStruct->ETH_ForwardErrorFrames |
|
||||||
|
ETH_InitStruct->ETH_ForwardUndersizedGoodFrames |
|
||||||
|
ETH_InitStruct->ETH_ReceiveThresholdControl |
|
||||||
|
ETH_InitStruct->ETH_SecondFrameOperate);
|
||||||
|
ETH->DMAOMR = (uint32_t)tmpreg;
|
||||||
|
|
||||||
|
ETH->DMABMR = (uint32_t)(ETH_InitStruct->ETH_AddressAlignedBeats |
|
||||||
|
ETH_InitStruct->ETH_FixedBurst |
|
||||||
|
ETH_InitStruct->ETH_RxDMABurstLength | /* !! if 4xPBL is selected for Tx or Rx it is applied for the other */
|
||||||
|
ETH_InitStruct->ETH_TxDMABurstLength |
|
||||||
|
(ETH_InitStruct->ETH_DescriptorSkipLength << 2) |
|
||||||
|
ETH_InitStruct->ETH_DMAArbitration |
|
||||||
|
ETH_DMABMR_USP);
|
||||||
|
|
||||||
|
return ETH_SUCCESS;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* eth initialization function */
|
||||||
|
static rt_err_t rt_ch32_eth_init(rt_device_t dev)
|
||||||
|
{
|
||||||
|
ETH_InitTypeDef ETH_InitStructure={0};
|
||||||
|
RCC_PLL3Cmd(DISABLE);
|
||||||
|
RCC_PREDIV2Config(RCC_PREDIV2_Div2);
|
||||||
|
RCC_PLL3Config(RCC_PLL3Mul_15);
|
||||||
|
RCC_PLL3Cmd(ENABLE);
|
||||||
|
while(RESET == RCC_GetFlagStatus(RCC_FLAG_PLL3RDY));
|
||||||
|
LOG_D("PLL3 Init Finish\r\n");
|
||||||
|
RCC_AHBPeriphClockCmd(RCC_AHBPeriph_ETH_MAC|RCC_AHBPeriph_ETH_MAC_Tx|RCC_AHBPeriph_ETH_MAC_Rx,ENABLE);
|
||||||
|
#ifdef USE10BASE_T
|
||||||
|
/* Enable internal 10BASE-T PHY*/
|
||||||
|
EXTEN->EXTEN_CTR |=EXTEN_ETH_10M_EN;
|
||||||
|
#endif
|
||||||
|
#ifdef USE_GIGA_MAC
|
||||||
|
/* Enable 1G MAC*/
|
||||||
|
EXTEN->EXTEN_CTR |= EXTEN_ETH_RGMII_SEL;
|
||||||
|
/* mac clock use external 125MHz,input from PB1 */
|
||||||
|
RCC_ETH1GCLKConfig(RCC_ETH1GCLKSource_PB1_IN);
|
||||||
|
RCC_ETH1G_125Mcmd(ENABLE);
|
||||||
|
/* Enable RGMII GPIO */
|
||||||
|
GETH_pin_init();
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef USE_FAST_MAC
|
||||||
|
/* Enable MII or RMII GPIO */
|
||||||
|
FETH_pin_init();
|
||||||
|
#endif
|
||||||
|
/* Reset ETHERNET on AHB Bus */
|
||||||
|
ETH_DeInit();
|
||||||
|
/* Software reset */
|
||||||
|
ETH_SoftwareReset();
|
||||||
|
/* Wait for software reset */
|
||||||
|
while(ETH->DMABMR & ETH_DMABMR_SR);
|
||||||
|
LOG_D("ETH RST Finish\r\n");
|
||||||
|
|
||||||
|
ETH_StructInit(Ð_InitStructure);
|
||||||
|
ETH_InitStructure.ETH_Mode = ETH_Mode_FullDuplex;
|
||||||
|
ETH_InitStructure.ETH_Speed = ETH_Speed_1000M;
|
||||||
|
ETH_InitStructure.ETH_AutoNegotiation = ETH_AutoNegotiation_Enable ;
|
||||||
|
ETH_InitStructure.ETH_LoopbackMode = ETH_LoopbackMode_Disable;
|
||||||
|
ETH_InitStructure.ETH_RetryTransmission = ETH_RetryTransmission_Disable;
|
||||||
|
ETH_InitStructure.ETH_AutomaticPadCRCStrip = ETH_AutomaticPadCRCStrip_Disable;
|
||||||
|
ETH_InitStructure.ETH_ReceiveAll = ETH_ReceiveAll_Enable;
|
||||||
|
ETH_InitStructure.ETH_BroadcastFramesReception = ETH_BroadcastFramesReception_Enable;
|
||||||
|
ETH_InitStructure.ETH_PromiscuousMode = ETH_PromiscuousMode_Enable;
|
||||||
|
ETH_InitStructure.ETH_MulticastFramesFilter = ETH_MulticastFramesFilter_Perfect;
|
||||||
|
ETH_InitStructure.ETH_UnicastFramesFilter = ETH_UnicastFramesFilter_Perfect;
|
||||||
|
#ifdef CHECKSUM_BY_HARDWARE
|
||||||
|
ETH_InitStructure.ETH_ChecksumOffload = ETH_ChecksumOffload_Enable;
|
||||||
|
#endif
|
||||||
|
/*------------------------ DMA -----------------------------------*/
|
||||||
|
/* When we use the Checksum offload feature, we need to enable the Store and Forward mode:
|
||||||
|
the store and forward guarantee that a whole frame is stored in the FIFO, so the MAC can insert/verify the checksum,
|
||||||
|
if the checksum is OK the DMA can handle the frame otherwise the frame is dropped */
|
||||||
|
ETH_InitStructure.ETH_DropTCPIPChecksumErrorFrame = ETH_DropTCPIPChecksumErrorFrame_Enable;
|
||||||
|
ETH_InitStructure.ETH_ReceiveStoreForward = ETH_ReceiveStoreForward_Enable;
|
||||||
|
ETH_InitStructure.ETH_TransmitStoreForward = ETH_TransmitStoreForward_Enable;
|
||||||
|
ETH_InitStructure.ETH_ForwardErrorFrames = ETH_ForwardErrorFrames_Enable;
|
||||||
|
ETH_InitStructure.ETH_ForwardUndersizedGoodFrames = ETH_ForwardUndersizedGoodFrames_Enable;
|
||||||
|
ETH_InitStructure.ETH_SecondFrameOperate = ETH_SecondFrameOperate_Disable;
|
||||||
|
ETH_InitStructure.ETH_AddressAlignedBeats = ETH_AddressAlignedBeats_Enable;
|
||||||
|
ETH_InitStructure.ETH_FixedBurst = ETH_FixedBurst_Enable;
|
||||||
|
ETH_InitStructure.ETH_RxDMABurstLength = ETH_RxDMABurstLength_32Beat;
|
||||||
|
ETH_InitStructure.ETH_TxDMABurstLength = ETH_TxDMABurstLength_32Beat;
|
||||||
|
ETH_InitStructure.ETH_DMAArbitration = ETH_DMAArbitration_RoundRobin_RxTx_2_1;
|
||||||
|
/* Configure Ethernet */
|
||||||
|
ETH_Init(Ð_InitStructure, PHY_ADDRESS);
|
||||||
|
/* Enable the Ethernet Rx Interrupt */
|
||||||
|
ETH_DMAITConfig(ETH_DMA_IT_NIS
|
||||||
|
| ETH_DMA_IT_R
|
||||||
|
| ETH_DMA_IT_T
|
||||||
|
,ENABLE);
|
||||||
|
NVIC_SetPriority(ETH_IRQn,1<<4);
|
||||||
|
NVIC_EnableIRQ(ETH_IRQn);
|
||||||
|
ETH_DMATxDescChainInit(DMATxDscrTab, &Tx_Buff[0][0], ETH_TXBUFNB);
|
||||||
|
ETH_DMARxDescChainInit(DMARxDscrTab, &Rx_Buff[0][0], ETH_RXBUFNB);
|
||||||
|
#ifdef USE_GIGA_MAC
|
||||||
|
RGMII_TXC_Delay(0,2);
|
||||||
|
#endif
|
||||||
|
ETH_Start();
|
||||||
|
return RT_EOK;
|
||||||
|
}
|
||||||
|
|
||||||
|
static rt_err_t rt_ch32_eth_open(rt_device_t dev, rt_uint16_t oflag)
|
||||||
|
{
|
||||||
|
LOG_D("eth open\r\n");
|
||||||
|
return RT_EOK;
|
||||||
|
}
|
||||||
|
|
||||||
|
static rt_err_t rt_ch32_eth_close(rt_device_t dev)
|
||||||
|
{
|
||||||
|
LOG_D("eth close\r\n");
|
||||||
|
return RT_EOK;
|
||||||
|
}
|
||||||
|
|
||||||
|
static rt_ssize_t rt_ch32_eth_read(rt_device_t dev, rt_off_t pos, void *buffer, rt_size_t size)
|
||||||
|
{
|
||||||
|
LOG_D("eth read\r\n");
|
||||||
|
rt_set_errno(-RT_ENOSYS);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
static rt_ssize_t rt_ch32_eth_write(rt_device_t dev, rt_off_t pos, const void *buffer, rt_size_t size)
|
||||||
|
{
|
||||||
|
LOG_D("eth write\r\n");
|
||||||
|
rt_set_errno(-RT_ENOSYS);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
static rt_err_t rt_ch32_eth_control(rt_device_t dev, int cmd, void *args)
|
||||||
|
{
|
||||||
|
switch (cmd)
|
||||||
|
{
|
||||||
|
case NIOCTL_GADDR:
|
||||||
|
/* get mac address */
|
||||||
|
if (args) rt_memcpy(args, ch32v30x_eth_device.dev_addr, 6);
|
||||||
|
else return -RT_ERROR;
|
||||||
|
break;
|
||||||
|
|
||||||
|
default :
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
return RT_EOK;
|
||||||
|
}
|
||||||
|
|
||||||
|
rt_err_t rt_ch32_eth_tx(rt_device_t dev, struct pbuf *p)
|
||||||
|
{
|
||||||
|
rt_err_t ret = RT_ERROR;
|
||||||
|
struct pbuf *q;
|
||||||
|
uint8_t *buffer = (uint8_t *)(DMATxDescToSet->Buffer1Addr);
|
||||||
|
uint8_t *pdata;
|
||||||
|
uint32_t framelength = 0,len=0;
|
||||||
|
/* copy frame from pbufs to driver buffers */
|
||||||
|
for (q = p; q != NULL; q = q->next)
|
||||||
|
{
|
||||||
|
/* Is this buffer available? If not, goto error */
|
||||||
|
if ((DMATxDescToSet->Status & ETH_DMATxDesc_OWN) != (uint32_t)RESET)
|
||||||
|
{
|
||||||
|
LOG_E("buffer not valid\r\n");
|
||||||
|
ret = ERR_USE;
|
||||||
|
goto Tx_error;
|
||||||
|
}
|
||||||
|
|
||||||
|
pdata = q->payload;
|
||||||
|
len = q->len;
|
||||||
|
framelength += len;
|
||||||
|
rt_memcpy(buffer,pdata,len);
|
||||||
|
buffer += len;
|
||||||
|
}
|
||||||
|
|
||||||
|
#ifdef ETH_TX_DUMP
|
||||||
|
dump_hex(buffer, p->tot_len);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
DMATxDescToSet->ControlBufferSize = (framelength & ETH_DMATxDesc_TBS1);
|
||||||
|
DMATxDescToSet->Status |= ETH_DMATxDesc_LS | ETH_DMATxDesc_FS;
|
||||||
|
DMATxDescToSet->Status |= ETH_DMATxDesc_OWN;
|
||||||
|
ret = ERR_OK;
|
||||||
|
|
||||||
|
Tx_error:
|
||||||
|
/* When Transmit Underflow flag is set, clear it and issue a Transmit Poll Demand to resume transmission */
|
||||||
|
if ((ETH->DMASR & ETH_DMASR_TBUS) != (uint32_t)RESET)
|
||||||
|
{
|
||||||
|
/* Clear TUS ETHERNET DMA flag */
|
||||||
|
ETH->DMASR = ETH_DMASR_TUS;
|
||||||
|
/* Resume DMA transmission*/
|
||||||
|
ETH->DMATPDR = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
DMATxDescToSet = (ETH_DMADESCTypeDef*) (DMATxDescToSet->Buffer2NextDescAddr);
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
volatile FrameTypeDef frame;
|
||||||
|
struct pbuf *rt_ch32_eth_rx(rt_device_t dev)
|
||||||
|
{
|
||||||
|
struct pbuf *p = NULL;
|
||||||
|
struct pbuf *q = NULL;
|
||||||
|
uint16_t len = 0;
|
||||||
|
uint8_t *buffer;
|
||||||
|
uint8_t *pdata;
|
||||||
|
|
||||||
|
if(!frame.length)
|
||||||
|
{
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
len=frame.length;
|
||||||
|
frame.length=0;
|
||||||
|
buffer=(uint8_t *)frame.buffer;
|
||||||
|
if (len > 0)
|
||||||
|
{
|
||||||
|
/* We allocate a pbuf chain of pbufs from the Lwip buffer pool */
|
||||||
|
p = pbuf_alloc(PBUF_RAW, len, PBUF_POOL);
|
||||||
|
}
|
||||||
|
#ifdef ETH_RX_DUMP
|
||||||
|
dump_hex(buffer, p->tot_len);
|
||||||
|
#endif
|
||||||
|
if (p != NULL)
|
||||||
|
{
|
||||||
|
for (q = p; q != NULL; q = q->next)
|
||||||
|
{
|
||||||
|
pdata = q->payload;
|
||||||
|
rt_memcpy(pdata,buffer,q->len);
|
||||||
|
pdata += (q->len);
|
||||||
|
buffer += (q->len);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
LOG_E("p=null\r\n");
|
||||||
|
}
|
||||||
|
return p;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* interrupt service routine */
|
||||||
|
void ETH_IRQHandler(void) __attribute__((interrupt("WCH-Interrupt-fast")));
|
||||||
|
void ETH_IRQHandler(void)
|
||||||
|
{
|
||||||
|
GET_INT_SP();
|
||||||
|
/* enter interrupt */
|
||||||
|
rt_err_t result;
|
||||||
|
rt_interrupt_enter();
|
||||||
|
if(ETH->DMASRÐ_DMA_IT_R)
|
||||||
|
{
|
||||||
|
ETH_DMAClearITPendingBit(ETH_DMA_IT_R);
|
||||||
|
frame = ETH_RxPkt_ChainMode();
|
||||||
|
result = eth_device_ready(&(ch32v30x_eth_device.parent));
|
||||||
|
if (result != RT_EOK)
|
||||||
|
rt_kprintf("RxCpltCallback err = %d\r\n", result);
|
||||||
|
}
|
||||||
|
if(ETH->DMASRÐ_DMA_IT_T)
|
||||||
|
{
|
||||||
|
ETH_DMAClearITPendingBit(ETH_DMA_IT_T);
|
||||||
|
}
|
||||||
|
ETH_DMAClearITPendingBit(ETH_DMA_IT_NIS);
|
||||||
|
/* leave interrupt */
|
||||||
|
rt_interrupt_leave();
|
||||||
|
FREE_INT_SP();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* Register the EMAC device */
|
||||||
|
static int rt_hw_ch32_eth_init(void)
|
||||||
|
{
|
||||||
|
rt_err_t state = RT_EOK;
|
||||||
|
/* 84-c2-e4 WCH. */
|
||||||
|
ch32v30x_eth_device.dev_addr[0] = 0x84;
|
||||||
|
ch32v30x_eth_device.dev_addr[1] = 0xc2;
|
||||||
|
ch32v30x_eth_device.dev_addr[2] = 0xe4;
|
||||||
|
/* generate MAC (only for test). */
|
||||||
|
ch32v30x_eth_device.dev_addr[3] = 0x1;
|
||||||
|
ch32v30x_eth_device.dev_addr[4] = 0x2;
|
||||||
|
ch32v30x_eth_device.dev_addr[5] = 0x3;
|
||||||
|
|
||||||
|
ch32v30x_eth_device.parent.parent.init = rt_ch32_eth_init;
|
||||||
|
ch32v30x_eth_device.parent.parent.open = rt_ch32_eth_open;
|
||||||
|
ch32v30x_eth_device.parent.parent.close = rt_ch32_eth_close;
|
||||||
|
ch32v30x_eth_device.parent.parent.read = rt_ch32_eth_read;
|
||||||
|
ch32v30x_eth_device.parent.parent.write = rt_ch32_eth_write;
|
||||||
|
ch32v30x_eth_device.parent.parent.control = rt_ch32_eth_control;
|
||||||
|
ch32v30x_eth_device.parent.parent.user_data = RT_NULL;
|
||||||
|
|
||||||
|
ch32v30x_eth_device.parent.eth_rx = rt_ch32_eth_rx;
|
||||||
|
ch32v30x_eth_device.parent.eth_tx = rt_ch32_eth_tx;
|
||||||
|
|
||||||
|
/* register eth device */
|
||||||
|
state = eth_device_init(&(ch32v30x_eth_device.parent), "e0");
|
||||||
|
if (RT_EOK == state)
|
||||||
|
{
|
||||||
|
LOG_D("emac device init success");
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
LOG_E("emac device init faild: %d\r\n", state);
|
||||||
|
state = -RT_ERROR;
|
||||||
|
}
|
||||||
|
|
||||||
|
return state;
|
||||||
|
}
|
||||||
|
INIT_DEVICE_EXPORT(rt_hw_ch32_eth_init);
|
||||||
|
|
||||||
|
#endif /* BSP_USING_ETH */
|
|
@ -0,0 +1,50 @@
|
||||||
|
/*
|
||||||
|
* File : usart.h
|
||||||
|
* This file is part of RT-Thread RTOS
|
||||||
|
* COPYRIGHT (C) 2009, RT-Thread Development Team
|
||||||
|
*
|
||||||
|
* The license and distribution terms for this file may be
|
||||||
|
* found in the file LICENSE in this distribution or at
|
||||||
|
* http://www.rt-thread.org/license/LICENSE
|
||||||
|
*
|
||||||
|
* Change Logs:
|
||||||
|
* Date Author Notes
|
||||||
|
* 2021-09-09 WCH the first version
|
||||||
|
*/
|
||||||
|
#ifndef __DRV_ETH_H__
|
||||||
|
#define __DRV_ETH_H__
|
||||||
|
#include "rthw.h"
|
||||||
|
#include "rtthread.h"
|
||||||
|
#include "ch32v30x_eth.h"
|
||||||
|
|
||||||
|
|
||||||
|
/* MII/MDI interface select */
|
||||||
|
#define PHY_ADDRESS 0x01
|
||||||
|
#define USE10BASE_T
|
||||||
|
|
||||||
|
#ifndef USE10BASE_T
|
||||||
|
#define USE_GIGA_MAC
|
||||||
|
#ifndef USE_GIGA_MAC
|
||||||
|
#define USE_FAST_MAC
|
||||||
|
//#define USE_RMII
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#define ETH_RXBUFNB 6
|
||||||
|
#define ETH_TXBUFNB 6
|
||||||
|
|
||||||
|
#if 0
|
||||||
|
#define USE_LOOP_STRUCT 1
|
||||||
|
#else
|
||||||
|
#define USE_CHAIN_STRUCT 1
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
u32 length;
|
||||||
|
u32 buffer;
|
||||||
|
ETH_DMADESCTypeDef *descriptor;
|
||||||
|
}FrameTypeDef;
|
||||||
|
|
||||||
|
#endif
|
|
@ -1,7 +1,3 @@
|
||||||
#
|
|
||||||
# Automatically generated file; DO NOT EDIT.
|
|
||||||
# RT-Thread Configuration
|
|
||||||
#
|
|
||||||
|
|
||||||
#
|
#
|
||||||
# RT-Thread Kernel
|
# RT-Thread Kernel
|
||||||
|
@ -18,7 +14,6 @@ CONFIG_RT_THREAD_PRIORITY_32=y
|
||||||
# CONFIG_RT_THREAD_PRIORITY_256 is not set
|
# CONFIG_RT_THREAD_PRIORITY_256 is not set
|
||||||
CONFIG_RT_THREAD_PRIORITY_MAX=32
|
CONFIG_RT_THREAD_PRIORITY_MAX=32
|
||||||
CONFIG_RT_TICK_PER_SECOND=1000
|
CONFIG_RT_TICK_PER_SECOND=1000
|
||||||
# CONFIG_RT_USING_OVERFLOW_CHECK is not set
|
|
||||||
CONFIG_RT_USING_HOOK=y
|
CONFIG_RT_USING_HOOK=y
|
||||||
CONFIG_RT_HOOK_USING_FUNC_PTR=y
|
CONFIG_RT_HOOK_USING_FUNC_PTR=y
|
||||||
# CONFIG_RT_USING_HOOKLIST is not set
|
# CONFIG_RT_USING_HOOKLIST is not set
|
||||||
|
@ -28,18 +23,29 @@ CONFIG_IDLE_THREAD_STACK_SIZE=256
|
||||||
CONFIG_RT_USING_TIMER_SOFT=y
|
CONFIG_RT_USING_TIMER_SOFT=y
|
||||||
CONFIG_RT_TIMER_THREAD_PRIO=4
|
CONFIG_RT_TIMER_THREAD_PRIO=4
|
||||||
CONFIG_RT_TIMER_THREAD_STACK_SIZE=512
|
CONFIG_RT_TIMER_THREAD_STACK_SIZE=512
|
||||||
|
# CONFIG_RT_USING_TIMER_ALL_SOFT is not set
|
||||||
|
# CONFIG_RT_USING_CPU_USAGE_TRACER is not set
|
||||||
|
|
||||||
#
|
#
|
||||||
# kservice optimization
|
# kservice optimization
|
||||||
#
|
#
|
||||||
# CONFIG_RT_KSERVICE_USING_STDLIB is not set
|
|
||||||
# CONFIG_RT_KSERVICE_USING_TINY_SIZE is not set
|
|
||||||
# CONFIG_RT_USING_TINY_FFS is not set
|
# CONFIG_RT_USING_TINY_FFS is not set
|
||||||
# CONFIG_RT_KPRINTF_USING_LONGLONG is not set
|
# end of kservice optimization
|
||||||
|
|
||||||
|
#
|
||||||
|
# klibc optimization
|
||||||
|
#
|
||||||
|
# CONFIG_RT_KLIBC_USING_STDLIB is not set
|
||||||
|
# CONFIG_RT_KLIBC_USING_TINY_SIZE is not set
|
||||||
|
# CONFIG_RT_KLIBC_USING_PRINTF_LONGLONG is not set
|
||||||
|
# end of klibc optimization
|
||||||
|
|
||||||
CONFIG_RT_USING_DEBUG=y
|
CONFIG_RT_USING_DEBUG=y
|
||||||
|
CONFIG_RT_DEBUGING_ASSERT=y
|
||||||
CONFIG_RT_DEBUGING_COLOR=y
|
CONFIG_RT_DEBUGING_COLOR=y
|
||||||
CONFIG_RT_DEBUGING_CONTEXT=y
|
CONFIG_RT_DEBUGING_CONTEXT=y
|
||||||
# CONFIG_RT_DEBUGING_AUTO_INIT is not set
|
# CONFIG_RT_DEBUGING_AUTO_INIT is not set
|
||||||
|
# CONFIG_RT_USING_OVERFLOW_CHECK is not set
|
||||||
|
|
||||||
#
|
#
|
||||||
# Inter-Thread communication
|
# Inter-Thread communication
|
||||||
|
@ -51,6 +57,7 @@ CONFIG_RT_USING_MAILBOX=y
|
||||||
CONFIG_RT_USING_MESSAGEQUEUE=y
|
CONFIG_RT_USING_MESSAGEQUEUE=y
|
||||||
# CONFIG_RT_USING_MESSAGEQUEUE_PRIORITY is not set
|
# CONFIG_RT_USING_MESSAGEQUEUE_PRIORITY is not set
|
||||||
# CONFIG_RT_USING_SIGNALS is not set
|
# CONFIG_RT_USING_SIGNALS is not set
|
||||||
|
# end of Inter-Thread communication
|
||||||
|
|
||||||
#
|
#
|
||||||
# Memory Management
|
# Memory Management
|
||||||
|
@ -67,6 +74,8 @@ CONFIG_RT_USING_SMALL_MEM_AS_HEAP=y
|
||||||
# CONFIG_RT_USING_MEMTRACE is not set
|
# CONFIG_RT_USING_MEMTRACE is not set
|
||||||
# CONFIG_RT_USING_HEAP_ISR is not set
|
# CONFIG_RT_USING_HEAP_ISR is not set
|
||||||
CONFIG_RT_USING_HEAP=y
|
CONFIG_RT_USING_HEAP=y
|
||||||
|
# end of Memory Management
|
||||||
|
|
||||||
CONFIG_RT_USING_DEVICE=y
|
CONFIG_RT_USING_DEVICE=y
|
||||||
# CONFIG_RT_USING_DEVICE_OPS is not set
|
# CONFIG_RT_USING_DEVICE_OPS is not set
|
||||||
# CONFIG_RT_USING_INTERRUPT_INFO is not set
|
# CONFIG_RT_USING_INTERRUPT_INFO is not set
|
||||||
|
@ -75,14 +84,12 @@ CONFIG_RT_USING_DEVICE=y
|
||||||
CONFIG_RT_USING_CONSOLE=y
|
CONFIG_RT_USING_CONSOLE=y
|
||||||
CONFIG_RT_CONSOLEBUF_SIZE=128
|
CONFIG_RT_CONSOLEBUF_SIZE=128
|
||||||
CONFIG_RT_CONSOLE_DEVICE_NAME="uart1"
|
CONFIG_RT_CONSOLE_DEVICE_NAME="uart1"
|
||||||
CONFIG_RT_VER_NUM=0x50100
|
CONFIG_RT_VER_NUM=0x50200
|
||||||
# CONFIG_RT_USING_STDC_ATOMIC is not set
|
# CONFIG_RT_USING_STDC_ATOMIC is not set
|
||||||
CONFIG_RT_BACKTRACE_LEVEL_MAX_NR=32
|
CONFIG_RT_BACKTRACE_LEVEL_MAX_NR=32
|
||||||
# CONFIG_RT_USING_CACHE is not set
|
# end of RT-Thread Kernel
|
||||||
|
|
||||||
CONFIG_RT_USING_HW_ATOMIC=y
|
CONFIG_RT_USING_HW_ATOMIC=y
|
||||||
# CONFIG_ARCH_ARM_BOOTWITH_FLUSH_CACHE is not set
|
|
||||||
# CONFIG_ARCH_CPU_STACK_GROWS_UPWARD is not set
|
|
||||||
# CONFIG_RT_USING_CPU_FFS is not set
|
|
||||||
CONFIG_ARCH_RISCV=y
|
CONFIG_ARCH_RISCV=y
|
||||||
|
|
||||||
#
|
#
|
||||||
|
@ -97,8 +104,8 @@ CONFIG_RT_USING_MSH=y
|
||||||
CONFIG_RT_USING_FINSH=y
|
CONFIG_RT_USING_FINSH=y
|
||||||
CONFIG_FINSH_USING_MSH=y
|
CONFIG_FINSH_USING_MSH=y
|
||||||
CONFIG_FINSH_THREAD_NAME="tshell"
|
CONFIG_FINSH_THREAD_NAME="tshell"
|
||||||
CONFIG_FINSH_THREAD_PRIORITY=20
|
CONFIG_FINSH_THREAD_PRIORITY=11
|
||||||
CONFIG_FINSH_THREAD_STACK_SIZE=1024
|
CONFIG_FINSH_THREAD_STACK_SIZE=2048
|
||||||
CONFIG_FINSH_USING_HISTORY=y
|
CONFIG_FINSH_USING_HISTORY=y
|
||||||
CONFIG_FINSH_HISTORY_LINES=5
|
CONFIG_FINSH_HISTORY_LINES=5
|
||||||
CONFIG_FINSH_USING_SYMTAB=y
|
CONFIG_FINSH_USING_SYMTAB=y
|
||||||
|
@ -114,12 +121,15 @@ CONFIG_FINSH_USING_OPTION_COMPLETION=y
|
||||||
# DFS: device virtual file system
|
# DFS: device virtual file system
|
||||||
#
|
#
|
||||||
# CONFIG_RT_USING_DFS is not set
|
# CONFIG_RT_USING_DFS is not set
|
||||||
|
# end of DFS: device virtual file system
|
||||||
|
|
||||||
# CONFIG_RT_USING_FAL is not set
|
# CONFIG_RT_USING_FAL is not set
|
||||||
|
|
||||||
#
|
#
|
||||||
# Device Drivers
|
# Device Drivers
|
||||||
#
|
#
|
||||||
# CONFIG_RT_USING_DM is not set
|
# CONFIG_RT_USING_DM is not set
|
||||||
|
# CONFIG_RT_USING_DEV_BUS is not set
|
||||||
CONFIG_RT_USING_DEVICE_IPC=y
|
CONFIG_RT_USING_DEVICE_IPC=y
|
||||||
CONFIG_RT_UNAMED_PIPE_NUMBER=64
|
CONFIG_RT_UNAMED_PIPE_NUMBER=64
|
||||||
# CONFIG_RT_USING_SYSTEM_WORKQUEUE is not set
|
# CONFIG_RT_USING_SYSTEM_WORKQUEUE is not set
|
||||||
|
@ -138,6 +148,8 @@ CONFIG_RT_SERIAL_RB_BUFSZ=64
|
||||||
# CONFIG_RT_USING_ZERO is not set
|
# CONFIG_RT_USING_ZERO is not set
|
||||||
# CONFIG_RT_USING_RANDOM is not set
|
# CONFIG_RT_USING_RANDOM is not set
|
||||||
# CONFIG_RT_USING_PWM is not set
|
# CONFIG_RT_USING_PWM is not set
|
||||||
|
# CONFIG_RT_USING_PULSE_ENCODER is not set
|
||||||
|
# CONFIG_RT_USING_INPUT_CAPTURE is not set
|
||||||
# CONFIG_RT_USING_MTD_NOR is not set
|
# CONFIG_RT_USING_MTD_NOR is not set
|
||||||
# CONFIG_RT_USING_MTD_NAND is not set
|
# CONFIG_RT_USING_MTD_NAND is not set
|
||||||
# CONFIG_RT_USING_PM is not set
|
# CONFIG_RT_USING_PM is not set
|
||||||
|
@ -150,21 +162,13 @@ CONFIG_RT_SERIAL_RB_BUFSZ=64
|
||||||
# CONFIG_RT_USING_TOUCH is not set
|
# CONFIG_RT_USING_TOUCH is not set
|
||||||
# CONFIG_RT_USING_LCD is not set
|
# CONFIG_RT_USING_LCD is not set
|
||||||
# CONFIG_RT_USING_HWCRYPTO is not set
|
# CONFIG_RT_USING_HWCRYPTO is not set
|
||||||
# CONFIG_RT_USING_PULSE_ENCODER is not set
|
|
||||||
# CONFIG_RT_USING_INPUT_CAPTURE is not set
|
|
||||||
# CONFIG_RT_USING_DEV_BUS is not set
|
|
||||||
# CONFIG_RT_USING_WIFI is not set
|
# CONFIG_RT_USING_WIFI is not set
|
||||||
# CONFIG_RT_USING_VIRTIO is not set
|
# CONFIG_RT_USING_VIRTIO is not set
|
||||||
CONFIG_RT_USING_PIN=y
|
CONFIG_RT_USING_PIN=y
|
||||||
# CONFIG_RT_USING_KTIME is not set
|
# CONFIG_RT_USING_KTIME is not set
|
||||||
# CONFIG_RT_USING_HWTIMER is not set
|
# CONFIG_RT_USING_HWTIMER is not set
|
||||||
|
# CONFIG_RT_USING_CHERRYUSB is not set
|
||||||
#
|
# end of Device Drivers
|
||||||
# Using USB
|
|
||||||
#
|
|
||||||
# CONFIG_RT_USING_USB is not set
|
|
||||||
# CONFIG_RT_USING_USB_HOST is not set
|
|
||||||
# CONFIG_RT_USING_USB_DEVICE is not set
|
|
||||||
|
|
||||||
#
|
#
|
||||||
# C/C++ and POSIX layer
|
# C/C++ and POSIX layer
|
||||||
|
@ -182,6 +186,8 @@ CONFIG_RT_LIBC_USING_LIGHT_TZ_DST=y
|
||||||
CONFIG_RT_LIBC_TZ_DEFAULT_HOUR=8
|
CONFIG_RT_LIBC_TZ_DEFAULT_HOUR=8
|
||||||
CONFIG_RT_LIBC_TZ_DEFAULT_MIN=0
|
CONFIG_RT_LIBC_TZ_DEFAULT_MIN=0
|
||||||
CONFIG_RT_LIBC_TZ_DEFAULT_SEC=0
|
CONFIG_RT_LIBC_TZ_DEFAULT_SEC=0
|
||||||
|
# end of Timezone and Daylight Saving Time
|
||||||
|
# end of ISO-ANSI C layer
|
||||||
|
|
||||||
#
|
#
|
||||||
# POSIX (Portable Operating System Interface) layer
|
# POSIX (Portable Operating System Interface) layer
|
||||||
|
@ -203,7 +209,11 @@ CONFIG_RT_LIBC_TZ_DEFAULT_SEC=0
|
||||||
#
|
#
|
||||||
# Socket is in the 'Network' category
|
# Socket is in the 'Network' category
|
||||||
#
|
#
|
||||||
|
# end of Interprocess Communication (IPC)
|
||||||
|
# end of POSIX (Portable Operating System Interface) layer
|
||||||
|
|
||||||
# CONFIG_RT_USING_CPLUSPLUS is not set
|
# CONFIG_RT_USING_CPLUSPLUS is not set
|
||||||
|
# end of C/C++ and POSIX layer
|
||||||
|
|
||||||
#
|
#
|
||||||
# Network
|
# Network
|
||||||
|
@ -212,12 +222,14 @@ CONFIG_RT_LIBC_TZ_DEFAULT_SEC=0
|
||||||
# CONFIG_RT_USING_NETDEV is not set
|
# CONFIG_RT_USING_NETDEV is not set
|
||||||
# CONFIG_RT_USING_LWIP is not set
|
# CONFIG_RT_USING_LWIP is not set
|
||||||
# CONFIG_RT_USING_AT is not set
|
# CONFIG_RT_USING_AT is not set
|
||||||
|
# end of Network
|
||||||
|
|
||||||
#
|
#
|
||||||
# Memory protection
|
# Memory protection
|
||||||
#
|
#
|
||||||
# CONFIG_RT_USING_MEM_PROTECTION is not set
|
# CONFIG_RT_USING_MEM_PROTECTION is not set
|
||||||
# CONFIG_RT_USING_HW_STACK_GUARD is not set
|
# CONFIG_RT_USING_HW_STACK_GUARD is not set
|
||||||
|
# end of Memory protection
|
||||||
|
|
||||||
#
|
#
|
||||||
# Utilities
|
# Utilities
|
||||||
|
@ -229,12 +241,25 @@ CONFIG_RT_LIBC_TZ_DEFAULT_SEC=0
|
||||||
# CONFIG_RT_USING_RESOURCE_ID is not set
|
# CONFIG_RT_USING_RESOURCE_ID is not set
|
||||||
# CONFIG_RT_USING_ADT is not set
|
# CONFIG_RT_USING_ADT is not set
|
||||||
# CONFIG_RT_USING_RT_LINK is not set
|
# CONFIG_RT_USING_RT_LINK is not set
|
||||||
|
# end of Utilities
|
||||||
|
|
||||||
# CONFIG_RT_USING_VBUS is not set
|
# CONFIG_RT_USING_VBUS is not set
|
||||||
|
|
||||||
|
#
|
||||||
|
# Using USB legacy version
|
||||||
|
#
|
||||||
|
# CONFIG_RT_USING_USB_HOST is not set
|
||||||
|
# CONFIG_RT_USING_USB_DEVICE is not set
|
||||||
|
# end of Using USB legacy version
|
||||||
|
|
||||||
|
# CONFIG_RT_USING_FDT is not set
|
||||||
|
# end of RT-Thread Components
|
||||||
|
|
||||||
#
|
#
|
||||||
# RT-Thread Utestcases
|
# RT-Thread Utestcases
|
||||||
#
|
#
|
||||||
# CONFIG_RT_USING_UTESTCASES is not set
|
# CONFIG_RT_USING_UTESTCASES is not set
|
||||||
|
# end of RT-Thread Utestcases
|
||||||
|
|
||||||
#
|
#
|
||||||
# RT-Thread online packages
|
# RT-Thread online packages
|
||||||
|
@ -243,7 +268,6 @@ CONFIG_RT_LIBC_TZ_DEFAULT_SEC=0
|
||||||
#
|
#
|
||||||
# IoT - internet of things
|
# IoT - internet of things
|
||||||
#
|
#
|
||||||
# CONFIG_PKG_USING_LWIP is not set
|
|
||||||
# CONFIG_PKG_USING_LORAWAN_DRIVER is not set
|
# CONFIG_PKG_USING_LORAWAN_DRIVER is not set
|
||||||
# CONFIG_PKG_USING_PAHOMQTT is not set
|
# CONFIG_PKG_USING_PAHOMQTT is not set
|
||||||
# CONFIG_PKG_USING_UMQTT is not set
|
# CONFIG_PKG_USING_UMQTT is not set
|
||||||
|
@ -256,6 +280,7 @@ CONFIG_RT_LIBC_TZ_DEFAULT_SEC=0
|
||||||
# CONFIG_PKG_USING_WEBTERMINAL is not set
|
# CONFIG_PKG_USING_WEBTERMINAL is not set
|
||||||
# CONFIG_PKG_USING_FREEMODBUS is not set
|
# CONFIG_PKG_USING_FREEMODBUS is not set
|
||||||
# CONFIG_PKG_USING_NANOPB is not set
|
# CONFIG_PKG_USING_NANOPB is not set
|
||||||
|
# CONFIG_PKG_USING_WIFI_HOST_DRIVER is not set
|
||||||
|
|
||||||
#
|
#
|
||||||
# Wi-Fi
|
# Wi-Fi
|
||||||
|
@ -265,27 +290,35 @@ CONFIG_RT_LIBC_TZ_DEFAULT_SEC=0
|
||||||
# Marvell WiFi
|
# Marvell WiFi
|
||||||
#
|
#
|
||||||
# CONFIG_PKG_USING_WLANMARVELL is not set
|
# CONFIG_PKG_USING_WLANMARVELL is not set
|
||||||
|
# end of Marvell WiFi
|
||||||
|
|
||||||
#
|
#
|
||||||
# Wiced WiFi
|
# Wiced WiFi
|
||||||
#
|
#
|
||||||
# CONFIG_PKG_USING_WLAN_WICED is not set
|
# CONFIG_PKG_USING_WLAN_WICED is not set
|
||||||
|
# end of Wiced WiFi
|
||||||
|
|
||||||
# CONFIG_PKG_USING_RW007 is not set
|
# CONFIG_PKG_USING_RW007 is not set
|
||||||
|
|
||||||
#
|
#
|
||||||
# CYW43012 WiFi
|
# CYW43012 WiFi
|
||||||
#
|
#
|
||||||
# CONFIG_PKG_USING_WLAN_CYW43012 is not set
|
# CONFIG_PKG_USING_WLAN_CYW43012 is not set
|
||||||
|
# end of CYW43012 WiFi
|
||||||
|
|
||||||
#
|
#
|
||||||
# BL808 WiFi
|
# BL808 WiFi
|
||||||
#
|
#
|
||||||
# CONFIG_PKG_USING_WLAN_BL808 is not set
|
# CONFIG_PKG_USING_WLAN_BL808 is not set
|
||||||
|
# end of BL808 WiFi
|
||||||
|
|
||||||
#
|
#
|
||||||
# CYW43439 WiFi
|
# CYW43439 WiFi
|
||||||
#
|
#
|
||||||
# CONFIG_PKG_USING_WLAN_CYW43439 is not set
|
# CONFIG_PKG_USING_WLAN_CYW43439 is not set
|
||||||
|
# end of CYW43439 WiFi
|
||||||
|
# end of Wi-Fi
|
||||||
|
|
||||||
# CONFIG_PKG_USING_COAP is not set
|
# CONFIG_PKG_USING_COAP is not set
|
||||||
# CONFIG_PKG_USING_NOPOLL is not set
|
# CONFIG_PKG_USING_NOPOLL is not set
|
||||||
# CONFIG_PKG_USING_NETUTILS is not set
|
# CONFIG_PKG_USING_NETUTILS is not set
|
||||||
|
@ -308,6 +341,8 @@ CONFIG_RT_LIBC_TZ_DEFAULT_SEC=0
|
||||||
# CONFIG_PKG_USING_UCLOUD_IOT_SDK is not set
|
# CONFIG_PKG_USING_UCLOUD_IOT_SDK is not set
|
||||||
# CONFIG_PKG_USING_JOYLINK is not set
|
# CONFIG_PKG_USING_JOYLINK is not set
|
||||||
# CONFIG_PKG_USING_IOTSHARP_SDK is not set
|
# CONFIG_PKG_USING_IOTSHARP_SDK is not set
|
||||||
|
# end of IoT Cloud
|
||||||
|
|
||||||
# CONFIG_PKG_USING_NIMBLE is not set
|
# CONFIG_PKG_USING_NIMBLE is not set
|
||||||
# CONFIG_PKG_USING_LLSYNC_SDK_ADAPTER is not set
|
# CONFIG_PKG_USING_LLSYNC_SDK_ADAPTER is not set
|
||||||
# CONFIG_PKG_USING_OTA_DOWNLOADER is not set
|
# CONFIG_PKG_USING_OTA_DOWNLOADER is not set
|
||||||
|
@ -350,6 +385,8 @@ CONFIG_RT_LIBC_TZ_DEFAULT_SEC=0
|
||||||
# CONFIG_PKG_USING_ZEPHYR_POLLING is not set
|
# CONFIG_PKG_USING_ZEPHYR_POLLING is not set
|
||||||
# CONFIG_PKG_USING_MATTER_ADAPTATION_LAYER is not set
|
# CONFIG_PKG_USING_MATTER_ADAPTATION_LAYER is not set
|
||||||
# CONFIG_PKG_USING_LHC_MODBUS is not set
|
# CONFIG_PKG_USING_LHC_MODBUS is not set
|
||||||
|
# CONFIG_PKG_USING_QMODBUS is not set
|
||||||
|
# end of IoT - internet of things
|
||||||
|
|
||||||
#
|
#
|
||||||
# security packages
|
# security packages
|
||||||
|
@ -360,6 +397,7 @@ CONFIG_RT_LIBC_TZ_DEFAULT_SEC=0
|
||||||
# CONFIG_PKG_USING_TINYCRYPT is not set
|
# CONFIG_PKG_USING_TINYCRYPT is not set
|
||||||
# CONFIG_PKG_USING_TFM is not set
|
# CONFIG_PKG_USING_TFM is not set
|
||||||
# CONFIG_PKG_USING_YD_CRYPTO is not set
|
# CONFIG_PKG_USING_YD_CRYPTO is not set
|
||||||
|
# end of security packages
|
||||||
|
|
||||||
#
|
#
|
||||||
# language packages
|
# language packages
|
||||||
|
@ -375,18 +413,22 @@ CONFIG_RT_LIBC_TZ_DEFAULT_SEC=0
|
||||||
# CONFIG_PKG_USING_JSMN is not set
|
# CONFIG_PKG_USING_JSMN is not set
|
||||||
# CONFIG_PKG_USING_AGILE_JSMN is not set
|
# CONFIG_PKG_USING_AGILE_JSMN is not set
|
||||||
# CONFIG_PKG_USING_PARSON is not set
|
# CONFIG_PKG_USING_PARSON is not set
|
||||||
|
# end of JSON: JavaScript Object Notation, a lightweight data-interchange format
|
||||||
|
|
||||||
#
|
#
|
||||||
# XML: Extensible Markup Language
|
# XML: Extensible Markup Language
|
||||||
#
|
#
|
||||||
# CONFIG_PKG_USING_SIMPLE_XML is not set
|
# CONFIG_PKG_USING_SIMPLE_XML is not set
|
||||||
# CONFIG_PKG_USING_EZXML is not set
|
# CONFIG_PKG_USING_EZXML is not set
|
||||||
|
# end of XML: Extensible Markup Language
|
||||||
|
|
||||||
# CONFIG_PKG_USING_LUATOS_SOC is not set
|
# CONFIG_PKG_USING_LUATOS_SOC is not set
|
||||||
# CONFIG_PKG_USING_LUA is not set
|
# CONFIG_PKG_USING_LUA is not set
|
||||||
# CONFIG_PKG_USING_JERRYSCRIPT is not set
|
# CONFIG_PKG_USING_JERRYSCRIPT is not set
|
||||||
# CONFIG_PKG_USING_MICROPYTHON is not set
|
# CONFIG_PKG_USING_MICROPYTHON is not set
|
||||||
# CONFIG_PKG_USING_PIKASCRIPT is not set
|
# CONFIG_PKG_USING_PIKASCRIPT is not set
|
||||||
# CONFIG_PKG_USING_RTT_RUST is not set
|
# CONFIG_PKG_USING_RTT_RUST is not set
|
||||||
|
# end of language packages
|
||||||
|
|
||||||
#
|
#
|
||||||
# multimedia packages
|
# multimedia packages
|
||||||
|
@ -398,12 +440,15 @@ CONFIG_RT_LIBC_TZ_DEFAULT_SEC=0
|
||||||
# CONFIG_PKG_USING_LVGL is not set
|
# CONFIG_PKG_USING_LVGL is not set
|
||||||
# CONFIG_PKG_USING_LV_MUSIC_DEMO is not set
|
# CONFIG_PKG_USING_LV_MUSIC_DEMO is not set
|
||||||
# CONFIG_PKG_USING_GUI_GUIDER_DEMO is not set
|
# CONFIG_PKG_USING_GUI_GUIDER_DEMO is not set
|
||||||
|
# end of LVGL: powerful and easy-to-use embedded GUI library
|
||||||
|
|
||||||
#
|
#
|
||||||
# u8g2: a monochrome graphic library
|
# u8g2: a monochrome graphic library
|
||||||
#
|
#
|
||||||
# CONFIG_PKG_USING_U8G2_OFFICIAL is not set
|
# CONFIG_PKG_USING_U8G2_OFFICIAL is not set
|
||||||
# CONFIG_PKG_USING_U8G2 is not set
|
# CONFIG_PKG_USING_U8G2 is not set
|
||||||
|
# end of u8g2: a monochrome graphic library
|
||||||
|
|
||||||
# CONFIG_PKG_USING_OPENMV is not set
|
# CONFIG_PKG_USING_OPENMV is not set
|
||||||
# CONFIG_PKG_USING_MUPDF is not set
|
# CONFIG_PKG_USING_MUPDF is not set
|
||||||
# CONFIG_PKG_USING_STEMWIN is not set
|
# CONFIG_PKG_USING_STEMWIN is not set
|
||||||
|
@ -423,6 +468,7 @@ CONFIG_RT_LIBC_TZ_DEFAULT_SEC=0
|
||||||
# CONFIG_PKG_USING_QRCODE is not set
|
# CONFIG_PKG_USING_QRCODE is not set
|
||||||
# CONFIG_PKG_USING_GUIENGINE is not set
|
# CONFIG_PKG_USING_GUIENGINE is not set
|
||||||
# CONFIG_PKG_USING_3GPP_AMRNB is not set
|
# CONFIG_PKG_USING_3GPP_AMRNB is not set
|
||||||
|
# end of multimedia packages
|
||||||
|
|
||||||
#
|
#
|
||||||
# tools packages
|
# tools packages
|
||||||
|
@ -471,6 +517,7 @@ CONFIG_RT_LIBC_TZ_DEFAULT_SEC=0
|
||||||
# CONFIG_PKG_USING_ARMV7M_DWT_TOOL is not set
|
# CONFIG_PKG_USING_ARMV7M_DWT_TOOL is not set
|
||||||
# CONFIG_PKG_USING_VOFA_PLUS is not set
|
# CONFIG_PKG_USING_VOFA_PLUS is not set
|
||||||
# CONFIG_PKG_USING_ZDEBUG is not set
|
# CONFIG_PKG_USING_ZDEBUG is not set
|
||||||
|
# end of tools packages
|
||||||
|
|
||||||
#
|
#
|
||||||
# system packages
|
# system packages
|
||||||
|
@ -482,6 +529,9 @@ CONFIG_RT_LIBC_TZ_DEFAULT_SEC=0
|
||||||
# CONFIG_PKG_USING_RT_MEMCPY_CM is not set
|
# CONFIG_PKG_USING_RT_MEMCPY_CM is not set
|
||||||
# CONFIG_PKG_USING_RT_KPRINTF_THREADSAFE is not set
|
# CONFIG_PKG_USING_RT_KPRINTF_THREADSAFE is not set
|
||||||
# CONFIG_PKG_USING_RT_VSNPRINTF_FULL is not set
|
# CONFIG_PKG_USING_RT_VSNPRINTF_FULL is not set
|
||||||
|
# end of enhanced kernel services
|
||||||
|
|
||||||
|
# CONFIG_PKG_USING_AUNITY is not set
|
||||||
|
|
||||||
#
|
#
|
||||||
# acceleration: Assembly language or algorithmic acceleration packages
|
# acceleration: Assembly language or algorithmic acceleration packages
|
||||||
|
@ -489,6 +539,7 @@ CONFIG_RT_LIBC_TZ_DEFAULT_SEC=0
|
||||||
# CONFIG_PKG_USING_QFPLIB_M0_FULL is not set
|
# CONFIG_PKG_USING_QFPLIB_M0_FULL is not set
|
||||||
# CONFIG_PKG_USING_QFPLIB_M0_TINY is not set
|
# CONFIG_PKG_USING_QFPLIB_M0_TINY is not set
|
||||||
# CONFIG_PKG_USING_QFPLIB_M3 is not set
|
# CONFIG_PKG_USING_QFPLIB_M3 is not set
|
||||||
|
# end of acceleration: Assembly language or algorithmic acceleration packages
|
||||||
|
|
||||||
#
|
#
|
||||||
# CMSIS: ARM Cortex-M Microcontroller Software Interface Standard
|
# CMSIS: ARM Cortex-M Microcontroller Software Interface Standard
|
||||||
|
@ -499,6 +550,7 @@ CONFIG_RT_LIBC_TZ_DEFAULT_SEC=0
|
||||||
# CONFIG_PKG_USING_CMSIS_NN is not set
|
# CONFIG_PKG_USING_CMSIS_NN is not set
|
||||||
# CONFIG_PKG_USING_CMSIS_RTOS1 is not set
|
# CONFIG_PKG_USING_CMSIS_RTOS1 is not set
|
||||||
# CONFIG_PKG_USING_CMSIS_RTOS2 is not set
|
# CONFIG_PKG_USING_CMSIS_RTOS2 is not set
|
||||||
|
# end of CMSIS: ARM Cortex-M Microcontroller Software Interface Standard
|
||||||
|
|
||||||
#
|
#
|
||||||
# Micrium: Micrium software products porting for RT-Thread
|
# Micrium: Micrium software products porting for RT-Thread
|
||||||
|
@ -509,6 +561,8 @@ CONFIG_RT_LIBC_TZ_DEFAULT_SEC=0
|
||||||
# CONFIG_PKG_USING_UC_CLK is not set
|
# CONFIG_PKG_USING_UC_CLK is not set
|
||||||
# CONFIG_PKG_USING_UC_COMMON is not set
|
# CONFIG_PKG_USING_UC_COMMON is not set
|
||||||
# CONFIG_PKG_USING_UC_MODBUS is not set
|
# CONFIG_PKG_USING_UC_MODBUS is not set
|
||||||
|
# end of Micrium: Micrium software products porting for RT-Thread
|
||||||
|
|
||||||
# CONFIG_PKG_USING_FREERTOS_WRAPPER is not set
|
# CONFIG_PKG_USING_FREERTOS_WRAPPER is not set
|
||||||
# CONFIG_PKG_USING_LITEOS_SDK is not set
|
# CONFIG_PKG_USING_LITEOS_SDK is not set
|
||||||
# CONFIG_PKG_USING_TZ_DATABASE is not set
|
# CONFIG_PKG_USING_TZ_DATABASE is not set
|
||||||
|
@ -556,6 +610,7 @@ CONFIG_RT_LIBC_TZ_DEFAULT_SEC=0
|
||||||
# CONFIG_PKG_USING_RTP is not set
|
# CONFIG_PKG_USING_RTP is not set
|
||||||
# CONFIG_PKG_USING_REB is not set
|
# CONFIG_PKG_USING_REB is not set
|
||||||
# CONFIG_PKG_USING_R_RHEALSTONE is not set
|
# CONFIG_PKG_USING_R_RHEALSTONE is not set
|
||||||
|
# end of system packages
|
||||||
|
|
||||||
#
|
#
|
||||||
# peripheral libraries and drivers
|
# peripheral libraries and drivers
|
||||||
|
@ -568,9 +623,27 @@ CONFIG_RT_LIBC_TZ_DEFAULT_SEC=0
|
||||||
#
|
#
|
||||||
# STM32 HAL & SDK Drivers
|
# STM32 HAL & SDK Drivers
|
||||||
#
|
#
|
||||||
# CONFIG_PKG_USING_STM32L4XX_HAL_DRIVER is not set
|
# CONFIG_PKG_USING_STM32L4_HAL_DRIVER is not set
|
||||||
|
# CONFIG_PKG_USING_STM32L4_CMSIS_DRIVER is not set
|
||||||
# CONFIG_PKG_USING_STM32WB55_SDK is not set
|
# CONFIG_PKG_USING_STM32WB55_SDK is not set
|
||||||
# CONFIG_PKG_USING_STM32_SDIO is not set
|
# CONFIG_PKG_USING_STM32_SDIO is not set
|
||||||
|
# end of STM32 HAL & SDK Drivers
|
||||||
|
|
||||||
|
#
|
||||||
|
# Infineon HAL Packages
|
||||||
|
#
|
||||||
|
# CONFIG_PKG_USING_INFINEON_CAT1CM0P is not set
|
||||||
|
# CONFIG_PKG_USING_INFINEON_CMSIS is not set
|
||||||
|
# CONFIG_PKG_USING_INFINEON_CORE_LIB is not set
|
||||||
|
# CONFIG_PKG_USING_INFINEON_MTB_HAL_CAT1 is not set
|
||||||
|
# CONFIG_PKG_USING_INFINEON_MTB_PDL_CAT1 is not set
|
||||||
|
# CONFIG_PKG_USING_INFINEON_RETARGET_IO is not set
|
||||||
|
# CONFIG_PKG_USING_INFINEON_CAPSENSE is not set
|
||||||
|
# CONFIG_PKG_USING_INFINEON_CSDIDAC is not set
|
||||||
|
# CONFIG_PKG_USING_INFINEON_SERIAL_FLASH is not set
|
||||||
|
# CONFIG_PKG_USING_INFINEON_USBDEV is not set
|
||||||
|
# end of Infineon HAL Packages
|
||||||
|
|
||||||
# CONFIG_PKG_USING_BLUETRUM_SDK is not set
|
# CONFIG_PKG_USING_BLUETRUM_SDK is not set
|
||||||
# CONFIG_PKG_USING_EMBARC_BSP is not set
|
# CONFIG_PKG_USING_EMBARC_BSP is not set
|
||||||
# CONFIG_PKG_USING_ESP_IDF is not set
|
# CONFIG_PKG_USING_ESP_IDF is not set
|
||||||
|
@ -580,10 +653,13 @@ CONFIG_RT_LIBC_TZ_DEFAULT_SEC=0
|
||||||
#
|
#
|
||||||
# CONFIG_PKG_USING_K210_SDK is not set
|
# CONFIG_PKG_USING_K210_SDK is not set
|
||||||
# CONFIG_PKG_USING_KENDRYTE_SDK is not set
|
# CONFIG_PKG_USING_KENDRYTE_SDK is not set
|
||||||
|
# end of Kendryte SDK
|
||||||
|
|
||||||
# CONFIG_PKG_USING_NRF5X_SDK is not set
|
# CONFIG_PKG_USING_NRF5X_SDK is not set
|
||||||
# CONFIG_PKG_USING_NRFX is not set
|
# CONFIG_PKG_USING_NRFX is not set
|
||||||
# CONFIG_PKG_USING_NUCLEI_SDK is not set
|
# CONFIG_PKG_USING_NUCLEI_SDK is not set
|
||||||
# CONFIG_PKG_USING_RASPBERRYPI_PICO_SDK is not set
|
# CONFIG_PKG_USING_RASPBERRYPI_PICO_SDK is not set
|
||||||
|
# end of HAL & SDK Drivers
|
||||||
|
|
||||||
#
|
#
|
||||||
# sensors drivers
|
# sensors drivers
|
||||||
|
@ -653,6 +729,7 @@ CONFIG_RT_LIBC_TZ_DEFAULT_SEC=0
|
||||||
# CONFIG_PKG_USING_ICM20608 is not set
|
# CONFIG_PKG_USING_ICM20608 is not set
|
||||||
# CONFIG_PKG_USING_PAJ7620 is not set
|
# CONFIG_PKG_USING_PAJ7620 is not set
|
||||||
# CONFIG_PKG_USING_STHS34PF80 is not set
|
# CONFIG_PKG_USING_STHS34PF80 is not set
|
||||||
|
# end of sensors drivers
|
||||||
|
|
||||||
#
|
#
|
||||||
# touch drivers
|
# touch drivers
|
||||||
|
@ -667,6 +744,8 @@ CONFIG_RT_LIBC_TZ_DEFAULT_SEC=0
|
||||||
# CONFIG_PKG_USING_XPT2046_TOUCH is not set
|
# CONFIG_PKG_USING_XPT2046_TOUCH is not set
|
||||||
# CONFIG_PKG_USING_CST816X is not set
|
# CONFIG_PKG_USING_CST816X is not set
|
||||||
# CONFIG_PKG_USING_CST812T is not set
|
# CONFIG_PKG_USING_CST812T is not set
|
||||||
|
# end of touch drivers
|
||||||
|
|
||||||
# CONFIG_PKG_USING_REALTEK_AMEBA is not set
|
# CONFIG_PKG_USING_REALTEK_AMEBA is not set
|
||||||
# CONFIG_PKG_USING_BUTTON is not set
|
# CONFIG_PKG_USING_BUTTON is not set
|
||||||
# CONFIG_PKG_USING_PCF8574 is not set
|
# CONFIG_PKG_USING_PCF8574 is not set
|
||||||
|
@ -739,6 +818,7 @@ CONFIG_RT_LIBC_TZ_DEFAULT_SEC=0
|
||||||
# CONFIG_PKG_USING_BT_MX01 is not set
|
# CONFIG_PKG_USING_BT_MX01 is not set
|
||||||
# CONFIG_PKG_USING_RGPOWER is not set
|
# CONFIG_PKG_USING_RGPOWER is not set
|
||||||
# CONFIG_PKG_USING_SPI_TOOLS is not set
|
# CONFIG_PKG_USING_SPI_TOOLS is not set
|
||||||
|
# end of peripheral libraries and drivers
|
||||||
|
|
||||||
#
|
#
|
||||||
# AI packages
|
# AI packages
|
||||||
|
@ -753,15 +833,18 @@ CONFIG_RT_LIBC_TZ_DEFAULT_SEC=0
|
||||||
# CONFIG_PKG_USING_QUEST is not set
|
# CONFIG_PKG_USING_QUEST is not set
|
||||||
# CONFIG_PKG_USING_NAXOS is not set
|
# CONFIG_PKG_USING_NAXOS is not set
|
||||||
# CONFIG_PKG_USING_R_TINYMAIX is not set
|
# CONFIG_PKG_USING_R_TINYMAIX is not set
|
||||||
|
# end of AI packages
|
||||||
|
|
||||||
#
|
#
|
||||||
# Signal Processing and Control Algorithm Packages
|
# Signal Processing and Control Algorithm Packages
|
||||||
#
|
#
|
||||||
|
# CONFIG_PKG_USING_APID is not set
|
||||||
# CONFIG_PKG_USING_FIRE_PID_CURVE is not set
|
# CONFIG_PKG_USING_FIRE_PID_CURVE is not set
|
||||||
# CONFIG_PKG_USING_QPID is not set
|
# CONFIG_PKG_USING_QPID is not set
|
||||||
# CONFIG_PKG_USING_UKAL is not set
|
# CONFIG_PKG_USING_UKAL is not set
|
||||||
# CONFIG_PKG_USING_DIGITALCTRL is not set
|
# CONFIG_PKG_USING_DIGITALCTRL is not set
|
||||||
# CONFIG_PKG_USING_KISSFFT is not set
|
# CONFIG_PKG_USING_KISSFFT is not set
|
||||||
|
# end of Signal Processing and Control Algorithm Packages
|
||||||
|
|
||||||
#
|
#
|
||||||
# miscellaneous packages
|
# miscellaneous packages
|
||||||
|
@ -770,6 +853,7 @@ CONFIG_RT_LIBC_TZ_DEFAULT_SEC=0
|
||||||
#
|
#
|
||||||
# project laboratory
|
# project laboratory
|
||||||
#
|
#
|
||||||
|
# end of project laboratory
|
||||||
|
|
||||||
#
|
#
|
||||||
# samples: kernel and components samples
|
# samples: kernel and components samples
|
||||||
|
@ -778,6 +862,7 @@ CONFIG_RT_LIBC_TZ_DEFAULT_SEC=0
|
||||||
# CONFIG_PKG_USING_FILESYSTEM_SAMPLES is not set
|
# CONFIG_PKG_USING_FILESYSTEM_SAMPLES is not set
|
||||||
# CONFIG_PKG_USING_NETWORK_SAMPLES is not set
|
# CONFIG_PKG_USING_NETWORK_SAMPLES is not set
|
||||||
# CONFIG_PKG_USING_PERIPHERAL_SAMPLES is not set
|
# CONFIG_PKG_USING_PERIPHERAL_SAMPLES is not set
|
||||||
|
# end of samples: kernel and components samples
|
||||||
|
|
||||||
#
|
#
|
||||||
# entertainment: terminal games and other interesting software packages
|
# entertainment: terminal games and other interesting software packages
|
||||||
|
@ -793,6 +878,8 @@ CONFIG_RT_LIBC_TZ_DEFAULT_SEC=0
|
||||||
# CONFIG_PKG_USING_DONUT is not set
|
# CONFIG_PKG_USING_DONUT is not set
|
||||||
# CONFIG_PKG_USING_COWSAY is not set
|
# CONFIG_PKG_USING_COWSAY is not set
|
||||||
# CONFIG_PKG_USING_MORSE is not set
|
# CONFIG_PKG_USING_MORSE is not set
|
||||||
|
# end of entertainment: terminal games and other interesting software packages
|
||||||
|
|
||||||
# CONFIG_PKG_USING_LIBCSV is not set
|
# CONFIG_PKG_USING_LIBCSV is not set
|
||||||
# CONFIG_PKG_USING_OPTPARSE is not set
|
# CONFIG_PKG_USING_OPTPARSE is not set
|
||||||
# CONFIG_PKG_USING_FASTLZ is not set
|
# CONFIG_PKG_USING_FASTLZ is not set
|
||||||
|
@ -826,6 +913,7 @@ CONFIG_RT_LIBC_TZ_DEFAULT_SEC=0
|
||||||
# CONFIG_PKG_USING_SOEM is not set
|
# CONFIG_PKG_USING_SOEM is not set
|
||||||
# CONFIG_PKG_USING_QPARAM is not set
|
# CONFIG_PKG_USING_QPARAM is not set
|
||||||
# CONFIG_PKG_USING_CorevMCU_CLI is not set
|
# CONFIG_PKG_USING_CorevMCU_CLI is not set
|
||||||
|
# end of miscellaneous packages
|
||||||
|
|
||||||
#
|
#
|
||||||
# Arduino libraries
|
# Arduino libraries
|
||||||
|
@ -841,6 +929,7 @@ CONFIG_RT_LIBC_TZ_DEFAULT_SEC=0
|
||||||
# CONFIG_PKG_USING_ARDUINO_NINEINONE_SENSOR_SHIELD is not set
|
# CONFIG_PKG_USING_ARDUINO_NINEINONE_SENSOR_SHIELD is not set
|
||||||
# CONFIG_PKG_USING_ARDUINO_SENSOR_KIT is not set
|
# CONFIG_PKG_USING_ARDUINO_SENSOR_KIT is not set
|
||||||
# CONFIG_PKG_USING_ARDUINO_MATLAB_SUPPORT is not set
|
# CONFIG_PKG_USING_ARDUINO_MATLAB_SUPPORT is not set
|
||||||
|
# end of Projects and Demos
|
||||||
|
|
||||||
#
|
#
|
||||||
# Sensors
|
# Sensors
|
||||||
|
@ -980,6 +1069,8 @@ CONFIG_RT_LIBC_TZ_DEFAULT_SEC=0
|
||||||
# CONFIG_PKG_USING_ARDUINO_SEEED_LTC2941 is not set
|
# CONFIG_PKG_USING_ARDUINO_SEEED_LTC2941 is not set
|
||||||
# CONFIG_PKG_USING_ARDUINO_SEEED_LDC1612 is not set
|
# CONFIG_PKG_USING_ARDUINO_SEEED_LDC1612 is not set
|
||||||
# CONFIG_PKG_USING_ARDUINO_CAPACITIVESENSOR is not set
|
# CONFIG_PKG_USING_ARDUINO_CAPACITIVESENSOR is not set
|
||||||
|
# CONFIG_PKG_USING_ARDUINO_JARZEBSKI_MPU6050 is not set
|
||||||
|
# end of Sensors
|
||||||
|
|
||||||
#
|
#
|
||||||
# Display
|
# Display
|
||||||
|
@ -991,6 +1082,7 @@ CONFIG_RT_LIBC_TZ_DEFAULT_SEC=0
|
||||||
# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_SSD1306 is not set
|
# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_SSD1306 is not set
|
||||||
# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_ILI9341 is not set
|
# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_ILI9341 is not set
|
||||||
# CONFIG_PKG_USING_SEEED_TM1637 is not set
|
# CONFIG_PKG_USING_SEEED_TM1637 is not set
|
||||||
|
# end of Display
|
||||||
|
|
||||||
#
|
#
|
||||||
# Timing
|
# Timing
|
||||||
|
@ -999,6 +1091,7 @@ CONFIG_RT_LIBC_TZ_DEFAULT_SEC=0
|
||||||
# CONFIG_PKG_USING_ARDUINO_MSTIMER2 is not set
|
# CONFIG_PKG_USING_ARDUINO_MSTIMER2 is not set
|
||||||
# CONFIG_PKG_USING_ARDUINO_TICKER is not set
|
# CONFIG_PKG_USING_ARDUINO_TICKER is not set
|
||||||
# CONFIG_PKG_USING_ARDUINO_TASKSCHEDULER is not set
|
# CONFIG_PKG_USING_ARDUINO_TASKSCHEDULER is not set
|
||||||
|
# end of Timing
|
||||||
|
|
||||||
#
|
#
|
||||||
# Data Processing
|
# Data Processing
|
||||||
|
@ -1006,6 +1099,8 @@ CONFIG_RT_LIBC_TZ_DEFAULT_SEC=0
|
||||||
# CONFIG_PKG_USING_ARDUINO_KALMANFILTER is not set
|
# CONFIG_PKG_USING_ARDUINO_KALMANFILTER is not set
|
||||||
# CONFIG_PKG_USING_ARDUINO_ARDUINOJSON is not set
|
# CONFIG_PKG_USING_ARDUINO_ARDUINOJSON is not set
|
||||||
# CONFIG_PKG_USING_ARDUINO_TENSORFLOW_LITE_MICRO is not set
|
# CONFIG_PKG_USING_ARDUINO_TENSORFLOW_LITE_MICRO is not set
|
||||||
|
# CONFIG_PKG_USING_ARDUINO_RUNNINGMEDIAN is not set
|
||||||
|
# end of Data Processing
|
||||||
|
|
||||||
#
|
#
|
||||||
# Data Storage
|
# Data Storage
|
||||||
|
@ -1016,6 +1111,7 @@ CONFIG_RT_LIBC_TZ_DEFAULT_SEC=0
|
||||||
#
|
#
|
||||||
# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_PN532 is not set
|
# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_PN532 is not set
|
||||||
# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_SI4713 is not set
|
# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_SI4713 is not set
|
||||||
|
# end of Communication
|
||||||
|
|
||||||
#
|
#
|
||||||
# Device Control
|
# Device Control
|
||||||
|
@ -1027,12 +1123,14 @@ CONFIG_RT_LIBC_TZ_DEFAULT_SEC=0
|
||||||
# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_DS1841 is not set
|
# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_DS1841 is not set
|
||||||
# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_DS3502 is not set
|
# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_DS3502 is not set
|
||||||
# CONFIG_PKG_USING_ARDUINO_SEEED_PCF85063TP is not set
|
# CONFIG_PKG_USING_ARDUINO_SEEED_PCF85063TP is not set
|
||||||
|
# end of Device Control
|
||||||
|
|
||||||
#
|
#
|
||||||
# Other
|
# Other
|
||||||
#
|
#
|
||||||
# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_MFRC630 is not set
|
# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_MFRC630 is not set
|
||||||
# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_SI5351 is not set
|
# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_SI5351 is not set
|
||||||
|
# end of Other
|
||||||
|
|
||||||
#
|
#
|
||||||
# Signal IO
|
# Signal IO
|
||||||
|
@ -1045,10 +1143,14 @@ CONFIG_RT_LIBC_TZ_DEFAULT_SEC=0
|
||||||
# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_MCP3008 is not set
|
# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_MCP3008 is not set
|
||||||
# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_MCP4725 is not set
|
# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_MCP4725 is not set
|
||||||
# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_BD3491FS is not set
|
# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_BD3491FS is not set
|
||||||
|
# end of Signal IO
|
||||||
|
|
||||||
#
|
#
|
||||||
# Uncategorized
|
# Uncategorized
|
||||||
#
|
#
|
||||||
|
# end of Arduino libraries
|
||||||
|
# end of RT-Thread online packages
|
||||||
|
|
||||||
CONFIG_SOC_RISCV_FAMILY_CH32=y
|
CONFIG_SOC_RISCV_FAMILY_CH32=y
|
||||||
CONFIG_SOC_RISCV_SERIES_CH32V3=y
|
CONFIG_SOC_RISCV_SERIES_CH32V3=y
|
||||||
|
|
||||||
|
@ -1061,6 +1163,7 @@ CONFIG_SOC_CH32V307VC=y
|
||||||
# Onboard Peripheral Drivers
|
# Onboard Peripheral Drivers
|
||||||
#
|
#
|
||||||
# CONFIG_BSP_USING_ARDUINO is not set
|
# CONFIG_BSP_USING_ARDUINO is not set
|
||||||
|
# end of Onboard Peripheral Drivers
|
||||||
|
|
||||||
#
|
#
|
||||||
# On-chip Peripheral Drivers
|
# On-chip Peripheral Drivers
|
||||||
|
@ -1077,6 +1180,10 @@ CONFIG_BSP_USING_UART1=y
|
||||||
# CONFIG_BSP_USING_UART8 is not set
|
# CONFIG_BSP_USING_UART8 is not set
|
||||||
# CONFIG_BSP_USING_ADC is not set
|
# CONFIG_BSP_USING_ADC is not set
|
||||||
# CONFIG_BSP_USING_DAC is not set
|
# CONFIG_BSP_USING_DAC is not set
|
||||||
|
# CONFIG_BSP_USING_ETH is not set
|
||||||
|
# CONFIG_BSP_USING_USBH is not set
|
||||||
|
# CONFIG_BSP_USING_USBD is not set
|
||||||
|
# CONFIG_BSP_USING_I2C is not set
|
||||||
# CONFIG_BSP_USING_SOFT_I2C is not set
|
# CONFIG_BSP_USING_SOFT_I2C is not set
|
||||||
# CONFIG_BSP_USING_SPI is not set
|
# CONFIG_BSP_USING_SPI is not set
|
||||||
# CONFIG_BSP_USING_SOFT_SPI is not set
|
# CONFIG_BSP_USING_SOFT_SPI is not set
|
||||||
|
@ -1085,7 +1192,9 @@ CONFIG_LSI_VALUE=40000
|
||||||
# CONFIG_BSP_USING_IWDT is not set
|
# CONFIG_BSP_USING_IWDT is not set
|
||||||
# CONFIG_BSP_USING_CAN is not set
|
# CONFIG_BSP_USING_CAN is not set
|
||||||
# CONFIG_BSP_USING_TIM is not set
|
# CONFIG_BSP_USING_TIM is not set
|
||||||
|
# end of On-chip Peripheral Drivers
|
||||||
|
|
||||||
#
|
#
|
||||||
# Board extended module Drivers
|
# Board extended module Drivers
|
||||||
#
|
#
|
||||||
|
# end of Hardware Drivers Config
|
||||||
|
|
|
@ -121,6 +121,13 @@ menu "On-chip Peripheral Drivers"
|
||||||
default n
|
default n
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
menuconfig BSP_USING_ETH
|
||||||
|
bool "Enable Ethernet"
|
||||||
|
default n
|
||||||
|
select RT_USING_LWIP
|
||||||
|
select RT_USING_NETDEV
|
||||||
|
select RT_USING_SAL
|
||||||
|
|
||||||
config BSP_USING_USBH
|
config BSP_USING_USBH
|
||||||
bool "Enable USB Host"
|
bool "Enable USB Host"
|
||||||
select RT_USING_USB_HOST
|
select RT_USING_USB_HOST
|
||||||
|
|
|
@ -1,9 +1,6 @@
|
||||||
#ifndef RT_CONFIG_H__
|
#ifndef RT_CONFIG_H__
|
||||||
#define RT_CONFIG_H__
|
#define RT_CONFIG_H__
|
||||||
|
|
||||||
/* Automatically generated file; DO NOT EDIT. */
|
|
||||||
/* RT-Thread Configuration */
|
|
||||||
|
|
||||||
/* RT-Thread Kernel */
|
/* RT-Thread Kernel */
|
||||||
|
|
||||||
#define RT_NAME_MAX 8
|
#define RT_NAME_MAX 8
|
||||||
|
@ -23,7 +20,13 @@
|
||||||
|
|
||||||
/* kservice optimization */
|
/* kservice optimization */
|
||||||
|
|
||||||
|
/* end of kservice optimization */
|
||||||
|
|
||||||
|
/* klibc optimization */
|
||||||
|
|
||||||
|
/* end of klibc optimization */
|
||||||
#define RT_USING_DEBUG
|
#define RT_USING_DEBUG
|
||||||
|
#define RT_DEBUGING_ASSERT
|
||||||
#define RT_DEBUGING_COLOR
|
#define RT_DEBUGING_COLOR
|
||||||
#define RT_DEBUGING_CONTEXT
|
#define RT_DEBUGING_CONTEXT
|
||||||
|
|
||||||
|
@ -34,18 +37,21 @@
|
||||||
#define RT_USING_EVENT
|
#define RT_USING_EVENT
|
||||||
#define RT_USING_MAILBOX
|
#define RT_USING_MAILBOX
|
||||||
#define RT_USING_MESSAGEQUEUE
|
#define RT_USING_MESSAGEQUEUE
|
||||||
|
/* end of Inter-Thread communication */
|
||||||
|
|
||||||
/* Memory Management */
|
/* Memory Management */
|
||||||
|
|
||||||
#define RT_USING_SMALL_MEM
|
#define RT_USING_SMALL_MEM
|
||||||
#define RT_USING_SMALL_MEM_AS_HEAP
|
#define RT_USING_SMALL_MEM_AS_HEAP
|
||||||
#define RT_USING_HEAP
|
#define RT_USING_HEAP
|
||||||
|
/* end of Memory Management */
|
||||||
#define RT_USING_DEVICE
|
#define RT_USING_DEVICE
|
||||||
#define RT_USING_CONSOLE
|
#define RT_USING_CONSOLE
|
||||||
#define RT_CONSOLEBUF_SIZE 128
|
#define RT_CONSOLEBUF_SIZE 128
|
||||||
#define RT_CONSOLE_DEVICE_NAME "uart1"
|
#define RT_CONSOLE_DEVICE_NAME "uart1"
|
||||||
#define RT_VER_NUM 0x50100
|
#define RT_VER_NUM 0x50200
|
||||||
#define RT_BACKTRACE_LEVEL_MAX_NR 32
|
#define RT_BACKTRACE_LEVEL_MAX_NR 32
|
||||||
|
/* end of RT-Thread Kernel */
|
||||||
#define RT_USING_HW_ATOMIC
|
#define RT_USING_HW_ATOMIC
|
||||||
#define ARCH_RISCV
|
#define ARCH_RISCV
|
||||||
|
|
||||||
|
@ -59,8 +65,8 @@
|
||||||
#define RT_USING_FINSH
|
#define RT_USING_FINSH
|
||||||
#define FINSH_USING_MSH
|
#define FINSH_USING_MSH
|
||||||
#define FINSH_THREAD_NAME "tshell"
|
#define FINSH_THREAD_NAME "tshell"
|
||||||
#define FINSH_THREAD_PRIORITY 20
|
#define FINSH_THREAD_PRIORITY 11
|
||||||
#define FINSH_THREAD_STACK_SIZE 1024
|
#define FINSH_THREAD_STACK_SIZE 2048
|
||||||
#define FINSH_USING_HISTORY
|
#define FINSH_USING_HISTORY
|
||||||
#define FINSH_HISTORY_LINES 5
|
#define FINSH_HISTORY_LINES 5
|
||||||
#define FINSH_USING_SYMTAB
|
#define FINSH_USING_SYMTAB
|
||||||
|
@ -72,6 +78,7 @@
|
||||||
|
|
||||||
/* DFS: device virtual file system */
|
/* DFS: device virtual file system */
|
||||||
|
|
||||||
|
/* end of DFS: device virtual file system */
|
||||||
|
|
||||||
/* Device Drivers */
|
/* Device Drivers */
|
||||||
|
|
||||||
|
@ -81,9 +88,7 @@
|
||||||
#define RT_USING_SERIAL_V1
|
#define RT_USING_SERIAL_V1
|
||||||
#define RT_SERIAL_RB_BUFSZ 64
|
#define RT_SERIAL_RB_BUFSZ 64
|
||||||
#define RT_USING_PIN
|
#define RT_USING_PIN
|
||||||
|
/* end of Device Drivers */
|
||||||
/* Using USB */
|
|
||||||
|
|
||||||
|
|
||||||
/* C/C++ and POSIX layer */
|
/* C/C++ and POSIX layer */
|
||||||
|
|
||||||
|
@ -95,6 +100,8 @@
|
||||||
#define RT_LIBC_TZ_DEFAULT_HOUR 8
|
#define RT_LIBC_TZ_DEFAULT_HOUR 8
|
||||||
#define RT_LIBC_TZ_DEFAULT_MIN 0
|
#define RT_LIBC_TZ_DEFAULT_MIN 0
|
||||||
#define RT_LIBC_TZ_DEFAULT_SEC 0
|
#define RT_LIBC_TZ_DEFAULT_SEC 0
|
||||||
|
/* end of Timezone and Daylight Saving Time */
|
||||||
|
/* end of ISO-ANSI C layer */
|
||||||
|
|
||||||
/* POSIX (Portable Operating System Interface) layer */
|
/* POSIX (Portable Operating System Interface) layer */
|
||||||
|
|
||||||
|
@ -104,18 +111,30 @@
|
||||||
|
|
||||||
/* Socket is in the 'Network' category */
|
/* Socket is in the 'Network' category */
|
||||||
|
|
||||||
|
/* end of Interprocess Communication (IPC) */
|
||||||
|
/* end of POSIX (Portable Operating System Interface) layer */
|
||||||
|
/* end of C/C++ and POSIX layer */
|
||||||
|
|
||||||
/* Network */
|
/* Network */
|
||||||
|
|
||||||
|
/* end of Network */
|
||||||
|
|
||||||
/* Memory protection */
|
/* Memory protection */
|
||||||
|
|
||||||
|
/* end of Memory protection */
|
||||||
|
|
||||||
/* Utilities */
|
/* Utilities */
|
||||||
|
|
||||||
|
/* end of Utilities */
|
||||||
|
|
||||||
|
/* Using USB legacy version */
|
||||||
|
|
||||||
|
/* end of Using USB legacy version */
|
||||||
|
/* end of RT-Thread Components */
|
||||||
|
|
||||||
/* RT-Thread Utestcases */
|
/* RT-Thread Utestcases */
|
||||||
|
|
||||||
|
/* end of RT-Thread Utestcases */
|
||||||
|
|
||||||
/* RT-Thread online packages */
|
/* RT-Thread online packages */
|
||||||
|
|
||||||
|
@ -126,57 +145,78 @@
|
||||||
|
|
||||||
/* Marvell WiFi */
|
/* Marvell WiFi */
|
||||||
|
|
||||||
|
/* end of Marvell WiFi */
|
||||||
|
|
||||||
/* Wiced WiFi */
|
/* Wiced WiFi */
|
||||||
|
|
||||||
|
/* end of Wiced WiFi */
|
||||||
|
|
||||||
/* CYW43012 WiFi */
|
/* CYW43012 WiFi */
|
||||||
|
|
||||||
|
/* end of CYW43012 WiFi */
|
||||||
|
|
||||||
/* BL808 WiFi */
|
/* BL808 WiFi */
|
||||||
|
|
||||||
|
/* end of BL808 WiFi */
|
||||||
|
|
||||||
/* CYW43439 WiFi */
|
/* CYW43439 WiFi */
|
||||||
|
|
||||||
|
/* end of CYW43439 WiFi */
|
||||||
|
/* end of Wi-Fi */
|
||||||
|
|
||||||
/* IoT Cloud */
|
/* IoT Cloud */
|
||||||
|
|
||||||
|
/* end of IoT Cloud */
|
||||||
|
/* end of IoT - internet of things */
|
||||||
|
|
||||||
/* security packages */
|
/* security packages */
|
||||||
|
|
||||||
|
/* end of security packages */
|
||||||
|
|
||||||
/* language packages */
|
/* language packages */
|
||||||
|
|
||||||
/* JSON: JavaScript Object Notation, a lightweight data-interchange format */
|
/* JSON: JavaScript Object Notation, a lightweight data-interchange format */
|
||||||
|
|
||||||
|
/* end of JSON: JavaScript Object Notation, a lightweight data-interchange format */
|
||||||
|
|
||||||
/* XML: Extensible Markup Language */
|
/* XML: Extensible Markup Language */
|
||||||
|
|
||||||
|
/* end of XML: Extensible Markup Language */
|
||||||
|
/* end of language packages */
|
||||||
|
|
||||||
/* multimedia packages */
|
/* multimedia packages */
|
||||||
|
|
||||||
/* LVGL: powerful and easy-to-use embedded GUI library */
|
/* LVGL: powerful and easy-to-use embedded GUI library */
|
||||||
|
|
||||||
|
/* end of LVGL: powerful and easy-to-use embedded GUI library */
|
||||||
|
|
||||||
/* u8g2: a monochrome graphic library */
|
/* u8g2: a monochrome graphic library */
|
||||||
|
|
||||||
|
/* end of u8g2: a monochrome graphic library */
|
||||||
|
/* end of multimedia packages */
|
||||||
|
|
||||||
/* tools packages */
|
/* tools packages */
|
||||||
|
|
||||||
|
/* end of tools packages */
|
||||||
|
|
||||||
/* system packages */
|
/* system packages */
|
||||||
|
|
||||||
/* enhanced kernel services */
|
/* enhanced kernel services */
|
||||||
|
|
||||||
|
/* end of enhanced kernel services */
|
||||||
|
|
||||||
/* acceleration: Assembly language or algorithmic acceleration packages */
|
/* acceleration: Assembly language or algorithmic acceleration packages */
|
||||||
|
|
||||||
|
/* end of acceleration: Assembly language or algorithmic acceleration packages */
|
||||||
|
|
||||||
/* CMSIS: ARM Cortex-M Microcontroller Software Interface Standard */
|
/* CMSIS: ARM Cortex-M Microcontroller Software Interface Standard */
|
||||||
|
|
||||||
|
/* end of CMSIS: ARM Cortex-M Microcontroller Software Interface Standard */
|
||||||
|
|
||||||
/* Micrium: Micrium software products porting for RT-Thread */
|
/* Micrium: Micrium software products porting for RT-Thread */
|
||||||
|
|
||||||
|
/* end of Micrium: Micrium software products porting for RT-Thread */
|
||||||
|
/* end of system packages */
|
||||||
|
|
||||||
/* peripheral libraries and drivers */
|
/* peripheral libraries and drivers */
|
||||||
|
|
||||||
|
@ -184,66 +224,94 @@
|
||||||
|
|
||||||
/* STM32 HAL & SDK Drivers */
|
/* STM32 HAL & SDK Drivers */
|
||||||
|
|
||||||
|
/* end of STM32 HAL & SDK Drivers */
|
||||||
|
|
||||||
|
/* Infineon HAL Packages */
|
||||||
|
|
||||||
|
/* end of Infineon HAL Packages */
|
||||||
|
|
||||||
/* Kendryte SDK */
|
/* Kendryte SDK */
|
||||||
|
|
||||||
|
/* end of Kendryte SDK */
|
||||||
|
/* end of HAL & SDK Drivers */
|
||||||
|
|
||||||
/* sensors drivers */
|
/* sensors drivers */
|
||||||
|
|
||||||
|
/* end of sensors drivers */
|
||||||
|
|
||||||
/* touch drivers */
|
/* touch drivers */
|
||||||
|
|
||||||
|
/* end of touch drivers */
|
||||||
|
/* end of peripheral libraries and drivers */
|
||||||
|
|
||||||
/* AI packages */
|
/* AI packages */
|
||||||
|
|
||||||
|
/* end of AI packages */
|
||||||
|
|
||||||
/* Signal Processing and Control Algorithm Packages */
|
/* Signal Processing and Control Algorithm Packages */
|
||||||
|
|
||||||
|
/* end of Signal Processing and Control Algorithm Packages */
|
||||||
|
|
||||||
/* miscellaneous packages */
|
/* miscellaneous packages */
|
||||||
|
|
||||||
/* project laboratory */
|
/* project laboratory */
|
||||||
|
|
||||||
|
/* end of project laboratory */
|
||||||
|
|
||||||
/* samples: kernel and components samples */
|
/* samples: kernel and components samples */
|
||||||
|
|
||||||
|
/* end of samples: kernel and components samples */
|
||||||
|
|
||||||
/* entertainment: terminal games and other interesting software packages */
|
/* entertainment: terminal games and other interesting software packages */
|
||||||
|
|
||||||
|
/* end of entertainment: terminal games and other interesting software packages */
|
||||||
|
/* end of miscellaneous packages */
|
||||||
|
|
||||||
/* Arduino libraries */
|
/* Arduino libraries */
|
||||||
|
|
||||||
|
|
||||||
/* Projects and Demos */
|
/* Projects and Demos */
|
||||||
|
|
||||||
|
/* end of Projects and Demos */
|
||||||
|
|
||||||
/* Sensors */
|
/* Sensors */
|
||||||
|
|
||||||
|
/* end of Sensors */
|
||||||
|
|
||||||
/* Display */
|
/* Display */
|
||||||
|
|
||||||
|
/* end of Display */
|
||||||
|
|
||||||
/* Timing */
|
/* Timing */
|
||||||
|
|
||||||
|
/* end of Timing */
|
||||||
|
|
||||||
/* Data Processing */
|
/* Data Processing */
|
||||||
|
|
||||||
|
/* end of Data Processing */
|
||||||
|
|
||||||
/* Data Storage */
|
/* Data Storage */
|
||||||
|
|
||||||
/* Communication */
|
/* Communication */
|
||||||
|
|
||||||
|
/* end of Communication */
|
||||||
|
|
||||||
/* Device Control */
|
/* Device Control */
|
||||||
|
|
||||||
|
/* end of Device Control */
|
||||||
|
|
||||||
/* Other */
|
/* Other */
|
||||||
|
|
||||||
|
/* end of Other */
|
||||||
|
|
||||||
/* Signal IO */
|
/* Signal IO */
|
||||||
|
|
||||||
|
/* end of Signal IO */
|
||||||
|
|
||||||
/* Uncategorized */
|
/* Uncategorized */
|
||||||
|
|
||||||
|
/* end of Arduino libraries */
|
||||||
|
/* end of RT-Thread online packages */
|
||||||
#define SOC_RISCV_FAMILY_CH32
|
#define SOC_RISCV_FAMILY_CH32
|
||||||
#define SOC_RISCV_SERIES_CH32V3
|
#define SOC_RISCV_SERIES_CH32V3
|
||||||
|
|
||||||
|
@ -253,6 +321,7 @@
|
||||||
|
|
||||||
/* Onboard Peripheral Drivers */
|
/* Onboard Peripheral Drivers */
|
||||||
|
|
||||||
|
/* end of Onboard Peripheral Drivers */
|
||||||
|
|
||||||
/* On-chip Peripheral Drivers */
|
/* On-chip Peripheral Drivers */
|
||||||
|
|
||||||
|
@ -260,8 +329,10 @@
|
||||||
#define BSP_USING_UART
|
#define BSP_USING_UART
|
||||||
#define BSP_USING_UART1
|
#define BSP_USING_UART1
|
||||||
#define LSI_VALUE 40000
|
#define LSI_VALUE 40000
|
||||||
|
/* end of On-chip Peripheral Drivers */
|
||||||
|
|
||||||
/* Board extended module Drivers */
|
/* Board extended module Drivers */
|
||||||
|
|
||||||
|
/* end of Hardware Drivers Config */
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -52,7 +52,7 @@ if PLATFORM == 'gcc':
|
||||||
LPATH = ''
|
LPATH = ''
|
||||||
|
|
||||||
if BUILD == 'debug':
|
if BUILD == 'debug':
|
||||||
CFLAGS += ' -O0 -g3'
|
CFLAGS += ' -Os -g3'
|
||||||
AFLAGS += ' -g3'
|
AFLAGS += ' -g3'
|
||||||
else:
|
else:
|
||||||
CFLAGS += ' -O2'
|
CFLAGS += ' -O2'
|
||||||
|
|
|
@ -48,6 +48,9 @@ rt_hw_interrupt_enable:
|
||||||
.globl rt_hw_context_switch_to
|
.globl rt_hw_context_switch_to
|
||||||
rt_hw_context_switch_to:
|
rt_hw_context_switch_to:
|
||||||
la t0, __rt_rvstack
|
la t0, __rt_rvstack
|
||||||
|
#ifdef SOC_RISCV_FAMILY_CH32
|
||||||
|
addi t0, t0, -512 // for ch32
|
||||||
|
#endif /* SOC_RISCV_FAMILY_CH32 */
|
||||||
csrw mscratch,t0
|
csrw mscratch,t0
|
||||||
|
|
||||||
LOAD sp, (a0)
|
LOAD sp, (a0)
|
||||||
|
|
Loading…
Reference in New Issue