summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBernardXiong <[email protected]>2015-05-18 18:16:59 +0800
committerBernardXiong <[email protected]>2015-05-18 18:16:59 +0800
commit7d73fb8bdbca622142e9802dc7a9a495563638f0 (patch)
treeb9e96572c375829c2029ec6605e835b76569a5ad
parent8de629c0b0408e2bd45f985cbca58bb99cf2f1bf (diff)
parent0d1ee90f2815bded610dd96d9a07701b4f83a797 (diff)
Merge remote-tracking branch 'upstream/master'
-rw-r--r--bsp/CME_M7/StdPeriph_Driver/inc/cmem7.h111
-rw-r--r--bsp/CME_M7/StdPeriph_Driver/inc/cmem7_conf.h9
-rw-r--r--bsp/CME_M7/StdPeriph_Driver/inc/cmem7_eth.h65
-rw-r--r--bsp/CME_M7/StdPeriph_Driver/inc/cmem7_flash.h8
-rw-r--r--bsp/CME_M7/StdPeriph_Driver/inc/cmem7_gpio.h11
-rw-r--r--bsp/CME_M7/StdPeriph_Driver/inc/cmem7_includes.h10
-rw-r--r--bsp/CME_M7/StdPeriph_Driver/inc/cmem7_misc.h42
-rw-r--r--bsp/CME_M7/StdPeriph_Driver/inc/cmem7_rtc.h16
-rw-r--r--bsp/CME_M7/StdPeriph_Driver/inc/cmem7_wdg.h19
-rw-r--r--bsp/CME_M7/StdPeriph_Driver/src/cmem7_eth.c137
-rw-r--r--bsp/CME_M7/StdPeriph_Driver/src/cmem7_flash.c9
-rw-r--r--bsp/CME_M7/StdPeriph_Driver/src/cmem7_gpio.c75
-rw-r--r--bsp/CME_M7/StdPeriph_Driver/src/cmem7_misc.c46
-rw-r--r--bsp/CME_M7/StdPeriph_Driver/src/cmem7_rtc.c10
-rw-r--r--bsp/CME_M7/StdPeriph_Driver/src/cmem7_wdg.c17
-rw-r--r--bsp/CME_M7/drivers/emac.c34
-rw-r--r--bsp/CME_M7/project.uvopt1158
-rw-r--r--bsp/CME_M7/project.uvproj341
-rw-r--r--bsp/CME_M7/rtconfig.py2
-rw-r--r--bsp/asm9260t/project.uvproj930
-rw-r--r--bsp/frdm-k64f/project.uvproj122
-rw-r--r--bsp/lm4f232/project.uvproj232
-rw-r--r--bsp/lpc176x/project.uvproj459
-rw-r--r--bsp/lpc178x/project.uvproj344
-rw-r--r--bsp/lpc2478/project.uvproj294
-rw-r--r--bsp/lpc408x/project.uvproj1031
-rw-r--r--bsp/mb9bf506r/project.uvproj336
-rw-r--r--bsp/mb9bf568r/project.uvproj682
-rw-r--r--bsp/mini2440/project.Uv2431
-rw-r--r--bsp/nrf51822/project.uvproj646
-rw-r--r--bsp/sam7x/project.uvproj417
-rw-r--r--bsp/stm32f0x/project.uvproj508
-rw-r--r--bsp/stm32f107/project.uvopt1628
-rw-r--r--bsp/stm32f107/project.uvproj692
-rw-r--r--bsp/stm32f10x/applications/canapp.c145
-rw-r--r--bsp/stm32f10x/drivers/bxcan.c1412
-rw-r--r--bsp/stm32f10x/drivers/bxcan.h17
-rw-r--r--bsp/stm32f10x/project.Uv2145
-rw-r--r--bsp/stm32f20x/project.uvproj287
-rw-r--r--bsp/stm32f40x/applications/application.c2
-rw-r--r--bsp/stm32f40x/drivers/SConscript18
-rw-r--r--bsp/stm32f40x/drivers/stm32f4xx_eth.c4038
-rw-r--r--bsp/stm32f40x/drivers/stm32f4xx_eth.h1874
-rw-r--r--bsp/stm32f40x/project.uvproj147
-rw-r--r--bsp/stm32f40x/project.uvprojx64
-rw-r--r--bsp/tm4c129x/project.uvproj1210
-rw-r--r--components/drivers/can/SConscript8
-rw-r--r--components/drivers/can/can.c907
-rw-r--r--components/drivers/can/readme-zh.txt132
-rw-r--r--components/drivers/include/drivers/can.h293
-rw-r--r--components/drivers/include/rtdevice.h4
-rw-r--r--components/drivers/spi/spi_flash_w25qxx.c7
-rw-r--r--components/net/lwip/apps/ftpd.c264
-rw-r--r--components/net/lwip_dhcpd/dhcp_server.c21
-rw-r--r--libcpu/arm/am335x/mmu.c2
-rw-r--r--libcpu/arm/cortex-m0/context_rvds.S4
-rw-r--r--libcpu/arm/cortex-m3/context_rvds.S6
-rw-r--r--libcpu/arm/cortex-m4/context_rvds.S3
-rw-r--r--tools/buildbot.py11
59 files changed, 17860 insertions, 4033 deletions
diff --git a/bsp/CME_M7/StdPeriph_Driver/inc/cmem7.h b/bsp/CME_M7/StdPeriph_Driver/inc/cmem7.h
index d3baf45d2f..83d7476753 100644
--- a/bsp/CME_M7/StdPeriph_Driver/inc/cmem7.h
+++ b/bsp/CME_M7/StdPeriph_Driver/inc/cmem7.h
@@ -1,12 +1,12 @@
/****************************************************************************************************//**
- * @file CMEM7.h
+ * @file cmem7.h
*
* @brief CMSIS Cortex-M3 Peripheral Access Layer Header File for
- * CMEM7 from <unknown Vendor>.
+ * cmem7 from <unknown Vendor>.
*
* @version V1.0
- * @date 5. June 2014
+ * @date 5. January 2015
*
* @note Generated with SVDConv V2.75
* from CMSIS SVD File 'SVDConv_CME_M7.svd' Version 1.0,
@@ -18,7 +18,7 @@
* @{
*/
-/** @addtogroup CMEM7
+/** @addtogroup cmem7
* @{
*/
@@ -46,7 +46,7 @@ typedef enum {
DebugMonitor_IRQn = -4, /*!< 12 Debug Monitor */
PendSV_IRQn = -2, /*!< 14 Pendable request for system service */
SysTick_IRQn = -1, /*!< 15 System Tick Timer */
-/* ---------------------- CMEM7 Specific Interrupt Numbers ---------------------- */
+/* ---------------------- cmem7 Specific Interrupt Numbers ---------------------- */
ETH_INT_IRQn = 0, /*!< 0 ETH_INT */
USB_INT_IRQn = 1, /*!< 1 USB_INT */
DMA_INT_IRQn = 2, /*!< 2 DMA_INT */
@@ -105,7 +105,7 @@ typedef enum {
/** @} */ /* End of group Configuration_of_CMSIS */
#include <core_cm3.h> /*!< Cortex-M3 processor and core peripherals */
-#include "system_cmem7.h" /*!< CMEM7 System */
+#include "system_cmem7.h" /*!< cmem7 System */
/* ================================================================================ */
@@ -789,17 +789,17 @@ typedef struct { /*!< RTC Structure
struct {
__IO uint32_t SECOND : 1; /*!< 1s interrupt, write 1 clear 0 */
- __IO uint32_t MICROSECOND: 1; /*!< 1ms interrupt, write 1 clear 0 */
+ __IO uint32_t MILLSECOND : 1; /*!< 1ms interrupt, write 1 clear 0 */
} INT_STATUS_b; /*!< BitSize */
};
__IO uint32_t SECOND; /*!< current seconds of system time */
union {
- __IO uint16_t MICROSECOND; /*!< current micro seconds of system time */
+ __IO uint16_t MILLSECOND; /*!< current millseconds of system time */
struct {
__IO uint16_t MS : 10; /*!< micro seconds */
- } MICROSECOND_b; /*!< BitSize */
+ } MILLSECOND_b; /*!< BitSize */
};
} RTC_Type;
@@ -2884,9 +2884,35 @@ typedef struct { /*!< ETH Structure
are used to index the content */
} VLAN_TAG_b; /*!< BitSize */
};
- __I uint32_t RESERVED0[8];
+ __I uint32_t RESERVED0[2];
+ __IO uint32_t RWUFFR; /*!< Remote Wake-Up Frame Filter Register */
+
+ union {
+ __IO uint32_t PMTCSR; /*!< PMT Control and Status Register */
+
+ struct {
+ __IO uint32_t PWRDWN : 1; /*!< Power Down */
+ __IO uint32_t MGKPKTEN : 1; /*!< Magic Packet Enable */
+ __IO uint32_t RWKPKTEN : 1; /*!< Remote Wake-Up Frame Enable */
+ uint32_t : 2;
+ __IO uint32_t MGKPRCVD : 1; /*!< the power management event is generated because of the reception
+ of a magic packet */
+ __IO uint32_t RWKPRCVD : 1; /*!< When set, this bit indicates the power management event is generated
+ because of the reception of a remote wake-up frame */
+ uint32_t : 2;
+ __IO uint32_t GLBLUCAST : 1; /*!< When set, enables any unicast packet filtered by the MAC (DAF)address
+ recognition to be a remote wake-up frame. */
+ uint32_t : 14;
+ __IO uint32_t RWKPTR : 3; /*!< Remote Wake-up FIFO Pointer */
+ uint32_t : 4;
+ __IO uint32_t RWKFILTRST : 1; /*!< Remote Wake-Up Frame Filter Register Pointer Reset. */
+ } PMTCSR_b; /*!< BitSize */
+ };
+ __I uint32_t RESERVED1[2];
+ __IO uint32_t MACISR; /*!< Interrupt Status Register */
+ __IO uint32_t MACIMR; /*!< Interrupt Mask Register */
__IO uint16_t ADDR0_HIGH; /*!< MAC Address0 High Register */
- __I uint16_t RESERVED1;
+ __I uint16_t RESERVED2;
__IO uint32_t ADDR0_LOW; /*!< MAC Address0 LOW Register */
union {
@@ -2901,10 +2927,51 @@ typedef struct { /*!< ETH Structure
} ADDR1_HIGH_b; /*!< BitSize */
};
__IO uint32_t ADDR1_LOW; /*!< MAC Address1 LOW Register */
- __I uint32_t RESERVED2[47];
- __IO uint32_t MMC_RX_MASK; /*!< MMC Receive interrupt mask */
- __IO uint32_t MMC_TX_MASK; /*!< MMC Transmit Interrupt Mask */
- __I uint32_t RESERVED3[955];
+ __I uint32_t RESERVED3[44];
+
+ union {
+ __IO uint32_t MMCCR; /*!< MMC Control Register */
+
+ struct {
+ __IO uint32_t CNTRST : 1; /*!< Counters Reset */
+ __IO uint32_t CNTSTOPRO : 1; /*!< Counter Stop Rollover */
+ __IO uint32_t RSTONRD : 1; /*!< Reset on Read */
+ __IO uint32_t CNTFREEZ : 1; /*!< MMC Counter Freeze */
+ __IO uint32_t CNTPRST : 1; /*!< Counters Preset */
+ __IO uint32_t CNTPRSTLVL : 1; /*!< Counters Preset */
+ uint32_t : 2;
+ __IO uint32_t UCDBC : 1; /*!< Update MMC Counters for Dropped Broadcast Frames */
+ } MMCCR_b; /*!< BitSize */
+ };
+ __IO uint32_t MMCRIR; /*!< MMC Receive Interrupt Register */
+ __IO uint32_t MMCTIR; /*!< MMC Transmit Interrupt Register */
+ __IO uint32_t MMCRIMR; /*!< MMC Receive interrupt mask */
+ __IO uint32_t MMCTIMR; /*!< MMC Transmit Interrupt Mask */
+ __I uint32_t RESERVED4[59];
+ __IO uint32_t MMCIRCOIM; /*!< MMC IPC Receive Checksum Offload Interrupt Mask */
+ __I uint32_t RESERVED5[319];
+
+ union {
+ __IO uint32_t PTPTSCR; /*!< Timestamp Control Register */
+
+ struct {
+ __IO uint32_t TSENA : 1; /*!< Timestamp Enable */
+ __IO uint32_t TSCFUPDT : 1; /*!< Timestamp Fine or Coarse Update */
+ __IO uint32_t TSINIT : 1; /*!< Timestamp Initialize */
+ __IO uint32_t TSUPDT : 1; /*!< Timestamp Update */
+ __IO uint32_t TSTRIG : 1; /*!< Timestamp Interrupt Trigger Enable */
+ __IO uint32_t TSADDREG : 1; /*!< Addend Reg Update */
+ } PTPTSCR_b; /*!< BitSize */
+ };
+ __IO uint32_t PTPSSIR; /*!< Sub-Second Increment Register */
+ __IO uint32_t PTPTSHR; /*!< System Time Seconds Register */
+ __IO uint32_t PTPTSLR; /*!< System Time Nanoseconds Register */
+ __IO uint32_t PTPTSHUR; /*!< System Time Seconds Update Register */
+ __IO uint32_t PTPTSLUR; /*!< System Time Nanoseconds Update Register */
+ __IO uint32_t PTPTSAR; /*!< Timestamp Addend Register */
+ __IO uint32_t PTPTTHR; /*!< Target Time Seconds Register */
+ __IO uint32_t PTPTTLR; /*!< Target Time Nanoseconds Register */
+ __I uint32_t RESERVED6[567];
union {
__IO uint32_t BUS_MODE; /*!< Flow Control Register */
@@ -3019,7 +3086,7 @@ typedef struct { /*!< ETH Structure
__IO uint32_t NIE : 1; /*!< Normal Interrupt Summary Enable */
} INT_EN_b; /*!< BitSize */
};
- __I uint32_t RESERVED4[3];
+ __I uint32_t RESERVED7[3];
union {
__IO uint32_t AHB_STATUS; /*!< AHB Status Register */
@@ -3029,7 +3096,7 @@ typedef struct { /*!< ETH Structure
in the non-idle state */
} AHB_STATUS_b; /*!< BitSize */
};
- __I uint32_t RESERVED5[6];
+ __I uint32_t RESERVED8[6];
__I uint32_t CURTDESAPTR; /*!< Current Host Transmit Descriptor Register */
__I uint32_t CURRDESAPTR; /*!< Current Host Receive Descriptor Register */
__I uint32_t CURTBUFAPTR; /*!< Current Host Transmit Buffer Address Register */
@@ -7227,7 +7294,7 @@ typedef struct { /*!< GLOBAL_CTRL Structure
struct {
__IO uint32_t SECOND : 1; /*!< 1s interrupt enable */
- __IO uint32_t MICROSECOND: 1; /*!< 1ms interrupt enable */
+ __IO uint32_t MILLSECOND : 1; /*!< 1ms interrupt enable */
} RTC_INT_EN_b; /*!< BitSize */
};
__I uint32_t RESERVED1;
@@ -7315,7 +7382,9 @@ typedef struct { /*!< DDRC Structure
__IO uint32_t MODE : 6; /*!< DDRC Mode */
uint32_t : 2;
__IO uint32_t LANE : 1; /*!< LANE synchronization logic bypass */
- uint32_t : 7;
+ uint32_t : 3;
+ __IO uint32_t ADEC : 1; /*!< address decoder mapping */
+ uint32_t : 3;
__IO uint32_t B16 : 2; /*!< Active 16 bit DQ position when the unmber of DQ IO is 16 */
uint32_t : 6;
__IO uint32_t CLKPOL : 2; /*!< DQS clkpol set by user on the PHY */
@@ -7933,7 +8002,7 @@ typedef struct { /*!< SOFT_RESET Structure
/** @} */ /* End of group Device_Peripheral_Registers */
-/** @} */ /* End of group CMEM7 */
+/** @} */ /* End of group cmem7 */
/** @} */ /* End of group (null) */
#ifdef __cplusplus
@@ -7941,5 +8010,5 @@ typedef struct { /*!< SOFT_RESET Structure
#endif
-#endif /* CMEM7_H */
+#endif /* cmem7_H */
diff --git a/bsp/CME_M7/StdPeriph_Driver/inc/cmem7_conf.h b/bsp/CME_M7/StdPeriph_Driver/inc/cmem7_conf.h
index db3b45c0a2..f6a2757476 100644
--- a/bsp/CME_M7/StdPeriph_Driver/inc/cmem7_conf.h
+++ b/bsp/CME_M7/StdPeriph_Driver/inc/cmem7_conf.h
@@ -45,6 +45,11 @@
#define _USB
#define _WDG
+//#define _MARVELL
+//#define _IP1826D
+#define _M7NORFLASH
+#define _ME_6095_F
+
#define USE_FULL_ASSERT 1
#ifdef USE_FULL_ASSERT
@@ -71,7 +76,9 @@ typedef enum _BOOL {FALSE = 0, TRUE = 1} BOOL;
/**
* System clock frequency, unit is Hz.
*/
-#define SYSTEM_CLOCK_FREQ 200000000
+#define SYSTEM_CLOCK_FREQ 300000000
+//250000000
+//300000000
/**
* @brief usecond delay
diff --git a/bsp/CME_M7/StdPeriph_Driver/inc/cmem7_eth.h b/bsp/CME_M7/StdPeriph_Driver/inc/cmem7_eth.h
index 4d8a46527a..4edeca9205 100644
--- a/bsp/CME_M7/StdPeriph_Driver/inc/cmem7_eth.h
+++ b/bsp/CME_M7/StdPeriph_Driver/inc/cmem7_eth.h
@@ -86,7 +86,6 @@
/**
* @}
*/
-
/**
* @brief EFUSE receive filter structure
*/
@@ -105,15 +104,15 @@ typedef struct
*/
typedef struct
{
- BOOL ETH_LinkUp; /*!< If ETH is linked up and it can be retrieved from PHY */
+ BOOL ETH_LinkUp; /*!< If ETH is linked up and it can be retrieved from PHY */
uint8_t ETH_Speed; /*!< speed of ETH, refer as @ref ETH_SPEED */
- uint8_t ETH_Duplex; /*!< duplex mode of ETH, refer as @ref ETH_DUPLEX */
+ uint8_t ETH_Duplex; /*!< duplex mode of ETH, refer as @ref ETH_DUPLEX */
BOOL ETH_RxEn; /*!< Rx enable */
BOOL ETH_TxEn; /*!< Tx enable */
BOOL ETH_ChecksumOffload; /*!< Checksum offload enable */
BOOL ETH_JumboFrame; /*!< Jumbo Frame Enable */
uint8_t ETH_MacAddr[6]; /*!< MAC address */
- ETH_FrameFilter *ETH_Filter; /*!< Received frame address filter, receive all if null */
+ ETH_FrameFilter *ETH_Filter; /*!< Received frame address filter, receive all if null */
} ETH_InitTypeDef;
/**
@@ -173,14 +172,14 @@ typedef struct {
uint32_t CRC_ERR : 1; /*!< [OUT] CRC error while last segment */
uint32_t : 5;
uint32_t TTSE : 1; /*!< timestamp available while last segment */
- uint32_t LS : 1; /*!< last segment flag */
- uint32_t FS : 1; /*!< first segment flag */
+ uint32_t LS : 1; /*!< [OUT] last segment flag */
+ uint32_t FS : 1; /*!< [OUT] first segment flag */
uint32_t : 1;
uint32_t OVERFLOW_ERR : 1; /*!< [OUT] FIFO overflow while last segment */
uint32_t LENGTH_ERR : 1; /*!< [OUT] length error while last segment */
uint32_t : 2;
uint32_t ERR_SUM : 1; /*!< [OUT] Error summary while last segment */
- uint32_t FL : 14; /*!< frame length while last segment */
+ uint32_t FL : 14; /*!< [OUT] frame length while last segment */
uint32_t : 2;
} RX0_b;
} RX_0;
@@ -216,7 +215,13 @@ uint32_t ETH_PhyRead(uint32_t phyAddr, uint32_t phyReg);
* @retval None
*/
void ETH_PhyWrite(uint32_t phyAddr, uint32_t phyReg, uint32_t data);
-
+/**
+ * @brief Fills each ETH_InitStruct member with its default value.
+ * @param ETH_InitStruct: pointer to a ETH_InitTypeDef structure
+ * which will be initialized.
+ * @retval : None
+ */
+void ETH_StructInit(ETH_InitTypeDef* init);
/**
* @brief Ethernet initialization
* @note This function should be called at first before any other interfaces.
@@ -231,21 +236,21 @@ BOOL ETH_Init(ETH_InitTypeDef *init);
* @param[in] Enable The bit indicates if specific interrupts are enable or not
* @retval None
*/
-void ETH_EnableInt(uint32_t Int, BOOL enable);
+void ETH_ITConfig(uint32_t Int, BOOL enable);
/**
* @brief Check specific interrupts are set or not
* @param[in] Int interrupt mask bits, which can be the combination of @ref ETH_INT
* @retval BOOL The bit indicates if specific interrupts are set or not
*/
-BOOL ETH_GetIntStatus(uint32_t Int);
+BOOL ETH_GetITStatus(uint32_t Int);
/**
* @brief Clear specific interrupts
* @param[in] Int interrupt mask bits, which can be the combination of @ref ETH_INT
* @retval None
*/
-void ETH_ClearInt(uint32_t Int);
+void ETH_ClearITPendingBit(uint32_t Int);
/**
* @brief Get ethernte MAC address
@@ -299,7 +304,7 @@ ETH_TX_DESC *ETH_AcquireFreeTxDesc(void);
/**
* @brief Check if a transmission descriptor is free or not
- * @param desc A pointer of a transmission descriptor
+ * @param[in] desc A pointer of a transmission descriptor
* @retval BOOL True if the transmission descriptor is free, or flase.
*/
BOOL ETH_IsFreeTxDesc(ETH_TX_DESC *desc);
@@ -309,12 +314,27 @@ BOOL ETH_IsFreeTxDesc(ETH_TX_DESC *desc);
* After users prepared data in the buffer of a free descriptor,
* They must call this function to change ownership of the
* descriptor to hardware.
- * @param desc A pointer of a transmission descriptor
+ * @param[in] desc A pointer of a transmission descriptor
* @retval None
*/
void ETH_ReleaseTxDesc(ETH_TX_DESC *desc);
/**
+ * @brief Set buffer address of the specific TX descriptor
+ * @param[in] desc A pointer of a transmission descriptor
+ * @param[in] bufAddr buffer address to be sent
+ * @retval None
+ */
+void ETH_SetTxDescBufAddr(ETH_TX_DESC *desc, uint32_t bufAddr);
+
+/**
+ * @brief Get buffer address of the specific TX descriptor
+ * @param[in] desc A pointer of a transmission descriptor
+ * @retval uint32_t buffer address to be gotten
+ */
+uint32_t ETH_GetTxDescBufAddr(ETH_TX_DESC *desc);
+
+/**
* @brief Set ethernet receive descriptor ring
* @note Make sure that memory occupied by descriptors should be in physical
* memory and keep valid before ethernet receive is finished.
@@ -359,7 +379,7 @@ ETH_RX_DESC *ETH_AcquireFreeRxDesc(void);
/**
* @brief Check if a receive descriptor is free or not
- * @param desc A pointer of a receive descriptor
+ * @param[in] desc A pointer of a receive descriptor
* @retval BOOL True if the receive descriptor is free, or flase.
*/
BOOL ETH_IsFreeRxDesc(ETH_RX_DESC *desc);
@@ -369,11 +389,26 @@ BOOL ETH_IsFreeRxDesc(ETH_RX_DESC *desc);
* After users handled data in the buffer of a free descriptor,
* They must call this function to change ownership of the
* descriptor to hardware.
- * @param desc A pointer of a transmission descriptor
+ * @param[in] desc A pointer of a transmission descriptor
* @retval None
*/
void ETH_ReleaseRxDesc(ETH_RX_DESC *desc);
+/**
+ * @brief Set buffer address of the specific RX descriptor
+ * @param[in] desc A pointer of a receive descriptor
+ * @param[in] bufAddr buffer address to be received
+ * @retval None
+ */
+void ETH_SetRxDescBufAddr(ETH_RX_DESC *desc, uint32_t bufAddr);
+
+/**
+ * @brief Get buffer address of the specific RX descriptor
+ * @param[in] desc A pointer of a receive descriptor
+ * @retval uint32_t buffer address to be gotten
+ */
+uint32_t ETH_GetRxDescBufAddr(ETH_RX_DESC *desc);
+
#ifdef __cplusplus
}
#endif
diff --git a/bsp/CME_M7/StdPeriph_Driver/inc/cmem7_flash.h b/bsp/CME_M7/StdPeriph_Driver/inc/cmem7_flash.h
index 477cc59212..c0737b5295 100644
--- a/bsp/CME_M7/StdPeriph_Driver/inc/cmem7_flash.h
+++ b/bsp/CME_M7/StdPeriph_Driver/inc/cmem7_flash.h
@@ -202,6 +202,14 @@ void FLASH_Read(uint8_t ReadMode, uint32_t addr, uint16_t size, uint8_t* data);
*/
void FLASH_Write(uint32_t addr, uint16_t size, uint8_t* data);
+
+void flash_WaitInWritting(void) ;
+
+void flash_WaitReadFifoNotEmpty(void);
+
+uint16_t flash_ReadFifo(uint16_t size, uint8_t* data) ;
+
+
#ifdef __cplusplus
}
#endif
diff --git a/bsp/CME_M7/StdPeriph_Driver/inc/cmem7_gpio.h b/bsp/CME_M7/StdPeriph_Driver/inc/cmem7_gpio.h
index 836bc2f7b6..1652a8a5d2 100644
--- a/bsp/CME_M7/StdPeriph_Driver/inc/cmem7_gpio.h
+++ b/bsp/CME_M7/StdPeriph_Driver/inc/cmem7_gpio.h
@@ -140,6 +140,17 @@ void GPIO_InitPwm(uint8_t Channel, uint32_t HighLevelNanoSecond, uint32_t LowLev
*/
void GPIO_EnablePwm(uint8_t Channel, BOOL Enable);
+
+
+/**
+ xjf 20150324
+
+**/
+void GPIO_SetBits(uint32_t mask);
+void GPIO_clrBits(uint32_t mask);
+uint32_t GPIO_getBits(uint32_t mask);
+
+
#ifdef __cplusplus
}
#endif
diff --git a/bsp/CME_M7/StdPeriph_Driver/inc/cmem7_includes.h b/bsp/CME_M7/StdPeriph_Driver/inc/cmem7_includes.h
index a7e6cc2cc4..bb2adcd2a9 100644
--- a/bsp/CME_M7/StdPeriph_Driver/inc/cmem7_includes.h
+++ b/bsp/CME_M7/StdPeriph_Driver/inc/cmem7_includes.h
@@ -102,6 +102,16 @@
#include "cmem7_wdg.h"
#endif
+
+#ifdef _MARVELL
+ #include <marvel_98dx242.h>
+ #include <s24g_i2c.h>
+#endif
+
+#ifdef _IP1826D
+ #include <ip1826d_v00.h>
+#endif
+
#ifdef __cplusplus
}
#endif
diff --git a/bsp/CME_M7/StdPeriph_Driver/inc/cmem7_misc.h b/bsp/CME_M7/StdPeriph_Driver/inc/cmem7_misc.h
index d0b980aa72..820a8ea59f 100644
--- a/bsp/CME_M7/StdPeriph_Driver/inc/cmem7_misc.h
+++ b/bsp/CME_M7/StdPeriph_Driver/inc/cmem7_misc.h
@@ -87,9 +87,11 @@ typedef struct
* @{
*/
+#define NVIC_VectTab_CME_CODE ((uint32_t)0x00000000)
#define NVIC_VectTab_RAM ((uint32_t)0x20000000)
#define NVIC_VectTab_FLASH ((uint32_t)0x08000000)
-#define IS_NVIC_VECTTAB(VECTTAB) (((VECTTAB) == NVIC_VectTab_RAM) || \
+#define IS_NVIC_VECTTAB(VECTTAB) (((VECTTAB) == NVIC_VectTab_CME_CODE) || \
+ ((VECTTAB) == NVIC_VectTab_RAM) || \
((VECTTAB) == NVIC_VectTab_FLASH))
/**
* @}
@@ -198,6 +200,20 @@ void NVIC_SystemLPConfig(uint8_t LowPowerMode, BOOL NewState);
void GLB_MMAP(uint32_t from, uint32_t to, BOOL isIcacheOn);
/**
+ * @brief Convert the mapping destination address to source address
+ * @param[in] to address to be mapped to
+ * @retval uint32_t address to be mapped from
+ */
+uint32_t GLB_ConvertToMappingFromAddr(uint32_t to);
+
+/**
+ * @brief Convert the mapping source address to destination address
+ * @param[in] from address to be mapped from
+ * @retval uint32_t address to be mapped to
+ */
+uint32_t GLB_ConvertToMappingToAddr(uint32_t from);
+
+/**
* @brief Set NMI irq number, it should be one of @ref IRQn_Type.
* @Note You can assign any valid IRQn_Type to NMI. After that, you will enter NMI
* interrupt routine if the specific 'irq' occurs. By default, NMI irq number
@@ -228,6 +244,30 @@ void GLB_SetNmiIrqNum(uint32_t irq);
*/
void GLB_SelectSysClkSource(uint8_t source);
+/**
+ * @brief Simulate instruction 'STRB' or 'STRH' with 'BFI'
+ * @Note In M7, you have to write a register in 32-bit alignment,
+ * not in 8-bit or 16-bit.
+ * @param[in] addr register address to be written
+ * @param[in] value value to be written
+ * @param[in] lsb LSB in register to be written
+ * @param[in] len bit length to be written
+ * @retval None
+ */
+
+
+//#define aaaa(len) __asm("LDR len, 11")
+
+#define CMEM7_BFI(addr, value, lsb, len) \
+ do { \
+ unsigned long tmp; \
+ unsigned long tmp1 = (unsigned long)addr; \
+ \
+ __asm("LDR tmp, [tmp1]\n" \
+ "BFI tmp, "#value", "#lsb", "#len" \n" \
+ "STR tmp, [tmp1]\n"); \
+ } while (0)
+
#ifdef __cplusplus
}
#endif
diff --git a/bsp/CME_M7/StdPeriph_Driver/inc/cmem7_rtc.h b/bsp/CME_M7/StdPeriph_Driver/inc/cmem7_rtc.h
index bb04de5d83..885d704ceb 100644
--- a/bsp/CME_M7/StdPeriph_Driver/inc/cmem7_rtc.h
+++ b/bsp/CME_M7/StdPeriph_Driver/inc/cmem7_rtc.h
@@ -38,34 +38,34 @@
* @{
*/
#define RTC_Int_Second ((uint32_t)0x00000001)
-#define RTC_Int_Microsecond ((uint32_t)0x00000002)
+#define RTC_Int_Millsecond ((uint32_t)0x00000002)
#define RTC_Int_All ((uint32_t)0x00000003)
#define IS_RTC_INT(INT) (((INT) != 0) && (((INT) & ~RTC_Int_All) == 0))
/**
* @}
*/
-
+
/**
* @brief Enable or disable RTC interrupt.
* @param[in] Int interrupt mask bits, which can be the combination of @ref RTC_Int
* @param[in] Enable The bit indicates if specific interrupts are enable or not
* @retval None
*/
-void RTC_EnableInt(uint32_t Int, BOOL Enable);
+void RTC_ITConfig(uint32_t Int, BOOL Enable);
/**
* @brief Check specific interrupts are set or not
* @param[in] Int interrupt mask bits, which can be the combination of @ref RTC_Int
* @retval BOOL The bit indicates if specific interrupts are set or not
*/
-BOOL RTC_GetIntStatus(uint32_t Int);
+BOOL RTC_GetITStatus(uint32_t Int);
/**
* @brief Clear specific interrupts
* @param[in] Int interrupt mask bits, which can be the combination of @ref RTC_Int
* @retval None
*/
-void RTC_ClearInt(uint32_t Int);
+void RTC_ClearITPendingBit(uint32_t Int);
/**
* @brief Get seconds since power up
@@ -75,11 +75,11 @@ void RTC_ClearInt(uint32_t Int);
uint32_t RTC_GetSecond(void);
/**
- * @brief Get current micro-seconds
+ * @brief Get current millseconds
* @param None
- * @retval uint32_t Current micro-seconds
+ * @retval uint32_t Current millseconds
*/
-uint16_t RTC_GetMicroSecond(void);
+uint16_t RTC_GetMillSecond(void);
#ifdef __cplusplus
}
diff --git a/bsp/CME_M7/StdPeriph_Driver/inc/cmem7_wdg.h b/bsp/CME_M7/StdPeriph_Driver/inc/cmem7_wdg.h
index 86fecbe8fa..78c444c53b 100644
--- a/bsp/CME_M7/StdPeriph_Driver/inc/cmem7_wdg.h
+++ b/bsp/CME_M7/StdPeriph_Driver/inc/cmem7_wdg.h
@@ -57,13 +57,20 @@
*/
/**
+ * @brief Deinitializes the Watchdog peripheral registers to their default reset values.
+ * @param[in] None
+ * @retval None
+ */
+void WDG_DeInit(void);
+
+/**
* @brief Watchdog initialization
* @note This function should be called at first before any other interfaces.
* @param[in] trigger Watchdog interrupt trigger mode, which is a value of @ref WDG_TRIGGER_MODE
- * @param[in] ResetMicroSecond MicroSeconds lasts before global reset
+ * @param[in] ResetMillSecond MillSeconds lasts before global reset
* @retval None
*/
-void WDG_Init(uint8_t trigger, uint16_t ResetMicroSecond);
+void WDG_Init(uint8_t trigger, uint16_t ResetMillSecond);
/**
* @brief Enable or disable watchdog interrupt.
@@ -71,28 +78,28 @@ void WDG_Init(uint8_t trigger, uint16_t ResetMicroSecond);
* @param[in] Enable The bit indicates if the specific interrupt are enable or not
* @retval None
*/
-void WDG_EnableInt(uint8_t Int, BOOL Enable);
+void WDG_ITConfig(uint8_t Int, BOOL Enable);
/**
* @brief Check the specific interrupt are set or not
* @param None
* @retval BOOL The bit indicates if the specific interrupt are set or not
*/
-BOOL WDG_GetIntStatus(void);
+BOOL WDG_GetITStatus(void);
/**
* @brief Clear the specific interrupt
* @param None
* @retval None
*/
-void WDG_ClearInt(void);
+void WDG_ClearITPendingBit(void);
/**
* @brief Enable or disable watchdog.
* @param[in] Enable The bit indicates if watchdog is enable or not
* @retval None
*/
-void WDG_Enable(BOOL Enable);
+void WDG_Cmd(BOOL Enable);
#ifdef __cplusplus
diff --git a/bsp/CME_M7/StdPeriph_Driver/src/cmem7_eth.c b/bsp/CME_M7/StdPeriph_Driver/src/cmem7_eth.c
index c8eb45fba0..5c07abebf9 100644
--- a/bsp/CME_M7/StdPeriph_Driver/src/cmem7_eth.c
+++ b/bsp/CME_M7/StdPeriph_Driver/src/cmem7_eth.c
@@ -5,8 +5,8 @@
* @brief CMEM7 ethernet source file
*
*
- * @version V1.0
- * @date 3. September 2013
+ * @version V2.0
+ * @date 3. September 2014
*
* @note
*
@@ -25,7 +25,7 @@
*/
#include "cmem7_eth.h"
-
+#include "cmem7_misc.h"
typedef struct {
union {
@@ -49,7 +49,7 @@ typedef struct {
uint32_t TCH : 1; /*!< Second Address Chained */
uint32_t : 4;
uint32_t TTSE : 1; /*!< enables IEEE1588 hardware timestamping in first segment */
- uint32_t : 2;
+ uint32_t : 2;
uint32_t FS : 1; /*!< first segment flag */
uint32_t LS : 1; /*!< last segment flag */
uint32_t IC : 1; /*!< Interrupt on Completion */
@@ -190,8 +190,9 @@ static void mac_SetConfig(ETH_InitTypeDef *init) {
ETH->CONFIG_b.IPC = init->ETH_ChecksumOffload;
ETH->CONFIG_b.DM = init->ETH_Duplex;
ETH->CONFIG_b.LM = FALSE;
- ETH->MMC_RX_MASK = 0xFFFFFFFF;
- ETH->MMC_TX_MASK = 0xFFFFFFFF;
+ ETH->MMCRIMR = 0xFFFFFFFF;
+ ETH->MMCTIMR = 0xFFFFFFFF;
+ ETH->MMCIRCOIM = 0xFFFFFFFF;
if (init->ETH_Speed == ETH_SPEED_10M) {
ETH->CONFIG_b.FES = ETH_EXACT_SPEED_10M_BPS;
@@ -209,7 +210,7 @@ static void mac_SetConfig(ETH_InitTypeDef *init) {
ETH->CONFIG_b.JD = TRUE;
ETH->CONFIG_b.WD = TRUE;
ETH->CONFIG_b.TC = FALSE;
- ETH->CONFIG_b.CST = FALSE;
+ ETH->CONFIG_b.CST = TRUE;
ETH->CONFIG_b.TWOKPE = FALSE;
ETH->CONFIG_b.SARC = ETH_SOURCE_ADDR_REPLACE;
}
@@ -318,7 +319,7 @@ static void mac_SetFrameFilter(ETH_FrameFilter *filter) {
ETH->FF_b.VTFE = FALSE;
ETH->FF_b.IPFE = FALSE;
ETH->FF_b.DNTU = FALSE;
- ETH->FF_b.RA = TRUE;
+ ETH->FF_b.RA = FALSE;//TRUE
// receive all
if (!filter) {
@@ -339,14 +340,20 @@ static void mac_SetFrameFilter(ETH_FrameFilter *filter) {
// SA
if (filter->ETH_SourceFilterEnable) {
- ETH->FF_b.RA = FALSE;
+ uint32_t value;
+
+ ETH->FF_b.RA = FALSE;
ETH->FF_b.SAF = TRUE;
ETH->FF_b.SAIF = filter->ETH_SourceDrop;
ETH->ADDR1_HIGH_b.AE = TRUE;
- ETH->ADDR1_HIGH_b.SA = TRUE;
- ETH->ADDR1_HIGH_b.ADDR =
+ ETH->ADDR1_HIGH_b.SA = TRUE;
+ ETH->ADDR1_HIGH_b.ADDR =
(filter->ETH_SourceMacAddr[5] << 8) | filter->ETH_SourceMacAddr[4];
- ETH->ADDR1_LOW = (filter->ETH_SourceMacAddr[3] << 24) |
+
+
+// value = (filter->ETH_SourceMacAddr[5] << 8) | filter->ETH_SourceMacAddr[4];
+// CMEM7_BFI(&(ETH->ADDR1_HIGH), value, 0, 16);
+ ETH->ADDR1_LOW = (filter->ETH_SourceMacAddr[3] << 24) |
(filter->ETH_SourceMacAddr[2] << 16) |
(filter->ETH_SourceMacAddr[1] << 8) |
filter->ETH_SourceMacAddr[0];
@@ -355,9 +362,9 @@ static void mac_SetFrameFilter(ETH_FrameFilter *filter) {
static void mac_setFlowControl(void) {
ETH->FC_b.FCB = FALSE;
- ETH->FC_b.TFE = TRUE;
- ETH->FC_b.RFE = TRUE;
- ETH->FC_b.UP = TRUE;
+ ETH->FC_b.TFE = FALSE;//TRUE
+ ETH->FC_b.RFE = FALSE;//TRUE
+ ETH->FC_b.UP = FALSE;//TRUE
}
uint32_t ETH_PhyRead(uint32_t phyAddr, uint32_t phyReg) {
@@ -381,27 +388,44 @@ void ETH_PhyWrite(uint32_t phyAddr, uint32_t phyReg, uint32_t data) {
while (ETH->GMII_ADDR_b.BUSY) ;
}
-
+void ETH_StructInit(ETH_InitTypeDef* init)
+{
+ init->ETH_Speed = ETH_SPEED_10M;
+ init->ETH_Duplex = ETH_DUPLEX_FULL;
+ init->ETH_JumboFrame = FALSE;
+ init->ETH_LinkUp = FALSE;
+ init->ETH_RxEn = TRUE;
+ init->ETH_TxEn = TRUE;
+ init->ETH_ChecksumOffload = FALSE;
+ init->ETH_Filter = 0;
+ init->ETH_MacAddr[0] = 0;
+ init->ETH_MacAddr[1] = 0;
+ init->ETH_MacAddr[2] = 0;
+ init->ETH_MacAddr[3] = 0;
+ init->ETH_MacAddr[4] = 0;
+ init->ETH_MacAddr[5] = 0;
+
+}
BOOL ETH_Init(ETH_InitTypeDef *init) {
- assert_param(init);
- assert_param(IS_ETH_SPEED(init->ETH_Speed));
- assert_param(IS_ETH_DUPLEX(init->ETH_Duplex));
+ assert_param(init);
+ assert_param(IS_ETH_SPEED(init->ETH_Speed));
+ assert_param(IS_ETH_DUPLEX(init->ETH_Duplex));
- mac_SwReset();
- mac_SetConfig(init);
- mac_SetMacAddr(init->ETH_MacAddr);
+ mac_SwReset();
+ mac_SetConfig(init);
+ mac_SetMacAddr(init->ETH_MacAddr);
- mac_SetBurst(ETH_BURST_MODE_MIXED, 3, 4);
- mac_SetPriority(TRUE, 0);
- mac_SetDescMode(TRUE, 0);
- mac_SetOpertionMode();
- mac_SetFrameFilter(init->ETH_Filter);
- mac_setFlowControl();
+ mac_SetBurst(ETH_BURST_MODE_MIXED, 3, 4);
+ mac_SetPriority(TRUE, 0);
+ mac_SetDescMode(TRUE, 0);
+ mac_SetOpertionMode();
+ mac_SetFrameFilter(init->ETH_Filter);
+ mac_setFlowControl();
- return TRUE;
+ return TRUE;
}
-void ETH_EnableInt(uint32_t Int, BOOL enable) {
+void ETH_ITConfig(uint32_t Int, BOOL enable) {
assert_param(IS_ETH_INT(Int));
if (enable) {
@@ -426,7 +450,7 @@ void ETH_EnableInt(uint32_t Int, BOOL enable) {
}
}
}
-BOOL ETH_GetIntStatus(uint32_t Int) {
+BOOL ETH_GetITStatus(uint32_t Int) {
assert_param(IS_ETH_INT(Int));
Int &= ETH->INT_EN;
@@ -436,8 +460,7 @@ BOOL ETH_GetIntStatus(uint32_t Int) {
return FALSE;
}
-
-void ETH_ClearInt(uint32_t Int) {
+void ETH_ClearITPendingBit(uint32_t Int) {
uint32_t sta;
assert_param(IS_ETH_INT(Int));
@@ -450,15 +473,15 @@ void ETH_ClearInt(uint32_t Int) {
if (IS_ETH_INT_NORMAL(Int)) {
if (!IS_ETH_INT_NORMAL(sta)) {
- // write 1 clear
- ETH->STATUS_b.NIS = 1;
+ // write 1 clear NIS
+ ETH->STATUS = ETH_INT_NORMAL_SUMMARY;
}
}
if (IS_ETH_INT_ABNORMAL(Int)) {
if (!IS_ETH_INT_ABNORMAL(sta)) {
- // write 1 clear
- ETH->STATUS_b.AIS = 1;
+ // write 1 clear AIS
+ ETH->STATUS = ETH_INT_ABNORMAL_SUMMARY;
}
}
}
@@ -491,12 +514,25 @@ BOOL ETH_SetTxDescRing(ETH_TX_DESC *ring) {
return FALSE;
}
+ /* If code mapping */
+ ring = (ETH_TX_DESC *)GLB_ConvertToMappingFromAddr((uint32_t)ring);
+ buf = ring;
+
do {
INNER_ETH_TX_DESC *desc = (INNER_ETH_TX_DESC *)buf;
+ uint8_t first = desc->TX_0.TX0_b.FS;
+ uint8_t last = desc->TX_0.TX0_b.LS;
+
+ // clear all bits
+ desc->TX_0.TX0 = 0;
+ desc->TX_0.TX0_b.FS = first;
+ desc->TX_0.TX0_b.LS = last;
desc->TX_0.TX0_b.TCH = TRUE;
desc->TX_0.TX0_b.IC = TRUE;
desc->TX_0.TX0_b.OWN = ETH_DESC_OWN_BY_SELF;
+ buf->bufAddr = GLB_ConvertToMappingFromAddr(buf->bufAddr);
+ buf->nextDescAddr = GLB_ConvertToMappingFromAddr(buf->nextDescAddr);
buf = (ETH_TX_DESC *)buf->nextDescAddr;
} while (buf != ring);
@@ -553,6 +589,16 @@ void ETH_ReleaseTxDesc(ETH_TX_DESC *desc) {
inner->TX_0.TX0_b.OWN = ETH_DESC_OWN_BY_HW;
}
+void ETH_SetTxDescBufAddr(ETH_TX_DESC *desc, uint32_t bufAddr) {
+ if (desc) {
+ desc->bufAddr = GLB_ConvertToMappingFromAddr(bufAddr);;
+ }
+}
+
+uint32_t ETH_GetTxDescBufAddr(ETH_TX_DESC *desc) {
+ return (desc ? GLB_ConvertToMappingToAddr(desc->bufAddr) : 0);
+}
+
BOOL ETH_SetRxDescRing(ETH_RX_DESC *ring) {
ETH_RX_DESC *buf = ring;
@@ -564,12 +610,17 @@ BOOL ETH_SetRxDescRing(ETH_RX_DESC *ring) {
return FALSE;
}
+ /* If code mapping */
+ ring = (ETH_RX_DESC *)GLB_ConvertToMappingFromAddr((uint32_t)ring);
+ buf = ring;
do {
INNER_ETH_RX_DESC *desc = (INNER_ETH_RX_DESC *)buf;
desc->RX_1.RX1_b.RCH = TRUE;
desc->RX_1.RX1_b.DIC = FALSE;
desc->RX_0.RX0_b.OWN = ETH_DESC_OWN_BY_HW;
+ buf->bufAddr = GLB_ConvertToMappingFromAddr(buf->bufAddr);
+ buf->nextDescAddr = GLB_ConvertToMappingFromAddr(buf->nextDescAddr);
buf = (ETH_RX_DESC *)buf->nextDescAddr;
} while (buf != ring);
@@ -627,3 +678,15 @@ void ETH_ReleaseRxDesc(ETH_RX_DESC *desc) {
}
+void ETH_SetRxDescBufAddr(ETH_RX_DESC *desc, uint32_t bufAddr) {
+ if (desc) {
+ desc->bufAddr = GLB_ConvertToMappingFromAddr(bufAddr);;
+ }
+}
+
+uint32_t ETH_GetRxDescBufAddr(ETH_RX_DESC *desc) {
+ return (desc ? GLB_ConvertToMappingToAddr(desc->bufAddr) : 0);
+}
+
+
+
diff --git a/bsp/CME_M7/StdPeriph_Driver/src/cmem7_flash.c b/bsp/CME_M7/StdPeriph_Driver/src/cmem7_flash.c
index db9adf0763..8fc764abf6 100644
--- a/bsp/CME_M7/StdPeriph_Driver/src/cmem7_flash.c
+++ b/bsp/CME_M7/StdPeriph_Driver/src/cmem7_flash.c
@@ -108,7 +108,8 @@ static uint8_t flash_ReadInnerStatusHigh() {
return (uint8_t)NOR_FLASH->DATA;
}
-static void flash_WaitInWritting() {
+//static void flash_WaitInWritting() {
+void flash_WaitInWritting(void) {
FLASH_INNER_STATUS s;
while (NOR_FLASH->STATUS_b.BUSY);
@@ -173,7 +174,8 @@ static void flash_RwReq(uint8_t cmd, uint32_t addr, uint16_t size) {
NOR_FLASH->TRIGGER_b.OP_START = TRUE;
}
-static void flash_WaitReadFifoNotEmpty() {
+//static void flash_WaitReadFifoNotEmpty() {
+void flash_WaitReadFifoNotEmpty(void) {
while (NOR_FLASH->STATUS_b.RD_FIFO_EMPTY) {
if (wait) {
(*wait)();
@@ -181,7 +183,8 @@ static void flash_WaitReadFifoNotEmpty() {
}
}
-static uint16_t flash_ReadFifo(uint16_t size, uint8_t* data) {
+//static uint16_t flash_ReadFifo(uint16_t size, uint8_t* data) {
+uint16_t flash_ReadFifo(uint16_t size, uint8_t* data) {
uint16_t count = 0;
while (!NOR_FLASH->STATUS_b.RD_FIFO_EMPTY && size != 0) {
diff --git a/bsp/CME_M7/StdPeriph_Driver/src/cmem7_gpio.c b/bsp/CME_M7/StdPeriph_Driver/src/cmem7_gpio.c
index f49e727862..785c8a0767 100644
--- a/bsp/CME_M7/StdPeriph_Driver/src/cmem7_gpio.c
+++ b/bsp/CME_M7/StdPeriph_Driver/src/cmem7_gpio.c
@@ -179,3 +179,78 @@ void GPIO_EnablePwm(uint8_t Channel, BOOL Enable) {
}
}
+/**
+ xjf 20150324
+
+**/
+void GPIO_SetBits(uint32_t mask)
+{
+ static uint32_t g_GPIO_OUT_UNMASK;
+ static uint32_t g_GPIO_OUT_DATA;
+ static uint32_t g_GPIO_OE;
+
+ g_GPIO_OUT_UNMASK = GPIO->GPIO_OUT_UNMASK ;
+ g_GPIO_OUT_DATA = GPIO->GPIO_OUT_DATA ;
+ g_GPIO_OE = GPIO->GPIO_OE ;
+ g_GPIO_OUT_UNMASK |=mask;
+ g_GPIO_OE |=mask;
+ g_GPIO_OUT_DATA |=mask;
+
+ GPIO->GPIO_OUT_UNMASK =g_GPIO_OUT_UNMASK ;
+ GPIO->GPIO_OUT_DATA =g_GPIO_OUT_DATA ;
+ GPIO->GPIO_OE =g_GPIO_OE ;
+}
+
+void GPIO_clrBits(uint32_t mask)
+{
+ static uint32_t g_GPIO_OUT_UNMASK;
+ static uint32_t g_GPIO_OUT_DATA;
+ static uint32_t g_GPIO_OE;
+
+ g_GPIO_OUT_UNMASK = GPIO->GPIO_OUT_UNMASK ;
+ g_GPIO_OUT_DATA = GPIO->GPIO_OUT_DATA ;
+ g_GPIO_OE = GPIO->GPIO_OE ;
+ g_GPIO_OUT_UNMASK |=mask;
+ g_GPIO_OE |=mask;
+ g_GPIO_OUT_DATA &=(~ mask);
+
+ GPIO->GPIO_OUT_UNMASK =g_GPIO_OUT_UNMASK ;
+ GPIO->GPIO_OUT_DATA =g_GPIO_OUT_DATA ;
+ GPIO->GPIO_OE =g_GPIO_OE ;
+}
+
+uint32_t GPIO_getBits(uint32_t mask)
+{
+ static uint32_t g_GPIO_OUT_UNMASK;
+ //static uint32_t g_GPIO_OUT_DATA;
+ static uint32_t g_GPIO_OE;
+
+ uint32_t get_delay = 0;
+ uint32_t saved_mask;
+
+ saved_mask=mask;
+
+ g_GPIO_OUT_UNMASK = GPIO->GPIO_OUT_UNMASK ;
+ g_GPIO_OE = GPIO->GPIO_OE ;
+ g_GPIO_OUT_UNMASK &=(~mask);
+ g_GPIO_OE &=(~mask);
+ GPIO->GPIO_OUT_UNMASK =g_GPIO_OUT_UNMASK ;
+ GPIO->GPIO_OE =g_GPIO_OE ;
+ for(get_delay=0;get_delay<100;get_delay++)
+ {
+ }
+ //get_delay=(GPIO->GPIO_IN)&saved_mask;
+ if(((GPIO->GPIO_IN)&saved_mask)==saved_mask)
+ {
+ return(1);
+ }
+ else
+ {
+ return(0);
+ }
+
+}
+/**
+ xjf 20150324
+
+**/
diff --git a/bsp/CME_M7/StdPeriph_Driver/src/cmem7_misc.c b/bsp/CME_M7/StdPeriph_Driver/src/cmem7_misc.c
index fd88e6769c..9f4151fa85 100644
--- a/bsp/CME_M7/StdPeriph_Driver/src/cmem7_misc.c
+++ b/bsp/CME_M7/StdPeriph_Driver/src/cmem7_misc.c
@@ -92,8 +92,20 @@ void NVIC_SystemLPConfig(uint8_t LowPowerMode, BOOL NewState)
}
}
+#define DEF_IBUS_OFFSET 0x1FFE0000
+#define DEF_EXT_ADDR 0x08020000
+static BOOL isMappingOn() {
+ /* If default values aren't changed */
+ if ((GLOBAL_CTRL->IBUSOFF == DEF_IBUS_OFFSET) &&
+ (GLOBAL_CTRL->EXTADDR == DEF_EXT_ADDR)) {
+ return FALSE;
+ }
+
+ return TRUE;
+}
+
void GLB_MMAP(uint32_t from, uint32_t to, BOOL isIcacheOn) {
- int n;
+ volatile int n;
GLOBAL_CTRL->IBUSOFF = GLOBAL_CTRL->DBUSOFF = (from - to);
GLOBAL_CTRL->EXTADDR = to;
@@ -104,6 +116,38 @@ void GLB_MMAP(uint32_t from, uint32_t to, BOOL isIcacheOn) {
for (n = 0; n < 100; n++);
}
+/*
+ * ------------------------------------------------------------------
+ * | 0 - 0x20000 | --> 0x20000000 | -> 0x40000000 | -> 0xFFFFFFFF |
+ * | code SRAM | map to region | data SRAM | map from region |
+ * ------------------------------------------------------------------
+ */
+#define MAPPING_FROM_REGION_START 0x40000000
+#define MAPPING_TO_REGION_END 0x20000000
+uint32_t GLB_ConvertToMappingFromAddr(uint32_t to) {
+ if (!isMappingOn()) {
+ return to;
+ }
+
+ if ((to > MAPPING_TO_REGION_END) || (to < GLOBAL_CTRL->EXTADDR)) {
+ return to;
+ }
+
+ return (to + GLOBAL_CTRL->IBUSOFF);
+}
+
+uint32_t GLB_ConvertToMappingToAddr(uint32_t from) {
+ if (!isMappingOn()) {
+ return from;
+ }
+
+ if (from < MAPPING_FROM_REGION_START) {
+ return from;
+ }
+
+ return (from - GLOBAL_CTRL->IBUSOFF);
+}
+
void GLB_SetNmiIrqNum(uint32_t irq) {
GLOBAL_CTRL->NMI_SEL_b.NMI = irq;
}
diff --git a/bsp/CME_M7/StdPeriph_Driver/src/cmem7_rtc.c b/bsp/CME_M7/StdPeriph_Driver/src/cmem7_rtc.c
index d107e0cb8d..aec1580ad9 100644
--- a/bsp/CME_M7/StdPeriph_Driver/src/cmem7_rtc.c
+++ b/bsp/CME_M7/StdPeriph_Driver/src/cmem7_rtc.c
@@ -28,7 +28,7 @@
#define SECONDS_IN_A_DAY (86400)
-void RTC_EnableInt(uint32_t Int, BOOL Enable) {
+void RTC_ITConfig(uint32_t Int, BOOL Enable) {
assert_param(IS_RTC_INT(Int));
if (Enable) {
@@ -38,7 +38,7 @@ void RTC_EnableInt(uint32_t Int, BOOL Enable) {
}
}
-BOOL RTC_GetIntStatus(uint32_t Int) {
+BOOL RTC_GetITStatus(uint32_t Int) {
assert_param(IS_RTC_INT(Int));
if (0 != (RTC->INT_STATUS & Int)) {
@@ -48,7 +48,7 @@ BOOL RTC_GetIntStatus(uint32_t Int) {
return FALSE;
}
-void RTC_ClearInt(uint32_t Int) {
+void RTC_ClearITPendingBit(uint32_t Int) {
assert_param(IS_RTC_INT(Int));
RTC->INT_STATUS = Int;
@@ -58,6 +58,6 @@ uint32_t RTC_GetSecond() {
return RTC->SECOND;
}
-uint16_t RTC_GetMicroSecond() {
- return RTC->MICROSECOND_b.MS;
+uint16_t RTC_GetMillSecond() {
+ return RTC->MILLSECOND_b.MS;
}
diff --git a/bsp/CME_M7/StdPeriph_Driver/src/cmem7_wdg.c b/bsp/CME_M7/StdPeriph_Driver/src/cmem7_wdg.c
index 6518d81225..8ac809caf9 100644
--- a/bsp/CME_M7/StdPeriph_Driver/src/cmem7_wdg.c
+++ b/bsp/CME_M7/StdPeriph_Driver/src/cmem7_wdg.c
@@ -30,29 +30,34 @@ static uint32_t wdg_GetClock() {
return SYSTEM_CLOCK_FREQ / (1 << (GLOBAL_CTRL->CLK_SEL_0_b.WDG_CLK + 1));
}
-void WDG_Init(uint8_t trigger, uint16_t ResetMicroSecond) {
+void WDG_DeInit(void){
+ SOFT_RESET->SOFTRST_b.WDT_n = 0;
+ SOFT_RESET->SOFTRST_b.WDT_n = 1;
+}
+
+void WDG_Init(uint8_t trigger, uint16_t ResetMillSecond) {
assert_param(IS_WDG_TRIGGER_MODE(trigger));
WDG->INT_CTRL_b.TRIGGER_MODE = trigger;
- WDG->LEN = ((uint64_t)wdg_GetClock()) * ResetMicroSecond / 1000;
+ WDG->LEN = ((uint64_t)wdg_GetClock()) * ResetMillSecond / 1000;
}
-void WDG_EnableInt(uint8_t Int, BOOL Enable) {
+void WDG_ITConfig(uint8_t Int, BOOL Enable) {
assert_param(IS_WDG_INT(Int));
WDG->CTRL_b.INT_LEN = Int;
WDG->INT_CTRL_b.MASK = !Enable;
}
-BOOL WDG_GetIntStatus() {
+BOOL WDG_GetITStatus() {
return (WDG->INT_STA_b.STA == 1) ? TRUE : FALSE;
}
-void WDG_ClearInt() {
+void WDG_ClearITPendingBit() {
WDG->INT_STA_b.STA = 1;
}
-void WDG_Enable(BOOL Enable) {
+void WDG_Cmd(BOOL Enable) {
WDG->CTRL_b.EN = Enable;
}
diff --git a/bsp/CME_M7/drivers/emac.c b/bsp/CME_M7/drivers/emac.c
index 3de53142b9..a8837d44ce 100644
--- a/bsp/CME_M7/drivers/emac.c
+++ b/bsp/CME_M7/drivers/emac.c
@@ -205,14 +205,14 @@ static rt_err_t rt_cme_eth_init(rt_device_t dev)
RxDescChainInit();
TxDescChainInit();
- ETH_EnableInt(ETH_INT_BUS_FATAL_ERROR, TRUE);
+ ETH_ITConfig(ETH_INT_BUS_FATAL_ERROR, TRUE);
- ETH_EnableInt(ETH_INT_RX_COMPLETE_FRAME, TRUE);
- ETH_EnableInt(ETH_INT_RX_BUF_UNAVAI, TRUE);
- ETH_EnableInt(ETH_INT_RX_STOP, TRUE);
+ ETH_ITConfig(ETH_INT_RX_COMPLETE_FRAME, TRUE);
+ ETH_ITConfig(ETH_INT_RX_BUF_UNAVAI, TRUE);
+ ETH_ITConfig(ETH_INT_RX_STOP, TRUE);
ETH_StartRx();
- ETH_EnableInt(ETH_INT_TX_COMPLETE_FRAME, TRUE);
+ ETH_ITConfig(ETH_INT_TX_COMPLETE_FRAME, TRUE);
ETH_StartTx();
return RT_EOK;
@@ -318,8 +318,8 @@ struct pbuf *rt_cme_eth_rx(rt_device_t dev)
desc = ETH_AcquireFreeRxDesc();
if(desc == RT_NULL)
{
- ETH_EnableInt(ETH_INT_RX_COMPLETE_FRAME, TRUE);
- ETH_EnableInt(ETH_INT_RX_BUF_UNAVAI, TRUE);
+ ETH_ITConfig(ETH_INT_RX_COMPLETE_FRAME, TRUE);
+ ETH_ITConfig(ETH_INT_RX_BUF_UNAVAI, TRUE);
ETH_ResumeRx();
goto _exit;
}
@@ -414,28 +414,28 @@ void ETH_IRQHandler(void)
/* enter interrupt */
rt_interrupt_enter();
- if (ETH_GetIntStatus(ETH_INT_TX_COMPLETE_FRAME))
+ if (ETH_GetITStatus(ETH_INT_TX_COMPLETE_FRAME))
{
rt_sem_release(&cme_eth_device.tx_buf_free);
- ETH_ClearInt(ETH_INT_TX_COMPLETE_FRAME);
+ ETH_ClearITPendingBit(ETH_INT_TX_COMPLETE_FRAME);
}
- if (ETH_GetIntStatus(ETH_INT_RX_STOP))
+ if (ETH_GetITStatus(ETH_INT_RX_STOP))
{
CME_ETH_PRINTF("ETH_INT_RX_STOP\n");
- ETH_ClearInt(ETH_INT_RX_STOP);
+ ETH_ClearITPendingBit(ETH_INT_RX_STOP);
}
- if ((ETH_GetIntStatus(ETH_INT_RX_BUF_UNAVAI)) ||
- (ETH_GetIntStatus(ETH_INT_RX_COMPLETE_FRAME)))
+ if ((ETH_GetITStatus(ETH_INT_RX_BUF_UNAVAI)) ||
+ (ETH_GetITStatus(ETH_INT_RX_COMPLETE_FRAME)))
{
/* a frame has been received */
eth_device_ready(&(cme_eth_device.parent));
- ETH_EnableInt(ETH_INT_RX_COMPLETE_FRAME, FALSE);
- ETH_EnableInt(ETH_INT_RX_BUF_UNAVAI, FALSE);
- ETH_ClearInt(ETH_INT_RX_BUF_UNAVAI);
- ETH_ClearInt(ETH_INT_RX_COMPLETE_FRAME);
+ ETH_ITConfig(ETH_INT_RX_COMPLETE_FRAME, FALSE);
+ ETH_ITConfig(ETH_INT_RX_BUF_UNAVAI, FALSE);
+ ETH_ClearITPendingBit(ETH_INT_RX_BUF_UNAVAI);
+ ETH_ClearITPendingBit(ETH_INT_RX_COMPLETE_FRAME);
}
/* leave interrupt */
diff --git a/bsp/CME_M7/project.uvopt b/bsp/CME_M7/project.uvopt
index 930f62b502..b1d469cb6d 100644
--- a/bsp/CME_M7/project.uvopt
+++ b/bsp/CME_M7/project.uvopt
@@ -76,6 +76,16 @@
<IsCurrentTarget>1</IsCurrentTarget>
</OPTFL>
<CpuCode>0</CpuCode>
+ <DllOpt>
+ <SimDllName>SARMCM3.DLL</SimDllName>
+ <SimDllArguments> </SimDllArguments>
+ <SimDlgDllName>DCM.DLL</SimDlgDllName>
+ <SimDlgDllArguments>-pCM3</SimDlgDllArguments>
+ <TargetDllName>SARMCM3.DLL</TargetDllName>
+ <TargetDllArguments></TargetDllArguments>
+ <TargetDlgDllName>TCM.DLL</TargetDlgDllName>
+ <TargetDlgDllArguments>-pCM3</TargetDlgDllArguments>
+ </DllOpt>
<DebugOpt>
<uSim>0</uSim>
<uTrg>1</uTrg>
@@ -93,13 +103,9 @@
<tRmem>1</tRmem>
<tRfunc>0</tRfunc>
<tRbox>1</tRbox>
- <tRtrace>1</tRtrace>
- <sRSysVw>1</sRSysVw>
- <tRSysVw>1</tRSysVw>
- <tPdscDbg>1</tPdscDbg>
<sRunDeb>0</sRunDeb>
<sLrtime>0</sLrtime>
- <nTsel>17</nTsel>
+ <nTsel>15</nTsel>
<sDll></sDll>
<sDllPa></sDllPa>
<sDlgDll></sDlgDll>
@@ -115,26 +121,6 @@
<TargetDriverDllRegistry>
<SetRegEntry>
<Number>0</Number>
- <Key>DLGTARM</Key>
- <Name>(1010=-1,-1,-1,-1,0)(1007=-1,-1,-1,-1,0)(1008=-1,-1,-1,-1,0)(1009=-1,-1,-1,-1,0)</Name>
- </SetRegEntry>
- <SetRegEntry>
- <Number>0</Number>
- <Key>ARMDBGFLAGS</Key>
- <Name></Name>
- </SetRegEntry>
- <SetRegEntry>
- <Number>0</Number>
- <Key>cmagdi</Key>
- <Name>-U-O6 -O6 -S3 -C1 -J0 -H127.0.0.1 -P2508 -N00("M7") -D00(20EC06CB) -L00(10) -N01("Cortex-M3") -D01(4BA00477) -L01(4) -TO18 -TC10000000 -TP21 -TDS8007 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -FO0 -FD20000000 -FC800 -FN0</Name>
- </SetRegEntry>
- <SetRegEntry>
- <Number>0</Number>
- <Key>DLGUARM</Key>
- <Name>(105=-1,-1,-1,-1,0)</Name>
- </SetRegEntry>
- <SetRegEntry>
- <Number>0</Number>
<Key>UL2CM3</Key>
<Name>-S0 -C0 -P0 -FD20000000 -FC1000)</Name>
</SetRegEntry>
@@ -145,9 +131,6 @@
</SetRegEntry>
</TargetDriverDllRegistry>
<Breakpoint/>
- <Tracepoint>
- <THDelay>0</THDelay>
- </Tracepoint>
<DebugFlag>
<trace>0</trace>
<periodic>1</periodic>
@@ -156,7 +139,7 @@
<aSer1>0</aSer1>
<aSer2>0</aSer2>
<aPa>0</aPa>
- <viewmode>1</viewmode>
+ <viewmode>0</viewmode>
<vrSel>0</vrSel>
<aSym>0</aSym>
<aTbox>0</aTbox>
@@ -180,23 +163,23 @@
</Target>
<Group>
- <GroupName>Applications</GroupName>
- <tvExp>1</tvExp>
+ <GroupName>StdPeriph_Driver</GroupName>
+ <tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<cbSel>0</cbSel>
- <RteFlg>0</RteFlg>
<File>
<GroupNumber>1</GroupNumber>
<FileNumber>1</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<Focus>0</Focus>
+ <ColumnNumber>0</ColumnNumber>
<tvExpOptDlg>0</tvExpOptDlg>
+ <TopLine>0</TopLine>
+ <CurrentLine>0</CurrentLine>
<bDave2>0</bDave2>
- <PathWithFileName>applications\application.c</PathWithFileName>
- <FilenameWithoutPath>application.c</FilenameWithoutPath>
- <RteFlg>0</RteFlg>
- <bShared>0</bShared>
+ <PathWithFileName>StdPeriph_Driver/src/cmem7_adc.c</PathWithFileName>
+ <FilenameWithoutPath>cmem7_adc.c</FilenameWithoutPath>
</File>
<File>
<GroupNumber>1</GroupNumber>
@@ -204,12 +187,13 @@
<FileType>1</FileType>
<tvExp>0</tvExp>
<Focus>0</Focus>
+ <ColumnNumber>0</ColumnNumber>
<tvExpOptDlg>0</tvExpOptDlg>
+ <TopLine>0</TopLine>
+ <CurrentLine>0</CurrentLine>
<bDave2>0</bDave2>
- <PathWithFileName>applications\led.c</PathWithFileName>
- <FilenameWithoutPath>led.c</FilenameWithoutPath>
- <RteFlg>0</RteFlg>
- <bShared>0</bShared>
+ <PathWithFileName>StdPeriph_Driver/src/cmem7_aes.c</PathWithFileName>
+ <FilenameWithoutPath>cmem7_aes.c</FilenameWithoutPath>
</File>
<File>
<GroupNumber>1</GroupNumber>
@@ -217,335 +201,356 @@
<FileType>1</FileType>
<tvExp>0</tvExp>
<Focus>0</Focus>
+ <ColumnNumber>0</ColumnNumber>
<tvExpOptDlg>0</tvExpOptDlg>
+ <TopLine>0</TopLine>
+ <CurrentLine>0</CurrentLine>
<bDave2>0</bDave2>
- <PathWithFileName>applications\startup.c</PathWithFileName>
- <FilenameWithoutPath>startup.c</FilenameWithoutPath>
- <RteFlg>0</RteFlg>
- <bShared>0</bShared>
+ <PathWithFileName>StdPeriph_Driver/src/cmem7_can.c</PathWithFileName>
+ <FilenameWithoutPath>cmem7_can.c</FilenameWithoutPath>
</File>
- </Group>
-
- <Group>
- <GroupName>CMSIS</GroupName>
- <tvExp>0</tvExp>
- <tvExpOptDlg>0</tvExpOptDlg>
- <cbSel>0</cbSel>
- <RteFlg>0</RteFlg>
<File>
- <GroupNumber>2</GroupNumber>
+ <GroupNumber>1</GroupNumber>
<FileNumber>4</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<Focus>0</Focus>
+ <ColumnNumber>0</ColumnNumber>
<tvExpOptDlg>0</tvExpOptDlg>
+ <TopLine>0</TopLine>
+ <CurrentLine>0</CurrentLine>
<bDave2>0</bDave2>
- <PathWithFileName>CMSIS\CME_M7\system_cmem7.c</PathWithFileName>
- <FilenameWithoutPath>system_cmem7.c</FilenameWithoutPath>
- <RteFlg>0</RteFlg>
- <bShared>0</bShared>
+ <PathWithFileName>StdPeriph_Driver/src/cmem7_ddr.c</PathWithFileName>
+ <FilenameWithoutPath>cmem7_ddr.c</FilenameWithoutPath>
</File>
<File>
- <GroupNumber>2</GroupNumber>
+ <GroupNumber>1</GroupNumber>
<FileNumber>5</FileNumber>
- <FileType>2</FileType>
+ <FileType>1</FileType>
<tvExp>0</tvExp>
<Focus>0</Focus>
+ <ColumnNumber>0</ColumnNumber>
<tvExpOptDlg>0</tvExpOptDlg>
+ <TopLine>0</TopLine>
+ <CurrentLine>0</CurrentLine>
<bDave2>0</bDave2>
- <PathWithFileName>CMSIS\CME_M7\startup\arm\startup_cmem7.s</PathWithFileName>
- <FilenameWithoutPath>startup_cmem7.s</FilenameWithoutPath>
- <RteFlg>0</RteFlg>
- <bShared>0</bShared>
+ <PathWithFileName>StdPeriph_Driver/src/cmem7_dma.c</PathWithFileName>
+ <FilenameWithoutPath>cmem7_dma.c</FilenameWithoutPath>
</File>
- </Group>
-
- <Group>
- <GroupName>Drivers</GroupName>
- <tvExp>1</tvExp>
- <tvExpOptDlg>0</tvExpOptDlg>
- <cbSel>0</cbSel>
- <RteFlg>0</RteFlg>
<File>
- <GroupNumber>3</GroupNumber>
+ <GroupNumber>1</GroupNumber>
<FileNumber>6</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<Focus>0</Focus>
+ <ColumnNumber>0</ColumnNumber>
<tvExpOptDlg>0</tvExpOptDlg>
+ <TopLine>0</TopLine>
+ <CurrentLine>0</CurrentLine>
<bDave2>0</bDave2>
- <PathWithFileName>drivers\board.c</PathWithFileName>
- <FilenameWithoutPath>board.c</FilenameWithoutPath>
- <RteFlg>0</RteFlg>
- <bShared>0</bShared>
+ <PathWithFileName>StdPeriph_Driver/src/cmem7_efuse.c</PathWithFileName>
+ <FilenameWithoutPath>cmem7_efuse.c</FilenameWithoutPath>
</File>
<File>
- <GroupNumber>3</GroupNumber>
+ <GroupNumber>1</GroupNumber>
<FileNumber>7</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<Focus>0</Focus>
+ <ColumnNumber>0</ColumnNumber>
<tvExpOptDlg>0</tvExpOptDlg>
+ <TopLine>0</TopLine>
+ <CurrentLine>0</CurrentLine>
<bDave2>0</bDave2>
- <PathWithFileName>drivers\uart.c</PathWithFileName>
- <FilenameWithoutPath>uart.c</FilenameWithoutPath>
- <RteFlg>0</RteFlg>
- <bShared>0</bShared>
+ <PathWithFileName>StdPeriph_Driver/src/cmem7_eth.c</PathWithFileName>
+ <FilenameWithoutPath>cmem7_eth.c</FilenameWithoutPath>
</File>
<File>
- <GroupNumber>3</GroupNumber>
+ <GroupNumber>1</GroupNumber>
<FileNumber>8</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<Focus>0</Focus>
+ <ColumnNumber>0</ColumnNumber>
<tvExpOptDlg>0</tvExpOptDlg>
+ <TopLine>0</TopLine>
+ <CurrentLine>0</CurrentLine>
<bDave2>0</bDave2>
- <PathWithFileName>drivers\emac.c</PathWithFileName>
- <FilenameWithoutPath>emac.c</FilenameWithoutPath>
- <RteFlg>0</RteFlg>
- <bShared>0</bShared>
+ <PathWithFileName>StdPeriph_Driver/src/cmem7_flash.c</PathWithFileName>
+ <FilenameWithoutPath>cmem7_flash.c</FilenameWithoutPath>
</File>
<File>
- <GroupNumber>3</GroupNumber>
+ <GroupNumber>1</GroupNumber>
<FileNumber>9</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<Focus>0</Focus>
+ <ColumnNumber>0</ColumnNumber>
<tvExpOptDlg>0</tvExpOptDlg>
+ <TopLine>0</TopLine>
+ <CurrentLine>0</CurrentLine>
<bDave2>0</bDave2>
- <PathWithFileName>drivers\app_phy.c</PathWithFileName>
- <FilenameWithoutPath>app_phy.c</FilenameWithoutPath>
- <RteFlg>0</RteFlg>
- <bShared>0</bShared>
+ <PathWithFileName>StdPeriph_Driver/src/cmem7_gpio.c</PathWithFileName>
+ <FilenameWithoutPath>cmem7_gpio.c</FilenameWithoutPath>
</File>
- </Group>
-
- <Group>
- <GroupName>StdPeriph_Driver</GroupName>
- <tvExp>0</tvExp>
- <tvExpOptDlg>0</tvExpOptDlg>
- <cbSel>0</cbSel>
- <RteFlg>0</RteFlg>
<File>
- <GroupNumber>4</GroupNumber>
+ <GroupNumber>1</GroupNumber>
<FileNumber>10</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<Focus>0</Focus>
+ <ColumnNumber>0</ColumnNumber>
<tvExpOptDlg>0</tvExpOptDlg>
+ <TopLine>0</TopLine>
+ <CurrentLine>0</CurrentLine>
<bDave2>0</bDave2>
- <PathWithFileName>StdPeriph_Driver\src\cmem7_adc.c</PathWithFileName>
- <FilenameWithoutPath>cmem7_adc.c</FilenameWithoutPath>
- <RteFlg>0</RteFlg>
- <bShared>0</bShared>
+ <PathWithFileName>StdPeriph_Driver/src/cmem7_i2c.c</PathWithFileName>
+ <FilenameWithoutPath>cmem7_i2c.c</FilenameWithoutPath>
</File>
<File>
- <GroupNumber>4</GroupNumber>
+ <GroupNumber>1</GroupNumber>
<FileNumber>11</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<Focus>0</Focus>
+ <ColumnNumber>0</ColumnNumber>
<tvExpOptDlg>0</tvExpOptDlg>
+ <TopLine>0</TopLine>
+ <CurrentLine>0</CurrentLine>
<bDave2>0</bDave2>
- <PathWithFileName>StdPeriph_Driver\src\cmem7_aes.c</PathWithFileName>
- <FilenameWithoutPath>cmem7_aes.c</FilenameWithoutPath>
- <RteFlg>0</RteFlg>
- <bShared>0</bShared>
+ <PathWithFileName>StdPeriph_Driver/src/cmem7_misc.c</PathWithFileName>
+ <FilenameWithoutPath>cmem7_misc.c</FilenameWithoutPath>
</File>
<File>
- <GroupNumber>4</GroupNumber>
+ <GroupNumber>1</GroupNumber>
<FileNumber>12</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<Focus>0</Focus>
+ <ColumnNumber>0</ColumnNumber>
<tvExpOptDlg>0</tvExpOptDlg>
+ <TopLine>0</TopLine>
+ <CurrentLine>0</CurrentLine>
<bDave2>0</bDave2>
- <PathWithFileName>StdPeriph_Driver\src\cmem7_can.c</PathWithFileName>
- <FilenameWithoutPath>cmem7_can.c</FilenameWithoutPath>
- <RteFlg>0</RteFlg>
- <bShared>0</bShared>
+ <PathWithFileName>StdPeriph_Driver/src/cmem7_rtc.c</PathWithFileName>
+ <FilenameWithoutPath>cmem7_rtc.c</FilenameWithoutPath>
</File>
<File>
- <GroupNumber>4</GroupNumber>
+ <GroupNumber>1</GroupNumber>
<FileNumber>13</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<Focus>0</Focus>
+ <ColumnNumber>0</ColumnNumber>
<tvExpOptDlg>0</tvExpOptDlg>
+ <TopLine>0</TopLine>
+ <CurrentLine>0</CurrentLine>
<bDave2>0</bDave2>
- <PathWithFileName>StdPeriph_Driver\src\cmem7_ddr.c</PathWithFileName>
- <FilenameWithoutPath>cmem7_ddr.c</FilenameWithoutPath>
- <RteFlg>0</RteFlg>
- <bShared>0</bShared>
+ <PathWithFileName>StdPeriph_Driver/src/cmem7_spi.c</PathWithFileName>
+ <FilenameWithoutPath>cmem7_spi.c</FilenameWithoutPath>
</File>
<File>
- <GroupNumber>4</GroupNumber>
+ <GroupNumber>1</GroupNumber>
<FileNumber>14</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<Focus>0</Focus>
+ <ColumnNumber>0</ColumnNumber>
<tvExpOptDlg>0</tvExpOptDlg>
+ <TopLine>0</TopLine>
+ <CurrentLine>0</CurrentLine>
<bDave2>0</bDave2>
- <PathWithFileName>StdPeriph_Driver\src\cmem7_dma.c</PathWithFileName>
- <FilenameWithoutPath>cmem7_dma.c</FilenameWithoutPath>
- <RteFlg>0</RteFlg>
- <bShared>0</bShared>
+ <PathWithFileName>StdPeriph_Driver/src/cmem7_tim.c</PathWithFileName>
+ <FilenameWithoutPath>cmem7_tim.c</FilenameWithoutPath>
</File>
<File>
- <GroupNumber>4</GroupNumber>
+ <GroupNumber>1</GroupNumber>
<FileNumber>15</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<Focus>0</Focus>
+ <ColumnNumber>0</ColumnNumber>
<tvExpOptDlg>0</tvExpOptDlg>
+ <TopLine>0</TopLine>
+ <CurrentLine>0</CurrentLine>
<bDave2>0</bDave2>
- <PathWithFileName>StdPeriph_Driver\src\cmem7_efuse.c</PathWithFileName>
- <FilenameWithoutPath>cmem7_efuse.c</FilenameWithoutPath>
- <RteFlg>0</RteFlg>
- <bShared>0</bShared>
+ <PathWithFileName>StdPeriph_Driver/src/cmem7_uart.c</PathWithFileName>
+ <FilenameWithoutPath>cmem7_uart.c</FilenameWithoutPath>
</File>
<File>
- <GroupNumber>4</GroupNumber>
+ <GroupNumber>1</GroupNumber>
<FileNumber>16</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<Focus>0</Focus>
+ <ColumnNumber>0</ColumnNumber>
<tvExpOptDlg>0</tvExpOptDlg>
+ <TopLine>0</TopLine>
+ <CurrentLine>0</CurrentLine>
<bDave2>0</bDave2>
- <PathWithFileName>StdPeriph_Driver\src\cmem7_eth.c</PathWithFileName>
- <FilenameWithoutPath>cmem7_eth.c</FilenameWithoutPath>
- <RteFlg>0</RteFlg>
- <bShared>0</bShared>
+ <PathWithFileName>StdPeriph_Driver/src/cmem7_usb.c</PathWithFileName>
+ <FilenameWithoutPath>cmem7_usb.c</FilenameWithoutPath>
</File>
<File>
- <GroupNumber>4</GroupNumber>
+ <GroupNumber>1</GroupNumber>
<FileNumber>17</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<Focus>0</Focus>
+ <ColumnNumber>0</ColumnNumber>
<tvExpOptDlg>0</tvExpOptDlg>
+ <TopLine>0</TopLine>
+ <CurrentLine>0</CurrentLine>
<bDave2>0</bDave2>
- <PathWithFileName>StdPeriph_Driver\src\cmem7_flash.c</PathWithFileName>
- <FilenameWithoutPath>cmem7_flash.c</FilenameWithoutPath>
- <RteFlg>0</RteFlg>
- <bShared>0</bShared>
+ <PathWithFileName>StdPeriph_Driver/src/cmem7_wdg.c</PathWithFileName>
+ <FilenameWithoutPath>cmem7_wdg.c</FilenameWithoutPath>
</File>
+ </Group>
+
+ <Group>
+ <GroupName>Applications</GroupName>
+ <tvExp>0</tvExp>
+ <tvExpOptDlg>0</tvExpOptDlg>
+ <cbSel>0</cbSel>
<File>
- <GroupNumber>4</GroupNumber>
+ <GroupNumber>2</GroupNumber>
<FileNumber>18</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<Focus>0</Focus>
+ <ColumnNumber>0</ColumnNumber>
<tvExpOptDlg>0</tvExpOptDlg>
+ <TopLine>0</TopLine>
+ <CurrentLine>0</CurrentLine>
<bDave2>0</bDave2>
- <PathWithFileName>StdPeriph_Driver\src\cmem7_gpio.c</PathWithFileName>
- <FilenameWithoutPath>cmem7_gpio.c</FilenameWithoutPath>
- <RteFlg>0</RteFlg>
- <bShared>0</bShared>
+ <PathWithFileName>applications/application.c</PathWithFileName>
+ <FilenameWithoutPath>application.c</FilenameWithoutPath>
</File>
<File>
- <GroupNumber>4</GroupNumber>
+ <GroupNumber>2</GroupNumber>
<FileNumber>19</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<Focus>0</Focus>
+ <ColumnNumber>0</ColumnNumber>
<tvExpOptDlg>0</tvExpOptDlg>
+ <TopLine>0</TopLine>
+ <CurrentLine>0</CurrentLine>
<bDave2>0</bDave2>
- <PathWithFileName>StdPeriph_Driver\src\cmem7_i2c.c</PathWithFileName>
- <FilenameWithoutPath>cmem7_i2c.c</FilenameWithoutPath>
- <RteFlg>0</RteFlg>
- <bShared>0</bShared>
+ <PathWithFileName>applications/led.c</PathWithFileName>
+ <FilenameWithoutPath>led.c</FilenameWithoutPath>
</File>
<File>
- <GroupNumber>4</GroupNumber>
+ <GroupNumber>2</GroupNumber>
<FileNumber>20</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<Focus>0</Focus>
+ <ColumnNumber>0</ColumnNumber>
<tvExpOptDlg>0</tvExpOptDlg>
+ <TopLine>0</TopLine>
+ <CurrentLine>0</CurrentLine>
<bDave2>0</bDave2>
- <PathWithFileName>StdPeriph_Driver\src\cmem7_misc.c</PathWithFileName>
- <FilenameWithoutPath>cmem7_misc.c</FilenameWithoutPath>
- <RteFlg>0</RteFlg>
- <bShared>0</bShared>
+ <PathWithFileName>applications/startup.c</PathWithFileName>
+ <FilenameWithoutPath>startup.c</FilenameWithoutPath>
</File>
+ </Group>
+
+ <Group>
+ <GroupName>Drivers</GroupName>
+ <tvExp>0</tvExp>
+ <tvExpOptDlg>0</tvExpOptDlg>
+ <cbSel>0</cbSel>
<File>
- <GroupNumber>4</GroupNumber>
+ <GroupNumber>3</GroupNumber>
<FileNumber>21</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<Focus>0</Focus>
+ <ColumnNumber>0</ColumnNumber>
<tvExpOptDlg>0</tvExpOptDlg>
+ <TopLine>0</TopLine>
+ <CurrentLine>0</CurrentLine>
<bDave2>0</bDave2>
- <PathWithFileName>StdPeriph_Driver\src\cmem7_rtc.c</PathWithFileName>
- <FilenameWithoutPath>cmem7_rtc.c</FilenameWithoutPath>
- <RteFlg>0</RteFlg>
- <bShared>0</bShared>
+ <PathWithFileName>drivers/board.c</PathWithFileName>
+ <FilenameWithoutPath>board.c</FilenameWithoutPath>
</File>
<File>
- <GroupNumber>4</GroupNumber>
+ <GroupNumber>3</GroupNumber>
<FileNumber>22</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<Focus>0</Focus>
+ <ColumnNumber>0</ColumnNumber>
<tvExpOptDlg>0</tvExpOptDlg>
+ <TopLine>0</TopLine>
+ <CurrentLine>0</CurrentLine>
<bDave2>0</bDave2>
- <PathWithFileName>StdPeriph_Driver\src\cmem7_spi.c</PathWithFileName>
- <FilenameWithoutPath>cmem7_spi.c</FilenameWithoutPath>
- <RteFlg>0</RteFlg>
- <bShared>0</bShared>
+ <PathWithFileName>drivers/uart.c</PathWithFileName>
+ <FilenameWithoutPath>uart.c</FilenameWithoutPath>
</File>
<File>
- <GroupNumber>4</GroupNumber>
+ <GroupNumber>3</GroupNumber>
<FileNumber>23</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<Focus>0</Focus>
+ <ColumnNumber>0</ColumnNumber>
<tvExpOptDlg>0</tvExpOptDlg>
+ <TopLine>0</TopLine>
+ <CurrentLine>0</CurrentLine>
<bDave2>0</bDave2>
- <PathWithFileName>StdPeriph_Driver\src\cmem7_tim.c</PathWithFileName>
- <FilenameWithoutPath>cmem7_tim.c</FilenameWithoutPath>
- <RteFlg>0</RteFlg>
- <bShared>0</bShared>
+ <PathWithFileName>drivers/emac.c</PathWithFileName>
+ <FilenameWithoutPath>emac.c</FilenameWithoutPath>
</File>
<File>
- <GroupNumber>4</GroupNumber>
+ <GroupNumber>3</GroupNumber>
<FileNumber>24</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<Focus>0</Focus>
+ <ColumnNumber>0</ColumnNumber>
<tvExpOptDlg>0</tvExpOptDlg>
+ <TopLine>0</TopLine>
+ <CurrentLine>0</CurrentLine>
<bDave2>0</bDave2>
- <PathWithFileName>StdPeriph_Driver\src\cmem7_uart.c</PathWithFileName>
- <FilenameWithoutPath>cmem7_uart.c</FilenameWithoutPath>
- <RteFlg>0</RteFlg>
- <bShared>0</bShared>
+ <PathWithFileName>drivers/app_phy.c</PathWithFileName>
+ <FilenameWithoutPath>app_phy.c</FilenameWithoutPath>
</File>
+ </Group>
+
+ <Group>
+ <GroupName>CMSIS</GroupName>
+ <tvExp>0</tvExp>
+ <tvExpOptDlg>0</tvExpOptDlg>
+ <cbSel>0</cbSel>
<File>
<GroupNumber>4</GroupNumber>
<FileNumber>25</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<Focus>0</Focus>
+ <ColumnNumber>0</ColumnNumber>
<tvExpOptDlg>0</tvExpOptDlg>
+ <TopLine>0</TopLine>
+ <CurrentLine>0</CurrentLine>
<bDave2>0</bDave2>
- <PathWithFileName>StdPeriph_Driver\src\cmem7_usb.c</PathWithFileName>
- <FilenameWithoutPath>cmem7_usb.c</FilenameWithoutPath>
- <RteFlg>0</RteFlg>
- <bShared>0</bShared>
+ <PathWithFileName>CMSIS/CME_M7/system_cmem7.c</PathWithFileName>
+ <FilenameWithoutPath>system_cmem7.c</FilenameWithoutPath>
</File>
<File>
<GroupNumber>4</GroupNumber>
<FileNumber>26</FileNumber>
- <FileType>1</FileType>
+ <FileType>2</FileType>
<tvExp>0</tvExp>
<Focus>0</Focus>
+ <ColumnNumber>0</ColumnNumber>
<tvExpOptDlg>0</tvExpOptDlg>
+ <TopLine>0</TopLine>
+ <CurrentLine>0</CurrentLine>
<bDave2>0</bDave2>
- <PathWithFileName>StdPeriph_Driver\src\cmem7_wdg.c</PathWithFileName>
- <FilenameWithoutPath>cmem7_wdg.c</FilenameWithoutPath>
- <RteFlg>0</RteFlg>
- <bShared>0</bShared>
+ <PathWithFileName>CMSIS/CME_M7/startup/arm/startup_cmem7.s</PathWithFileName>
+ <FilenameWithoutPath>startup_cmem7.s</FilenameWithoutPath>
</File>
</Group>
@@ -554,19 +559,19 @@
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<cbSel>0</cbSel>
- <RteFlg>0</RteFlg>
<File>
<GroupNumber>5</GroupNumber>
<FileNumber>27</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<Focus>0</Focus>
+ <ColumnNumber>0</ColumnNumber>
<tvExpOptDlg>0</tvExpOptDlg>
+ <TopLine>0</TopLine>
+ <CurrentLine>0</CurrentLine>
<bDave2>0</bDave2>
- <PathWithFileName>..\..\src\clock.c</PathWithFileName>
+ <PathWithFileName>../../src/clock.c</PathWithFileName>
<FilenameWithoutPath>clock.c</FilenameWithoutPath>
- <RteFlg>0</RteFlg>
- <bShared>0</bShared>
</File>
<File>
<GroupNumber>5</GroupNumber>
@@ -574,12 +579,13 @@
<FileType>1</FileType>
<tvExp>0</tvExp>
<Focus>0</Focus>
+ <ColumnNumber>0</ColumnNumber>
<tvExpOptDlg>0</tvExpOptDlg>
+ <TopLine>0</TopLine>
+ <CurrentLine>0</CurrentLine>
<bDave2>0</bDave2>
- <PathWithFileName>..\..\src\device.c</PathWithFileName>
- <FilenameWithoutPath>device.c</FilenameWithoutPath>
- <RteFlg>0</RteFlg>
- <bShared>0</bShared>
+ <PathWithFileName>../../src/components.c</PathWithFileName>
+ <FilenameWithoutPath>components.c</FilenameWithoutPath>
</File>
<File>
<GroupNumber>5</GroupNumber>
@@ -587,12 +593,13 @@
<FileType>1</FileType>
<tvExp>0</tvExp>
<Focus>0</Focus>
+ <ColumnNumber>0</ColumnNumber>
<tvExpOptDlg>0</tvExpOptDlg>
+ <TopLine>0</TopLine>
+ <CurrentLine>0</CurrentLine>
<bDave2>0</bDave2>
- <PathWithFileName>..\..\src\idle.c</PathWithFileName>
- <FilenameWithoutPath>idle.c</FilenameWithoutPath>
- <RteFlg>0</RteFlg>
- <bShared>0</bShared>
+ <PathWithFileName>../../src/device.c</PathWithFileName>
+ <FilenameWithoutPath>device.c</FilenameWithoutPath>
</File>
<File>
<GroupNumber>5</GroupNumber>
@@ -600,12 +607,13 @@
<FileType>1</FileType>
<tvExp>0</tvExp>
<Focus>0</Focus>
+ <ColumnNumber>0</ColumnNumber>
<tvExpOptDlg>0</tvExpOptDlg>
+ <TopLine>0</TopLine>
+ <CurrentLine>0</CurrentLine>
<bDave2>0</bDave2>
- <PathWithFileName>..\..\src\ipc.c</PathWithFileName>
- <FilenameWithoutPath>ipc.c</FilenameWithoutPath>
- <RteFlg>0</RteFlg>
- <bShared>0</bShared>
+ <PathWithFileName>../../src/idle.c</PathWithFileName>
+ <FilenameWithoutPath>idle.c</FilenameWithoutPath>
</File>
<File>
<GroupNumber>5</GroupNumber>
@@ -613,12 +621,13 @@
<FileType>1</FileType>
<tvExp>0</tvExp>
<Focus>0</Focus>
+ <ColumnNumber>0</ColumnNumber>
<tvExpOptDlg>0</tvExpOptDlg>
+ <TopLine>0</TopLine>
+ <CurrentLine>0</CurrentLine>
<bDave2>0</bDave2>
- <PathWithFileName>..\..\src\irq.c</PathWithFileName>
- <FilenameWithoutPath>irq.c</FilenameWithoutPath>
- <RteFlg>0</RteFlg>
- <bShared>0</bShared>
+ <PathWithFileName>../../src/ipc.c</PathWithFileName>
+ <FilenameWithoutPath>ipc.c</FilenameWithoutPath>
</File>
<File>
<GroupNumber>5</GroupNumber>
@@ -626,12 +635,13 @@
<FileType>1</FileType>
<tvExp>0</tvExp>
<Focus>0</Focus>
+ <ColumnNumber>0</ColumnNumber>
<tvExpOptDlg>0</tvExpOptDlg>
+ <TopLine>0</TopLine>
+ <CurrentLine>0</CurrentLine>
<bDave2>0</bDave2>
- <PathWithFileName>..\..\src\kservice.c</PathWithFileName>
- <FilenameWithoutPath>kservice.c</FilenameWithoutPath>
- <RteFlg>0</RteFlg>
- <bShared>0</bShared>
+ <PathWithFileName>../../src/irq.c</PathWithFileName>
+ <FilenameWithoutPath>irq.c</FilenameWithoutPath>
</File>
<File>
<GroupNumber>5</GroupNumber>
@@ -639,12 +649,13 @@
<FileType>1</FileType>
<tvExp>0</tvExp>
<Focus>0</Focus>
+ <ColumnNumber>0</ColumnNumber>
<tvExpOptDlg>0</tvExpOptDlg>
+ <TopLine>0</TopLine>
+ <CurrentLine>0</CurrentLine>
<bDave2>0</bDave2>
- <PathWithFileName>..\..\src\mem.c</PathWithFileName>
- <FilenameWithoutPath>mem.c</FilenameWithoutPath>
- <RteFlg>0</RteFlg>
- <bShared>0</bShared>
+ <PathWithFileName>../../src/kservice.c</PathWithFileName>
+ <FilenameWithoutPath>kservice.c</FilenameWithoutPath>
</File>
<File>
<GroupNumber>5</GroupNumber>
@@ -652,12 +663,13 @@
<FileType>1</FileType>
<tvExp>0</tvExp>
<Focus>0</Focus>
+ <ColumnNumber>0</ColumnNumber>
<tvExpOptDlg>0</tvExpOptDlg>
+ <TopLine>0</TopLine>
+ <CurrentLine>0</CurrentLine>
<bDave2>0</bDave2>
- <PathWithFileName>..\..\src\mempool.c</PathWithFileName>
- <FilenameWithoutPath>mempool.c</FilenameWithoutPath>
- <RteFlg>0</RteFlg>
- <bShared>0</bShared>
+ <PathWithFileName>../../src/mem.c</PathWithFileName>
+ <FilenameWithoutPath>mem.c</FilenameWithoutPath>
</File>
<File>
<GroupNumber>5</GroupNumber>
@@ -665,12 +677,13 @@
<FileType>1</FileType>
<tvExp>0</tvExp>
<Focus>0</Focus>
+ <ColumnNumber>0</ColumnNumber>
<tvExpOptDlg>0</tvExpOptDlg>
+ <TopLine>0</TopLine>
+ <CurrentLine>0</CurrentLine>
<bDave2>0</bDave2>
- <PathWithFileName>..\..\src\object.c</PathWithFileName>
- <FilenameWithoutPath>object.c</FilenameWithoutPath>
- <RteFlg>0</RteFlg>
- <bShared>0</bShared>
+ <PathWithFileName>../../src/mempool.c</PathWithFileName>
+ <FilenameWithoutPath>mempool.c</FilenameWithoutPath>
</File>
<File>
<GroupNumber>5</GroupNumber>
@@ -678,12 +691,13 @@
<FileType>1</FileType>
<tvExp>0</tvExp>
<Focus>0</Focus>
+ <ColumnNumber>0</ColumnNumber>
<tvExpOptDlg>0</tvExpOptDlg>
+ <TopLine>0</TopLine>
+ <CurrentLine>0</CurrentLine>
<bDave2>0</bDave2>
- <PathWithFileName>..\..\src\scheduler.c</PathWithFileName>
- <FilenameWithoutPath>scheduler.c</FilenameWithoutPath>
- <RteFlg>0</RteFlg>
- <bShared>0</bShared>
+ <PathWithFileName>../../src/object.c</PathWithFileName>
+ <FilenameWithoutPath>object.c</FilenameWithoutPath>
</File>
<File>
<GroupNumber>5</GroupNumber>
@@ -691,12 +705,13 @@
<FileType>1</FileType>
<tvExp>0</tvExp>
<Focus>0</Focus>
+ <ColumnNumber>0</ColumnNumber>
<tvExpOptDlg>0</tvExpOptDlg>
+ <TopLine>0</TopLine>
+ <CurrentLine>0</CurrentLine>
<bDave2>0</bDave2>
- <PathWithFileName>..\..\src\thread.c</PathWithFileName>
- <FilenameWithoutPath>thread.c</FilenameWithoutPath>
- <RteFlg>0</RteFlg>
- <bShared>0</bShared>
+ <PathWithFileName>../../src/scheduler.c</PathWithFileName>
+ <FilenameWithoutPath>scheduler.c</FilenameWithoutPath>
</File>
<File>
<GroupNumber>5</GroupNumber>
@@ -704,12 +719,27 @@
<FileType>1</FileType>
<tvExp>0</tvExp>
<Focus>0</Focus>
+ <ColumnNumber>0</ColumnNumber>
<tvExpOptDlg>0</tvExpOptDlg>
+ <TopLine>0</TopLine>
+ <CurrentLine>0</CurrentLine>
<bDave2>0</bDave2>
- <PathWithFileName>..\..\src\timer.c</PathWithFileName>
+ <PathWithFileName>../../src/thread.c</PathWithFileName>
+ <FilenameWithoutPath>thread.c</FilenameWithoutPath>
+ </File>
+ <File>
+ <GroupNumber>5</GroupNumber>
+ <FileNumber>39</FileNumber>
+ <FileType>1</FileType>
+ <tvExp>0</tvExp>
+ <Focus>0</Focus>
+ <ColumnNumber>0</ColumnNumber>
+ <tvExpOptDlg>0</tvExpOptDlg>
+ <TopLine>0</TopLine>
+ <CurrentLine>0</CurrentLine>
+ <bDave2>0</bDave2>
+ <PathWithFileName>../../src/timer.c</PathWithFileName>
<FilenameWithoutPath>timer.c</FilenameWithoutPath>
- <RteFlg>0</RteFlg>
- <bShared>0</bShared>
</File>
</Group>
@@ -718,105 +748,96 @@
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<cbSel>0</cbSel>
- <RteFlg>0</RteFlg>
<File>
<GroupNumber>6</GroupNumber>
- <FileNumber>39</FileNumber>
+ <FileNumber>40</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<Focus>0</Focus>
+ <ColumnNumber>0</ColumnNumber>
<tvExpOptDlg>0</tvExpOptDlg>
+ <TopLine>0</TopLine>
+ <CurrentLine>0</CurrentLine>
<bDave2>0</bDave2>
- <PathWithFileName>..\..\libcpu\arm\cortex-m3\cpuport.c</PathWithFileName>
+ <PathWithFileName>../../libcpu/arm/cortex-m3/cpuport.c</PathWithFileName>
<FilenameWithoutPath>cpuport.c</FilenameWithoutPath>
- <RteFlg>0</RteFlg>
- <bShared>0</bShared>
</File>
<File>
<GroupNumber>6</GroupNumber>
- <FileNumber>40</FileNumber>
+ <FileNumber>41</FileNumber>
<FileType>2</FileType>
<tvExp>0</tvExp>
<Focus>0</Focus>
+ <ColumnNumber>0</ColumnNumber>
<tvExpOptDlg>0</tvExpOptDlg>
+ <TopLine>0</TopLine>
+ <CurrentLine>0</CurrentLine>
<bDave2>0</bDave2>
- <PathWithFileName>..\..\libcpu\arm\cortex-m3\context_rvds.S</PathWithFileName>
+ <PathWithFileName>../../libcpu/arm/cortex-m3/context_rvds.S</PathWithFileName>
<FilenameWithoutPath>context_rvds.S</FilenameWithoutPath>
- <RteFlg>0</RteFlg>
- <bShared>0</bShared>
</File>
<File>
<GroupNumber>6</GroupNumber>
- <FileNumber>41</FileNumber>
+ <FileNumber>42</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<Focus>0</Focus>
+ <ColumnNumber>0</ColumnNumber>
<tvExpOptDlg>0</tvExpOptDlg>
+ <TopLine>0</TopLine>
+ <CurrentLine>0</CurrentLine>
<bDave2>0</bDave2>
- <PathWithFileName>..\..\libcpu\arm\common\backtrace.c</PathWithFileName>
+ <PathWithFileName>../../libcpu/arm/common/backtrace.c</PathWithFileName>
<FilenameWithoutPath>backtrace.c</FilenameWithoutPath>
- <RteFlg>0</RteFlg>
- <bShared>0</bShared>
</File>
<File>
<GroupNumber>6</GroupNumber>
- <FileNumber>42</FileNumber>
+ <FileNumber>43</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<Focus>0</Focus>
+ <ColumnNumber>0</ColumnNumber>
<tvExpOptDlg>0</tvExpOptDlg>
+ <TopLine>0</TopLine>
+ <CurrentLine>0</CurrentLine>
<bDave2>0</bDave2>
- <PathWithFileName>..\..\libcpu\arm\common\div0.c</PathWithFileName>
+ <PathWithFileName>../../libcpu/arm/common/div0.c</PathWithFileName>
<FilenameWithoutPath>div0.c</FilenameWithoutPath>
- <RteFlg>0</RteFlg>
- <bShared>0</bShared>
</File>
<File>
<GroupNumber>6</GroupNumber>
- <FileNumber>43</FileNumber>
+ <FileNumber>44</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<Focus>0</Focus>
+ <ColumnNumber>0</ColumnNumber>
<tvExpOptDlg>0</tvExpOptDlg>
+ <TopLine>0</TopLine>
+ <CurrentLine>0</CurrentLine>
<bDave2>0</bDave2>
- <PathWithFileName>..\..\libcpu\arm\common\showmem.c</PathWithFileName>
+ <PathWithFileName>../../libcpu/arm/common/showmem.c</PathWithFileName>
<FilenameWithoutPath>showmem.c</FilenameWithoutPath>
- <RteFlg>0</RteFlg>
- <bShared>0</bShared>
</File>
</Group>
<Group>
- <GroupName>DeviceDrivers</GroupName>
+ <GroupName>libc</GroupName>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<cbSel>0</cbSel>
- <RteFlg>0</RteFlg>
- <File>
- <GroupNumber>7</GroupNumber>
- <FileNumber>44</FileNumber>
- <FileType>1</FileType>
- <tvExp>0</tvExp>
- <Focus>0</Focus>
- <tvExpOptDlg>0</tvExpOptDlg>
- <bDave2>0</bDave2>
- <PathWithFileName>..\..\components\drivers\serial\serial.c</PathWithFileName>
- <FilenameWithoutPath>serial.c</FilenameWithoutPath>
- <RteFlg>0</RteFlg>
- <bShared>0</bShared>
- </File>
<File>
<GroupNumber>7</GroupNumber>
<FileNumber>45</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<Focus>0</Focus>
+ <ColumnNumber>0</ColumnNumber>
<tvExpOptDlg>0</tvExpOptDlg>
+ <TopLine>0</TopLine>
+ <CurrentLine>0</CurrentLine>
<bDave2>0</bDave2>
- <PathWithFileName>..\..\components\drivers\src\completion.c</PathWithFileName>
- <FilenameWithoutPath>completion.c</FilenameWithoutPath>
- <RteFlg>0</RteFlg>
- <bShared>0</bShared>
+ <PathWithFileName>../../components/libc/armlibc/mem_std.c</PathWithFileName>
+ <FilenameWithoutPath>mem_std.c</FilenameWithoutPath>
</File>
<File>
<GroupNumber>7</GroupNumber>
@@ -824,85 +845,90 @@
<FileType>1</FileType>
<tvExp>0</tvExp>
<Focus>0</Focus>
+ <ColumnNumber>0</ColumnNumber>
<tvExpOptDlg>0</tvExpOptDlg>
+ <TopLine>0</TopLine>
+ <CurrentLine>0</CurrentLine>
<bDave2>0</bDave2>
- <PathWithFileName>..\..\components\drivers\src\dataqueue.c</PathWithFileName>
- <FilenameWithoutPath>dataqueue.c</FilenameWithoutPath>
- <RteFlg>0</RteFlg>
- <bShared>0</bShared>
+ <PathWithFileName>../../components/libc/armlibc/stubs.c</PathWithFileName>
+ <FilenameWithoutPath>stubs.c</FilenameWithoutPath>
</File>
+ </Group>
+
+ <Group>
+ <GroupName>DeviceDrivers</GroupName>
+ <tvExp>0</tvExp>
+ <tvExpOptDlg>0</tvExpOptDlg>
+ <cbSel>0</cbSel>
<File>
- <GroupNumber>7</GroupNumber>
+ <GroupNumber>8</GroupNumber>
<FileNumber>47</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<Focus>0</Focus>
+ <ColumnNumber>0</ColumnNumber>
<tvExpOptDlg>0</tvExpOptDlg>
+ <TopLine>0</TopLine>
+ <CurrentLine>0</CurrentLine>
<bDave2>0</bDave2>
- <PathWithFileName>..\..\components\drivers\src\pipe.c</PathWithFileName>
- <FilenameWithoutPath>pipe.c</FilenameWithoutPath>
- <RteFlg>0</RteFlg>
- <bShared>0</bShared>
+ <PathWithFileName>../../components/drivers/serial/serial.c</PathWithFileName>
+ <FilenameWithoutPath>serial.c</FilenameWithoutPath>
</File>
<File>
- <GroupNumber>7</GroupNumber>
+ <GroupNumber>8</GroupNumber>
<FileNumber>48</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<Focus>0</Focus>
+ <ColumnNumber>0</ColumnNumber>
<tvExpOptDlg>0</tvExpOptDlg>
+ <TopLine>0</TopLine>
+ <CurrentLine>0</CurrentLine>
<bDave2>0</bDave2>
- <PathWithFileName>..\..\components\drivers\src\portal.c</PathWithFileName>
- <FilenameWithoutPath>portal.c</FilenameWithoutPath>
- <RteFlg>0</RteFlg>
- <bShared>0</bShared>
+ <PathWithFileName>../../components/drivers/src/completion.c</PathWithFileName>
+ <FilenameWithoutPath>completion.c</FilenameWithoutPath>
</File>
<File>
- <GroupNumber>7</GroupNumber>
+ <GroupNumber>8</GroupNumber>
<FileNumber>49</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<Focus>0</Focus>
+ <ColumnNumber>0</ColumnNumber>
<tvExpOptDlg>0</tvExpOptDlg>
+ <TopLine>0</TopLine>
+ <CurrentLine>0</CurrentLine>
<bDave2>0</bDave2>
- <PathWithFileName>..\..\components\drivers\src\ringbuffer.c</PathWithFileName>
- <FilenameWithoutPath>ringbuffer.c</FilenameWithoutPath>
- <RteFlg>0</RteFlg>
- <bShared>0</bShared>
+ <PathWithFileName>../../components/drivers/src/dataqueue.c</PathWithFileName>
+ <FilenameWithoutPath>dataqueue.c</FilenameWithoutPath>
</File>
<File>
- <GroupNumber>7</GroupNumber>
+ <GroupNumber>8</GroupNumber>
<FileNumber>50</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<Focus>0</Focus>
+ <ColumnNumber>0</ColumnNumber>
<tvExpOptDlg>0</tvExpOptDlg>
+ <TopLine>0</TopLine>
+ <CurrentLine>0</CurrentLine>
<bDave2>0</bDave2>
- <PathWithFileName>..\..\components\drivers\src\workqueue.c</PathWithFileName>
- <FilenameWithoutPath>workqueue.c</FilenameWithoutPath>
- <RteFlg>0</RteFlg>
- <bShared>0</bShared>
+ <PathWithFileName>../../components/drivers/src/pipe.c</PathWithFileName>
+ <FilenameWithoutPath>pipe.c</FilenameWithoutPath>
</File>
- </Group>
-
- <Group>
- <GroupName>finsh</GroupName>
- <tvExp>0</tvExp>
- <tvExpOptDlg>0</tvExpOptDlg>
- <cbSel>0</cbSel>
- <RteFlg>0</RteFlg>
<File>
<GroupNumber>8</GroupNumber>
<FileNumber>51</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<Focus>0</Focus>
+ <ColumnNumber>0</ColumnNumber>
<tvExpOptDlg>0</tvExpOptDlg>
+ <TopLine>0</TopLine>
+ <CurrentLine>0</CurrentLine>
<bDave2>0</bDave2>
- <PathWithFileName>..\..\components\finsh\shell.c</PathWithFileName>
- <FilenameWithoutPath>shell.c</FilenameWithoutPath>
- <RteFlg>0</RteFlg>
- <bShared>0</bShared>
+ <PathWithFileName>../../components/drivers/src/portal.c</PathWithFileName>
+ <FilenameWithoutPath>portal.c</FilenameWithoutPath>
</File>
<File>
<GroupNumber>8</GroupNumber>
@@ -910,12 +936,13 @@
<FileType>1</FileType>
<tvExp>0</tvExp>
<Focus>0</Focus>
+ <ColumnNumber>0</ColumnNumber>
<tvExpOptDlg>0</tvExpOptDlg>
+ <TopLine>0</TopLine>
+ <CurrentLine>0</CurrentLine>
<bDave2>0</bDave2>
- <PathWithFileName>..\..\components\finsh\symbol.c</PathWithFileName>
- <FilenameWithoutPath>symbol.c</FilenameWithoutPath>
- <RteFlg>0</RteFlg>
- <bShared>0</bShared>
+ <PathWithFileName>../../components/drivers/src/ringbuffer.c</PathWithFileName>
+ <FilenameWithoutPath>ringbuffer.c</FilenameWithoutPath>
</File>
<File>
<GroupNumber>8</GroupNumber>
@@ -923,223 +950,230 @@
<FileType>1</FileType>
<tvExp>0</tvExp>
<Focus>0</Focus>
+ <ColumnNumber>0</ColumnNumber>
<tvExpOptDlg>0</tvExpOptDlg>
+ <TopLine>0</TopLine>
+ <CurrentLine>0</CurrentLine>
<bDave2>0</bDave2>
- <PathWithFileName>..\..\components\finsh\cmd.c</PathWithFileName>
- <FilenameWithoutPath>cmd.c</FilenameWithoutPath>
- <RteFlg>0</RteFlg>
- <bShared>0</bShared>
+ <PathWithFileName>../../components/drivers/src/workqueue.c</PathWithFileName>
+ <FilenameWithoutPath>workqueue.c</FilenameWithoutPath>
</File>
+ </Group>
+
+ <Group>
+ <GroupName>finsh</GroupName>
+ <tvExp>0</tvExp>
+ <tvExpOptDlg>0</tvExpOptDlg>
+ <cbSel>0</cbSel>
<File>
- <GroupNumber>8</GroupNumber>
+ <GroupNumber>9</GroupNumber>
<FileNumber>54</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<Focus>0</Focus>
+ <ColumnNumber>0</ColumnNumber>
<tvExpOptDlg>0</tvExpOptDlg>
+ <TopLine>0</TopLine>
+ <CurrentLine>0</CurrentLine>
<bDave2>0</bDave2>
- <PathWithFileName>..\..\components\finsh\msh_cmd.c</PathWithFileName>
- <FilenameWithoutPath>msh_cmd.c</FilenameWithoutPath>
- <RteFlg>0</RteFlg>
- <bShared>0</bShared>
+ <PathWithFileName>../../components/finsh/shell.c</PathWithFileName>
+ <FilenameWithoutPath>shell.c</FilenameWithoutPath>
</File>
<File>
- <GroupNumber>8</GroupNumber>
+ <GroupNumber>9</GroupNumber>
<FileNumber>55</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<Focus>0</Focus>
+ <ColumnNumber>0</ColumnNumber>
<tvExpOptDlg>0</tvExpOptDlg>
+ <TopLine>0</TopLine>
+ <CurrentLine>0</CurrentLine>
<bDave2>0</bDave2>
- <PathWithFileName>..\..\components\finsh\msh.c</PathWithFileName>
- <FilenameWithoutPath>msh.c</FilenameWithoutPath>
- <RteFlg>0</RteFlg>
- <bShared>0</bShared>
+ <PathWithFileName>../../components/finsh/symbol.c</PathWithFileName>
+ <FilenameWithoutPath>symbol.c</FilenameWithoutPath>
</File>
<File>
- <GroupNumber>8</GroupNumber>
+ <GroupNumber>9</GroupNumber>
<FileNumber>56</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<Focus>0</Focus>
+ <ColumnNumber>0</ColumnNumber>
<tvExpOptDlg>0</tvExpOptDlg>
+ <TopLine>0</TopLine>
+ <CurrentLine>0</CurrentLine>
<bDave2>0</bDave2>
- <PathWithFileName>..\..\components\finsh\finsh_compiler.c</PathWithFileName>
- <FilenameWithoutPath>finsh_compiler.c</FilenameWithoutPath>
- <RteFlg>0</RteFlg>
- <bShared>0</bShared>
+ <PathWithFileName>../../components/finsh/cmd.c</PathWithFileName>
+ <FilenameWithoutPath>cmd.c</FilenameWithoutPath>
</File>
<File>
- <GroupNumber>8</GroupNumber>
+ <GroupNumber>9</GroupNumber>
<FileNumber>57</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<Focus>0</Focus>
+ <ColumnNumber>0</ColumnNumber>
<tvExpOptDlg>0</tvExpOptDlg>
+ <TopLine>0</TopLine>
+ <CurrentLine>0</CurrentLine>
<bDave2>0</bDave2>
- <PathWithFileName>..\..\components\finsh\finsh_error.c</PathWithFileName>
- <FilenameWithoutPath>finsh_error.c</FilenameWithoutPath>
- <RteFlg>0</RteFlg>
- <bShared>0</bShared>
+ <PathWithFileName>../../components/finsh/msh_cmd.c</PathWithFileName>
+ <FilenameWithoutPath>msh_cmd.c</FilenameWithoutPath>
</File>
<File>
- <GroupNumber>8</GroupNumber>
+ <GroupNumber>9</GroupNumber>
<FileNumber>58</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<Focus>0</Focus>
+ <ColumnNumber>0</ColumnNumber>
<tvExpOptDlg>0</tvExpOptDlg>
+ <TopLine>0</TopLine>
+ <CurrentLine>0</CurrentLine>
<bDave2>0</bDave2>
- <PathWithFileName>..\..\components\finsh\finsh_heap.c</PathWithFileName>
- <FilenameWithoutPath>finsh_heap.c</FilenameWithoutPath>
- <RteFlg>0</RteFlg>
- <bShared>0</bShared>
+ <PathWithFileName>../../components/finsh/msh.c</PathWithFileName>
+ <FilenameWithoutPath>msh.c</FilenameWithoutPath>
</File>
<File>
- <GroupNumber>8</GroupNumber>
+ <GroupNumber>9</GroupNumber>
<FileNumber>59</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<Focus>0</Focus>
+ <ColumnNumber>0</ColumnNumber>
<tvExpOptDlg>0</tvExpOptDlg>
+ <TopLine>0</TopLine>
+ <CurrentLine>0</CurrentLine>
<bDave2>0</bDave2>
- <PathWithFileName>..\..\components\finsh\finsh_init.c</PathWithFileName>
- <FilenameWithoutPath>finsh_init.c</FilenameWithoutPath>
- <RteFlg>0</RteFlg>
- <bShared>0</bShared>
+ <PathWithFileName>../../components/finsh/finsh_compiler.c</PathWithFileName>
+ <FilenameWithoutPath>finsh_compiler.c</FilenameWithoutPath>
</File>
<File>
- <GroupNumber>8</GroupNumber>
+ <GroupNumber>9</GroupNumber>
<FileNumber>60</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<Focus>0</Focus>
+ <ColumnNumber>0</ColumnNumber>
<tvExpOptDlg>0</tvExpOptDlg>
+ <TopLine>0</TopLine>
+ <CurrentLine>0</CurrentLine>
<bDave2>0</bDave2>
- <PathWithFileName>..\..\components\finsh\finsh_node.c</PathWithFileName>
- <FilenameWithoutPath>finsh_node.c</FilenameWithoutPath>
- <RteFlg>0</RteFlg>
- <bShared>0</bShared>
+ <PathWithFileName>../../components/finsh/finsh_error.c</PathWithFileName>
+ <FilenameWithoutPath>finsh_error.c</FilenameWithoutPath>
</File>
<File>
- <GroupNumber>8</GroupNumber>
+ <GroupNumber>9</GroupNumber>
<FileNumber>61</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<Focus>0</Focus>
+ <ColumnNumber>0</ColumnNumber>
<tvExpOptDlg>0</tvExpOptDlg>
+ <TopLine>0</TopLine>
+ <CurrentLine>0</CurrentLine>
<bDave2>0</bDave2>
- <PathWithFileName>..\..\components\finsh\finsh_ops.c</PathWithFileName>
- <FilenameWithoutPath>finsh_ops.c</FilenameWithoutPath>
- <RteFlg>0</RteFlg>
- <bShared>0</bShared>
+ <PathWithFileName>../../components/finsh/finsh_heap.c</PathWithFileName>
+ <FilenameWithoutPath>finsh_heap.c</FilenameWithoutPath>
</File>
<File>
- <GroupNumber>8</GroupNumber>
+ <GroupNumber>9</GroupNumber>
<FileNumber>62</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<Focus>0</Focus>
+ <ColumnNumber>0</ColumnNumber>
<tvExpOptDlg>0</tvExpOptDlg>
+ <TopLine>0</TopLine>
+ <CurrentLine>0</CurrentLine>
<bDave2>0</bDave2>
- <PathWithFileName>..\..\components\finsh\finsh_parser.c</PathWithFileName>
- <FilenameWithoutPath>finsh_parser.c</FilenameWithoutPath>
- <RteFlg>0</RteFlg>
- <bShared>0</bShared>
+ <PathWithFileName>../../components/finsh/finsh_init.c</PathWithFileName>
+ <FilenameWithoutPath>finsh_init.c</FilenameWithoutPath>
</File>
<File>
- <GroupNumber>8</GroupNumber>
+ <GroupNumber>9</GroupNumber>
<FileNumber>63</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<Focus>0</Focus>
+ <ColumnNumber>0</ColumnNumber>
<tvExpOptDlg>0</tvExpOptDlg>
+ <TopLine>0</TopLine>
+ <CurrentLine>0</CurrentLine>
<bDave2>0</bDave2>
- <PathWithFileName>..\..\components\finsh\finsh_var.c</PathWithFileName>
- <FilenameWithoutPath>finsh_var.c</FilenameWithoutPath>
- <RteFlg>0</RteFlg>
- <bShared>0</bShared>
+ <PathWithFileName>../../components/finsh/finsh_node.c</PathWithFileName>
+ <FilenameWithoutPath>finsh_node.c</FilenameWithoutPath>
</File>
<File>
- <GroupNumber>8</GroupNumber>
+ <GroupNumber>9</GroupNumber>
<FileNumber>64</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<Focus>0</Focus>
+ <ColumnNumber>0</ColumnNumber>
<tvExpOptDlg>0</tvExpOptDlg>
+ <TopLine>0</TopLine>
+ <CurrentLine>0</CurrentLine>
<bDave2>0</bDave2>
- <PathWithFileName>..\..\components\finsh\finsh_vm.c</PathWithFileName>
- <FilenameWithoutPath>finsh_vm.c</FilenameWithoutPath>
- <RteFlg>0</RteFlg>
- <bShared>0</bShared>
+ <PathWithFileName>../../components/finsh/finsh_ops.c</PathWithFileName>
+ <FilenameWithoutPath>finsh_ops.c</FilenameWithoutPath>
</File>
<File>
- <GroupNumber>8</GroupNumber>
+ <GroupNumber>9</GroupNumber>
<FileNumber>65</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<Focus>0</Focus>
+ <ColumnNumber>0</ColumnNumber>
<tvExpOptDlg>0</tvExpOptDlg>
+ <TopLine>0</TopLine>
+ <CurrentLine>0</CurrentLine>
<bDave2>0</bDave2>
- <PathWithFileName>..\..\components\finsh\finsh_token.c</PathWithFileName>
- <FilenameWithoutPath>finsh_token.c</FilenameWithoutPath>
- <RteFlg>0</RteFlg>
- <bShared>0</bShared>
+ <PathWithFileName>../../components/finsh/finsh_parser.c</PathWithFileName>
+ <FilenameWithoutPath>finsh_parser.c</FilenameWithoutPath>
</File>
- </Group>
-
- <Group>
- <GroupName>Components</GroupName>
- <tvExp>0</tvExp>
- <tvExpOptDlg>0</tvExpOptDlg>
- <cbSel>0</cbSel>
- <RteFlg>0</RteFlg>
<File>
<GroupNumber>9</GroupNumber>
<FileNumber>66</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<Focus>0</Focus>
+ <ColumnNumber>0</ColumnNumber>
<tvExpOptDlg>0</tvExpOptDlg>
+ <TopLine>0</TopLine>
+ <CurrentLine>0</CurrentLine>
<bDave2>0</bDave2>
- <PathWithFileName>..\..\components\init\components.c</PathWithFileName>
- <FilenameWithoutPath>components.c</FilenameWithoutPath>
- <RteFlg>0</RteFlg>
- <bShared>0</bShared>
+ <PathWithFileName>../../components/finsh/finsh_var.c</PathWithFileName>
+ <FilenameWithoutPath>finsh_var.c</FilenameWithoutPath>
</File>
- </Group>
-
- <Group>
- <GroupName>libc</GroupName>
- <tvExp>0</tvExp>
- <tvExpOptDlg>0</tvExpOptDlg>
- <cbSel>0</cbSel>
- <RteFlg>0</RteFlg>
<File>
- <GroupNumber>10</GroupNumber>
+ <GroupNumber>9</GroupNumber>
<FileNumber>67</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<Focus>0</Focus>
+ <ColumnNumber>0</ColumnNumber>
<tvExpOptDlg>0</tvExpOptDlg>
+ <TopLine>0</TopLine>
+ <CurrentLine>0</CurrentLine>
<bDave2>0</bDave2>
- <PathWithFileName>..\..\components\libc\armlibc\mem_std.c</PathWithFileName>
- <FilenameWithoutPath>mem_std.c</FilenameWithoutPath>
- <RteFlg>0</RteFlg>
- <bShared>0</bShared>
+ <PathWithFileName>../../components/finsh/finsh_vm.c</PathWithFileName>
+ <FilenameWithoutPath>finsh_vm.c</FilenameWithoutPath>
</File>
<File>
- <GroupNumber>10</GroupNumber>
+ <GroupNumber>9</GroupNumber>
<FileNumber>68</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<Focus>0</Focus>
+ <ColumnNumber>0</ColumnNumber>
<tvExpOptDlg>0</tvExpOptDlg>
+ <TopLine>0</TopLine>
+ <CurrentLine>0</CurrentLine>
<bDave2>0</bDave2>
- <PathWithFileName>..\..\components\libc\armlibc\stubs.c</PathWithFileName>
- <FilenameWithoutPath>stubs.c</FilenameWithoutPath>
- <RteFlg>0</RteFlg>
- <bShared>0</bShared>
+ <PathWithFileName>../../components/finsh/finsh_token.c</PathWithFileName>
+ <FilenameWithoutPath>finsh_token.c</FilenameWithoutPath>
</File>
</Group>
@@ -1148,461 +1182,495 @@
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<cbSel>0</cbSel>
- <RteFlg>0</RteFlg>
<File>
- <GroupNumber>11</GroupNumber>
+ <GroupNumber>10</GroupNumber>
<FileNumber>69</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<Focus>0</Focus>
+ <ColumnNumber>0</ColumnNumber>
<tvExpOptDlg>0</tvExpOptDlg>
+ <TopLine>0</TopLine>
+ <CurrentLine>0</CurrentLine>
<bDave2>0</bDave2>
- <PathWithFileName>..\..\components\net\lwip-1.4.1\src\api\api_lib.c</PathWithFileName>
+ <PathWithFileName>../../components/net/lwip-1.4.1/src/api/api_lib.c</PathWithFileName>
<FilenameWithoutPath>api_lib.c</FilenameWithoutPath>
- <RteFlg>0</RteFlg>
- <bShared>0</bShared>
</File>
<File>
- <GroupNumber>11</GroupNumber>
+ <GroupNumber>10</GroupNumber>
<FileNumber>70</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<Focus>0</Focus>
+ <ColumnNumber>0</ColumnNumber>
<tvExpOptDlg>0</tvExpOptDlg>
+ <TopLine>0</TopLine>
+ <CurrentLine>0</CurrentLine>
<bDave2>0</bDave2>
- <PathWithFileName>..\..\components\net\lwip-1.4.1\src\api\api_msg.c</PathWithFileName>
+ <PathWithFileName>../../components/net/lwip-1.4.1/src/api/api_msg.c</PathWithFileName>
<FilenameWithoutPath>api_msg.c</FilenameWithoutPath>
- <RteFlg>0</RteFlg>
- <bShared>0</bShared>
</File>
<File>
- <GroupNumber>11</GroupNumber>
+ <GroupNumber>10</GroupNumber>
<FileNumber>71</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<Focus>0</Focus>
+ <ColumnNumber>0</ColumnNumber>
<tvExpOptDlg>0</tvExpOptDlg>
+ <TopLine>0</TopLine>
+ <CurrentLine>0</CurrentLine>
<bDave2>0</bDave2>
- <PathWithFileName>..\..\components\net\lwip-1.4.1\src\api\err.c</PathWithFileName>
+ <PathWithFileName>../../components/net/lwip-1.4.1/src/api/err.c</PathWithFileName>
<FilenameWithoutPath>err.c</FilenameWithoutPath>
- <RteFlg>0</RteFlg>
- <bShared>0</bShared>
</File>
<File>
- <GroupNumber>11</GroupNumber>
+ <GroupNumber>10</GroupNumber>
<FileNumber>72</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<Focus>0</Focus>
+ <ColumnNumber>0</ColumnNumber>
<tvExpOptDlg>0</tvExpOptDlg>
+ <TopLine>0</TopLine>
+ <CurrentLine>0</CurrentLine>
<bDave2>0</bDave2>
- <PathWithFileName>..\..\components\net\lwip-1.4.1\src\api\netbuf.c</PathWithFileName>
+ <PathWithFileName>../../components/net/lwip-1.4.1/src/api/netbuf.c</PathWithFileName>
<FilenameWithoutPath>netbuf.c</FilenameWithoutPath>
- <RteFlg>0</RteFlg>
- <bShared>0</bShared>
</File>
<File>
- <GroupNumber>11</GroupNumber>
+ <GroupNumber>10</GroupNumber>
<FileNumber>73</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<Focus>0</Focus>
+ <ColumnNumber>0</ColumnNumber>
<tvExpOptDlg>0</tvExpOptDlg>
+ <TopLine>0</TopLine>
+ <CurrentLine>0</CurrentLine>
<bDave2>0</bDave2>
- <PathWithFileName>..\..\components\net\lwip-1.4.1\src\api\netdb.c</PathWithFileName>
+ <PathWithFileName>../../components/net/lwip-1.4.1/src/api/netdb.c</PathWithFileName>
<FilenameWithoutPath>netdb.c</FilenameWithoutPath>
- <RteFlg>0</RteFlg>
- <bShared>0</bShared>
</File>
<File>
- <GroupNumber>11</GroupNumber>
+ <GroupNumber>10</GroupNumber>
<FileNumber>74</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<Focus>0</Focus>
+ <ColumnNumber>0</ColumnNumber>
<tvExpOptDlg>0</tvExpOptDlg>
+ <TopLine>0</TopLine>
+ <CurrentLine>0</CurrentLine>
<bDave2>0</bDave2>
- <PathWithFileName>..\..\components\net\lwip-1.4.1\src\api\netifapi.c</PathWithFileName>
+ <PathWithFileName>../../components/net/lwip-1.4.1/src/api/netifapi.c</PathWithFileName>
<FilenameWithoutPath>netifapi.c</FilenameWithoutPath>
- <RteFlg>0</RteFlg>
- <bShared>0</bShared>
</File>
<File>
- <GroupNumber>11</GroupNumber>
+ <GroupNumber>10</GroupNumber>
<FileNumber>75</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<Focus>0</Focus>
+ <ColumnNumber>0</ColumnNumber>
<tvExpOptDlg>0</tvExpOptDlg>
+ <TopLine>0</TopLine>
+ <CurrentLine>0</CurrentLine>
<bDave2>0</bDave2>
- <PathWithFileName>..\..\components\net\lwip-1.4.1\src\api\sockets.c</PathWithFileName>
+ <PathWithFileName>../../components/net/lwip-1.4.1/src/api/sockets.c</PathWithFileName>
<FilenameWithoutPath>sockets.c</FilenameWithoutPath>
- <RteFlg>0</RteFlg>
- <bShared>0</bShared>
</File>
<File>
- <GroupNumber>11</GroupNumber>
+ <GroupNumber>10</GroupNumber>
<FileNumber>76</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<Focus>0</Focus>
+ <ColumnNumber>0</ColumnNumber>
<tvExpOptDlg>0</tvExpOptDlg>
+ <TopLine>0</TopLine>
+ <CurrentLine>0</CurrentLine>
<bDave2>0</bDave2>
- <PathWithFileName>..\..\components\net\lwip-1.4.1\src\api\tcpip.c</PathWithFileName>
+ <PathWithFileName>../../components/net/lwip-1.4.1/src/api/tcpip.c</PathWithFileName>
<FilenameWithoutPath>tcpip.c</FilenameWithoutPath>
- <RteFlg>0</RteFlg>
- <bShared>0</bShared>
</File>
<File>
- <GroupNumber>11</GroupNumber>
+ <GroupNumber>10</GroupNumber>
<FileNumber>77</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<Focus>0</Focus>
+ <ColumnNumber>0</ColumnNumber>
<tvExpOptDlg>0</tvExpOptDlg>
+ <TopLine>0</TopLine>
+ <CurrentLine>0</CurrentLine>
<bDave2>0</bDave2>
- <PathWithFileName>..\..\components\net\lwip-1.4.1\src\arch\sys_arch.c</PathWithFileName>
+ <PathWithFileName>../../components/net/lwip-1.4.1/src/arch/sys_arch.c</PathWithFileName>
<FilenameWithoutPath>sys_arch.c</FilenameWithoutPath>
- <RteFlg>0</RteFlg>
- <bShared>0</bShared>
</File>
<File>
- <GroupNumber>11</GroupNumber>
+ <GroupNumber>10</GroupNumber>
<FileNumber>78</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<Focus>0</Focus>
+ <ColumnNumber>0</ColumnNumber>
<tvExpOptDlg>0</tvExpOptDlg>
+ <TopLine>0</TopLine>
+ <CurrentLine>0</CurrentLine>
<bDave2>0</bDave2>
- <PathWithFileName>..\..\components\net\lwip-1.4.1\src\core\def.c</PathWithFileName>
+ <PathWithFileName>../../components/net/lwip-1.4.1/src/core/def.c</PathWithFileName>
<FilenameWithoutPath>def.c</FilenameWithoutPath>
- <RteFlg>0</RteFlg>
- <bShared>0</bShared>
</File>
<File>
- <GroupNumber>11</GroupNumber>
+ <GroupNumber>10</GroupNumber>
<FileNumber>79</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<Focus>0</Focus>
+ <ColumnNumber>0</ColumnNumber>
<tvExpOptDlg>0</tvExpOptDlg>
+ <TopLine>0</TopLine>
+ <CurrentLine>0</CurrentLine>
<bDave2>0</bDave2>
- <PathWithFileName>..\..\components\net\lwip-1.4.1\src\core\dhcp.c</PathWithFileName>
+ <PathWithFileName>../../components/net/lwip-1.4.1/src/core/dhcp.c</PathWithFileName>
<FilenameWithoutPath>dhcp.c</FilenameWithoutPath>
- <RteFlg>0</RteFlg>
- <bShared>0</bShared>
</File>
<File>
- <GroupNumber>11</GroupNumber>
+ <GroupNumber>10</GroupNumber>
<FileNumber>80</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<Focus>0</Focus>
+ <ColumnNumber>0</ColumnNumber>
<tvExpOptDlg>0</tvExpOptDlg>
+ <TopLine>0</TopLine>
+ <CurrentLine>0</CurrentLine>
<bDave2>0</bDave2>
- <PathWithFileName>..\..\components\net\lwip-1.4.1\src\core\dns.c</PathWithFileName>
+ <PathWithFileName>../../components/net/lwip-1.4.1/src/core/dns.c</PathWithFileName>
<FilenameWithoutPath>dns.c</FilenameWithoutPath>
- <RteFlg>0</RteFlg>
- <bShared>0</bShared>
</File>
<File>
- <GroupNumber>11</GroupNumber>
+ <GroupNumber>10</GroupNumber>
<FileNumber>81</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<Focus>0</Focus>
+ <ColumnNumber>0</ColumnNumber>
<tvExpOptDlg>0</tvExpOptDlg>
+ <TopLine>0</TopLine>
+ <CurrentLine>0</CurrentLine>
<bDave2>0</bDave2>
- <PathWithFileName>..\..\components\net\lwip-1.4.1\src\core\init.c</PathWithFileName>
+ <PathWithFileName>../../components/net/lwip-1.4.1/src/core/init.c</PathWithFileName>
<FilenameWithoutPath>init.c</FilenameWithoutPath>
- <RteFlg>0</RteFlg>
- <bShared>0</bShared>
</File>
<File>
- <GroupNumber>11</GroupNumber>
+ <GroupNumber>10</GroupNumber>
<FileNumber>82</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<Focus>0</Focus>
+ <ColumnNumber>0</ColumnNumber>
<tvExpOptDlg>0</tvExpOptDlg>
+ <TopLine>0</TopLine>
+ <CurrentLine>0</CurrentLine>
<bDave2>0</bDave2>
- <PathWithFileName>..\..\components\net\lwip-1.4.1\src\core\memp.c</PathWithFileName>
+ <PathWithFileName>../../components/net/lwip-1.4.1/src/core/memp.c</PathWithFileName>
<FilenameWithoutPath>memp.c</FilenameWithoutPath>
- <RteFlg>0</RteFlg>
- <bShared>0</bShared>
</File>
<File>
- <GroupNumber>11</GroupNumber>
+ <GroupNumber>10</GroupNumber>
<FileNumber>83</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<Focus>0</Focus>
+ <ColumnNumber>0</ColumnNumber>
<tvExpOptDlg>0</tvExpOptDlg>
+ <TopLine>0</TopLine>
+ <CurrentLine>0</CurrentLine>
<bDave2>0</bDave2>
- <PathWithFileName>..\..\components\net\lwip-1.4.1\src\core\netif.c</PathWithFileName>
+ <PathWithFileName>../../components/net/lwip-1.4.1/src/core/netif.c</PathWithFileName>
<FilenameWithoutPath>netif.c</FilenameWithoutPath>
- <RteFlg>0</RteFlg>
- <bShared>0</bShared>
</File>
<File>
- <GroupNumber>11</GroupNumber>
+ <GroupNumber>10</GroupNumber>
<FileNumber>84</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<Focus>0</Focus>
+ <ColumnNumber>0</ColumnNumber>
<tvExpOptDlg>0</tvExpOptDlg>
+ <TopLine>0</TopLine>
+ <CurrentLine>0</CurrentLine>
<bDave2>0</bDave2>
- <PathWithFileName>..\..\components\net\lwip-1.4.1\src\core\pbuf.c</PathWithFileName>
+ <PathWithFileName>../../components/net/lwip-1.4.1/src/core/pbuf.c</PathWithFileName>
<FilenameWithoutPath>pbuf.c</FilenameWithoutPath>
- <RteFlg>0</RteFlg>
- <bShared>0</bShared>
</File>
<File>
- <GroupNumber>11</GroupNumber>
+ <GroupNumber>10</GroupNumber>
<FileNumber>85</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<Focus>0</Focus>
+ <ColumnNumber>0</ColumnNumber>
<tvExpOptDlg>0</tvExpOptDlg>
+ <TopLine>0</TopLine>
+ <CurrentLine>0</CurrentLine>
<bDave2>0</bDave2>
- <PathWithFileName>..\..\components\net\lwip-1.4.1\src\core\raw.c</PathWithFileName>
+ <PathWithFileName>../../components/net/lwip-1.4.1/src/core/raw.c</PathWithFileName>
<FilenameWithoutPath>raw.c</FilenameWithoutPath>
- <RteFlg>0</RteFlg>
- <bShared>0</bShared>
</File>
<File>
- <GroupNumber>11</GroupNumber>
+ <GroupNumber>10</GroupNumber>
<FileNumber>86</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<Focus>0</Focus>
+ <ColumnNumber>0</ColumnNumber>
<tvExpOptDlg>0</tvExpOptDlg>
+ <TopLine>0</TopLine>
+ <CurrentLine>0</CurrentLine>
<bDave2>0</bDave2>
- <PathWithFileName>..\..\components\net\lwip-1.4.1\src\core\stats.c</PathWithFileName>
+ <PathWithFileName>../../components/net/lwip-1.4.1/src/core/stats.c</PathWithFileName>
<FilenameWithoutPath>stats.c</FilenameWithoutPath>
- <RteFlg>0</RteFlg>
- <bShared>0</bShared>
</File>
<File>
- <GroupNumber>11</GroupNumber>
+ <GroupNumber>10</GroupNumber>
<FileNumber>87</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<Focus>0</Focus>
+ <ColumnNumber>0</ColumnNumber>
<tvExpOptDlg>0</tvExpOptDlg>
+ <TopLine>0</TopLine>
+ <CurrentLine>0</CurrentLine>
<bDave2>0</bDave2>
- <PathWithFileName>..\..\components\net\lwip-1.4.1\src\core\sys.c</PathWithFileName>
+ <PathWithFileName>../../components/net/lwip-1.4.1/src/core/sys.c</PathWithFileName>
<FilenameWithoutPath>sys.c</FilenameWithoutPath>
- <RteFlg>0</RteFlg>
- <bShared>0</bShared>
</File>
<File>
- <GroupNumber>11</GroupNumber>
+ <GroupNumber>10</GroupNumber>
<FileNumber>88</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<Focus>0</Focus>
+ <ColumnNumber>0</ColumnNumber>
<tvExpOptDlg>0</tvExpOptDlg>
+ <TopLine>0</TopLine>
+ <CurrentLine>0</CurrentLine>
<bDave2>0</bDave2>
- <PathWithFileName>..\..\components\net\lwip-1.4.1\src\core\tcp.c</PathWithFileName>
+ <PathWithFileName>../../components/net/lwip-1.4.1/src/core/tcp.c</PathWithFileName>
<FilenameWithoutPath>tcp.c</FilenameWithoutPath>
- <RteFlg>0</RteFlg>
- <bShared>0</bShared>
</File>
<File>
- <GroupNumber>11</GroupNumber>
+ <GroupNumber>10</GroupNumber>
<FileNumber>89</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<Focus>0</Focus>
+ <ColumnNumber>0</ColumnNumber>
<tvExpOptDlg>0</tvExpOptDlg>
+ <TopLine>0</TopLine>
+ <CurrentLine>0</CurrentLine>
<bDave2>0</bDave2>
- <PathWithFileName>..\..\components\net\lwip-1.4.1\src\core\tcp_in.c</PathWithFileName>
+ <PathWithFileName>../../components/net/lwip-1.4.1/src/core/tcp_in.c</PathWithFileName>
<FilenameWithoutPath>tcp_in.c</FilenameWithoutPath>
- <RteFlg>0</RteFlg>
- <bShared>0</bShared>
</File>
<File>
- <GroupNumber>11</GroupNumber>
+ <GroupNumber>10</GroupNumber>
<FileNumber>90</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<Focus>0</Focus>
+ <ColumnNumber>0</ColumnNumber>
<tvExpOptDlg>0</tvExpOptDlg>
+ <TopLine>0</TopLine>
+ <CurrentLine>0</CurrentLine>
<bDave2>0</bDave2>
- <PathWithFileName>..\..\components\net\lwip-1.4.1\src\core\tcp_out.c</PathWithFileName>
+ <PathWithFileName>../../components/net/lwip-1.4.1/src/core/tcp_out.c</PathWithFileName>
<FilenameWithoutPath>tcp_out.c</FilenameWithoutPath>
- <RteFlg>0</RteFlg>
- <bShared>0</bShared>
</File>
<File>
- <GroupNumber>11</GroupNumber>
+ <GroupNumber>10</GroupNumber>
<FileNumber>91</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<Focus>0</Focus>
+ <ColumnNumber>0</ColumnNumber>
<tvExpOptDlg>0</tvExpOptDlg>
+ <TopLine>0</TopLine>
+ <CurrentLine>0</CurrentLine>
<bDave2>0</bDave2>
- <PathWithFileName>..\..\components\net\lwip-1.4.1\src\core\timers.c</PathWithFileName>
+ <PathWithFileName>../../components/net/lwip-1.4.1/src/core/timers.c</PathWithFileName>
<FilenameWithoutPath>timers.c</FilenameWithoutPath>
- <RteFlg>0</RteFlg>
- <bShared>0</bShared>
</File>
<File>
- <GroupNumber>11</GroupNumber>
+ <GroupNumber>10</GroupNumber>
<FileNumber>92</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<Focus>0</Focus>
+ <ColumnNumber>0</ColumnNumber>
<tvExpOptDlg>0</tvExpOptDlg>
+ <TopLine>0</TopLine>
+ <CurrentLine>0</CurrentLine>
<bDave2>0</bDave2>
- <PathWithFileName>..\..\components\net\lwip-1.4.1\src\core\udp.c</PathWithFileName>
+ <PathWithFileName>../../components/net/lwip-1.4.1/src/core/udp.c</PathWithFileName>
<FilenameWithoutPath>udp.c</FilenameWithoutPath>
- <RteFlg>0</RteFlg>
- <bShared>0</bShared>
</File>
<File>
- <GroupNumber>11</GroupNumber>
+ <GroupNumber>10</GroupNumber>
<FileNumber>93</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<Focus>0</Focus>
+ <ColumnNumber>0</ColumnNumber>
<tvExpOptDlg>0</tvExpOptDlg>
+ <TopLine>0</TopLine>
+ <CurrentLine>0</CurrentLine>
<bDave2>0</bDave2>
- <PathWithFileName>..\..\components\net\lwip-1.4.1\src\core\ipv4\autoip.c</PathWithFileName>
+ <PathWithFileName>../../components/net/lwip-1.4.1/src/core/ipv4/autoip.c</PathWithFileName>
<FilenameWithoutPath>autoip.c</FilenameWithoutPath>
- <RteFlg>0</RteFlg>
- <bShared>0</bShared>
</File>
<File>
- <GroupNumber>11</GroupNumber>
+ <GroupNumber>10</GroupNumber>
<FileNumber>94</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<Focus>0</Focus>
+ <ColumnNumber>0</ColumnNumber>
<tvExpOptDlg>0</tvExpOptDlg>
+ <TopLine>0</TopLine>
+ <CurrentLine>0</CurrentLine>
<bDave2>0</bDave2>
- <PathWithFileName>..\..\components\net\lwip-1.4.1\src\core\ipv4\icmp.c</PathWithFileName>
+ <PathWithFileName>../../components/net/lwip-1.4.1/src/core/ipv4/icmp.c</PathWithFileName>
<FilenameWithoutPath>icmp.c</FilenameWithoutPath>
- <RteFlg>0</RteFlg>
- <bShared>0</bShared>
</File>
<File>
- <GroupNumber>11</GroupNumber>
+ <GroupNumber>10</GroupNumber>
<FileNumber>95</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<Focus>0</Focus>
+ <ColumnNumber>0</ColumnNumber>
<tvExpOptDlg>0</tvExpOptDlg>
+ <TopLine>0</TopLine>
+ <CurrentLine>0</CurrentLine>
<bDave2>0</bDave2>
- <PathWithFileName>..\..\components\net\lwip-1.4.1\src\core\ipv4\igmp.c</PathWithFileName>
+ <PathWithFileName>../../components/net/lwip-1.4.1/src/core/ipv4/igmp.c</PathWithFileName>
<FilenameWithoutPath>igmp.c</FilenameWithoutPath>
- <RteFlg>0</RteFlg>
- <bShared>0</bShared>
</File>
<File>
- <GroupNumber>11</GroupNumber>
+ <GroupNumber>10</GroupNumber>
<FileNumber>96</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<Focus>0</Focus>
+ <ColumnNumber>0</ColumnNumber>
<tvExpOptDlg>0</tvExpOptDlg>
+ <TopLine>0</TopLine>
+ <CurrentLine>0</CurrentLine>
<bDave2>0</bDave2>
- <PathWithFileName>..\..\components\net\lwip-1.4.1\src\core\ipv4\inet.c</PathWithFileName>
+ <PathWithFileName>../../components/net/lwip-1.4.1/src/core/ipv4/inet.c</PathWithFileName>
<FilenameWithoutPath>inet.c</FilenameWithoutPath>
- <RteFlg>0</RteFlg>
- <bShared>0</bShared>
</File>
<File>
- <GroupNumber>11</GroupNumber>
+ <GroupNumber>10</GroupNumber>
<FileNumber>97</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<Focus>0</Focus>
+ <ColumnNumber>0</ColumnNumber>
<tvExpOptDlg>0</tvExpOptDlg>
+ <TopLine>0</TopLine>
+ <CurrentLine>0</CurrentLine>
<bDave2>0</bDave2>
- <PathWithFileName>..\..\components\net\lwip-1.4.1\src\core\ipv4\inet_chksum.c</PathWithFileName>
+ <PathWithFileName>../../components/net/lwip-1.4.1/src/core/ipv4/inet_chksum.c</PathWithFileName>
<FilenameWithoutPath>inet_chksum.c</FilenameWithoutPath>
- <RteFlg>0</RteFlg>
- <bShared>0</bShared>
</File>
<File>
- <GroupNumber>11</GroupNumber>
+ <GroupNumber>10</GroupNumber>
<FileNumber>98</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<Focus>0</Focus>
+ <ColumnNumber>0</ColumnNumber>
<tvExpOptDlg>0</tvExpOptDlg>
+ <TopLine>0</TopLine>
+ <CurrentLine>0</CurrentLine>
<bDave2>0</bDave2>
- <PathWithFileName>..\..\components\net\lwip-1.4.1\src\core\ipv4\ip.c</PathWithFileName>
+ <PathWithFileName>../../components/net/lwip-1.4.1/src/core/ipv4/ip.c</PathWithFileName>
<FilenameWithoutPath>ip.c</FilenameWithoutPath>
- <RteFlg>0</RteFlg>
- <bShared>0</bShared>
</File>
<File>
- <GroupNumber>11</GroupNumber>
+ <GroupNumber>10</GroupNumber>
<FileNumber>99</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<Focus>0</Focus>
+ <ColumnNumber>0</ColumnNumber>
<tvExpOptDlg>0</tvExpOptDlg>
+ <TopLine>0</TopLine>
+ <CurrentLine>0</CurrentLine>
<bDave2>0</bDave2>
- <PathWithFileName>..\..\components\net\lwip-1.4.1\src\core\ipv4\ip_addr.c</PathWithFileName>
+ <PathWithFileName>../../components/net/lwip-1.4.1/src/core/ipv4/ip_addr.c</PathWithFileName>
<FilenameWithoutPath>ip_addr.c</FilenameWithoutPath>
- <RteFlg>0</RteFlg>
- <bShared>0</bShared>
</File>
<File>
- <GroupNumber>11</GroupNumber>
+ <GroupNumber>10</GroupNumber>
<FileNumber>100</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<Focus>0</Focus>
+ <ColumnNumber>0</ColumnNumber>
<tvExpOptDlg>0</tvExpOptDlg>
+ <TopLine>0</TopLine>
+ <CurrentLine>0</CurrentLine>
<bDave2>0</bDave2>
- <PathWithFileName>..\..\components\net\lwip-1.4.1\src\core\ipv4\ip_frag.c</PathWithFileName>
+ <PathWithFileName>../../components/net/lwip-1.4.1/src/core/ipv4/ip_frag.c</PathWithFileName>
<FilenameWithoutPath>ip_frag.c</FilenameWithoutPath>
- <RteFlg>0</RteFlg>
- <bShared>0</bShared>
</File>
<File>
- <GroupNumber>11</GroupNumber>
+ <GroupNumber>10</GroupNumber>
<FileNumber>101</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<Focus>0</Focus>
+ <ColumnNumber>0</ColumnNumber>
<tvExpOptDlg>0</tvExpOptDlg>
+ <TopLine>0</TopLine>
+ <CurrentLine>0</CurrentLine>
<bDave2>0</bDave2>
- <PathWithFileName>..\..\components\net\lwip-1.4.1\src\netif\etharp.c</PathWithFileName>
+ <PathWithFileName>../../components/net/lwip-1.4.1/src/netif/etharp.c</PathWithFileName>
<FilenameWithoutPath>etharp.c</FilenameWithoutPath>
- <RteFlg>0</RteFlg>
- <bShared>0</bShared>
</File>
<File>
- <GroupNumber>11</GroupNumber>
+ <GroupNumber>10</GroupNumber>
<FileNumber>102</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<Focus>0</Focus>
+ <ColumnNumber>0</ColumnNumber>
<tvExpOptDlg>0</tvExpOptDlg>
+ <TopLine>0</TopLine>
+ <CurrentLine>0</CurrentLine>
<bDave2>0</bDave2>
- <PathWithFileName>..\..\components\net\lwip-1.4.1\src\netif\ethernetif.c</PathWithFileName>
+ <PathWithFileName>../../components/net/lwip-1.4.1/src/netif/ethernetif.c</PathWithFileName>
<FilenameWithoutPath>ethernetif.c</FilenameWithoutPath>
- <RteFlg>0</RteFlg>
- <bShared>0</bShared>
</File>
<File>
- <GroupNumber>11</GroupNumber>
+ <GroupNumber>10</GroupNumber>
<FileNumber>103</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<Focus>0</Focus>
+ <ColumnNumber>0</ColumnNumber>
<tvExpOptDlg>0</tvExpOptDlg>
+ <TopLine>0</TopLine>
+ <CurrentLine>0</CurrentLine>
<bDave2>0</bDave2>
- <PathWithFileName>..\..\components\net\lwip-1.4.1\src\netif\slipif.c</PathWithFileName>
+ <PathWithFileName>../../components/net/lwip-1.4.1/src/netif/slipif.c</PathWithFileName>
<FilenameWithoutPath>slipif.c</FilenameWithoutPath>
- <RteFlg>0</RteFlg>
- <bShared>0</bShared>
</File>
</Group>
diff --git a/bsp/CME_M7/project.uvproj b/bsp/CME_M7/project.uvproj
index 2eba13d595..44f7d87d47 100644
--- a/bsp/CME_M7/project.uvproj
+++ b/bsp/CME_M7/project.uvproj
@@ -136,10 +136,9 @@
<RestoreMemoryDisplay>1</RestoreMemoryDisplay>
<RestoreFunctions>0</RestoreFunctions>
<RestoreToolbox>1</RestoreToolbox>
- <RestoreTracepoints>1</RestoreTracepoints>
</Target>
<RunDebugAfterBuild>0</RunDebugAfterBuild>
- <TargetSelection>-1</TargetSelection>
+ <TargetSelection>15</TargetSelection>
<SimDlls>
<CpuDll></CpuDll>
<CpuDllArguments></CpuDllArguments>
@@ -165,7 +164,6 @@
<Capability>1</Capability>
<DriverSelection>4097</DriverSelection>
</Flash1>
- <bUseTDR>0</bUseTDR>
<Flash2>BIN\UL2CM3.DLL</Flash2>
<Flash3>"" ()</Flash3>
<Flash4></Flash4>
@@ -351,7 +349,7 @@
<MiscControls></MiscControls>
<Define>RT_USING_ARM_LIBC</Define>
<Undefine></Undefine>
- <IncludePath>applications;.;CMSIS\CME_M7;..\..\components\CMSIS\Include;drivers;StdPeriph_Driver\inc;..\..\include;..\..\libcpu\arm\cortex-m3;..\..\libcpu\arm\common;..\..\components\drivers\include;..\..\components\drivers\include;..\..\components\finsh;..\..\components\init;..\..\components\libc\armlibc;..\..\components\net\lwip-1.4.1\src;..\..\components\net\lwip-1.4.1\src\include;..\..\components\net\lwip-1.4.1\src\include\ipv4;..\..\components\net\lwip-1.4.1\src\arch\include;..\..\components\net\lwip-1.4.1\src\include\netif</IncludePath>
+ <IncludePath>StdPeriph_Driver/inc;applications;.;drivers;CMSIS/CME_M7;../../components/CMSIS/Include;../../include;../../libcpu/arm/cortex-m3;../../libcpu/arm/common;../../components/libc/armlibc;../../components/drivers/include;../../components/drivers/include;../../components/finsh;../../components/net/lwip-1.4.1/src;../../components/net/lwip-1.4.1/src/include;../../components/net/lwip-1.4.1/src/include/ipv4;../../components/net/lwip-1.4.1/src/arch/include;../../components/net/lwip-1.4.1/src/include/netif</IncludePath>
</VariousControls>
</Cads>
<Aads>
@@ -382,7 +380,7 @@
<ScatterFile>CME_M7.sct</ScatterFile>
<IncludeLibs></IncludeLibs>
<IncludeLibsPath></IncludeLibsPath>
- <Misc> --keep __fsym_* --keep __vsym_* --keep __rt_init* </Misc>
+ <Misc> --keep *.o(.rti_fn.*) --keep *.o(FSymTab) --keep *.o(VSymTab) </Misc>
<LinkerInputFile></LinkerInputFile>
<DisabledWarnings></DisabledWarnings>
</LDads>
@@ -390,152 +388,152 @@
</TargetOption>
<Groups>
<Group>
- <GroupName>Applications</GroupName>
+ <GroupName>StdPeriph_Driver</GroupName>
<Files>
<File>
- <FileName>application.c</FileName>
+ <FileName>cmem7_adc.c</FileName>
<FileType>1</FileType>
- <FilePath>applications\application.c</FilePath>
+ <FilePath>StdPeriph_Driver/src/cmem7_adc.c</FilePath>
</File>
<File>
- <FileName>led.c</FileName>
+ <FileName>cmem7_aes.c</FileName>
<FileType>1</FileType>
- <FilePath>applications\led.c</FilePath>
+ <FilePath>StdPeriph_Driver/src/cmem7_aes.c</FilePath>
</File>
<File>
- <FileName>startup.c</FileName>
+ <FileName>cmem7_can.c</FileName>
<FileType>1</FileType>
- <FilePath>applications\startup.c</FilePath>
+ <FilePath>StdPeriph_Driver/src/cmem7_can.c</FilePath>
</File>
- </Files>
- </Group>
- <Group>
- <GroupName>CMSIS</GroupName>
- <Files>
<File>
- <FileName>system_cmem7.c</FileName>
+ <FileName>cmem7_ddr.c</FileName>
<FileType>1</FileType>
- <FilePath>CMSIS\CME_M7\system_cmem7.c</FilePath>
+ <FilePath>StdPeriph_Driver/src/cmem7_ddr.c</FilePath>
</File>
<File>
- <FileName>startup_cmem7.s</FileName>
- <FileType>2</FileType>
- <FilePath>CMSIS\CME_M7\startup\arm\startup_cmem7.s</FilePath>
+ <FileName>cmem7_dma.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>StdPeriph_Driver/src/cmem7_dma.c</FilePath>
</File>
- </Files>
- </Group>
- <Group>
- <GroupName>Drivers</GroupName>
- <Files>
<File>
- <FileName>board.c</FileName>
+ <FileName>cmem7_efuse.c</FileName>
<FileType>1</FileType>
- <FilePath>drivers\board.c</FilePath>
+ <FilePath>StdPeriph_Driver/src/cmem7_efuse.c</FilePath>
</File>
<File>
- <FileName>uart.c</FileName>
+ <FileName>cmem7_eth.c</FileName>
<FileType>1</FileType>
- <FilePath>drivers\uart.c</FilePath>
+ <FilePath>StdPeriph_Driver/src/cmem7_eth.c</FilePath>
</File>
<File>
- <FileName>emac.c</FileName>
+ <FileName>cmem7_flash.c</FileName>
<FileType>1</FileType>
- <FilePath>drivers\emac.c</FilePath>
+ <FilePath>StdPeriph_Driver/src/cmem7_flash.c</FilePath>
</File>
<File>
- <FileName>app_phy.c</FileName>
+ <FileName>cmem7_gpio.c</FileName>
<FileType>1</FileType>
- <FilePath>drivers\app_phy.c</FilePath>
+ <FilePath>StdPeriph_Driver/src/cmem7_gpio.c</FilePath>
</File>
- </Files>
- </Group>
- <Group>
- <GroupName>StdPeriph_Driver</GroupName>
- <Files>
<File>
- <FileName>cmem7_adc.c</FileName>
+ <FileName>cmem7_i2c.c</FileName>
<FileType>1</FileType>
- <FilePath>StdPeriph_Driver\src\cmem7_adc.c</FilePath>
+ <FilePath>StdPeriph_Driver/src/cmem7_i2c.c</FilePath>
</File>
<File>
- <FileName>cmem7_aes.c</FileName>
+ <FileName>cmem7_misc.c</FileName>
<FileType>1</FileType>
- <FilePath>StdPeriph_Driver\src\cmem7_aes.c</FilePath>
+ <FilePath>StdPeriph_Driver/src/cmem7_misc.c</FilePath>
</File>
<File>
- <FileName>cmem7_can.c</FileName>
+ <FileName>cmem7_rtc.c</FileName>
<FileType>1</FileType>
- <FilePath>StdPeriph_Driver\src\cmem7_can.c</FilePath>
+ <FilePath>StdPeriph_Driver/src/cmem7_rtc.c</FilePath>
</File>
<File>
- <FileName>cmem7_ddr.c</FileName>
+ <FileName>cmem7_spi.c</FileName>
<FileType>1</FileType>
- <FilePath>StdPeriph_Driver\src\cmem7_ddr.c</FilePath>
+ <FilePath>StdPeriph_Driver/src/cmem7_spi.c</FilePath>
</File>
<File>
- <FileName>cmem7_dma.c</FileName>
+ <FileName>cmem7_tim.c</FileName>
<FileType>1</FileType>
- <FilePath>StdPeriph_Driver\src\cmem7_dma.c</FilePath>
+ <FilePath>StdPeriph_Driver/src/cmem7_tim.c</FilePath>
</File>
<File>
- <FileName>cmem7_efuse.c</FileName>
+ <FileName>cmem7_uart.c</FileName>
<FileType>1</FileType>
- <FilePath>StdPeriph_Driver\src\cmem7_efuse.c</FilePath>
+ <FilePath>StdPeriph_Driver/src/cmem7_uart.c</FilePath>
</File>
<File>
- <FileName>cmem7_eth.c</FileName>
+ <FileName>cmem7_usb.c</FileName>
<FileType>1</FileType>
- <FilePath>StdPeriph_Driver\src\cmem7_eth.c</FilePath>
+ <FilePath>StdPeriph_Driver/src/cmem7_usb.c</FilePath>
</File>
<File>
- <FileName>cmem7_flash.c</FileName>
+ <FileName>cmem7_wdg.c</FileName>
<FileType>1</FileType>
- <FilePath>StdPeriph_Driver\src\cmem7_flash.c</FilePath>
+ <FilePath>StdPeriph_Driver/src/cmem7_wdg.c</FilePath>
</File>
+ </Files>
+ </Group>
+ <Group>
+ <GroupName>Applications</GroupName>
+ <Files>
<File>
- <FileName>cmem7_gpio.c</FileName>
+ <FileName>application.c</FileName>
<FileType>1</FileType>
- <FilePath>StdPeriph_Driver\src\cmem7_gpio.c</FilePath>
+ <FilePath>applications/application.c</FilePath>
</File>
<File>
- <FileName>cmem7_i2c.c</FileName>
+ <FileName>led.c</FileName>
<FileType>1</FileType>
- <FilePath>StdPeriph_Driver\src\cmem7_i2c.c</FilePath>
+ <FilePath>applications/led.c</FilePath>
</File>
<File>
- <FileName>cmem7_misc.c</FileName>
+ <FileName>startup.c</FileName>
<FileType>1</FileType>
- <FilePath>StdPeriph_Driver\src\cmem7_misc.c</FilePath>
+ <FilePath>applications/startup.c</FilePath>
</File>
+ </Files>
+ </Group>
+ <Group>
+ <GroupName>Drivers</GroupName>
+ <Files>
<File>
- <FileName>cmem7_rtc.c</FileName>
+ <FileName>board.c</FileName>
<FileType>1</FileType>
- <FilePath>StdPeriph_Driver\src\cmem7_rtc.c</FilePath>
+ <FilePath>drivers/board.c</FilePath>
</File>
<File>
- <FileName>cmem7_spi.c</FileName>
+ <FileName>uart.c</FileName>
<FileType>1</FileType>
- <FilePath>StdPeriph_Driver\src\cmem7_spi.c</FilePath>
+ <FilePath>drivers/uart.c</FilePath>
</File>
<File>
- <FileName>cmem7_tim.c</FileName>
+ <FileName>emac.c</FileName>
<FileType>1</FileType>
- <FilePath>StdPeriph_Driver\src\cmem7_tim.c</FilePath>
+ <FilePath>drivers/emac.c</FilePath>
</File>
<File>
- <FileName>cmem7_uart.c</FileName>
+ <FileName>app_phy.c</FileName>
<FileType>1</FileType>
- <FilePath>StdPeriph_Driver\src\cmem7_uart.c</FilePath>
+ <FilePath>drivers/app_phy.c</FilePath>
</File>
+ </Files>
+ </Group>
+ <Group>
+ <GroupName>CMSIS</GroupName>
+ <Files>
<File>
- <FileName>cmem7_usb.c</FileName>
+ <FileName>system_cmem7.c</FileName>
<FileType>1</FileType>
- <FilePath>StdPeriph_Driver\src\cmem7_usb.c</FilePath>
+ <FilePath>CMSIS/CME_M7/system_cmem7.c</FilePath>
</File>
<File>
- <FileName>cmem7_wdg.c</FileName>
- <FileType>1</FileType>
- <FilePath>StdPeriph_Driver\src\cmem7_wdg.c</FilePath>
+ <FileName>startup_cmem7.s</FileName>
+ <FileType>2</FileType>
+ <FilePath>CMSIS/CME_M7/startup/arm/startup_cmem7.s</FilePath>
</File>
</Files>
</Group>
@@ -545,62 +543,67 @@
<File>
<FileName>clock.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\src\clock.c</FilePath>
+ <FilePath>../../src/clock.c</FilePath>
+ </File>
+ <File>
+ <FileName>components.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../../src/components.c</FilePath>
</File>
<File>
<FileName>device.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\src\device.c</FilePath>
+ <FilePath>../../src/device.c</FilePath>
</File>
<File>
<FileName>idle.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\src\idle.c</FilePath>
+ <FilePath>../../src/idle.c</FilePath>
</File>
<File>
<FileName>ipc.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\src\ipc.c</FilePath>
+ <FilePath>../../src/ipc.c</FilePath>
</File>
<File>
<FileName>irq.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\src\irq.c</FilePath>
+ <FilePath>../../src/irq.c</FilePath>
</File>
<File>
<FileName>kservice.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\src\kservice.c</FilePath>
+ <FilePath>../../src/kservice.c</FilePath>
</File>
<File>
<FileName>mem.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\src\mem.c</FilePath>
+ <FilePath>../../src/mem.c</FilePath>
</File>
<File>
<FileName>mempool.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\src\mempool.c</FilePath>
+ <FilePath>../../src/mempool.c</FilePath>
</File>
<File>
<FileName>object.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\src\object.c</FilePath>
+ <FilePath>../../src/object.c</FilePath>
</File>
<File>
<FileName>scheduler.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\src\scheduler.c</FilePath>
+ <FilePath>../../src/scheduler.c</FilePath>
</File>
<File>
<FileName>thread.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\src\thread.c</FilePath>
+ <FilePath>../../src/thread.c</FilePath>
</File>
<File>
<FileName>timer.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\src\timer.c</FilePath>
+ <FilePath>../../src/timer.c</FilePath>
</File>
</Files>
</Group>
@@ -610,27 +613,42 @@
<File>
<FileName>cpuport.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\libcpu\arm\cortex-m3\cpuport.c</FilePath>
+ <FilePath>../../libcpu/arm/cortex-m3/cpuport.c</FilePath>
</File>
<File>
<FileName>context_rvds.S</FileName>
<FileType>2</FileType>
- <FilePath>..\..\libcpu\arm\cortex-m3\context_rvds.S</FilePath>
+ <FilePath>../../libcpu/arm/cortex-m3/context_rvds.S</FilePath>
</File>
<File>
<FileName>backtrace.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\libcpu\arm\common\backtrace.c</FilePath>
+ <FilePath>../../libcpu/arm/common/backtrace.c</FilePath>
</File>
<File>
<FileName>div0.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\libcpu\arm\common\div0.c</FilePath>
+ <FilePath>../../libcpu/arm/common/div0.c</FilePath>
</File>
<File>
<FileName>showmem.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\libcpu\arm\common\showmem.c</FilePath>
+ <FilePath>../../libcpu/arm/common/showmem.c</FilePath>
+ </File>
+ </Files>
+ </Group>
+ <Group>
+ <GroupName>libc</GroupName>
+ <Files>
+ <File>
+ <FileName>mem_std.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../../components/libc/armlibc/mem_std.c</FilePath>
+ </File>
+ <File>
+ <FileName>stubs.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../../components/libc/armlibc/stubs.c</FilePath>
</File>
</Files>
</Group>
@@ -640,37 +658,37 @@
<File>
<FileName>serial.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\components\drivers\serial\serial.c</FilePath>
+ <FilePath>../../components/drivers/serial/serial.c</FilePath>
</File>
<File>
<FileName>completion.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\components\drivers\src\completion.c</FilePath>
+ <FilePath>../../components/drivers/src/completion.c</FilePath>
</File>
<File>
<FileName>dataqueue.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\components\drivers\src\dataqueue.c</FilePath>
+ <FilePath>../../components/drivers/src/dataqueue.c</FilePath>
</File>
<File>
<FileName>pipe.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\components\drivers\src\pipe.c</FilePath>
+ <FilePath>../../components/drivers/src/pipe.c</FilePath>
</File>
<File>
<FileName>portal.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\components\drivers\src\portal.c</FilePath>
+ <FilePath>../../components/drivers/src/portal.c</FilePath>
</File>
<File>
<FileName>ringbuffer.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\components\drivers\src\ringbuffer.c</FilePath>
+ <FilePath>../../components/drivers/src/ringbuffer.c</FilePath>
</File>
<File>
<FileName>workqueue.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\components\drivers\src\workqueue.c</FilePath>
+ <FilePath>../../components/drivers/src/workqueue.c</FilePath>
</File>
</Files>
</Group>
@@ -680,102 +698,77 @@
<File>
<FileName>shell.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\components\finsh\shell.c</FilePath>
+ <FilePath>../../components/finsh/shell.c</FilePath>
</File>
<File>
<FileName>symbol.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\components\finsh\symbol.c</FilePath>
+ <FilePath>../../components/finsh/symbol.c</FilePath>
</File>
<File>
<FileName>cmd.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\components\finsh\cmd.c</FilePath>
+ <FilePath>../../components/finsh/cmd.c</FilePath>
</File>
<File>
<FileName>msh_cmd.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\components\finsh\msh_cmd.c</FilePath>
+ <FilePath>../../components/finsh/msh_cmd.c</FilePath>
</File>
<File>
<FileName>msh.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\components\finsh\msh.c</FilePath>
+ <FilePath>../../components/finsh/msh.c</FilePath>
</File>
<File>
<FileName>finsh_compiler.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\components\finsh\finsh_compiler.c</FilePath>
+ <FilePath>../../components/finsh/finsh_compiler.c</FilePath>
</File>
<File>
<FileName>finsh_error.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\components\finsh\finsh_error.c</FilePath>
+ <FilePath>../../components/finsh/finsh_error.c</FilePath>
</File>
<File>
<FileName>finsh_heap.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\components\finsh\finsh_heap.c</FilePath>
+ <FilePath>../../components/finsh/finsh_heap.c</FilePath>
</File>
<File>
<FileName>finsh_init.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\components\finsh\finsh_init.c</FilePath>
+ <FilePath>../../components/finsh/finsh_init.c</FilePath>
</File>
<File>
<FileName>finsh_node.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\components\finsh\finsh_node.c</FilePath>
+ <FilePath>../../components/finsh/finsh_node.c</FilePath>
</File>
<File>
<FileName>finsh_ops.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\components\finsh\finsh_ops.c</FilePath>
+ <FilePath>../../components/finsh/finsh_ops.c</FilePath>
</File>
<File>
<FileName>finsh_parser.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\components\finsh\finsh_parser.c</FilePath>
+ <FilePath>../../components/finsh/finsh_parser.c</FilePath>
</File>
<File>
<FileName>finsh_var.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\components\finsh\finsh_var.c</FilePath>
+ <FilePath>../../components/finsh/finsh_var.c</FilePath>
</File>
<File>
<FileName>finsh_vm.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\components\finsh\finsh_vm.c</FilePath>
+ <FilePath>../../components/finsh/finsh_vm.c</FilePath>
</File>
<File>
<FileName>finsh_token.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\components\finsh\finsh_token.c</FilePath>
- </File>
- </Files>
- </Group>
- <Group>
- <GroupName>Components</GroupName>
- <Files>
- <File>
- <FileName>components.c</FileName>
- <FileType>1</FileType>
- <FilePath>..\..\components\init\components.c</FilePath>
- </File>
- </Files>
- </Group>
- <Group>
- <GroupName>libc</GroupName>
- <Files>
- <File>
- <FileName>mem_std.c</FileName>
- <FileType>1</FileType>
- <FilePath>..\..\components\libc\armlibc\mem_std.c</FilePath>
- </File>
- <File>
- <FileName>stubs.c</FileName>
- <FileType>1</FileType>
- <FilePath>..\..\components\libc\armlibc\stubs.c</FilePath>
+ <FilePath>../../components/finsh/finsh_token.c</FilePath>
</File>
</Files>
</Group>
@@ -785,177 +778,177 @@
<File>
<FileName>api_lib.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\components\net\lwip-1.4.1\src\api\api_lib.c</FilePath>
+ <FilePath>../../components/net/lwip-1.4.1/src/api/api_lib.c</FilePath>
</File>
<File>
<FileName>api_msg.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\components\net\lwip-1.4.1\src\api\api_msg.c</FilePath>
+ <FilePath>../../components/net/lwip-1.4.1/src/api/api_msg.c</FilePath>
</File>
<File>
<FileName>err.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\components\net\lwip-1.4.1\src\api\err.c</FilePath>
+ <FilePath>../../components/net/lwip-1.4.1/src/api/err.c</FilePath>
</File>
<File>
<FileName>netbuf.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\components\net\lwip-1.4.1\src\api\netbuf.c</FilePath>
+ <FilePath>../../components/net/lwip-1.4.1/src/api/netbuf.c</FilePath>
</File>
<File>
<FileName>netdb.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\components\net\lwip-1.4.1\src\api\netdb.c</FilePath>
+ <FilePath>../../components/net/lwip-1.4.1/src/api/netdb.c</FilePath>
</File>
<File>
<FileName>netifapi.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\components\net\lwip-1.4.1\src\api\netifapi.c</FilePath>
+ <FilePath>../../components/net/lwip-1.4.1/src/api/netifapi.c</FilePath>
</File>
<File>
<FileName>sockets.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\components\net\lwip-1.4.1\src\api\sockets.c</FilePath>
+ <FilePath>../../components/net/lwip-1.4.1/src/api/sockets.c</FilePath>
</File>
<File>
<FileName>tcpip.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\components\net\lwip-1.4.1\src\api\tcpip.c</FilePath>
+ <FilePath>../../components/net/lwip-1.4.1/src/api/tcpip.c</FilePath>
</File>
<File>
<FileName>sys_arch.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\components\net\lwip-1.4.1\src\arch\sys_arch.c</FilePath>
+ <FilePath>../../components/net/lwip-1.4.1/src/arch/sys_arch.c</FilePath>
</File>
<File>
<FileName>def.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\components\net\lwip-1.4.1\src\core\def.c</FilePath>
+ <FilePath>../../components/net/lwip-1.4.1/src/core/def.c</FilePath>
</File>
<File>
<FileName>dhcp.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\components\net\lwip-1.4.1\src\core\dhcp.c</FilePath>
+ <FilePath>../../components/net/lwip-1.4.1/src/core/dhcp.c</FilePath>
</File>
<File>
<FileName>dns.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\components\net\lwip-1.4.1\src\core\dns.c</FilePath>
+ <FilePath>../../components/net/lwip-1.4.1/src/core/dns.c</FilePath>
</File>
<File>
<FileName>init.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\components\net\lwip-1.4.1\src\core\init.c</FilePath>
+ <FilePath>../../components/net/lwip-1.4.1/src/core/init.c</FilePath>
</File>
<File>
<FileName>memp.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\components\net\lwip-1.4.1\src\core\memp.c</FilePath>
+ <FilePath>../../components/net/lwip-1.4.1/src/core/memp.c</FilePath>
</File>
<File>
<FileName>netif.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\components\net\lwip-1.4.1\src\core\netif.c</FilePath>
+ <FilePath>../../components/net/lwip-1.4.1/src/core/netif.c</FilePath>
</File>
<File>
<FileName>pbuf.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\components\net\lwip-1.4.1\src\core\pbuf.c</FilePath>
+ <FilePath>../../components/net/lwip-1.4.1/src/core/pbuf.c</FilePath>
</File>
<File>
<FileName>raw.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\components\net\lwip-1.4.1\src\core\raw.c</FilePath>
+ <FilePath>../../components/net/lwip-1.4.1/src/core/raw.c</FilePath>
</File>
<File>
<FileName>stats.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\components\net\lwip-1.4.1\src\core\stats.c</FilePath>
+ <FilePath>../../components/net/lwip-1.4.1/src/core/stats.c</FilePath>
</File>
<File>
<FileName>sys.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\components\net\lwip-1.4.1\src\core\sys.c</FilePath>
+ <FilePath>../../components/net/lwip-1.4.1/src/core/sys.c</FilePath>
</File>
<File>
<FileName>tcp.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\components\net\lwip-1.4.1\src\core\tcp.c</FilePath>
+ <FilePath>../../components/net/lwip-1.4.1/src/core/tcp.c</FilePath>
</File>
<File>
<FileName>tcp_in.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\components\net\lwip-1.4.1\src\core\tcp_in.c</FilePath>
+ <FilePath>../../components/net/lwip-1.4.1/src/core/tcp_in.c</FilePath>
</File>
<File>
<FileName>tcp_out.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\components\net\lwip-1.4.1\src\core\tcp_out.c</FilePath>
+ <FilePath>../../components/net/lwip-1.4.1/src/core/tcp_out.c</FilePath>
</File>
<File>
<FileName>timers.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\components\net\lwip-1.4.1\src\core\timers.c</FilePath>
+ <FilePath>../../components/net/lwip-1.4.1/src/core/timers.c</FilePath>
</File>
<File>
<FileName>udp.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\components\net\lwip-1.4.1\src\core\udp.c</FilePath>
+ <FilePath>../../components/net/lwip-1.4.1/src/core/udp.c</FilePath>
</File>
<File>
<FileName>autoip.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\components\net\lwip-1.4.1\src\core\ipv4\autoip.c</FilePath>
+ <FilePath>../../components/net/lwip-1.4.1/src/core/ipv4/autoip.c</FilePath>
</File>
<File>
<FileName>icmp.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\components\net\lwip-1.4.1\src\core\ipv4\icmp.c</FilePath>
+ <FilePath>../../components/net/lwip-1.4.1/src/core/ipv4/icmp.c</FilePath>
</File>
<File>
<FileName>igmp.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\components\net\lwip-1.4.1\src\core\ipv4\igmp.c</FilePath>
+ <FilePath>../../components/net/lwip-1.4.1/src/core/ipv4/igmp.c</FilePath>
</File>
<File>
<FileName>inet.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\components\net\lwip-1.4.1\src\core\ipv4\inet.c</FilePath>
+ <FilePath>../../components/net/lwip-1.4.1/src/core/ipv4/inet.c</FilePath>
</File>
<File>
<FileName>inet_chksum.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\components\net\lwip-1.4.1\src\core\ipv4\inet_chksum.c</FilePath>
+ <FilePath>../../components/net/lwip-1.4.1/src/core/ipv4/inet_chksum.c</FilePath>
</File>
<File>
<FileName>ip.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\components\net\lwip-1.4.1\src\core\ipv4\ip.c</FilePath>
+ <FilePath>../../components/net/lwip-1.4.1/src/core/ipv4/ip.c</FilePath>
</File>
<File>
<FileName>ip_addr.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\components\net\lwip-1.4.1\src\core\ipv4\ip_addr.c</FilePath>
+ <FilePath>../../components/net/lwip-1.4.1/src/core/ipv4/ip_addr.c</FilePath>
</File>
<File>
<FileName>ip_frag.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\components\net\lwip-1.4.1\src\core\ipv4\ip_frag.c</FilePath>
+ <FilePath>../../components/net/lwip-1.4.1/src/core/ipv4/ip_frag.c</FilePath>
</File>
<File>
<FileName>etharp.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\components\net\lwip-1.4.1\src\netif\etharp.c</FilePath>
+ <FilePath>../../components/net/lwip-1.4.1/src/netif/etharp.c</FilePath>
</File>
<File>
<FileName>ethernetif.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\components\net\lwip-1.4.1\src\netif\ethernetif.c</FilePath>
+ <FilePath>../../components/net/lwip-1.4.1/src/netif/ethernetif.c</FilePath>
</File>
<File>
<FileName>slipif.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\components\net\lwip-1.4.1\src\netif\slipif.c</FilePath>
+ <FilePath>../../components/net/lwip-1.4.1/src/netif/slipif.c</FilePath>
</File>
</Files>
</Group>
diff --git a/bsp/CME_M7/rtconfig.py b/bsp/CME_M7/rtconfig.py
index ea750bc4f7..57d162ffd2 100644
--- a/bsp/CME_M7/rtconfig.py
+++ b/bsp/CME_M7/rtconfig.py
@@ -24,7 +24,7 @@ if os.getenv('RTT_EXEC_PATH'):
if os.getenv('RTT_ROOT'):
RTT_ROOT = os.getenv('RTT_ROOT')
else:
- RTT_ROOT = os.path.normpath(os.getcwd())
+ RTT_ROOT = os.path.normpath(os.getcwd() + '/../..')
BUILD = 'debug'
diff --git a/bsp/asm9260t/project.uvproj b/bsp/asm9260t/project.uvproj
new file mode 100644
index 0000000000..8d44d7636b
--- /dev/null
+++ b/bsp/asm9260t/project.uvproj
@@ -0,0 +1,930 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
+<Project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="project_proj.xsd">
+ <SchemaVersion>1.1</SchemaVersion>
+ <Header>### uVision Project, (C) Keil Software</Header>
+ <Targets>
+ <Target>
+ <TargetName>rtthread</TargetName>
+ <ToolsetNumber>0x4</ToolsetNumber>
+ <ToolsetName>ARM-ADS</ToolsetName>
+ <TargetOption>
+ <TargetCommonOption>
+ <Device>AT91SAM9260</Device>
+ <Vendor>Atmel</Vendor>
+ <Cpu>IRAM(0x200000-0x200FFF) IRAM2(0x300000-0x300FFF) IROM(0x100000-0x107FFF) CLOCK(18432000) CPUTYPE(ARM926EJ-S)</Cpu>
+ <FlashUtilSpec />
+ <StartupFile>"STARTUP\Atmel\SAM9260.s" ("Atmel AT91SAM9260 Startup Code")</StartupFile>
+ <FlashDriverDll>UL2ARM(-UV2077N9E -O47 -S0 -C0 -N00("ARM926EJ-S Core") -D00(0792603F) -L00(4) -FO7 -FD300000 -FC1000 -FN1 -FF0AT91SAM9_DF_P1056_CS1 -FS020000000 -FL083BE00)</FlashDriverDll>
+ <DeviceId>4210</DeviceId>
+ <RegisterFile>AT91SAM9260.H</RegisterFile>
+ <MemoryEnv />
+ <Cmp />
+ <Asm />
+ <Linker />
+ <OHString />
+ <InfinionOptionDll />
+ <SLE66CMisc />
+ <SLE66AMisc />
+ <SLE66LinkerMisc />
+ <SFDFile />
+ <bCustSvd>0</bCustSvd>
+ <UseEnv>0</UseEnv>
+ <BinPath />
+ <IncludePath />
+ <LibPath />
+ <RegisterFilePath>Atmel\SAM9260\</RegisterFilePath>
+ <DBRegisterFilePath>Atmel\SAM9260\</DBRegisterFilePath>
+ <TargetStatus>
+ <Error>0</Error>
+ <ExitCodeStop>0</ExitCodeStop>
+ <ButtonStop>0</ButtonStop>
+ <NotGenerated>0</NotGenerated>
+ <InvalidFlash>1</InvalidFlash>
+ </TargetStatus>
+ <OutputDirectory>.\Objects\</OutputDirectory>
+ <OutputName>template</OutputName>
+ <CreateExecutable>1</CreateExecutable>
+ <CreateLib>0</CreateLib>
+ <CreateHexFile>0</CreateHexFile>
+ <DebugInformation>1</DebugInformation>
+ <BrowseInformation>1</BrowseInformation>
+ <ListingPath>.\Listings\</ListingPath>
+ <HexFormatSelection>1</HexFormatSelection>
+ <Merge32K>0</Merge32K>
+ <CreateBatchFile>0</CreateBatchFile>
+ <BeforeCompile>
+ <RunUserProg1>0</RunUserProg1>
+ <RunUserProg2>0</RunUserProg2>
+ <UserProg1Name />
+ <UserProg2Name />
+ <UserProg1Dos16Mode>0</UserProg1Dos16Mode>
+ <UserProg2Dos16Mode>0</UserProg2Dos16Mode>
+ <nStopU1X>0</nStopU1X>
+ <nStopU2X>0</nStopU2X>
+ </BeforeCompile>
+ <BeforeMake>
+ <RunUserProg1>0</RunUserProg1>
+ <RunUserProg2>0</RunUserProg2>
+ <UserProg1Name />
+ <UserProg2Name />
+ <UserProg1Dos16Mode>0</UserProg1Dos16Mode>
+ <UserProg2Dos16Mode>0</UserProg2Dos16Mode>
+ <nStopB1X>0</nStopB1X>
+ <nStopB2X>0</nStopB2X>
+ </BeforeMake>
+ <AfterMake>
+ <RunUserProg1>0</RunUserProg1>
+ <RunUserProg2>0</RunUserProg2>
+ <UserProg1Name />
+ <UserProg2Name />
+ <UserProg1Dos16Mode>0</UserProg1Dos16Mode>
+ <UserProg2Dos16Mode>0</UserProg2Dos16Mode>
+ </AfterMake>
+ <SelectedForBatchBuild>0</SelectedForBatchBuild>
+ <SVCSIdString />
+ </TargetCommonOption>
+ <CommonProperty>
+ <UseCPPCompiler>0</UseCPPCompiler>
+ <RVCTCodeConst>0</RVCTCodeConst>
+ <RVCTZI>0</RVCTZI>
+ <RVCTOtherData>0</RVCTOtherData>
+ <ModuleSelection>0</ModuleSelection>
+ <IncludeInBuild>1</IncludeInBuild>
+ <AlwaysBuild>0</AlwaysBuild>
+ <GenerateAssemblyFile>0</GenerateAssemblyFile>
+ <AssembleAssemblyFile>0</AssembleAssemblyFile>
+ <PublicsOnly>0</PublicsOnly>
+ <StopOnExitCode>3</StopOnExitCode>
+ <CustomArgument />
+ <IncludeLibraryModules />
+ <ComprImg>1</ComprImg>
+ </CommonProperty>
+ <DllOption>
+ <SimDllName>SARM.DLL</SimDllName>
+ <SimDllArguments>-cAT91SAM9260</SimDllArguments>
+ <SimDlgDll>DARMATS9.DLL</SimDlgDll>
+ <SimDlgDllArguments>-p91SAM9260</SimDlgDllArguments>
+ <TargetDllName>SARM.DLL</TargetDllName>
+ <TargetDllArguments />
+ <TargetDlgDll>TARMATS9.DLL</TargetDlgDll>
+ <TargetDlgDllArguments>-p91SAM9260</TargetDlgDllArguments>
+ </DllOption>
+ <DebugOption>
+ <OPTHX>
+ <HexSelection>1</HexSelection>
+ <HexRangeLowAddress>0</HexRangeLowAddress>
+ <HexRangeHighAddress>0</HexRangeHighAddress>
+ <HexOffset>0</HexOffset>
+ <Oh166RecLen>16</Oh166RecLen>
+ </OPTHX>
+ <Simulator>
+ <UseSimulator>0</UseSimulator>
+ <LoadApplicationAtStartup>1</LoadApplicationAtStartup>
+ <RunToMain>1</RunToMain>
+ <RestoreBreakpoints>1</RestoreBreakpoints>
+ <RestoreWatchpoints>1</RestoreWatchpoints>
+ <RestoreMemoryDisplay>1</RestoreMemoryDisplay>
+ <RestoreFunctions>1</RestoreFunctions>
+ <RestoreToolbox>1</RestoreToolbox>
+ <LimitSpeedToRealTime>0</LimitSpeedToRealTime>
+ <RestoreSysVw>1</RestoreSysVw>
+ </Simulator>
+ <Target>
+ <UseTarget>1</UseTarget>
+ <LoadApplicationAtStartup>0</LoadApplicationAtStartup>
+ <RunToMain>0</RunToMain>
+ <RestoreBreakpoints>1</RestoreBreakpoints>
+ <RestoreWatchpoints>1</RestoreWatchpoints>
+ <RestoreMemoryDisplay>1</RestoreMemoryDisplay>
+ <RestoreFunctions>0</RestoreFunctions>
+ <RestoreToolbox>1</RestoreToolbox>
+ <RestoreTracepoints>1</RestoreTracepoints>
+ <RestoreSysVw>1</RestoreSysVw>
+ </Target>
+ <RunDebugAfterBuild>0</RunDebugAfterBuild>
+ <TargetSelection>5</TargetSelection>
+ <SimDlls>
+ <CpuDll />
+ <CpuDllArguments />
+ <PeripheralDll />
+ <PeripheralDllArguments />
+ <InitializationFile />
+ </SimDlls>
+ <TargetDlls>
+ <CpuDll />
+ <CpuDllArguments />
+ <PeripheralDll />
+ <PeripheralDllArguments />
+ <InitializationFile>.\jlink\at91sam9260.ini</InitializationFile>
+ <Driver>Segger\JLTAgdi.dll</Driver>
+ </TargetDlls>
+ </DebugOption>
+ <Utilities>
+ <Flash1>
+ <UseTargetDll>1</UseTargetDll>
+ <UseExternalTool>0</UseExternalTool>
+ <RunIndependent>0</RunIndependent>
+ <UpdateFlashBeforeDebugging>0</UpdateFlashBeforeDebugging>
+ <Capability>1</Capability>
+ <DriverSelection>4096</DriverSelection>
+ </Flash1>
+ <bUseTDR>1</bUseTDR>
+ <Flash2>BIN\UL2ARM.DLL</Flash2>
+ <Flash3>"" ()</Flash3>
+ <Flash4>.\jlink\at91sam9260.ini</Flash4>
+ <pFcarmOut />
+ <pFcarmGrp />
+ <pFcArmRoot />
+ <FcArmLst>0</FcArmLst>
+ </Utilities>
+ <TargetArmAds>
+ <ArmAdsMisc>
+ <GenerateListings>0</GenerateListings>
+ <asHll>1</asHll>
+ <asAsm>1</asAsm>
+ <asMacX>1</asMacX>
+ <asSyms>1</asSyms>
+ <asFals>1</asFals>
+ <asDbgD>1</asDbgD>
+ <asForm>1</asForm>
+ <ldLst>0</ldLst>
+ <ldmm>1</ldmm>
+ <ldXref>1</ldXref>
+ <BigEnd>0</BigEnd>
+ <AdsALst>1</AdsALst>
+ <AdsACrf>1</AdsACrf>
+ <AdsANop>0</AdsANop>
+ <AdsANot>0</AdsANot>
+ <AdsLLst>1</AdsLLst>
+ <AdsLmap>1</AdsLmap>
+ <AdsLcgr>1</AdsLcgr>
+ <AdsLsym>1</AdsLsym>
+ <AdsLszi>1</AdsLszi>
+ <AdsLtoi>1</AdsLtoi>
+ <AdsLsun>1</AdsLsun>
+ <AdsLven>1</AdsLven>
+ <AdsLsxf>1</AdsLsxf>
+ <RvctClst>0</RvctClst>
+ <GenPPlst>0</GenPPlst>
+ <AdsCpuType>ARM926EJ-S</AdsCpuType>
+ <RvctDeviceName />
+ <mOS>0</mOS>
+ <uocRom>0</uocRom>
+ <uocRam>0</uocRam>
+ <hadIROM>1</hadIROM>
+ <hadIRAM>1</hadIRAM>
+ <hadXRAM>0</hadXRAM>
+ <uocXRam>0</uocXRam>
+ <RvdsVP>0</RvdsVP>
+ <hadIRAM2>1</hadIRAM2>
+ <hadIROM2>0</hadIROM2>
+ <StupSel>8</StupSel>
+ <useUlib>0</useUlib>
+ <EndSel>0</EndSel>
+ <uLtcg>0</uLtcg>
+ <RoSelD>3</RoSelD>
+ <RwSelD>3</RwSelD>
+ <CodeSel>0</CodeSel>
+ <OptFeed>0</OptFeed>
+ <NoZi1>0</NoZi1>
+ <NoZi2>0</NoZi2>
+ <NoZi3>0</NoZi3>
+ <NoZi4>0</NoZi4>
+ <NoZi5>0</NoZi5>
+ <Ro1Chk>1</Ro1Chk>
+ <Ro2Chk>0</Ro2Chk>
+ <Ro3Chk>0</Ro3Chk>
+ <Ir1Chk>0</Ir1Chk>
+ <Ir2Chk>0</Ir2Chk>
+ <Ra1Chk>1</Ra1Chk>
+ <Ra2Chk>0</Ra2Chk>
+ <Ra3Chk>0</Ra3Chk>
+ <Im1Chk>0</Im1Chk>
+ <Im2Chk>0</Im2Chk>
+ <OnChipMemories>
+ <Ocm1>
+ <Type>0</Type>
+ <StartAddress>0x0</StartAddress>
+ <Size>0x0</Size>
+ </Ocm1>
+ <Ocm2>
+ <Type>0</Type>
+ <StartAddress>0x0</StartAddress>
+ <Size>0x0</Size>
+ </Ocm2>
+ <Ocm3>
+ <Type>0</Type>
+ <StartAddress>0x0</StartAddress>
+ <Size>0x0</Size>
+ </Ocm3>
+ <Ocm4>
+ <Type>0</Type>
+ <StartAddress>0x0</StartAddress>
+ <Size>0x0</Size>
+ </Ocm4>
+ <Ocm5>
+ <Type>0</Type>
+ <StartAddress>0x0</StartAddress>
+ <Size>0x0</Size>
+ </Ocm5>
+ <Ocm6>
+ <Type>0</Type>
+ <StartAddress>0x0</StartAddress>
+ <Size>0x0</Size>
+ </Ocm6>
+ <IRAM>
+ <Type>0</Type>
+ <StartAddress>0x200000</StartAddress>
+ <Size>0x1000</Size>
+ </IRAM>
+ <IROM>
+ <Type>1</Type>
+ <StartAddress>0x100000</StartAddress>
+ <Size>0x8000</Size>
+ </IROM>
+ <XRAM>
+ <Type>0</Type>
+ <StartAddress>0x0</StartAddress>
+ <Size>0x0</Size>
+ </XRAM>
+ <OCR_RVCT1>
+ <Type>1</Type>
+ <StartAddress>0x20000000</StartAddress>
+ <Size>0x800000</Size>
+ </OCR_RVCT1>
+ <OCR_RVCT2>
+ <Type>1</Type>
+ <StartAddress>0x0</StartAddress>
+ <Size>0x0</Size>
+ </OCR_RVCT2>
+ <OCR_RVCT3>
+ <Type>1</Type>
+ <StartAddress>0x0</StartAddress>
+ <Size>0x0</Size>
+ </OCR_RVCT3>
+ <OCR_RVCT4>
+ <Type>1</Type>
+ <StartAddress>0x100000</StartAddress>
+ <Size>0x8000</Size>
+ </OCR_RVCT4>
+ <OCR_RVCT5>
+ <Type>1</Type>
+ <StartAddress>0x0</StartAddress>
+ <Size>0x0</Size>
+ </OCR_RVCT5>
+ <OCR_RVCT6>
+ <Type>0</Type>
+ <StartAddress>0x20800000</StartAddress>
+ <Size>0x1800000</Size>
+ </OCR_RVCT6>
+ <OCR_RVCT7>
+ <Type>0</Type>
+ <StartAddress>0x0</StartAddress>
+ <Size>0x0</Size>
+ </OCR_RVCT7>
+ <OCR_RVCT8>
+ <Type>0</Type>
+ <StartAddress>0x0</StartAddress>
+ <Size>0x0</Size>
+ </OCR_RVCT8>
+ <OCR_RVCT9>
+ <Type>0</Type>
+ <StartAddress>0x200000</StartAddress>
+ <Size>0x1000</Size>
+ </OCR_RVCT9>
+ <OCR_RVCT10>
+ <Type>0</Type>
+ <StartAddress>0x300000</StartAddress>
+ <Size>0x1000</Size>
+ </OCR_RVCT10>
+ </OnChipMemories>
+ <RvctStartVector />
+ </ArmAdsMisc>
+ <Cads>
+ <interw>1</interw>
+ <Optim>1</Optim>
+ <oTime>0</oTime>
+ <SplitLS>0</SplitLS>
+ <OneElfS>0</OneElfS>
+ <Strict>0</Strict>
+ <EnumInt>0</EnumInt>
+ <PlainCh>0</PlainCh>
+ <Ropi>0</Ropi>
+ <Rwpi>0</Rwpi>
+ <wLevel>2</wLevel>
+ <uThumb>0</uThumb>
+ <uSurpInc>0</uSurpInc>
+ <uC99>0</uC99>
+ <useXO>0</useXO>
+ <VariousControls>
+ <MiscControls />
+ <Define>RT_USING_ARM_LIBC</Define>
+ <Undefine />
+ <IncludePath>applications;.;drivers;platform;../../include;../../libcpu/arm/arm926;../../libcpu/arm/common;../../components/pthreads;../../components/libc/armlibc;../../components/drivers/include;../../components/drivers/include;../../components/drivers/include;../../components/finsh</IncludePath>
+ </VariousControls>
+ </Cads>
+ <Aads>
+ <interw>1</interw>
+ <Ropi>0</Ropi>
+ <Rwpi>0</Rwpi>
+ <thumb>0</thumb>
+ <SplitLS>0</SplitLS>
+ <SwStkChk>0</SwStkChk>
+ <NoWarn>0</NoWarn>
+ <uSurpInc>0</uSurpInc>
+ <useXO>0</useXO>
+ <VariousControls>
+ <MiscControls />
+ <Define />
+ <Undefine />
+ <IncludePath />
+ </VariousControls>
+ </Aads>
+ <LDads>
+ <umfTarg>0</umfTarg>
+ <Ropi>0</Ropi>
+ <Rwpi>0</Rwpi>
+ <noStLib>0</noStLib>
+ <RepFail>1</RepFail>
+ <useFile>0</useFile>
+ <TextAddressRange>0x20000000</TextAddressRange>
+ <DataAddressRange>0x20800000</DataAddressRange>
+ <pXoBase />
+ <ScatterFile>.\at91sam9260_ram.scat</ScatterFile>
+ <IncludeLibs />
+ <IncludeLibsPath />
+ <Misc> --keep *.o(.rti_fn.*) --keep *.o(FSymTab) --keep *.o(VSymTab) </Misc>
+ <LinkerInputFile />
+ <DisabledWarnings />
+ </LDads>
+ </TargetArmAds>
+ </TargetOption>
+ <Groups>
+ <Group>
+ <GroupName>Applications</GroupName>
+ <Files>
+ <File>
+ <FileName>application.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>applications/application.c</FilePath>
+ </File>
+ </Files>
+ <Files>
+ <File>
+ <FileName>startup.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>applications/startup.c</FilePath>
+ </File>
+ </Files>
+ </Group>
+ <Group>
+ <GroupName>Drivers</GroupName>
+ <Files>
+ <File>
+ <FileName>board.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>drivers/board.c</FilePath>
+ </File>
+ </Files>
+ <Files>
+ <File>
+ <FileName>usart.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>drivers/usart.c</FilePath>
+ </File>
+ </Files>
+ <Files>
+ <File>
+ <FileName>led.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>drivers/led.c</FilePath>
+ </File>
+ </Files>
+ </Group>
+ <Group>
+ <GroupName>platform</GroupName>
+ <Files>
+ <File>
+ <FileName>gpio.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>platform/gpio.c</FilePath>
+ </File>
+ </Files>
+ <Files>
+ <File>
+ <FileName>interrupt.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>platform/interrupt.c</FilePath>
+ </File>
+ </Files>
+ <Files>
+ <File>
+ <FileName>reset.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>platform/reset.c</FilePath>
+ </File>
+ </Files>
+ <Files>
+ <File>
+ <FileName>rt_low_level_init.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>platform/rt_low_level_init.c</FilePath>
+ </File>
+ </Files>
+ <Files>
+ <File>
+ <FileName>system_clock.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>platform/system_clock.c</FilePath>
+ </File>
+ </Files>
+ <Files>
+ <File>
+ <FileName>timer0.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>platform/timer0.c</FilePath>
+ </File>
+ </Files>
+ <Files>
+ <File>
+ <FileName>uart.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>platform/uart.c</FilePath>
+ </File>
+ </Files>
+ </Group>
+ <Group>
+ <GroupName>Kernel</GroupName>
+ <Files>
+ <File>
+ <FileName>clock.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../../src/clock.c</FilePath>
+ </File>
+ </Files>
+ <Files>
+ <File>
+ <FileName>components.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../../src/components.c</FilePath>
+ </File>
+ </Files>
+ <Files>
+ <File>
+ <FileName>device.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../../src/device.c</FilePath>
+ </File>
+ </Files>
+ <Files>
+ <File>
+ <FileName>idle.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../../src/idle.c</FilePath>
+ </File>
+ </Files>
+ <Files>
+ <File>
+ <FileName>ipc.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../../src/ipc.c</FilePath>
+ </File>
+ </Files>
+ <Files>
+ <File>
+ <FileName>irq.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../../src/irq.c</FilePath>
+ </File>
+ </Files>
+ <Files>
+ <File>
+ <FileName>kservice.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../../src/kservice.c</FilePath>
+ </File>
+ </Files>
+ <Files>
+ <File>
+ <FileName>mempool.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../../src/mempool.c</FilePath>
+ </File>
+ </Files>
+ <Files>
+ <File>
+ <FileName>object.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../../src/object.c</FilePath>
+ </File>
+ </Files>
+ <Files>
+ <File>
+ <FileName>scheduler.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../../src/scheduler.c</FilePath>
+ </File>
+ </Files>
+ <Files>
+ <File>
+ <FileName>slab.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../../src/slab.c</FilePath>
+ </File>
+ </Files>
+ <Files>
+ <File>
+ <FileName>thread.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../../src/thread.c</FilePath>
+ </File>
+ </Files>
+ <Files>
+ <File>
+ <FileName>timer.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../../src/timer.c</FilePath>
+ </File>
+ </Files>
+ </Group>
+ <Group>
+ <GroupName>ARM926</GroupName>
+ <Files>
+ <File>
+ <FileName>cpuport.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../../libcpu/arm/arm926/cpuport.c</FilePath>
+ </File>
+ </Files>
+ <Files>
+ <File>
+ <FileName>mmu.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../../libcpu/arm/arm926/mmu.c</FilePath>
+ </File>
+ </Files>
+ <Files>
+ <File>
+ <FileName>stack.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../../libcpu/arm/arm926/stack.c</FilePath>
+ </File>
+ </Files>
+ <Files>
+ <File>
+ <FileName>trap.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../../libcpu/arm/arm926/trap.c</FilePath>
+ </File>
+ </Files>
+ <Files>
+ <File>
+ <FileName>context_rvds.S</FileName>
+ <FileType>2</FileType>
+ <FilePath>../../libcpu/arm/arm926/context_rvds.S</FilePath>
+ </File>
+ </Files>
+ <Files>
+ <File>
+ <FileName>start_rvds.S</FileName>
+ <FileType>2</FileType>
+ <FilePath>../../libcpu/arm/arm926/start_rvds.S</FilePath>
+ </File>
+ </Files>
+ <Files>
+ <File>
+ <FileName>backtrace.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../../libcpu/arm/common/backtrace.c</FilePath>
+ </File>
+ </Files>
+ <Files>
+ <File>
+ <FileName>div0.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../../libcpu/arm/common/div0.c</FilePath>
+ </File>
+ </Files>
+ <Files>
+ <File>
+ <FileName>showmem.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../../libcpu/arm/common/showmem.c</FilePath>
+ </File>
+ </Files>
+ </Group>
+ <Group>
+ <GroupName>pthreads</GroupName>
+ <Files>
+ <File>
+ <FileName>clock_time.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../../components/pthreads/clock_time.c</FilePath>
+ </File>
+ </Files>
+ <Files>
+ <File>
+ <FileName>mqueue.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../../components/pthreads/mqueue.c</FilePath>
+ </File>
+ </Files>
+ <Files>
+ <File>
+ <FileName>pthread.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../../components/pthreads/pthread.c</FilePath>
+ </File>
+ </Files>
+ <Files>
+ <File>
+ <FileName>pthread_attr.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../../components/pthreads/pthread_attr.c</FilePath>
+ </File>
+ </Files>
+ <Files>
+ <File>
+ <FileName>pthread_barrier.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../../components/pthreads/pthread_barrier.c</FilePath>
+ </File>
+ </Files>
+ <Files>
+ <File>
+ <FileName>pthread_cond.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../../components/pthreads/pthread_cond.c</FilePath>
+ </File>
+ </Files>
+ <Files>
+ <File>
+ <FileName>pthread_mutex.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../../components/pthreads/pthread_mutex.c</FilePath>
+ </File>
+ </Files>
+ <Files>
+ <File>
+ <FileName>pthread_rwlock.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../../components/pthreads/pthread_rwlock.c</FilePath>
+ </File>
+ </Files>
+ <Files>
+ <File>
+ <FileName>pthread_spin.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../../components/pthreads/pthread_spin.c</FilePath>
+ </File>
+ </Files>
+ <Files>
+ <File>
+ <FileName>pthread_tls.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../../components/pthreads/pthread_tls.c</FilePath>
+ </File>
+ </Files>
+ <Files>
+ <File>
+ <FileName>sched.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../../components/pthreads/sched.c</FilePath>
+ </File>
+ </Files>
+ <Files>
+ <File>
+ <FileName>semaphore.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../../components/pthreads/semaphore.c</FilePath>
+ </File>
+ </Files>
+ </Group>
+ <Group>
+ <GroupName>libc</GroupName>
+ <Files>
+ <File>
+ <FileName>mem_std.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../../components/libc/armlibc/mem_std.c</FilePath>
+ </File>
+ </Files>
+ <Files>
+ <File>
+ <FileName>stubs.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../../components/libc/armlibc/stubs.c</FilePath>
+ </File>
+ </Files>
+ </Group>
+ <Group>
+ <GroupName>DeviceDrivers</GroupName>
+ <Files>
+ <File>
+ <FileName>serial.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../../components/drivers/serial/serial.c</FilePath>
+ </File>
+ </Files>
+ <Files>
+ <File>
+ <FileName>i2c_core.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../../components/drivers/i2c/i2c_core.c</FilePath>
+ </File>
+ </Files>
+ <Files>
+ <File>
+ <FileName>i2c_dev.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../../components/drivers/i2c/i2c_dev.c</FilePath>
+ </File>
+ </Files>
+ <Files>
+ <File>
+ <FileName>i2c-bit-ops.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../../components/drivers/i2c/i2c-bit-ops.c</FilePath>
+ </File>
+ </Files>
+ <Files>
+ <File>
+ <FileName>completion.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../../components/drivers/src/completion.c</FilePath>
+ </File>
+ </Files>
+ <Files>
+ <File>
+ <FileName>dataqueue.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../../components/drivers/src/dataqueue.c</FilePath>
+ </File>
+ </Files>
+ <Files>
+ <File>
+ <FileName>pipe.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../../components/drivers/src/pipe.c</FilePath>
+ </File>
+ </Files>
+ <Files>
+ <File>
+ <FileName>portal.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../../components/drivers/src/portal.c</FilePath>
+ </File>
+ </Files>
+ <Files>
+ <File>
+ <FileName>ringbuffer.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../../components/drivers/src/ringbuffer.c</FilePath>
+ </File>
+ </Files>
+ <Files>
+ <File>
+ <FileName>workqueue.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../../components/drivers/src/workqueue.c</FilePath>
+ </File>
+ </Files>
+ </Group>
+ <Group>
+ <GroupName>finsh</GroupName>
+ <Files>
+ <File>
+ <FileName>shell.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../../components/finsh/shell.c</FilePath>
+ </File>
+ </Files>
+ <Files>
+ <File>
+ <FileName>symbol.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../../components/finsh/symbol.c</FilePath>
+ </File>
+ </Files>
+ <Files>
+ <File>
+ <FileName>cmd.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../../components/finsh/cmd.c</FilePath>
+ </File>
+ </Files>
+ <Files>
+ <File>
+ <FileName>finsh_compiler.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../../components/finsh/finsh_compiler.c</FilePath>
+ </File>
+ </Files>
+ <Files>
+ <File>
+ <FileName>finsh_error.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../../components/finsh/finsh_error.c</FilePath>
+ </File>
+ </Files>
+ <Files>
+ <File>
+ <FileName>finsh_heap.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../../components/finsh/finsh_heap.c</FilePath>
+ </File>
+ </Files>
+ <Files>
+ <File>
+ <FileName>finsh_init.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../../components/finsh/finsh_init.c</FilePath>
+ </File>
+ </Files>
+ <Files>
+ <File>
+ <FileName>finsh_node.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../../components/finsh/finsh_node.c</FilePath>
+ </File>
+ </Files>
+ <Files>
+ <File>
+ <FileName>finsh_ops.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../../components/finsh/finsh_ops.c</FilePath>
+ </File>
+ </Files>
+ <Files>
+ <File>
+ <FileName>finsh_parser.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../../components/finsh/finsh_parser.c</FilePath>
+ </File>
+ </Files>
+ <Files>
+ <File>
+ <FileName>finsh_var.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../../components/finsh/finsh_var.c</FilePath>
+ </File>
+ </Files>
+ <Files>
+ <File>
+ <FileName>finsh_vm.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../../components/finsh/finsh_vm.c</FilePath>
+ </File>
+ </Files>
+ <Files>
+ <File>
+ <FileName>finsh_token.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../../components/finsh/finsh_token.c</FilePath>
+ </File>
+ </Files>
+ </Group>
+ </Groups>
+ </Target>
+ </Targets>
+</Project>
diff --git a/bsp/frdm-k64f/project.uvproj b/bsp/frdm-k64f/project.uvproj
index dad542e65d..c9ccb80717 100644
--- a/bsp/frdm-k64f/project.uvproj
+++ b/bsp/frdm-k64f/project.uvproj
@@ -354,7 +354,7 @@
<MiscControls />
<Define />
<Undefine />
- <IncludePath>.;..\..\components\drivers\include;..\..\components\finsh;..\..\include;..\..\libcpu\arm\common;..\..\libcpu\arm\cortex-m4;applications;board;device;device\MK64F12</IncludePath>
+ <IncludePath>board;applications;.;device;device/MK64F12;../../include;../../libcpu/arm/cortex-m4;../../libcpu/arm/common;../../components/drivers/include;../../components/drivers/include;../../components/finsh</IncludePath>
</VariousControls>
</Cads>
<Aads>
@@ -385,7 +385,7 @@
<ScatterFile />
<IncludeLibs />
<IncludeLibsPath />
- <Misc> --keep __fsym_* --keep __vsym_* </Misc>
+ <Misc> --keep *.o(FSymTab) --keep *.o(VSymTab) </Misc>
<LinkerInputFile />
<DisabledWarnings />
</LDads>
@@ -393,43 +393,43 @@
</TargetOption>
<Groups>
<Group>
- <GroupName>Applications</GroupName>
+ <GroupName>Board</GroupName>
<Files>
<File>
- <FileName>application.c</FileName>
+ <FileName>board.c</FileName>
<FileType>1</FileType>
- <FilePath>applications\application.c</FilePath>
+ <FilePath>board/board.c</FilePath>
</File>
</Files>
<Files>
<File>
- <FileName>startup.c</FileName>
+ <FileName>drv_uart.c</FileName>
<FileType>1</FileType>
- <FilePath>applications\startup.c</FilePath>
+ <FilePath>board/drv_uart.c</FilePath>
</File>
</Files>
- </Group>
- <Group>
- <GroupName>Board</GroupName>
<Files>
<File>
- <FileName>board.c</FileName>
+ <FileName>led.c</FileName>
<FileType>1</FileType>
- <FilePath>board\board.c</FilePath>
+ <FilePath>board/led.c</FilePath>
</File>
</Files>
+ </Group>
+ <Group>
+ <GroupName>Applications</GroupName>
<Files>
<File>
- <FileName>drv_uart.c</FileName>
+ <FileName>application.c</FileName>
<FileType>1</FileType>
- <FilePath>board\drv_uart.c</FilePath>
+ <FilePath>applications/application.c</FilePath>
</File>
</Files>
<Files>
<File>
- <FileName>led.c</FileName>
+ <FileName>startup.c</FileName>
<FileType>1</FileType>
- <FilePath>board\led.c</FilePath>
+ <FilePath>applications/startup.c</FilePath>
</File>
</Files>
</Group>
@@ -439,14 +439,14 @@
<File>
<FileName>system_MK64F12.c</FileName>
<FileType>1</FileType>
- <FilePath>device\MK64F12\system_MK64F12.c</FilePath>
+ <FilePath>device/MK64F12/system_MK64F12.c</FilePath>
</File>
</Files>
<Files>
<File>
<FileName>startup_MK64F12.s</FileName>
<FileType>2</FileType>
- <FilePath>device\TOOLCHAIN_ARM_STD\startup_MK64F12.s</FilePath>
+ <FilePath>device/TOOLCHAIN_ARM_STD/startup_MK64F12.s</FilePath>
</File>
</Files>
</Group>
@@ -456,84 +456,91 @@
<File>
<FileName>clock.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\src\clock.c</FilePath>
+ <FilePath>../../src/clock.c</FilePath>
+ </File>
+ </Files>
+ <Files>
+ <File>
+ <FileName>components.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../../src/components.c</FilePath>
</File>
</Files>
<Files>
<File>
<FileName>device.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\src\device.c</FilePath>
+ <FilePath>../../src/device.c</FilePath>
</File>
</Files>
<Files>
<File>
<FileName>idle.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\src\idle.c</FilePath>
+ <FilePath>../../src/idle.c</FilePath>
</File>
</Files>
<Files>
<File>
<FileName>ipc.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\src\ipc.c</FilePath>
+ <FilePath>../../src/ipc.c</FilePath>
</File>
</Files>
<Files>
<File>
<FileName>irq.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\src\irq.c</FilePath>
+ <FilePath>../../src/irq.c</FilePath>
</File>
</Files>
<Files>
<File>
<FileName>kservice.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\src\kservice.c</FilePath>
+ <FilePath>../../src/kservice.c</FilePath>
</File>
</Files>
<Files>
<File>
<FileName>mem.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\src\mem.c</FilePath>
+ <FilePath>../../src/mem.c</FilePath>
</File>
</Files>
<Files>
<File>
<FileName>mempool.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\src\mempool.c</FilePath>
+ <FilePath>../../src/mempool.c</FilePath>
</File>
</Files>
<Files>
<File>
<FileName>object.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\src\object.c</FilePath>
+ <FilePath>../../src/object.c</FilePath>
</File>
</Files>
<Files>
<File>
<FileName>scheduler.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\src\scheduler.c</FilePath>
+ <FilePath>../../src/scheduler.c</FilePath>
</File>
</Files>
<Files>
<File>
<FileName>thread.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\src\thread.c</FilePath>
+ <FilePath>../../src/thread.c</FilePath>
</File>
</Files>
<Files>
<File>
<FileName>timer.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\src\timer.c</FilePath>
+ <FilePath>../../src/timer.c</FilePath>
</File>
</Files>
</Group>
@@ -543,35 +550,35 @@
<File>
<FileName>cpuport.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\libcpu\arm\cortex-m4\cpuport.c</FilePath>
+ <FilePath>../../libcpu/arm/cortex-m4/cpuport.c</FilePath>
</File>
</Files>
<Files>
<File>
<FileName>context_rvds.S</FileName>
<FileType>2</FileType>
- <FilePath>..\..\libcpu\arm\cortex-m4\context_rvds.S</FilePath>
+ <FilePath>../../libcpu/arm/cortex-m4/context_rvds.S</FilePath>
</File>
</Files>
<Files>
<File>
<FileName>backtrace.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\libcpu\arm\common\backtrace.c</FilePath>
+ <FilePath>../../libcpu/arm/common/backtrace.c</FilePath>
</File>
</Files>
<Files>
<File>
<FileName>div0.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\libcpu\arm\common\div0.c</FilePath>
+ <FilePath>../../libcpu/arm/common/div0.c</FilePath>
</File>
</Files>
<Files>
<File>
<FileName>showmem.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\libcpu\arm\common\showmem.c</FilePath>
+ <FilePath>../../libcpu/arm/common/showmem.c</FilePath>
</File>
</Files>
</Group>
@@ -581,42 +588,49 @@
<File>
<FileName>serial.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\components\drivers\serial\serial.c</FilePath>
+ <FilePath>../../components/drivers/serial/serial.c</FilePath>
</File>
</Files>
<Files>
<File>
<FileName>completion.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\components\drivers\src\completion.c</FilePath>
+ <FilePath>../../components/drivers/src/completion.c</FilePath>
</File>
</Files>
<Files>
<File>
<FileName>dataqueue.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\components\drivers\src\dataqueue.c</FilePath>
+ <FilePath>../../components/drivers/src/dataqueue.c</FilePath>
</File>
</Files>
<Files>
<File>
<FileName>pipe.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\components\drivers\src\pipe.c</FilePath>
+ <FilePath>../../components/drivers/src/pipe.c</FilePath>
</File>
</Files>
<Files>
<File>
<FileName>portal.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\components\drivers\src\portal.c</FilePath>
+ <FilePath>../../components/drivers/src/portal.c</FilePath>
</File>
</Files>
<Files>
<File>
<FileName>ringbuffer.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\components\drivers\src\ringbuffer.c</FilePath>
+ <FilePath>../../components/drivers/src/ringbuffer.c</FilePath>
+ </File>
+ </Files>
+ <Files>
+ <File>
+ <FileName>workqueue.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../../components/drivers/src/workqueue.c</FilePath>
</File>
</Files>
</Group>
@@ -626,91 +640,91 @@
<File>
<FileName>shell.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\components\finsh\shell.c</FilePath>
+ <FilePath>../../components/finsh/shell.c</FilePath>
</File>
</Files>
<Files>
<File>
<FileName>symbol.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\components\finsh\symbol.c</FilePath>
+ <FilePath>../../components/finsh/symbol.c</FilePath>
</File>
</Files>
<Files>
<File>
<FileName>cmd.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\components\finsh\cmd.c</FilePath>
+ <FilePath>../../components/finsh/cmd.c</FilePath>
</File>
</Files>
<Files>
<File>
<FileName>finsh_compiler.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\components\finsh\finsh_compiler.c</FilePath>
+ <FilePath>../../components/finsh/finsh_compiler.c</FilePath>
</File>
</Files>
<Files>
<File>
<FileName>finsh_error.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\components\finsh\finsh_error.c</FilePath>
+ <FilePath>../../components/finsh/finsh_error.c</FilePath>
</File>
</Files>
<Files>
<File>
<FileName>finsh_heap.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\components\finsh\finsh_heap.c</FilePath>
+ <FilePath>../../components/finsh/finsh_heap.c</FilePath>
</File>
</Files>
<Files>
<File>
<FileName>finsh_init.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\components\finsh\finsh_init.c</FilePath>
+ <FilePath>../../components/finsh/finsh_init.c</FilePath>
</File>
</Files>
<Files>
<File>
<FileName>finsh_node.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\components\finsh\finsh_node.c</FilePath>
+ <FilePath>../../components/finsh/finsh_node.c</FilePath>
</File>
</Files>
<Files>
<File>
<FileName>finsh_ops.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\components\finsh\finsh_ops.c</FilePath>
+ <FilePath>../../components/finsh/finsh_ops.c</FilePath>
</File>
</Files>
<Files>
<File>
<FileName>finsh_parser.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\components\finsh\finsh_parser.c</FilePath>
+ <FilePath>../../components/finsh/finsh_parser.c</FilePath>
</File>
</Files>
<Files>
<File>
<FileName>finsh_var.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\components\finsh\finsh_var.c</FilePath>
+ <FilePath>../../components/finsh/finsh_var.c</FilePath>
</File>
</Files>
<Files>
<File>
<FileName>finsh_vm.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\components\finsh\finsh_vm.c</FilePath>
+ <FilePath>../../components/finsh/finsh_vm.c</FilePath>
</File>
</Files>
<Files>
<File>
<FileName>finsh_token.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\components\finsh\finsh_token.c</FilePath>
+ <FilePath>../../components/finsh/finsh_token.c</FilePath>
</File>
</Files>
</Group>
diff --git a/bsp/lm4f232/project.uvproj b/bsp/lm4f232/project.uvproj
index 32700d1ba6..db6efd334d 100644
--- a/bsp/lm4f232/project.uvproj
+++ b/bsp/lm4f232/project.uvproj
@@ -343,7 +343,7 @@
<MiscControls />
<Define>PART_LM4F232H5QD</Define>
<Undefine />
- <IncludePath>.;..\..\components\finsh;..\..\include;..\..\libcpu\arm\common;..\..\libcpu\arm\cortex-m4;Libraries;applications;drivers</IncludePath>
+ <IncludePath>Libraries;applications;.;drivers;../../include;../../libcpu/arm/cortex-m4;../../libcpu/arm/common;../../components/finsh</IncludePath>
</VariousControls>
</Cads>
<Aads>
@@ -373,7 +373,7 @@
<ScatterFile />
<IncludeLibs />
<IncludeLibsPath />
- <Misc> --keep __fsym_* --keep __vsym_* </Misc>
+ <Misc> --keep *.o(FSymTab) --keep *.o(VSymTab) </Misc>
<LinkerInputFile />
<DisabledWarnings />
</LDads>
@@ -381,249 +381,249 @@
</TargetOption>
<Groups>
<Group>
- <GroupName>Applications</GroupName>
- <Files>
- <File>
- <FileName>application.c</FileName>
- <FileType>1</FileType>
- <FilePath>applications\application.c</FilePath>
- </File>
- </Files>
- <Files>
- <File>
- <FileName>startup.c</FileName>
- <FileType>1</FileType>
- <FilePath>applications\startup.c</FilePath>
- </File>
- </Files>
- </Group>
- <Group>
- <GroupName>Drivers</GroupName>
- <Files>
- <File>
- <FileName>board.c</FileName>
- <FileType>1</FileType>
- <FilePath>drivers\board.c</FilePath>
- </File>
- </Files>
- <Files>
- <File>
- <FileName>serial.c</FileName>
- <FileType>1</FileType>
- <FilePath>drivers\serial.c</FilePath>
- </File>
- </Files>
- </Group>
- <Group>
<GroupName>Libraries</GroupName>
<Files>
<File>
<FileName>adc.c</FileName>
<FileType>1</FileType>
- <FilePath>Libraries\driverlib\adc.c</FilePath>
+ <FilePath>Libraries/driverlib/adc.c</FilePath>
</File>
</Files>
<Files>
<File>
<FileName>can.c</FileName>
<FileType>1</FileType>
- <FilePath>Libraries\driverlib\can.c</FilePath>
+ <FilePath>Libraries/driverlib/can.c</FilePath>
</File>
</Files>
<Files>
<File>
<FileName>comp.c</FileName>
<FileType>1</FileType>
- <FilePath>Libraries\driverlib\comp.c</FilePath>
+ <FilePath>Libraries/driverlib/comp.c</FilePath>
</File>
</Files>
<Files>
<File>
<FileName>cpu.c</FileName>
<FileType>1</FileType>
- <FilePath>Libraries\driverlib\cpu.c</FilePath>
+ <FilePath>Libraries/driverlib/cpu.c</FilePath>
</File>
</Files>
<Files>
<File>
<FileName>eeprom.c</FileName>
<FileType>1</FileType>
- <FilePath>Libraries\driverlib\eeprom.c</FilePath>
+ <FilePath>Libraries/driverlib/eeprom.c</FilePath>
</File>
</Files>
<Files>
<File>
<FileName>epi.c</FileName>
<FileType>1</FileType>
- <FilePath>Libraries\driverlib\epi.c</FilePath>
+ <FilePath>Libraries/driverlib/epi.c</FilePath>
</File>
</Files>
<Files>
<File>
<FileName>ethernet.c</FileName>
<FileType>1</FileType>
- <FilePath>Libraries\driverlib\ethernet.c</FilePath>
+ <FilePath>Libraries/driverlib/ethernet.c</FilePath>
</File>
</Files>
<Files>
<File>
<FileName>fan.c</FileName>
<FileType>1</FileType>
- <FilePath>Libraries\driverlib\fan.c</FilePath>
+ <FilePath>Libraries/driverlib/fan.c</FilePath>
</File>
</Files>
<Files>
<File>
<FileName>flash.c</FileName>
<FileType>1</FileType>
- <FilePath>Libraries\driverlib\flash.c</FilePath>
+ <FilePath>Libraries/driverlib/flash.c</FilePath>
</File>
</Files>
<Files>
<File>
<FileName>fpu.c</FileName>
<FileType>1</FileType>
- <FilePath>Libraries\driverlib\fpu.c</FilePath>
+ <FilePath>Libraries/driverlib/fpu.c</FilePath>
</File>
</Files>
<Files>
<File>
<FileName>gpio.c</FileName>
<FileType>1</FileType>
- <FilePath>Libraries\driverlib\gpio.c</FilePath>
+ <FilePath>Libraries/driverlib/gpio.c</FilePath>
</File>
</Files>
<Files>
<File>
<FileName>hibernate.c</FileName>
<FileType>1</FileType>
- <FilePath>Libraries\driverlib\hibernate.c</FilePath>
+ <FilePath>Libraries/driverlib/hibernate.c</FilePath>
</File>
</Files>
<Files>
<File>
<FileName>i2c.c</FileName>
<FileType>1</FileType>
- <FilePath>Libraries\driverlib\i2c.c</FilePath>
+ <FilePath>Libraries/driverlib/i2c.c</FilePath>
</File>
</Files>
<Files>
<File>
<FileName>i2s.c</FileName>
<FileType>1</FileType>
- <FilePath>Libraries\driverlib\i2s.c</FilePath>
+ <FilePath>Libraries/driverlib/i2s.c</FilePath>
</File>
</Files>
<Files>
<File>
<FileName>interrupt.c</FileName>
<FileType>1</FileType>
- <FilePath>Libraries\driverlib\interrupt.c</FilePath>
+ <FilePath>Libraries/driverlib/interrupt.c</FilePath>
</File>
</Files>
<Files>
<File>
<FileName>lpc.c</FileName>
<FileType>1</FileType>
- <FilePath>Libraries\driverlib\lpc.c</FilePath>
+ <FilePath>Libraries/driverlib/lpc.c</FilePath>
</File>
</Files>
<Files>
<File>
<FileName>mpu.c</FileName>
<FileType>1</FileType>
- <FilePath>Libraries\driverlib\mpu.c</FilePath>
+ <FilePath>Libraries/driverlib/mpu.c</FilePath>
</File>
</Files>
<Files>
<File>
<FileName>peci.c</FileName>
<FileType>1</FileType>
- <FilePath>Libraries\driverlib\peci.c</FilePath>
+ <FilePath>Libraries/driverlib/peci.c</FilePath>
</File>
</Files>
<Files>
<File>
<FileName>pwm.c</FileName>
<FileType>1</FileType>
- <FilePath>Libraries\driverlib\pwm.c</FilePath>
+ <FilePath>Libraries/driverlib/pwm.c</FilePath>
</File>
</Files>
<Files>
<File>
<FileName>qei.c</FileName>
<FileType>1</FileType>
- <FilePath>Libraries\driverlib\qei.c</FilePath>
+ <FilePath>Libraries/driverlib/qei.c</FilePath>
</File>
</Files>
<Files>
<File>
<FileName>ssi.c</FileName>
<FileType>1</FileType>
- <FilePath>Libraries\driverlib\ssi.c</FilePath>
+ <FilePath>Libraries/driverlib/ssi.c</FilePath>
</File>
</Files>
<Files>
<File>
<FileName>sysctl.c</FileName>
<FileType>1</FileType>
- <FilePath>Libraries\driverlib\sysctl.c</FilePath>
+ <FilePath>Libraries/driverlib/sysctl.c</FilePath>
</File>
</Files>
<Files>
<File>
<FileName>sysexc.c</FileName>
<FileType>1</FileType>
- <FilePath>Libraries\driverlib\sysexc.c</FilePath>
+ <FilePath>Libraries/driverlib/sysexc.c</FilePath>
</File>
</Files>
<Files>
<File>
<FileName>systick.c</FileName>
<FileType>1</FileType>
- <FilePath>Libraries\driverlib\systick.c</FilePath>
+ <FilePath>Libraries/driverlib/systick.c</FilePath>
</File>
</Files>
<Files>
<File>
<FileName>timer.c</FileName>
<FileType>1</FileType>
- <FilePath>Libraries\driverlib\timer.c</FilePath>
+ <FilePath>Libraries/driverlib/timer.c</FilePath>
</File>
</Files>
<Files>
<File>
<FileName>uart.c</FileName>
<FileType>1</FileType>
- <FilePath>Libraries\driverlib\uart.c</FilePath>
+ <FilePath>Libraries/driverlib/uart.c</FilePath>
</File>
</Files>
<Files>
<File>
<FileName>udma.c</FileName>
<FileType>1</FileType>
- <FilePath>Libraries\driverlib\udma.c</FilePath>
+ <FilePath>Libraries/driverlib/udma.c</FilePath>
</File>
</Files>
<Files>
<File>
<FileName>usb.c</FileName>
<FileType>1</FileType>
- <FilePath>Libraries\driverlib\usb.c</FilePath>
+ <FilePath>Libraries/driverlib/usb.c</FilePath>
</File>
</Files>
<Files>
<File>
<FileName>watchdog.c</FileName>
<FileType>1</FileType>
- <FilePath>Libraries\driverlib\watchdog.c</FilePath>
+ <FilePath>Libraries/driverlib/watchdog.c</FilePath>
</File>
</Files>
<Files>
<File>
<FileName>start_rvds.S</FileName>
<FileType>2</FileType>
- <FilePath>Libraries\startup\arm\start_rvds.S</FilePath>
+ <FilePath>Libraries/startup/arm/start_rvds.S</FilePath>
+ </File>
+ </Files>
+ </Group>
+ <Group>
+ <GroupName>Applications</GroupName>
+ <Files>
+ <File>
+ <FileName>application.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>applications/application.c</FilePath>
+ </File>
+ </Files>
+ <Files>
+ <File>
+ <FileName>startup.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>applications/startup.c</FilePath>
+ </File>
+ </Files>
+ </Group>
+ <Group>
+ <GroupName>Drivers</GroupName>
+ <Files>
+ <File>
+ <FileName>board.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>drivers/board.c</FilePath>
+ </File>
+ </Files>
+ <Files>
+ <File>
+ <FileName>serial.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>drivers/serial.c</FilePath>
</File>
</Files>
</Group>
@@ -633,91 +633,91 @@
<File>
<FileName>clock.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\src\clock.c</FilePath>
+ <FilePath>../../src/clock.c</FilePath>
+ </File>
+ </Files>
+ <Files>
+ <File>
+ <FileName>components.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../../src/components.c</FilePath>
</File>
</Files>
<Files>
<File>
<FileName>device.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\src\device.c</FilePath>
+ <FilePath>../../src/device.c</FilePath>
</File>
</Files>
<Files>
<File>
<FileName>idle.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\src\idle.c</FilePath>
+ <FilePath>../../src/idle.c</FilePath>
</File>
</Files>
<Files>
<File>
<FileName>ipc.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\src\ipc.c</FilePath>
+ <FilePath>../../src/ipc.c</FilePath>
</File>
</Files>
<Files>
<File>
<FileName>irq.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\src\irq.c</FilePath>
+ <FilePath>../../src/irq.c</FilePath>
</File>
</Files>
<Files>
<File>
<FileName>kservice.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\src\kservice.c</FilePath>
+ <FilePath>../../src/kservice.c</FilePath>
</File>
</Files>
<Files>
<File>
<FileName>mem.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\src\mem.c</FilePath>
- </File>
- </Files>
- <Files>
- <File>
- <FileName>memheap.c</FileName>
- <FileType>1</FileType>
- <FilePath>..\..\src\memheap.c</FilePath>
+ <FilePath>../../src/mem.c</FilePath>
</File>
</Files>
<Files>
<File>
<FileName>mempool.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\src\mempool.c</FilePath>
+ <FilePath>../../src/mempool.c</FilePath>
</File>
</Files>
<Files>
<File>
<FileName>object.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\src\object.c</FilePath>
+ <FilePath>../../src/object.c</FilePath>
</File>
</Files>
<Files>
<File>
<FileName>scheduler.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\src\scheduler.c</FilePath>
+ <FilePath>../../src/scheduler.c</FilePath>
</File>
</Files>
<Files>
<File>
<FileName>thread.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\src\thread.c</FilePath>
+ <FilePath>../../src/thread.c</FilePath>
</File>
</Files>
<Files>
<File>
<FileName>src_timer.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\src\timer.c</FilePath>
+ <FilePath>../../src/timer.c</FilePath>
</File>
</Files>
</Group>
@@ -727,35 +727,35 @@
<File>
<FileName>cpuport.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\libcpu\arm\cortex-m4\cpuport.c</FilePath>
+ <FilePath>../../libcpu/arm/cortex-m4/cpuport.c</FilePath>
</File>
</Files>
<Files>
<File>
<FileName>context_rvds.S</FileName>
<FileType>2</FileType>
- <FilePath>..\..\libcpu\arm\cortex-m4\context_rvds.S</FilePath>
+ <FilePath>../../libcpu/arm/cortex-m4/context_rvds.S</FilePath>
</File>
</Files>
<Files>
<File>
<FileName>backtrace.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\libcpu\arm\common\backtrace.c</FilePath>
+ <FilePath>../../libcpu/arm/common/backtrace.c</FilePath>
</File>
</Files>
<Files>
<File>
<FileName>div0.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\libcpu\arm\common\div0.c</FilePath>
+ <FilePath>../../libcpu/arm/common/div0.c</FilePath>
</File>
</Files>
<Files>
<File>
<FileName>showmem.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\libcpu\arm\common\showmem.c</FilePath>
+ <FilePath>../../libcpu/arm/common/showmem.c</FilePath>
</File>
</Files>
</Group>
@@ -763,93 +763,93 @@
<GroupName>finsh</GroupName>
<Files>
<File>
- <FileName>cmd.c</FileName>
+ <FileName>shell.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\components\finsh\cmd.c</FilePath>
+ <FilePath>../../components/finsh/shell.c</FilePath>
</File>
</Files>
<Files>
<File>
- <FileName>finsh_compiler.c</FileName>
+ <FileName>symbol.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\components\finsh\finsh_compiler.c</FilePath>
+ <FilePath>../../components/finsh/symbol.c</FilePath>
</File>
</Files>
<Files>
<File>
- <FileName>finsh_error.c</FileName>
+ <FileName>cmd.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\components\finsh\finsh_error.c</FilePath>
+ <FilePath>../../components/finsh/cmd.c</FilePath>
</File>
</Files>
<Files>
<File>
- <FileName>finsh_heap.c</FileName>
+ <FileName>finsh_compiler.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\components\finsh\finsh_heap.c</FilePath>
+ <FilePath>../../components/finsh/finsh_compiler.c</FilePath>
</File>
</Files>
<Files>
<File>
- <FileName>finsh_init.c</FileName>
+ <FileName>finsh_error.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\components\finsh\finsh_init.c</FilePath>
+ <FilePath>../../components/finsh/finsh_error.c</FilePath>
</File>
</Files>
<Files>
<File>
- <FileName>finsh_node.c</FileName>
+ <FileName>finsh_heap.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\components\finsh\finsh_node.c</FilePath>
+ <FilePath>../../components/finsh/finsh_heap.c</FilePath>
</File>
</Files>
<Files>
<File>
- <FileName>finsh_ops.c</FileName>
+ <FileName>finsh_init.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\components\finsh\finsh_ops.c</FilePath>
+ <FilePath>../../components/finsh/finsh_init.c</FilePath>
</File>
</Files>
<Files>
<File>
- <FileName>finsh_parser.c</FileName>
+ <FileName>finsh_node.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\components\finsh\finsh_parser.c</FilePath>
+ <FilePath>../../components/finsh/finsh_node.c</FilePath>
</File>
</Files>
<Files>
<File>
- <FileName>finsh_token.c</FileName>
+ <FileName>finsh_ops.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\components\finsh\finsh_token.c</FilePath>
+ <FilePath>../../components/finsh/finsh_ops.c</FilePath>
</File>
</Files>
<Files>
<File>
- <FileName>finsh_var.c</FileName>
+ <FileName>finsh_parser.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\components\finsh\finsh_var.c</FilePath>
+ <FilePath>../../components/finsh/finsh_parser.c</FilePath>
</File>
</Files>
<Files>
<File>
- <FileName>finsh_vm.c</FileName>
+ <FileName>finsh_var.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\components\finsh\finsh_vm.c</FilePath>
+ <FilePath>../../components/finsh/finsh_var.c</FilePath>
</File>
</Files>
<Files>
<File>
- <FileName>shell.c</FileName>
+ <FileName>finsh_vm.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\components\finsh\shell.c</FilePath>
+ <FilePath>../../components/finsh/finsh_vm.c</FilePath>
</File>
</Files>
<Files>
<File>
- <FileName>symbol.c</FileName>
+ <FileName>finsh_token.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\components\finsh\symbol.c</FilePath>
+ <FilePath>../../components/finsh/finsh_token.c</FilePath>
</File>
</Files>
</Group>
diff --git a/bsp/lpc176x/project.uvproj b/bsp/lpc176x/project.uvproj
index f9754f3067..d7b1633680 100644
--- a/bsp/lpc176x/project.uvproj
+++ b/bsp/lpc176x/project.uvproj
@@ -1,10 +1,7 @@
<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
<Project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="project_proj.xsd">
-
<SchemaVersion>1.1</SchemaVersion>
-
<Header>### uVision Project, (C) Keil Software</Header>
-
<Targets>
<Target>
<TargetName>RT-Thread LPC17xx</TargetName>
@@ -15,25 +12,25 @@
<Device>LPC1768</Device>
<Vendor>NXP (founded by Philips)</Vendor>
<Cpu>IRAM(0x10000000-0x10007FFF) IRAM2(0x20000000-0x20007FFF) IROM(0-0x7FFFF) CLOCK(12000000) CPUTYPE("Cortex-M3")</Cpu>
- <FlashUtilSpec></FlashUtilSpec>
+ <FlashUtilSpec />
<StartupFile>"STARTUP\NXP\startup_LPC17xx.s" ("NXP LPC17xx Startup Code")</StartupFile>
<FlashDriverDll>UL2CM3(-O463 -S0 -C0 -FO7 -FD10000000 -FC800 -FN1 -FF0LPC_IAP_256 -FS00 -FL040000)</FlashDriverDll>
<DeviceId>4868</DeviceId>
<RegisterFile>LPC17xx.H</RegisterFile>
- <MemoryEnv></MemoryEnv>
- <Cmp></Cmp>
- <Asm></Asm>
- <Linker></Linker>
- <OHString></OHString>
- <InfinionOptionDll></InfinionOptionDll>
- <SLE66CMisc></SLE66CMisc>
- <SLE66AMisc></SLE66AMisc>
- <SLE66LinkerMisc></SLE66LinkerMisc>
- <SFDFile></SFDFile>
+ <MemoryEnv />
+ <Cmp />
+ <Asm />
+ <Linker />
+ <OHString />
+ <InfinionOptionDll />
+ <SLE66CMisc />
+ <SLE66AMisc />
+ <SLE66LinkerMisc />
+ <SFDFile />
<UseEnv>0</UseEnv>
- <BinPath></BinPath>
- <IncludePath></IncludePath>
- <LibPath></LibPath>
+ <BinPath />
+ <IncludePath />
+ <LibPath />
<RegisterFilePath>NXP\</RegisterFilePath>
<DBRegisterFilePath>NXP\</DBRegisterFilePath>
<TargetStatus>
@@ -57,31 +54,29 @@
<BeforeCompile>
<RunUserProg1>0</RunUserProg1>
<RunUserProg2>0</RunUserProg2>
- <UserProg1Name></UserProg1Name>
- <UserProg2Name></UserProg2Name>
+ <UserProg1Name />
+ <UserProg2Name />
<UserProg1Dos16Mode>0</UserProg1Dos16Mode>
<UserProg2Dos16Mode>0</UserProg2Dos16Mode>
- <nStopU1X>0</nStopU1X>
- <nStopU2X>0</nStopU2X>
</BeforeCompile>
<BeforeMake>
<RunUserProg1>0</RunUserProg1>
<RunUserProg2>0</RunUserProg2>
- <UserProg1Name></UserProg1Name>
- <UserProg2Name></UserProg2Name>
+ <UserProg1Name />
+ <UserProg2Name />
<UserProg1Dos16Mode>0</UserProg1Dos16Mode>
<UserProg2Dos16Mode>0</UserProg2Dos16Mode>
</BeforeMake>
<AfterMake>
<RunUserProg1>0</RunUserProg1>
<RunUserProg2>0</RunUserProg2>
- <UserProg1Name></UserProg1Name>
- <UserProg2Name></UserProg2Name>
+ <UserProg1Name />
+ <UserProg2Name />
<UserProg1Dos16Mode>0</UserProg1Dos16Mode>
<UserProg2Dos16Mode>0</UserProg2Dos16Mode>
</AfterMake>
<SelectedForBatchBuild>0</SelectedForBatchBuild>
- <SVCSIdString></SVCSIdString>
+ <SVCSIdString />
</TargetCommonOption>
<CommonProperty>
<UseCPPCompiler>0</UseCPPCompiler>
@@ -95,8 +90,8 @@
<AssembleAssemblyFile>0</AssembleAssemblyFile>
<PublicsOnly>0</PublicsOnly>
<StopOnExitCode>3</StopOnExitCode>
- <CustomArgument></CustomArgument>
- <IncludeLibraryModules></IncludeLibraryModules>
+ <CustomArgument />
+ <IncludeLibraryModules />
</CommonProperty>
<DllOption>
<SimDllName>SARMCM3.DLL</SimDllName>
@@ -117,7 +112,7 @@
<Oh166RecLen>16</Oh166RecLen>
</OPTHX>
<Simulator>
- <UseSimulator>0</UseSimulator>
+ <UseSimulator>1</UseSimulator>
<LoadApplicationAtStartup>1</LoadApplicationAtStartup>
<RunToMain>1</RunToMain>
<RestoreBreakpoints>1</RestoreBreakpoints>
@@ -128,9 +123,9 @@
<LimitSpeedToRealTime>0</LimitSpeedToRealTime>
</Simulator>
<Target>
- <UseTarget>1</UseTarget>
+ <UseTarget>0</UseTarget>
<LoadApplicationAtStartup>1</LoadApplicationAtStartup>
- <RunToMain>1</RunToMain>
+ <RunToMain>0</RunToMain>
<RestoreBreakpoints>1</RestoreBreakpoints>
<RestoreWatchpoints>1</RestoreWatchpoints>
<RestoreMemoryDisplay>1</RestoreMemoryDisplay>
@@ -138,20 +133,20 @@
<RestoreToolbox>1</RestoreToolbox>
</Target>
<RunDebugAfterBuild>0</RunDebugAfterBuild>
- <TargetSelection>7</TargetSelection>
+ <TargetSelection>5</TargetSelection>
<SimDlls>
- <CpuDll></CpuDll>
- <CpuDllArguments></CpuDllArguments>
- <PeripheralDll></PeripheralDll>
- <PeripheralDllArguments></PeripheralDllArguments>
- <InitializationFile></InitializationFile>
+ <CpuDll />
+ <CpuDllArguments />
+ <PeripheralDll />
+ <PeripheralDllArguments />
+ <InitializationFile />
</SimDlls>
<TargetDlls>
- <CpuDll></CpuDll>
- <CpuDllArguments></CpuDllArguments>
- <PeripheralDll></PeripheralDll>
- <PeripheralDllArguments></PeripheralDllArguments>
- <InitializationFile></InitializationFile>
+ <CpuDll />
+ <CpuDllArguments />
+ <PeripheralDll />
+ <PeripheralDllArguments />
+ <InitializationFile />
<Driver>Segger\JL2CM3.dll</Driver>
</TargetDlls>
</DebugOption>
@@ -166,7 +161,7 @@
</Flash1>
<Flash2>Segger\JL2CM3.dll</Flash2>
<Flash3>"" ()</Flash3>
- <Flash4></Flash4>
+ <Flash4 />
</Utilities>
<TargetArmAds>
<ArmAdsMisc>
@@ -198,7 +193,7 @@
<RvctClst>0</RvctClst>
<GenPPlst>0</GenPPlst>
<AdsCpuType>"Cortex-M3"</AdsCpuType>
- <RvctDeviceName></RvctDeviceName>
+ <RvctDeviceName />
<mOS>0</mOS>
<uocRom>0</uocRom>
<uocRam>0</uocRam>
@@ -329,7 +324,7 @@
<Size>0x8000</Size>
</OCR_RVCT10>
</OnChipMemories>
- <RvctStartVector></RvctStartVector>
+ <RvctStartVector />
</ArmAdsMisc>
<Cads>
<interw>1</interw>
@@ -345,10 +340,10 @@
<wLevel>0</wLevel>
<uThumb>0</uThumb>
<VariousControls>
- <MiscControls></MiscControls>
- <Define></Define>
- <Undefine></Undefine>
- <IncludePath>.;..\..\components\CMSIS\Include;..\..\components\finsh;..\..\components\init;..\..\components\net\lwip\src;..\..\components\net\lwip\src\arch\include;..\..\components\net\lwip\src\include;..\..\components\net\lwip\src\include\ipv4;..\..\components\net\lwip\src\include\netif;..\..\include;..\..\libcpu\arm\common;..\..\libcpu\arm\cortex-m3;CMSIS\CM3\DeviceSupport\NXP\LPC17xx;applications;drivers</IncludePath>
+ <MiscControls />
+ <Define />
+ <Undefine />
+ <IncludePath>applications;.;drivers;CMSIS/CM3/DeviceSupport/NXP/LPC17xx;../../components/CMSIS/Include;../../include;../../libcpu/arm/cortex-m3;../../libcpu/arm/common;../../components/finsh;../../components/net/lwip-1.4.1/src;../../components/net/lwip-1.4.1/src/include;../../components/net/lwip-1.4.1/src/include/ipv4;../../components/net/lwip-1.4.1/src/arch/include;../../components/net/lwip-1.4.1/src/include/netif</IncludePath>
</VariousControls>
</Cads>
<Aads>
@@ -360,10 +355,10 @@
<SwStkChk>0</SwStkChk>
<NoWarn>0</NoWarn>
<VariousControls>
- <MiscControls></MiscControls>
- <Define></Define>
- <Undefine></Undefine>
- <IncludePath></IncludePath>
+ <MiscControls />
+ <Define />
+ <Undefine />
+ <IncludePath />
</VariousControls>
</Aads>
<LDads>
@@ -375,12 +370,12 @@
<useFile>0</useFile>
<TextAddressRange>0x00000000</TextAddressRange>
<DataAddressRange>0x10000000</DataAddressRange>
- <ScatterFile></ScatterFile>
- <IncludeLibs></IncludeLibs>
- <IncludeLibsPath></IncludeLibsPath>
- <Misc> --keep __fsym_* --keep __vsym_* </Misc>
- <LinkerInputFile></LinkerInputFile>
- <DisabledWarnings></DisabledWarnings>
+ <ScatterFile />
+ <IncludeLibs />
+ <IncludeLibsPath />
+ <Misc> --keep *.o(FSymTab) --keep *.o(VSymTab) </Misc>
+ <LinkerInputFile />
+ <DisabledWarnings />
</LDads>
</TargetArmAds>
</TargetOption>
@@ -391,32 +386,21 @@
<File>
<FileName>application.c</FileName>
<FileType>1</FileType>
- <FilePath>applications\application.c</FilePath>
+ <FilePath>applications/application.c</FilePath>
</File>
+ </Files>
+ <Files>
<File>
<FileName>platform.c</FileName>
<FileType>1</FileType>
- <FilePath>applications\platform.c</FilePath>
- </File>
- <File>
- <FileName>startup.c</FileName>
- <FileType>1</FileType>
- <FilePath>applications\startup.c</FilePath>
+ <FilePath>applications/platform.c</FilePath>
</File>
</Files>
- </Group>
- <Group>
- <GroupName>CMSIS</GroupName>
<Files>
<File>
- <FileName>system_LPC17xx.c</FileName>
+ <FileName>startup.c</FileName>
<FileType>1</FileType>
- <FilePath>CMSIS\CM3\DeviceSupport\NXP\LPC17xx\system_LPC17xx.c</FilePath>
- </File>
- <File>
- <FileName>startup_LPC17xx.s</FileName>
- <FileType>2</FileType>
- <FilePath>CMSIS\CM3\DeviceSupport\NXP\LPC17xx\startup\arm\startup_LPC17xx.s</FilePath>
+ <FilePath>applications/startup.c</FilePath>
</File>
</Files>
</Group>
@@ -426,27 +410,52 @@
<File>
<FileName>board.c</FileName>
<FileType>1</FileType>
- <FilePath>drivers\board.c</FilePath>
+ <FilePath>drivers/board.c</FilePath>
</File>
+ </Files>
+ <Files>
<File>
<FileName>emac.c</FileName>
<FileType>1</FileType>
- <FilePath>drivers\emac.c</FilePath>
+ <FilePath>drivers/emac.c</FilePath>
</File>
+ </Files>
+ <Files>
<File>
<FileName>led.c</FileName>
<FileType>1</FileType>
- <FilePath>drivers\led.c</FilePath>
+ <FilePath>drivers/led.c</FilePath>
</File>
+ </Files>
+ <Files>
<File>
<FileName>spi.c</FileName>
<FileType>1</FileType>
- <FilePath>drivers\spi.c</FilePath>
+ <FilePath>drivers/spi.c</FilePath>
</File>
+ </Files>
+ <Files>
<File>
<FileName>uart.c</FileName>
<FileType>1</FileType>
- <FilePath>drivers\uart.c</FilePath>
+ <FilePath>drivers/uart.c</FilePath>
+ </File>
+ </Files>
+ </Group>
+ <Group>
+ <GroupName>CMSIS</GroupName>
+ <Files>
+ <File>
+ <FileName>system_LPC17xx.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>CMSIS/CM3/DeviceSupport/NXP/LPC17xx/system_LPC17xx.c</FilePath>
+ </File>
+ </Files>
+ <Files>
+ <File>
+ <FileName>startup_LPC17xx.s</FileName>
+ <FileType>2</FileType>
+ <FilePath>CMSIS/CM3/DeviceSupport/NXP/LPC17xx/startup/arm/startup_LPC17xx.s</FilePath>
</File>
</Files>
</Group>
@@ -456,67 +465,98 @@
<File>
<FileName>clock.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\src\clock.c</FilePath>
+ <FilePath>../../src/clock.c</FilePath>
+ </File>
+ </Files>
+ <Files>
+ <File>
+ <FileName>components.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../../src/components.c</FilePath>
</File>
+ </Files>
+ <Files>
<File>
<FileName>device.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\src\device.c</FilePath>
+ <FilePath>../../src/device.c</FilePath>
</File>
+ </Files>
+ <Files>
<File>
<FileName>idle.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\src\idle.c</FilePath>
+ <FilePath>../../src/idle.c</FilePath>
</File>
+ </Files>
+ <Files>
<File>
<FileName>ipc.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\src\ipc.c</FilePath>
+ <FilePath>../../src/ipc.c</FilePath>
</File>
+ </Files>
+ <Files>
<File>
<FileName>irq.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\src\irq.c</FilePath>
+ <FilePath>../../src/irq.c</FilePath>
</File>
+ </Files>
+ <Files>
<File>
<FileName>kservice.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\src\kservice.c</FilePath>
+ <FilePath>../../src/kservice.c</FilePath>
</File>
+ </Files>
+ <Files>
<File>
<FileName>mem.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\src\mem.c</FilePath>
+ <FilePath>../../src/mem.c</FilePath>
</File>
+ </Files>
+ <Files>
<File>
<FileName>memheap.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\src\memheap.c</FilePath>
+ <FilePath>../../src/memheap.c</FilePath>
</File>
+ </Files>
+ <Files>
<File>
<FileName>mempool.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\src\mempool.c</FilePath>
+ <FilePath>../../src/mempool.c</FilePath>
</File>
+ </Files>
+ <Files>
<File>
<FileName>object.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\src\object.c</FilePath>
+ <FilePath>../../src/object.c</FilePath>
</File>
+ </Files>
+ <Files>
<File>
<FileName>scheduler.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\src\scheduler.c</FilePath>
+ <FilePath>../../src/scheduler.c</FilePath>
</File>
+ </Files>
+ <Files>
<File>
<FileName>thread.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\src\thread.c</FilePath>
+ <FilePath>../../src/thread.c</FilePath>
</File>
+ </Files>
+ <Files>
<File>
<FileName>timer.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\src\timer.c</FilePath>
+ <FilePath>../../src/timer.c</FilePath>
</File>
</Files>
</Group>
@@ -526,27 +566,35 @@
<File>
<FileName>cpuport.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\libcpu\arm\cortex-m3\cpuport.c</FilePath>
+ <FilePath>../../libcpu/arm/cortex-m3/cpuport.c</FilePath>
</File>
+ </Files>
+ <Files>
<File>
<FileName>context_rvds.S</FileName>
<FileType>2</FileType>
- <FilePath>..\..\libcpu\arm\cortex-m3\context_rvds.S</FilePath>
+ <FilePath>../../libcpu/arm/cortex-m3/context_rvds.S</FilePath>
</File>
+ </Files>
+ <Files>
<File>
<FileName>backtrace.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\libcpu\arm\common\backtrace.c</FilePath>
+ <FilePath>../../libcpu/arm/common/backtrace.c</FilePath>
</File>
+ </Files>
+ <Files>
<File>
<FileName>div0.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\libcpu\arm\common\div0.c</FilePath>
+ <FilePath>../../libcpu/arm/common/div0.c</FilePath>
</File>
+ </Files>
+ <Files>
<File>
<FileName>showmem.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\libcpu\arm\common\showmem.c</FilePath>
+ <FilePath>../../libcpu/arm/common/showmem.c</FilePath>
</File>
</Files>
</Group>
@@ -554,79 +602,93 @@
<GroupName>finsh</GroupName>
<Files>
<File>
+ <FileName>shell.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../../components/finsh/shell.c</FilePath>
+ </File>
+ </Files>
+ <Files>
+ <File>
+ <FileName>symbol.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../../components/finsh/symbol.c</FilePath>
+ </File>
+ </Files>
+ <Files>
+ <File>
<FileName>cmd.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\components\finsh\cmd.c</FilePath>
+ <FilePath>../../components/finsh/cmd.c</FilePath>
</File>
+ </Files>
+ <Files>
<File>
<FileName>finsh_compiler.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\components\finsh\finsh_compiler.c</FilePath>
+ <FilePath>../../components/finsh/finsh_compiler.c</FilePath>
</File>
+ </Files>
+ <Files>
<File>
<FileName>finsh_error.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\components\finsh\finsh_error.c</FilePath>
+ <FilePath>../../components/finsh/finsh_error.c</FilePath>
</File>
+ </Files>
+ <Files>
<File>
<FileName>finsh_heap.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\components\finsh\finsh_heap.c</FilePath>
+ <FilePath>../../components/finsh/finsh_heap.c</FilePath>
</File>
+ </Files>
+ <Files>
<File>
<FileName>finsh_init.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\components\finsh\finsh_init.c</FilePath>
+ <FilePath>../../components/finsh/finsh_init.c</FilePath>
</File>
+ </Files>
+ <Files>
<File>
<FileName>finsh_node.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\components\finsh\finsh_node.c</FilePath>
+ <FilePath>../../components/finsh/finsh_node.c</FilePath>
</File>
+ </Files>
+ <Files>
<File>
<FileName>finsh_ops.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\components\finsh\finsh_ops.c</FilePath>
+ <FilePath>../../components/finsh/finsh_ops.c</FilePath>
</File>
+ </Files>
+ <Files>
<File>
<FileName>finsh_parser.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\components\finsh\finsh_parser.c</FilePath>
- </File>
- <File>
- <FileName>finsh_token.c</FileName>
- <FileType>1</FileType>
- <FilePath>..\..\components\finsh\finsh_token.c</FilePath>
+ <FilePath>../../components/finsh/finsh_parser.c</FilePath>
</File>
+ </Files>
+ <Files>
<File>
<FileName>finsh_var.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\components\finsh\finsh_var.c</FilePath>
+ <FilePath>../../components/finsh/finsh_var.c</FilePath>
</File>
+ </Files>
+ <Files>
<File>
<FileName>finsh_vm.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\components\finsh\finsh_vm.c</FilePath>
- </File>
- <File>
- <FileName>shell.c</FileName>
- <FileType>1</FileType>
- <FilePath>..\..\components\finsh\shell.c</FilePath>
- </File>
- <File>
- <FileName>symbol.c</FileName>
- <FileType>1</FileType>
- <FilePath>..\..\components\finsh\symbol.c</FilePath>
+ <FilePath>../../components/finsh/finsh_vm.c</FilePath>
</File>
</Files>
- </Group>
- <Group>
- <GroupName>Components</GroupName>
<Files>
<File>
- <FileName>components.c</FileName>
+ <FileName>finsh_token.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\components\init\components.c</FilePath>
+ <FilePath>../../components/finsh/finsh_token.c</FilePath>
</File>
</Files>
</Group>
@@ -636,182 +698,249 @@
<File>
<FileName>api_lib.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\components\net\lwip\src\api\api_lib.c</FilePath>
+ <FilePath>../../components/net/lwip-1.4.1/src/api/api_lib.c</FilePath>
</File>
+ </Files>
+ <Files>
<File>
<FileName>api_msg.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\components\net\lwip\src\api\api_msg.c</FilePath>
+ <FilePath>../../components/net/lwip-1.4.1/src/api/api_msg.c</FilePath>
</File>
+ </Files>
+ <Files>
<File>
<FileName>err.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\components\net\lwip\src\api\err.c</FilePath>
+ <FilePath>../../components/net/lwip-1.4.1/src/api/err.c</FilePath>
</File>
+ </Files>
+ <Files>
<File>
<FileName>netbuf.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\components\net\lwip\src\api\netbuf.c</FilePath>
+ <FilePath>../../components/net/lwip-1.4.1/src/api/netbuf.c</FilePath>
</File>
+ </Files>
+ <Files>
<File>
<FileName>netdb.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\components\net\lwip\src\api\netdb.c</FilePath>
+ <FilePath>../../components/net/lwip-1.4.1/src/api/netdb.c</FilePath>
</File>
+ </Files>
+ <Files>
<File>
<FileName>netifapi.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\components\net\lwip\src\api\netifapi.c</FilePath>
+ <FilePath>../../components/net/lwip-1.4.1/src/api/netifapi.c</FilePath>
</File>
+ </Files>
+ <Files>
<File>
<FileName>sockets.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\components\net\lwip\src\api\sockets.c</FilePath>
+ <FilePath>../../components/net/lwip-1.4.1/src/api/sockets.c</FilePath>
</File>
+ </Files>
+ <Files>
<File>
<FileName>tcpip.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\components\net\lwip\src\api\tcpip.c</FilePath>
+ <FilePath>../../components/net/lwip-1.4.1/src/api/tcpip.c</FilePath>
</File>
+ </Files>
+ <Files>
<File>
<FileName>sys_arch.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\components\net\lwip\src\arch\sys_arch.c</FilePath>
+ <FilePath>../../components/net/lwip-1.4.1/src/arch/sys_arch.c</FilePath>
</File>
+ </Files>
+ <Files>
<File>
<FileName>def.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\components\net\lwip\src\core\def.c</FilePath>
+ <FilePath>../../components/net/lwip-1.4.1/src/core/def.c</FilePath>
</File>
+ </Files>
+ <Files>
<File>
<FileName>dhcp.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\components\net\lwip\src\core\dhcp.c</FilePath>
+ <FilePath>../../components/net/lwip-1.4.1/src/core/dhcp.c</FilePath>
</File>
+ </Files>
+ <Files>
<File>
<FileName>dns.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\components\net\lwip\src\core\dns.c</FilePath>
+ <FilePath>../../components/net/lwip-1.4.1/src/core/dns.c</FilePath>
</File>
+ </Files>
+ <Files>
<File>
<FileName>init.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\components\net\lwip\src\core\init.c</FilePath>
+ <FilePath>../../components/net/lwip-1.4.1/src/core/init.c</FilePath>
</File>
+ </Files>
+ <Files>
<File>
<FileName>memp.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\components\net\lwip\src\core\memp.c</FilePath>
+ <FilePath>../../components/net/lwip-1.4.1/src/core/memp.c</FilePath>
</File>
+ </Files>
+ <Files>
<File>
<FileName>netif.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\components\net\lwip\src\core\netif.c</FilePath>
+ <FilePath>../../components/net/lwip-1.4.1/src/core/netif.c</FilePath>
</File>
+ </Files>
+ <Files>
<File>
<FileName>pbuf.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\components\net\lwip\src\core\pbuf.c</FilePath>
+ <FilePath>../../components/net/lwip-1.4.1/src/core/pbuf.c</FilePath>
</File>
+ </Files>
+ <Files>
<File>
<FileName>raw.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\components\net\lwip\src\core\raw.c</FilePath>
+ <FilePath>../../components/net/lwip-1.4.1/src/core/raw.c</FilePath>
</File>
+ </Files>
+ <Files>
<File>
<FileName>stats.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\components\net\lwip\src\core\stats.c</FilePath>
+ <FilePath>../../components/net/lwip-1.4.1/src/core/stats.c</FilePath>
</File>
+ </Files>
+ <Files>
<File>
<FileName>sys.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\components\net\lwip\src\core\sys.c</FilePath>
+ <FilePath>../../components/net/lwip-1.4.1/src/core/sys.c</FilePath>
</File>
+ </Files>
+ <Files>
<File>
<FileName>tcp.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\components\net\lwip\src\core\tcp.c</FilePath>
+ <FilePath>../../components/net/lwip-1.4.1/src/core/tcp.c</FilePath>
</File>
+ </Files>
+ <Files>
<File>
<FileName>tcp_in.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\components\net\lwip\src\core\tcp_in.c</FilePath>
+ <FilePath>../../components/net/lwip-1.4.1/src/core/tcp_in.c</FilePath>
</File>
+ </Files>
+ <Files>
<File>
<FileName>tcp_out.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\components\net\lwip\src\core\tcp_out.c</FilePath>
+ <FilePath>../../components/net/lwip-1.4.1/src/core/tcp_out.c</FilePath>
</File>
+ </Files>
+ <Files>
<File>
<FileName>timers.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\components\net\lwip\src\core\timers.c</FilePath>
+ <FilePath>../../components/net/lwip-1.4.1/src/core/timers.c</FilePath>
</File>
+ </Files>
+ <Files>
<File>
<FileName>udp.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\components\net\lwip\src\core\udp.c</FilePath>
+ <FilePath>../../components/net/lwip-1.4.1/src/core/udp.c</FilePath>
</File>
+ </Files>
+ <Files>
<File>
<FileName>autoip.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\components\net\lwip\src\core\ipv4\autoip.c</FilePath>
+ <FilePath>../../components/net/lwip-1.4.1/src/core/ipv4/autoip.c</FilePath>
</File>
+ </Files>
+ <Files>
<File>
<FileName>icmp.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\components\net\lwip\src\core\ipv4\icmp.c</FilePath>
+ <FilePath>../../components/net/lwip-1.4.1/src/core/ipv4/icmp.c</FilePath>
</File>
+ </Files>
+ <Files>
<File>
<FileName>igmp.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\components\net\lwip\src\core\ipv4\igmp.c</FilePath>
+ <FilePath>../../components/net/lwip-1.4.1/src/core/ipv4/igmp.c</FilePath>
</File>
+ </Files>
+ <Files>
<File>
<FileName>inet.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\components\net\lwip\src\core\ipv4\inet.c</FilePath>
+ <FilePath>../../components/net/lwip-1.4.1/src/core/ipv4/inet.c</FilePath>
</File>
+ </Files>
+ <Files>
<File>
<FileName>inet_chksum.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\components\net\lwip\src\core\ipv4\inet_chksum.c</FilePath>
+ <FilePath>../../components/net/lwip-1.4.1/src/core/ipv4/inet_chksum.c</FilePath>
</File>
+ </Files>
+ <Files>
<File>
<FileName>ip.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\components\net\lwip\src\core\ipv4\ip.c</FilePath>
+ <FilePath>../../components/net/lwip-1.4.1/src/core/ipv4/ip.c</FilePath>
</File>
+ </Files>
+ <Files>
<File>
<FileName>ip_addr.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\components\net\lwip\src\core\ipv4\ip_addr.c</FilePath>
+ <FilePath>../../components/net/lwip-1.4.1/src/core/ipv4/ip_addr.c</FilePath>
</File>
+ </Files>
+ <Files>
<File>
<FileName>ip_frag.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\components\net\lwip\src\core\ipv4\ip_frag.c</FilePath>
+ <FilePath>../../components/net/lwip-1.4.1/src/core/ipv4/ip_frag.c</FilePath>
</File>
+ </Files>
+ <Files>
<File>
<FileName>etharp.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\components\net\lwip\src\netif\etharp.c</FilePath>
+ <FilePath>../../components/net/lwip-1.4.1/src/netif/etharp.c</FilePath>
</File>
+ </Files>
+ <Files>
<File>
<FileName>ethernetif.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\components\net\lwip\src\netif\ethernetif.c</FilePath>
+ <FilePath>../../components/net/lwip-1.4.1/src/netif/ethernetif.c</FilePath>
</File>
+ </Files>
+ <Files>
<File>
<FileName>slipif.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\components\net\lwip\src\netif\slipif.c</FilePath>
+ <FilePath>../../components/net/lwip-1.4.1/src/netif/slipif.c</FilePath>
</File>
</Files>
</Group>
</Groups>
</Target>
</Targets>
-
</Project>
diff --git a/bsp/lpc178x/project.uvproj b/bsp/lpc178x/project.uvproj
index 8c259ccd04..d3fa95f420 100644
--- a/bsp/lpc178x/project.uvproj
+++ b/bsp/lpc178x/project.uvproj
@@ -1,10 +1,7 @@
<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
<Project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="project_proj.xsd">
-
<SchemaVersion>1.1</SchemaVersion>
-
<Header>### uVision Project, (C) Keil Software</Header>
-
<Targets>
<Target>
<TargetName>RT-Thread LPC17xx</TargetName>
@@ -15,25 +12,25 @@
<Device>LPC1788</Device>
<Vendor>NXP (founded by Philips)</Vendor>
<Cpu>IRAM(0x10000000-0x1000FFFF) IRAM2(0x20000000-0x20007FFF) IROM(0-0x7FFFF) CLOCK(12000000) CPUTYPE("Cortex-M3")</Cpu>
- <FlashUtilSpec></FlashUtilSpec>
+ <FlashUtilSpec />
<StartupFile>"STARTUP\NXP\LPC177x_8x\startup_LPC177x_8x.s" ("NXP LPC177x_8x Startup Code")</StartupFile>
<FlashDriverDll>UL2CM3(-O463 -S0 -C0 -FO7 -FD10000000 -FC800 -FN1 -FF0LPC_IAP_512 -FS00 -FL080000)</FlashDriverDll>
<DeviceId>5325</DeviceId>
<RegisterFile>LPC177x_8x.H</RegisterFile>
- <MemoryEnv></MemoryEnv>
- <Cmp></Cmp>
- <Asm></Asm>
- <Linker></Linker>
- <OHString></OHString>
- <InfinionOptionDll></InfinionOptionDll>
- <SLE66CMisc></SLE66CMisc>
- <SLE66AMisc></SLE66AMisc>
- <SLE66LinkerMisc></SLE66LinkerMisc>
- <SFDFile></SFDFile>
+ <MemoryEnv />
+ <Cmp />
+ <Asm />
+ <Linker />
+ <OHString />
+ <InfinionOptionDll />
+ <SLE66CMisc />
+ <SLE66AMisc />
+ <SLE66LinkerMisc />
+ <SFDFile />
<UseEnv>0</UseEnv>
- <BinPath></BinPath>
- <IncludePath></IncludePath>
- <LibPath></LibPath>
+ <BinPath />
+ <IncludePath />
+ <LibPath />
<RegisterFilePath>NXP\LPC177x_8x\</RegisterFilePath>
<DBRegisterFilePath>NXP\LPC177x_8x\</DBRegisterFilePath>
<TargetStatus>
@@ -57,31 +54,29 @@
<BeforeCompile>
<RunUserProg1>0</RunUserProg1>
<RunUserProg2>0</RunUserProg2>
- <UserProg1Name></UserProg1Name>
- <UserProg2Name></UserProg2Name>
+ <UserProg1Name />
+ <UserProg2Name />
<UserProg1Dos16Mode>0</UserProg1Dos16Mode>
<UserProg2Dos16Mode>0</UserProg2Dos16Mode>
- <nStopU1X>0</nStopU1X>
- <nStopU2X>0</nStopU2X>
</BeforeCompile>
<BeforeMake>
<RunUserProg1>0</RunUserProg1>
<RunUserProg2>0</RunUserProg2>
- <UserProg1Name></UserProg1Name>
- <UserProg2Name></UserProg2Name>
+ <UserProg1Name />
+ <UserProg2Name />
<UserProg1Dos16Mode>0</UserProg1Dos16Mode>
<UserProg2Dos16Mode>0</UserProg2Dos16Mode>
</BeforeMake>
<AfterMake>
<RunUserProg1>0</RunUserProg1>
<RunUserProg2>0</RunUserProg2>
- <UserProg1Name></UserProg1Name>
- <UserProg2Name></UserProg2Name>
+ <UserProg1Name />
+ <UserProg2Name />
<UserProg1Dos16Mode>0</UserProg1Dos16Mode>
<UserProg2Dos16Mode>0</UserProg2Dos16Mode>
</AfterMake>
<SelectedForBatchBuild>0</SelectedForBatchBuild>
- <SVCSIdString></SVCSIdString>
+ <SVCSIdString />
</TargetCommonOption>
<CommonProperty>
<UseCPPCompiler>0</UseCPPCompiler>
@@ -95,8 +90,8 @@
<AssembleAssemblyFile>0</AssembleAssemblyFile>
<PublicsOnly>0</PublicsOnly>
<StopOnExitCode>3</StopOnExitCode>
- <CustomArgument></CustomArgument>
- <IncludeLibraryModules></IncludeLibraryModules>
+ <CustomArgument />
+ <IncludeLibraryModules />
</CommonProperty>
<DllOption>
<SimDllName>SARMCM3.DLL</SimDllName>
@@ -136,23 +131,22 @@
<RestoreMemoryDisplay>1</RestoreMemoryDisplay>
<RestoreFunctions>0</RestoreFunctions>
<RestoreToolbox>1</RestoreToolbox>
- <RestoreTracepoints>0</RestoreTracepoints>
</Target>
<RunDebugAfterBuild>0</RunDebugAfterBuild>
<TargetSelection>7</TargetSelection>
<SimDlls>
- <CpuDll></CpuDll>
- <CpuDllArguments></CpuDllArguments>
- <PeripheralDll></PeripheralDll>
- <PeripheralDllArguments></PeripheralDllArguments>
- <InitializationFile></InitializationFile>
+ <CpuDll />
+ <CpuDllArguments />
+ <PeripheralDll />
+ <PeripheralDllArguments />
+ <InitializationFile />
</SimDlls>
<TargetDlls>
- <CpuDll></CpuDll>
- <CpuDllArguments></CpuDllArguments>
- <PeripheralDll></PeripheralDll>
- <PeripheralDllArguments></PeripheralDllArguments>
- <InitializationFile></InitializationFile>
+ <CpuDll />
+ <CpuDllArguments />
+ <PeripheralDll />
+ <PeripheralDllArguments />
+ <InitializationFile />
<Driver>Segger\JL2CM3.dll</Driver>
</TargetDlls>
</DebugOption>
@@ -167,7 +161,7 @@
</Flash1>
<Flash2>Segger\JL2CM3.dll</Flash2>
<Flash3>"" ()</Flash3>
- <Flash4></Flash4>
+ <Flash4 />
</Utilities>
<TargetArmAds>
<ArmAdsMisc>
@@ -199,7 +193,7 @@
<RvctClst>0</RvctClst>
<GenPPlst>0</GenPPlst>
<AdsCpuType>"Cortex-M3"</AdsCpuType>
- <RvctDeviceName></RvctDeviceName>
+ <RvctDeviceName />
<mOS>0</mOS>
<uocRom>0</uocRom>
<uocRam>0</uocRam>
@@ -330,7 +324,7 @@
<Size>0x8000</Size>
</OCR_RVCT10>
</OnChipMemories>
- <RvctStartVector></RvctStartVector>
+ <RvctStartVector />
</ArmAdsMisc>
<Cads>
<interw>1</interw>
@@ -345,12 +339,11 @@
<Rwpi>0</Rwpi>
<wLevel>0</wLevel>
<uThumb>0</uThumb>
- <uSurpInc>0</uSurpInc>
<VariousControls>
- <MiscControls></MiscControls>
- <Define></Define>
- <Undefine></Undefine>
- <IncludePath>.;..\..\components\finsh;..\..\include;..\..\libcpu\arm\common;..\..\libcpu\arm\cortex-m3;CMSIS\CM3\CoreSupport;CMSIS\CM3\DeviceSupport\NXP\LPC177x_8x;applications;drivers</IncludePath>
+ <MiscControls />
+ <Define />
+ <Undefine />
+ <IncludePath>applications;.;drivers;CMSIS/CM3/CoreSupport;CMSIS/CM3/DeviceSupport/NXP/LPC177x_8x;../../include;../../libcpu/arm/cortex-m3;../../libcpu/arm/common;../../components/finsh</IncludePath>
</VariousControls>
</Cads>
<Aads>
@@ -361,12 +354,11 @@
<SplitLS>0</SplitLS>
<SwStkChk>0</SwStkChk>
<NoWarn>0</NoWarn>
- <uSurpInc>0</uSurpInc>
<VariousControls>
- <MiscControls></MiscControls>
- <Define></Define>
- <Undefine></Undefine>
- <IncludePath></IncludePath>
+ <MiscControls />
+ <Define />
+ <Undefine />
+ <IncludePath />
</VariousControls>
</Aads>
<LDads>
@@ -378,12 +370,12 @@
<useFile>0</useFile>
<TextAddressRange>0x00000000</TextAddressRange>
<DataAddressRange>0x10000000</DataAddressRange>
- <ScatterFile></ScatterFile>
- <IncludeLibs></IncludeLibs>
- <IncludeLibsPath></IncludeLibsPath>
- <Misc> --keep __fsym_* --keep __vsym_* </Misc>
- <LinkerInputFile></LinkerInputFile>
- <DisabledWarnings></DisabledWarnings>
+ <ScatterFile />
+ <IncludeLibs />
+ <IncludeLibsPath />
+ <Misc> --keep *.o(FSymTab) --keep *.o(VSymTab) </Misc>
+ <LinkerInputFile />
+ <DisabledWarnings />
</LDads>
</TargetArmAds>
</TargetOption>
@@ -394,32 +386,14 @@
<File>
<FileName>application.c</FileName>
<FileType>1</FileType>
- <FilePath>applications\application.c</FilePath>
- </File>
- <File>
- <FileName>startup.c</FileName>
- <FileType>1</FileType>
- <FilePath>applications\startup.c</FilePath>
+ <FilePath>applications/application.c</FilePath>
</File>
</Files>
- </Group>
- <Group>
- <GroupName>CMSIS</GroupName>
<Files>
<File>
- <FileName>core_cm3.c</FileName>
- <FileType>1</FileType>
- <FilePath>CMSIS\CM3\CoreSupport\core_cm3.c</FilePath>
- </File>
- <File>
- <FileName>system_LPC177x_8x.c</FileName>
+ <FileName>startup.c</FileName>
<FileType>1</FileType>
- <FilePath>CMSIS\CM3\DeviceSupport\NXP\LPC177x_8x\system_LPC177x_8x.c</FilePath>
- </File>
- <File>
- <FileName>startup_LPC177x_8x.s</FileName>
- <FileType>2</FileType>
- <FilePath>CMSIS\CM3\DeviceSupport\NXP\LPC177x_8x\startup\arm\startup_LPC177x_8x.s</FilePath>
+ <FilePath>applications/startup.c</FilePath>
</File>
</Files>
</Group>
@@ -429,47 +403,87 @@
<File>
<FileName>board.c</FileName>
<FileType>1</FileType>
- <FilePath>drivers\board.c</FilePath>
+ <FilePath>drivers/board.c</FilePath>
</File>
+ </Files>
+ <Files>
<File>
<FileName>drv_glcd.c</FileName>
<FileType>1</FileType>
- <FilePath>drivers\drv_glcd.c</FilePath>
+ <FilePath>drivers/drv_glcd.c</FilePath>
</File>
+ </Files>
+ <Files>
<File>
<FileName>lpc177x_8x_clkpwr.c</FileName>
<FileType>1</FileType>
- <FilePath>drivers\lpc177x_8x_clkpwr.c</FilePath>
+ <FilePath>drivers/lpc177x_8x_clkpwr.c</FilePath>
</File>
+ </Files>
+ <Files>
<File>
<FileName>lpc177x_8x_emc.c</FileName>
<FileType>1</FileType>
- <FilePath>drivers\lpc177x_8x_emc.c</FilePath>
+ <FilePath>drivers/lpc177x_8x_emc.c</FilePath>
</File>
+ </Files>
+ <Files>
<File>
<FileName>lpc177x_8x_pinsel.c</FileName>
<FileType>1</FileType>
- <FilePath>drivers\lpc177x_8x_pinsel.c</FilePath>
+ <FilePath>drivers/lpc177x_8x_pinsel.c</FilePath>
</File>
+ </Files>
+ <Files>
<File>
<FileName>lpc177x_8x_uart.c</FileName>
<FileType>1</FileType>
- <FilePath>drivers\lpc177x_8x_uart.c</FilePath>
+ <FilePath>drivers/lpc177x_8x_uart.c</FilePath>
</File>
+ </Files>
+ <Files>
<File>
<FileName>lpc17xx_lcd.c</FileName>
<FileType>1</FileType>
- <FilePath>drivers\lpc17xx_lcd.c</FilePath>
+ <FilePath>drivers/lpc17xx_lcd.c</FilePath>
</File>
+ </Files>
+ <Files>
<File>
<FileName>sdram.c</FileName>
<FileType>1</FileType>
- <FilePath>drivers\sdram.c</FilePath>
+ <FilePath>drivers/sdram.c</FilePath>
</File>
+ </Files>
+ <Files>
<File>
<FileName>uart.c</FileName>
<FileType>1</FileType>
- <FilePath>drivers\uart.c</FilePath>
+ <FilePath>drivers/uart.c</FilePath>
+ </File>
+ </Files>
+ </Group>
+ <Group>
+ <GroupName>CMSIS</GroupName>
+ <Files>
+ <File>
+ <FileName>core_cm3.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>CMSIS/CM3/CoreSupport/core_cm3.c</FilePath>
+ </File>
+ </Files>
+ <Files>
+ <File>
+ <FileName>system_LPC177x_8x.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>CMSIS/CM3/DeviceSupport/NXP/LPC177x_8x/system_LPC177x_8x.c</FilePath>
+ </File>
+ </Files>
+ <Files>
+ <File>
+ <FileName>startup_LPC177x_8x.s</FileName>
+ <FileType>2</FileType>
+ <FilePath>CMSIS/CM3/DeviceSupport/NXP/LPC177x_8x/startup/arm/startup_LPC177x_8x.s</FilePath>
</File>
</Files>
</Group>
@@ -479,67 +493,98 @@
<File>
<FileName>clock.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\src\clock.c</FilePath>
+ <FilePath>../../src/clock.c</FilePath>
</File>
+ </Files>
+ <Files>
+ <File>
+ <FileName>components.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../../src/components.c</FilePath>
+ </File>
+ </Files>
+ <Files>
<File>
<FileName>device.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\src\device.c</FilePath>
+ <FilePath>../../src/device.c</FilePath>
</File>
+ </Files>
+ <Files>
<File>
<FileName>idle.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\src\idle.c</FilePath>
+ <FilePath>../../src/idle.c</FilePath>
</File>
+ </Files>
+ <Files>
<File>
<FileName>ipc.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\src\ipc.c</FilePath>
+ <FilePath>../../src/ipc.c</FilePath>
</File>
+ </Files>
+ <Files>
<File>
<FileName>irq.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\src\irq.c</FilePath>
+ <FilePath>../../src/irq.c</FilePath>
</File>
+ </Files>
+ <Files>
<File>
<FileName>kservice.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\src\kservice.c</FilePath>
+ <FilePath>../../src/kservice.c</FilePath>
</File>
+ </Files>
+ <Files>
<File>
<FileName>mem.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\src\mem.c</FilePath>
+ <FilePath>../../src/mem.c</FilePath>
</File>
+ </Files>
+ <Files>
<File>
<FileName>memheap.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\src\memheap.c</FilePath>
+ <FilePath>../../src/memheap.c</FilePath>
</File>
+ </Files>
+ <Files>
<File>
<FileName>mempool.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\src\mempool.c</FilePath>
+ <FilePath>../../src/mempool.c</FilePath>
</File>
+ </Files>
+ <Files>
<File>
<FileName>object.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\src\object.c</FilePath>
+ <FilePath>../../src/object.c</FilePath>
</File>
+ </Files>
+ <Files>
<File>
<FileName>scheduler.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\src\scheduler.c</FilePath>
+ <FilePath>../../src/scheduler.c</FilePath>
</File>
+ </Files>
+ <Files>
<File>
<FileName>thread.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\src\thread.c</FilePath>
+ <FilePath>../../src/thread.c</FilePath>
</File>
+ </Files>
+ <Files>
<File>
<FileName>timer.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\src\timer.c</FilePath>
+ <FilePath>../../src/timer.c</FilePath>
</File>
</Files>
</Group>
@@ -549,27 +594,35 @@
<File>
<FileName>cpuport.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\libcpu\arm\cortex-m3\cpuport.c</FilePath>
+ <FilePath>../../libcpu/arm/cortex-m3/cpuport.c</FilePath>
</File>
+ </Files>
+ <Files>
<File>
<FileName>context_rvds.S</FileName>
<FileType>2</FileType>
- <FilePath>..\..\libcpu\arm\cortex-m3\context_rvds.S</FilePath>
+ <FilePath>../../libcpu/arm/cortex-m3/context_rvds.S</FilePath>
</File>
+ </Files>
+ <Files>
<File>
<FileName>backtrace.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\libcpu\arm\common\backtrace.c</FilePath>
+ <FilePath>../../libcpu/arm/common/backtrace.c</FilePath>
</File>
+ </Files>
+ <Files>
<File>
<FileName>div0.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\libcpu\arm\common\div0.c</FilePath>
+ <FilePath>../../libcpu/arm/common/div0.c</FilePath>
</File>
+ </Files>
+ <Files>
<File>
<FileName>showmem.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\libcpu\arm\common\showmem.c</FilePath>
+ <FilePath>../../libcpu/arm/common/showmem.c</FilePath>
</File>
</Files>
</Group>
@@ -577,84 +630,97 @@
<GroupName>finsh</GroupName>
<Files>
<File>
+ <FileName>shell.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../../components/finsh/shell.c</FilePath>
+ </File>
+ </Files>
+ <Files>
+ <File>
+ <FileName>symbol.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../../components/finsh/symbol.c</FilePath>
+ </File>
+ </Files>
+ <Files>
+ <File>
<FileName>cmd.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\components\finsh\cmd.c</FilePath>
+ <FilePath>../../components/finsh/cmd.c</FilePath>
</File>
+ </Files>
+ <Files>
<File>
<FileName>finsh_compiler.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\components\finsh\finsh_compiler.c</FilePath>
+ <FilePath>../../components/finsh/finsh_compiler.c</FilePath>
</File>
+ </Files>
+ <Files>
<File>
<FileName>finsh_error.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\components\finsh\finsh_error.c</FilePath>
+ <FilePath>../../components/finsh/finsh_error.c</FilePath>
</File>
+ </Files>
+ <Files>
<File>
<FileName>finsh_heap.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\components\finsh\finsh_heap.c</FilePath>
+ <FilePath>../../components/finsh/finsh_heap.c</FilePath>
</File>
+ </Files>
+ <Files>
<File>
<FileName>finsh_init.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\components\finsh\finsh_init.c</FilePath>
+ <FilePath>../../components/finsh/finsh_init.c</FilePath>
</File>
+ </Files>
+ <Files>
<File>
<FileName>finsh_node.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\components\finsh\finsh_node.c</FilePath>
+ <FilePath>../../components/finsh/finsh_node.c</FilePath>
</File>
+ </Files>
+ <Files>
<File>
<FileName>finsh_ops.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\components\finsh\finsh_ops.c</FilePath>
+ <FilePath>../../components/finsh/finsh_ops.c</FilePath>
</File>
+ </Files>
+ <Files>
<File>
<FileName>finsh_parser.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\components\finsh\finsh_parser.c</FilePath>
- </File>
- <File>
- <FileName>finsh_token.c</FileName>
- <FileType>1</FileType>
- <FilePath>..\..\components\finsh\finsh_token.c</FilePath>
+ <FilePath>../../components/finsh/finsh_parser.c</FilePath>
</File>
+ </Files>
+ <Files>
<File>
<FileName>finsh_var.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\components\finsh\finsh_var.c</FilePath>
+ <FilePath>../../components/finsh/finsh_var.c</FilePath>
</File>
+ </Files>
+ <Files>
<File>
<FileName>finsh_vm.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\components\finsh\finsh_vm.c</FilePath>
- </File>
- <File>
- <FileName>msh.c</FileName>
- <FileType>1</FileType>
- <FilePath>..\..\components\finsh\msh.c</FilePath>
- </File>
- <File>
- <FileName>msh_cmd.c</FileName>
- <FileType>1</FileType>
- <FilePath>..\..\components\finsh\msh_cmd.c</FilePath>
- </File>
- <File>
- <FileName>shell.c</FileName>
- <FileType>1</FileType>
- <FilePath>..\..\components\finsh\shell.c</FilePath>
+ <FilePath>../../components/finsh/finsh_vm.c</FilePath>
</File>
+ </Files>
+ <Files>
<File>
- <FileName>symbol.c</FileName>
+ <FileName>finsh_token.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\components\finsh\symbol.c</FilePath>
+ <FilePath>../../components/finsh/finsh_token.c</FilePath>
</File>
</Files>
</Group>
</Groups>
</Target>
</Targets>
-
</Project>
diff --git a/bsp/lpc2478/project.uvproj b/bsp/lpc2478/project.uvproj
index 3836907e2b..8fcdccea67 100644
--- a/bsp/lpc2478/project.uvproj
+++ b/bsp/lpc2478/project.uvproj
@@ -1,10 +1,7 @@
<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
<Project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="project_proj.xsd">
-
<SchemaVersion>1.1</SchemaVersion>
-
<Header>### uVision Project, (C) Keil Software</Header>
-
<Targets>
<Target>
<TargetName>RT-Thread LPC2478</TargetName>
@@ -20,20 +17,21 @@
<FlashDriverDll>UL2ARM(-U268761108 -O7 -S0 -C0 -FO15 -FD40000000 -FC800 -FN1 -FF0LPC_IAP2_512 -FS00 -FL07E000)</FlashDriverDll>
<DeviceId>4307</DeviceId>
<RegisterFile>LPC23xx.H</RegisterFile>
- <MemoryEnv></MemoryEnv>
- <Cmp></Cmp>
- <Asm></Asm>
- <Linker></Linker>
- <OHString></OHString>
- <InfinionOptionDll></InfinionOptionDll>
- <SLE66CMisc></SLE66CMisc>
- <SLE66AMisc></SLE66AMisc>
- <SLE66LinkerMisc></SLE66LinkerMisc>
- <SFDFile></SFDFile>
+ <MemoryEnv />
+ <Cmp />
+ <Asm />
+ <Linker />
+ <OHString />
+ <InfinionOptionDll />
+ <SLE66CMisc />
+ <SLE66AMisc />
+ <SLE66LinkerMisc />
+ <SFDFile />
+ <bCustSvd>0</bCustSvd>
<UseEnv>0</UseEnv>
- <BinPath></BinPath>
- <IncludePath></IncludePath>
- <LibPath></LibPath>
+ <BinPath />
+ <IncludePath />
+ <LibPath />
<RegisterFilePath>Philips\</RegisterFilePath>
<DBRegisterFilePath>Philips\</DBRegisterFilePath>
<TargetStatus>
@@ -43,43 +41,45 @@
<NotGenerated>0</NotGenerated>
<InvalidFlash>1</InvalidFlash>
</TargetStatus>
- <OutputDirectory>.\obj\</OutputDirectory>
+ <OutputDirectory>.\build\</OutputDirectory>
<OutputName>rtthread-lpc</OutputName>
<CreateExecutable>1</CreateExecutable>
<CreateLib>0</CreateLib>
<CreateHexFile>0</CreateHexFile>
<DebugInformation>1</DebugInformation>
<BrowseInformation>1</BrowseInformation>
- <ListingPath>.\obj\</ListingPath>
+ <ListingPath>.\build\</ListingPath>
<HexFormatSelection>1</HexFormatSelection>
<Merge32K>0</Merge32K>
<CreateBatchFile>0</CreateBatchFile>
<BeforeCompile>
<RunUserProg1>0</RunUserProg1>
<RunUserProg2>0</RunUserProg2>
- <UserProg1Name></UserProg1Name>
- <UserProg2Name></UserProg2Name>
+ <UserProg1Name />
+ <UserProg2Name />
<UserProg1Dos16Mode>0</UserProg1Dos16Mode>
<UserProg2Dos16Mode>0</UserProg2Dos16Mode>
+ <nStopU1X>0</nStopU1X>
+ <nStopU2X>0</nStopU2X>
</BeforeCompile>
<BeforeMake>
<RunUserProg1>0</RunUserProg1>
<RunUserProg2>0</RunUserProg2>
- <UserProg1Name></UserProg1Name>
- <UserProg2Name></UserProg2Name>
+ <UserProg1Name />
+ <UserProg2Name />
<UserProg1Dos16Mode>0</UserProg1Dos16Mode>
<UserProg2Dos16Mode>0</UserProg2Dos16Mode>
</BeforeMake>
<AfterMake>
<RunUserProg1>0</RunUserProg1>
<RunUserProg2>0</RunUserProg2>
- <UserProg1Name></UserProg1Name>
- <UserProg2Name></UserProg2Name>
+ <UserProg1Name />
+ <UserProg2Name />
<UserProg1Dos16Mode>0</UserProg1Dos16Mode>
<UserProg2Dos16Mode>0</UserProg2Dos16Mode>
</AfterMake>
<SelectedForBatchBuild>0</SelectedForBatchBuild>
- <SVCSIdString></SVCSIdString>
+ <SVCSIdString />
</TargetCommonOption>
<CommonProperty>
<UseCPPCompiler>0</UseCPPCompiler>
@@ -93,8 +93,9 @@
<AssembleAssemblyFile>0</AssembleAssemblyFile>
<PublicsOnly>0</PublicsOnly>
<StopOnExitCode>3</StopOnExitCode>
- <CustomArgument></CustomArgument>
- <IncludeLibraryModules></IncludeLibraryModules>
+ <CustomArgument />
+ <IncludeLibraryModules />
+ <ComprImg>1</ComprImg>
</CommonProperty>
<DllOption>
<SimDllName>SARM.DLL</SimDllName>
@@ -102,7 +103,7 @@
<SimDlgDll>DARMP.DLL</SimDlgDll>
<SimDlgDllArguments>-pLPC2478</SimDlgDllArguments>
<TargetDllName>SARM.DLL</TargetDllName>
- <TargetDllArguments></TargetDllArguments>
+ <TargetDllArguments />
<TargetDlgDll>TARMP.DLL</TargetDlgDll>
<TargetDlgDllArguments>-pLPC2478</TargetDlgDllArguments>
</DllOption>
@@ -128,28 +129,29 @@
<Target>
<UseTarget>1</UseTarget>
<LoadApplicationAtStartup>1</LoadApplicationAtStartup>
- <RunToMain>0</RunToMain>
+ <RunToMain>1</RunToMain>
<RestoreBreakpoints>1</RestoreBreakpoints>
<RestoreWatchpoints>1</RestoreWatchpoints>
<RestoreMemoryDisplay>1</RestoreMemoryDisplay>
<RestoreFunctions>0</RestoreFunctions>
<RestoreToolbox>1</RestoreToolbox>
+ <RestoreTracepoints>0</RestoreTracepoints>
</Target>
<RunDebugAfterBuild>0</RunDebugAfterBuild>
<TargetSelection>7</TargetSelection>
<SimDlls>
- <CpuDll></CpuDll>
- <CpuDllArguments></CpuDllArguments>
- <PeripheralDll></PeripheralDll>
- <PeripheralDllArguments></PeripheralDllArguments>
- <InitializationFile></InitializationFile>
+ <CpuDll />
+ <CpuDllArguments />
+ <PeripheralDll />
+ <PeripheralDllArguments />
+ <InitializationFile />
</SimDlls>
<TargetDlls>
- <CpuDll></CpuDll>
- <CpuDllArguments></CpuDllArguments>
- <PeripheralDll></PeripheralDll>
- <PeripheralDllArguments></PeripheralDllArguments>
- <InitializationFile></InitializationFile>
+ <CpuDll />
+ <CpuDllArguments />
+ <PeripheralDll />
+ <PeripheralDllArguments />
+ <InitializationFile />
<Driver>Segger\JL2CM3.dll</Driver>
</TargetDlls>
</DebugOption>
@@ -162,9 +164,14 @@
<Capability>1</Capability>
<DriverSelection>4096</DriverSelection>
</Flash1>
+ <bUseTDR>1</bUseTDR>
<Flash2>BIN\UL2ARM.DLL</Flash2>
<Flash3>"LPC210x_ISP.EXE" ("#H" ^X $D COM1: 38400 1)</Flash3>
- <Flash4></Flash4>
+ <Flash4 />
+ <pFcarmOut />
+ <pFcarmGrp />
+ <pFcArmRoot />
+ <FcArmLst>0</FcArmLst>
</Utilities>
<TargetArmAds>
<ArmAdsMisc>
@@ -196,7 +203,7 @@
<RvctClst>0</RvctClst>
<GenPPlst>0</GenPPlst>
<AdsCpuType>ARM7TDMI</AdsCpuType>
- <RvctDeviceName></RvctDeviceName>
+ <RvctDeviceName />
<mOS>0</mOS>
<uocRom>0</uocRom>
<uocRam>0</uocRam>
@@ -327,7 +334,7 @@
<Size>0x4000</Size>
</OCR_RVCT10>
</OnChipMemories>
- <RvctStartVector></RvctStartVector>
+ <RvctStartVector />
</ArmAdsMisc>
<Cads>
<interw>1</interw>
@@ -342,11 +349,12 @@
<Rwpi>0</Rwpi>
<wLevel>0</wLevel>
<uThumb>0</uThumb>
+ <uSurpInc>0</uSurpInc>
<VariousControls>
- <MiscControls></MiscControls>
- <Define></Define>
- <Undefine></Undefine>
- <IncludePath>.;..\..\components\finsh;..\..\include;..\..\libcpu\arm\common;..\..\libcpu\arm\lpc24xx;applications;drivers</IncludePath>
+ <MiscControls />
+ <Define />
+ <Undefine />
+ <IncludePath>applications;.;drivers;../../include;../../libcpu/arm/lpc24xx;../../libcpu/arm/common;../../components/finsh</IncludePath>
</VariousControls>
</Cads>
<Aads>
@@ -357,11 +365,12 @@
<SplitLS>0</SplitLS>
<SwStkChk>0</SwStkChk>
<NoWarn>0</NoWarn>
+ <uSurpInc>0</uSurpInc>
<VariousControls>
- <MiscControls></MiscControls>
- <Define></Define>
- <Undefine></Undefine>
- <IncludePath></IncludePath>
+ <MiscControls />
+ <Define />
+ <Undefine />
+ <IncludePath />
</VariousControls>
</Aads>
<LDads>
@@ -373,12 +382,12 @@
<useFile>0</useFile>
<TextAddressRange>0x00000000</TextAddressRange>
<DataAddressRange>0x10000000</DataAddressRange>
- <ScatterFile></ScatterFile>
- <IncludeLibs></IncludeLibs>
- <IncludeLibsPath></IncludeLibsPath>
- <Misc> --keep __fsym_* --keep __vsym_* </Misc>
- <LinkerInputFile></LinkerInputFile>
- <DisabledWarnings></DisabledWarnings>
+ <ScatterFile />
+ <IncludeLibs />
+ <IncludeLibsPath />
+ <Misc> --keep *.o(FSymTab) --keep *.o(VSymTab) </Misc>
+ <LinkerInputFile />
+ <DisabledWarnings />
</LDads>
</TargetArmAds>
</TargetOption>
@@ -389,12 +398,14 @@
<File>
<FileName>application.c</FileName>
<FileType>1</FileType>
- <FilePath>applications\application.c</FilePath>
+ <FilePath>applications/application.c</FilePath>
</File>
+ </Files>
+ <Files>
<File>
<FileName>startup.c</FileName>
<FileType>1</FileType>
- <FilePath>applications\startup.c</FilePath>
+ <FilePath>applications/startup.c</FilePath>
</File>
</Files>
</Group>
@@ -404,12 +415,14 @@
<File>
<FileName>board.c</FileName>
<FileType>1</FileType>
- <FilePath>drivers\board.c</FilePath>
+ <FilePath>drivers/board.c</FilePath>
</File>
+ </Files>
+ <Files>
<File>
<FileName>serial.c</FileName>
<FileType>1</FileType>
- <FilePath>drivers\serial.c</FilePath>
+ <FilePath>drivers/serial.c</FilePath>
</File>
</Files>
</Group>
@@ -419,67 +432,91 @@
<File>
<FileName>clock.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\src\clock.c</FilePath>
+ <FilePath>../../src/clock.c</FilePath>
+ </File>
+ </Files>
+ <Files>
+ <File>
+ <FileName>components.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../../src/components.c</FilePath>
</File>
+ </Files>
+ <Files>
<File>
<FileName>device.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\src\device.c</FilePath>
+ <FilePath>../../src/device.c</FilePath>
</File>
+ </Files>
+ <Files>
<File>
<FileName>idle.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\src\idle.c</FilePath>
+ <FilePath>../../src/idle.c</FilePath>
</File>
+ </Files>
+ <Files>
<File>
<FileName>ipc.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\src\ipc.c</FilePath>
+ <FilePath>../../src/ipc.c</FilePath>
</File>
+ </Files>
+ <Files>
<File>
<FileName>irq.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\src\irq.c</FilePath>
+ <FilePath>../../src/irq.c</FilePath>
</File>
+ </Files>
+ <Files>
<File>
<FileName>kservice.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\src\kservice.c</FilePath>
+ <FilePath>../../src/kservice.c</FilePath>
</File>
+ </Files>
+ <Files>
<File>
<FileName>mem.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\src\mem.c</FilePath>
- </File>
- <File>
- <FileName>memheap.c</FileName>
- <FileType>1</FileType>
- <FilePath>..\..\src\memheap.c</FilePath>
+ <FilePath>../../src/mem.c</FilePath>
</File>
+ </Files>
+ <Files>
<File>
<FileName>mempool.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\src\mempool.c</FilePath>
+ <FilePath>../../src/mempool.c</FilePath>
</File>
+ </Files>
+ <Files>
<File>
<FileName>object.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\src\object.c</FilePath>
+ <FilePath>../../src/object.c</FilePath>
</File>
+ </Files>
+ <Files>
<File>
<FileName>scheduler.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\src\scheduler.c</FilePath>
+ <FilePath>../../src/scheduler.c</FilePath>
</File>
+ </Files>
+ <Files>
<File>
<FileName>thread.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\src\thread.c</FilePath>
+ <FilePath>../../src/thread.c</FilePath>
</File>
+ </Files>
+ <Files>
<File>
<FileName>timer.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\src\timer.c</FilePath>
+ <FilePath>../../src/timer.c</FilePath>
</File>
</Files>
</Group>
@@ -489,47 +526,63 @@
<File>
<FileName>cpu.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\libcpu\arm\lpc24xx\cpu.c</FilePath>
+ <FilePath>../../libcpu/arm/lpc24xx/cpu.c</FilePath>
</File>
+ </Files>
+ <Files>
<File>
<FileName>interrupt.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\libcpu\arm\lpc24xx\interrupt.c</FilePath>
+ <FilePath>../../libcpu/arm/lpc24xx/interrupt.c</FilePath>
</File>
+ </Files>
+ <Files>
<File>
<FileName>stack.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\libcpu\arm\lpc24xx\stack.c</FilePath>
+ <FilePath>../../libcpu/arm/lpc24xx/stack.c</FilePath>
</File>
+ </Files>
+ <Files>
<File>
<FileName>trap.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\libcpu\arm\lpc24xx\trap.c</FilePath>
+ <FilePath>../../libcpu/arm/lpc24xx/trap.c</FilePath>
</File>
+ </Files>
+ <Files>
<File>
<FileName>context_rvds.S</FileName>
<FileType>2</FileType>
- <FilePath>..\..\libcpu\arm\lpc24xx\context_rvds.S</FilePath>
+ <FilePath>../../libcpu/arm/lpc24xx/context_rvds.S</FilePath>
</File>
+ </Files>
+ <Files>
<File>
<FileName>start_rvds.S</FileName>
<FileType>2</FileType>
- <FilePath>..\..\libcpu\arm\lpc24xx\start_rvds.S</FilePath>
+ <FilePath>../../libcpu/arm/lpc24xx/start_rvds.S</FilePath>
</File>
+ </Files>
+ <Files>
<File>
<FileName>backtrace.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\libcpu\arm\common\backtrace.c</FilePath>
+ <FilePath>../../libcpu/arm/common/backtrace.c</FilePath>
</File>
+ </Files>
+ <Files>
<File>
<FileName>div0.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\libcpu\arm\common\div0.c</FilePath>
+ <FilePath>../../libcpu/arm/common/div0.c</FilePath>
</File>
+ </Files>
+ <Files>
<File>
<FileName>showmem.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\libcpu\arm\common\showmem.c</FilePath>
+ <FilePath>../../libcpu/arm/common/showmem.c</FilePath>
</File>
</Files>
</Group>
@@ -537,74 +590,97 @@
<GroupName>finsh</GroupName>
<Files>
<File>
+ <FileName>shell.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../../components/finsh/shell.c</FilePath>
+ </File>
+ </Files>
+ <Files>
+ <File>
+ <FileName>symbol.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../../components/finsh/symbol.c</FilePath>
+ </File>
+ </Files>
+ <Files>
+ <File>
<FileName>cmd.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\components\finsh\cmd.c</FilePath>
+ <FilePath>../../components/finsh/cmd.c</FilePath>
</File>
+ </Files>
+ <Files>
<File>
<FileName>finsh_compiler.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\components\finsh\finsh_compiler.c</FilePath>
+ <FilePath>../../components/finsh/finsh_compiler.c</FilePath>
</File>
+ </Files>
+ <Files>
<File>
<FileName>finsh_error.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\components\finsh\finsh_error.c</FilePath>
+ <FilePath>../../components/finsh/finsh_error.c</FilePath>
</File>
+ </Files>
+ <Files>
<File>
<FileName>finsh_heap.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\components\finsh\finsh_heap.c</FilePath>
+ <FilePath>../../components/finsh/finsh_heap.c</FilePath>
</File>
+ </Files>
+ <Files>
<File>
<FileName>finsh_init.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\components\finsh\finsh_init.c</FilePath>
+ <FilePath>../../components/finsh/finsh_init.c</FilePath>
</File>
+ </Files>
+ <Files>
<File>
<FileName>finsh_node.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\components\finsh\finsh_node.c</FilePath>
+ <FilePath>../../components/finsh/finsh_node.c</FilePath>
</File>
+ </Files>
+ <Files>
<File>
<FileName>finsh_ops.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\components\finsh\finsh_ops.c</FilePath>
+ <FilePath>../../components/finsh/finsh_ops.c</FilePath>
</File>
+ </Files>
+ <Files>
<File>
<FileName>finsh_parser.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\components\finsh\finsh_parser.c</FilePath>
- </File>
- <File>
- <FileName>finsh_token.c</FileName>
- <FileType>1</FileType>
- <FilePath>..\..\components\finsh\finsh_token.c</FilePath>
+ <FilePath>../../components/finsh/finsh_parser.c</FilePath>
</File>
+ </Files>
+ <Files>
<File>
<FileName>finsh_var.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\components\finsh\finsh_var.c</FilePath>
+ <FilePath>../../components/finsh/finsh_var.c</FilePath>
</File>
+ </Files>
+ <Files>
<File>
<FileName>finsh_vm.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\components\finsh\finsh_vm.c</FilePath>
- </File>
- <File>
- <FileName>shell.c</FileName>
- <FileType>1</FileType>
- <FilePath>..\..\components\finsh\shell.c</FilePath>
+ <FilePath>../../components/finsh/finsh_vm.c</FilePath>
</File>
+ </Files>
+ <Files>
<File>
- <FileName>symbol.c</FileName>
+ <FileName>finsh_token.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\components\finsh\symbol.c</FilePath>
+ <FilePath>../../components/finsh/finsh_token.c</FilePath>
</File>
</Files>
</Group>
</Groups>
</Target>
</Targets>
-
</Project>
diff --git a/bsp/lpc408x/project.uvproj b/bsp/lpc408x/project.uvproj
new file mode 100644
index 0000000000..47403d9620
--- /dev/null
+++ b/bsp/lpc408x/project.uvproj
@@ -0,0 +1,1031 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
+<Project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="project_proj.xsd">
+ <SchemaVersion>1.1</SchemaVersion>
+ <Header>### uVision Project, (C) Keil Software</Header>
+ <Targets>
+ <Target>
+ <TargetName>RT-Thread LPC408x</TargetName>
+ <ToolsetNumber>0x4</ToolsetNumber>
+ <ToolsetName>ARM-ADS</ToolsetName>
+ <TargetOption>
+ <TargetCommonOption>
+ <Device>LPC4088</Device>
+ <Vendor>NXP (founded by Philips)</Vendor>
+ <Cpu>IRAM(0x10000000-0x1000FFFF) IRAM2(0x20000000-0x20007FFF) IROM(0-0x7FFFF) CLOCK(12000000) CPUTYPE("Cortex-M4") FPU2</Cpu>
+ <FlashUtilSpec />
+ <StartupFile>"STARTUP\NXP\LPC407x_8x_177x_8x\startup_LPC407x_8x_177x_8x.s" ("NXP LPC407x_8x_177x_8x Startup Code")</StartupFile>
+ <FlashDriverDll>UL2CM3(-O4303 -S0 -C0 -FO7 -FD10000000 -FC800 -FN1 -FF0LPC_IAP_512 -FS00 -FL080000)</FlashDriverDll>
+ <DeviceId>6493</DeviceId>
+ <RegisterFile>LPC407x_8x_177x_8x.h</RegisterFile>
+ <MemoryEnv />
+ <Cmp />
+ <Asm />
+ <Linker />
+ <OHString />
+ <InfinionOptionDll />
+ <SLE66CMisc />
+ <SLE66AMisc />
+ <SLE66LinkerMisc />
+ <SFDFile>SFD\NXP\LPC407x_8x_177x_8x\LPC408x_7x.SFR</SFDFile>
+ <UseEnv>0</UseEnv>
+ <BinPath />
+ <IncludePath />
+ <LibPath />
+ <RegisterFilePath>NXP\LPC407x_8x_177x_8x\</RegisterFilePath>
+ <DBRegisterFilePath>NXP\LPC407x_8x_177x_8x\</DBRegisterFilePath>
+ <TargetStatus>
+ <Error>0</Error>
+ <ExitCodeStop>0</ExitCodeStop>
+ <ButtonStop>0</ButtonStop>
+ <NotGenerated>0</NotGenerated>
+ <InvalidFlash>1</InvalidFlash>
+ </TargetStatus>
+ <OutputDirectory>.\build\</OutputDirectory>
+ <OutputName>rtthread-lpc</OutputName>
+ <CreateExecutable>1</CreateExecutable>
+ <CreateLib>0</CreateLib>
+ <CreateHexFile>0</CreateHexFile>
+ <DebugInformation>1</DebugInformation>
+ <BrowseInformation>1</BrowseInformation>
+ <ListingPath>.\build\</ListingPath>
+ <HexFormatSelection>1</HexFormatSelection>
+ <Merge32K>0</Merge32K>
+ <CreateBatchFile>0</CreateBatchFile>
+ <BeforeCompile>
+ <RunUserProg1>0</RunUserProg1>
+ <RunUserProg2>0</RunUserProg2>
+ <UserProg1Name />
+ <UserProg2Name />
+ <UserProg1Dos16Mode>0</UserProg1Dos16Mode>
+ <UserProg2Dos16Mode>0</UserProg2Dos16Mode>
+ <nStopU1X>0</nStopU1X>
+ <nStopU2X>0</nStopU2X>
+ </BeforeCompile>
+ <BeforeMake>
+ <RunUserProg1>0</RunUserProg1>
+ <RunUserProg2>0</RunUserProg2>
+ <UserProg1Name />
+ <UserProg2Name />
+ <UserProg1Dos16Mode>0</UserProg1Dos16Mode>
+ <UserProg2Dos16Mode>0</UserProg2Dos16Mode>
+ </BeforeMake>
+ <AfterMake>
+ <RunUserProg1>0</RunUserProg1>
+ <RunUserProg2>0</RunUserProg2>
+ <UserProg1Name />
+ <UserProg2Name />
+ <UserProg1Dos16Mode>0</UserProg1Dos16Mode>
+ <UserProg2Dos16Mode>0</UserProg2Dos16Mode>
+ </AfterMake>
+ <SelectedForBatchBuild>0</SelectedForBatchBuild>
+ <SVCSIdString />
+ </TargetCommonOption>
+ <CommonProperty>
+ <UseCPPCompiler>0</UseCPPCompiler>
+ <RVCTCodeConst>0</RVCTCodeConst>
+ <RVCTZI>0</RVCTZI>
+ <RVCTOtherData>0</RVCTOtherData>
+ <ModuleSelection>0</ModuleSelection>
+ <IncludeInBuild>1</IncludeInBuild>
+ <AlwaysBuild>0</AlwaysBuild>
+ <GenerateAssemblyFile>0</GenerateAssemblyFile>
+ <AssembleAssemblyFile>0</AssembleAssemblyFile>
+ <PublicsOnly>0</PublicsOnly>
+ <StopOnExitCode>3</StopOnExitCode>
+ <CustomArgument />
+ <IncludeLibraryModules />
+ </CommonProperty>
+ <DllOption>
+ <SimDllName>SARMCM3.DLL</SimDllName>
+ <SimDllArguments>-MPU</SimDllArguments>
+ <SimDlgDll>DCM.DLL</SimDlgDll>
+ <SimDlgDllArguments>-pCM4</SimDlgDllArguments>
+ <TargetDllName>SARMCM3.DLL</TargetDllName>
+ <TargetDllArguments>-MPU</TargetDllArguments>
+ <TargetDlgDll>TCM.DLL</TargetDlgDll>
+ <TargetDlgDllArguments>-pCM4</TargetDlgDllArguments>
+ </DllOption>
+ <DebugOption>
+ <OPTHX>
+ <HexSelection>1</HexSelection>
+ <HexRangeLowAddress>0</HexRangeLowAddress>
+ <HexRangeHighAddress>0</HexRangeHighAddress>
+ <HexOffset>0</HexOffset>
+ <Oh166RecLen>16</Oh166RecLen>
+ </OPTHX>
+ <Simulator>
+ <UseSimulator>0</UseSimulator>
+ <LoadApplicationAtStartup>1</LoadApplicationAtStartup>
+ <RunToMain>1</RunToMain>
+ <RestoreBreakpoints>1</RestoreBreakpoints>
+ <RestoreWatchpoints>1</RestoreWatchpoints>
+ <RestoreMemoryDisplay>1</RestoreMemoryDisplay>
+ <RestoreFunctions>1</RestoreFunctions>
+ <RestoreToolbox>1</RestoreToolbox>
+ <LimitSpeedToRealTime>0</LimitSpeedToRealTime>
+ </Simulator>
+ <Target>
+ <UseTarget>1</UseTarget>
+ <LoadApplicationAtStartup>1</LoadApplicationAtStartup>
+ <RunToMain>0</RunToMain>
+ <RestoreBreakpoints>1</RestoreBreakpoints>
+ <RestoreWatchpoints>1</RestoreWatchpoints>
+ <RestoreMemoryDisplay>1</RestoreMemoryDisplay>
+ <RestoreFunctions>0</RestoreFunctions>
+ <RestoreToolbox>1</RestoreToolbox>
+ <RestoreTracepoints>0</RestoreTracepoints>
+ </Target>
+ <RunDebugAfterBuild>0</RunDebugAfterBuild>
+ <TargetSelection>7</TargetSelection>
+ <SimDlls>
+ <CpuDll />
+ <CpuDllArguments />
+ <PeripheralDll />
+ <PeripheralDllArguments />
+ <InitializationFile />
+ </SimDlls>
+ <TargetDlls>
+ <CpuDll />
+ <CpuDllArguments />
+ <PeripheralDll />
+ <PeripheralDllArguments />
+ <InitializationFile />
+ <Driver>Segger\JL2CM3.dll</Driver>
+ </TargetDlls>
+ </DebugOption>
+ <Utilities>
+ <Flash1>
+ <UseTargetDll>1</UseTargetDll>
+ <UseExternalTool>0</UseExternalTool>
+ <RunIndependent>0</RunIndependent>
+ <UpdateFlashBeforeDebugging>0</UpdateFlashBeforeDebugging>
+ <Capability>1</Capability>
+ <DriverSelection>4099</DriverSelection>
+ </Flash1>
+ <bUseTDR>0</bUseTDR>
+ <Flash2>Segger\JL2CM3.dll</Flash2>
+ <Flash3>"" ()</Flash3>
+ <Flash4 />
+ </Utilities>
+ <TargetArmAds>
+ <ArmAdsMisc>
+ <GenerateListings>0</GenerateListings>
+ <asHll>1</asHll>
+ <asAsm>1</asAsm>
+ <asMacX>1</asMacX>
+ <asSyms>1</asSyms>
+ <asFals>1</asFals>
+ <asDbgD>1</asDbgD>
+ <asForm>1</asForm>
+ <ldLst>0</ldLst>
+ <ldmm>1</ldmm>
+ <ldXref>1</ldXref>
+ <BigEnd>0</BigEnd>
+ <AdsALst>1</AdsALst>
+ <AdsACrf>1</AdsACrf>
+ <AdsANop>0</AdsANop>
+ <AdsANot>0</AdsANot>
+ <AdsLLst>1</AdsLLst>
+ <AdsLmap>1</AdsLmap>
+ <AdsLcgr>1</AdsLcgr>
+ <AdsLsym>1</AdsLsym>
+ <AdsLszi>1</AdsLszi>
+ <AdsLtoi>1</AdsLtoi>
+ <AdsLsun>1</AdsLsun>
+ <AdsLven>1</AdsLven>
+ <AdsLsxf>1</AdsLsxf>
+ <RvctClst>0</RvctClst>
+ <GenPPlst>0</GenPPlst>
+ <AdsCpuType>"Cortex-M4"</AdsCpuType>
+ <RvctDeviceName />
+ <mOS>0</mOS>
+ <uocRom>0</uocRom>
+ <uocRam>0</uocRam>
+ <hadIROM>1</hadIROM>
+ <hadIRAM>1</hadIRAM>
+ <hadXRAM>0</hadXRAM>
+ <uocXRam>0</uocXRam>
+ <RvdsVP>2</RvdsVP>
+ <hadIRAM2>1</hadIRAM2>
+ <hadIROM2>0</hadIROM2>
+ <StupSel>8</StupSel>
+ <useUlib>0</useUlib>
+ <EndSel>0</EndSel>
+ <uLtcg>0</uLtcg>
+ <RoSelD>3</RoSelD>
+ <RwSelD>3</RwSelD>
+ <CodeSel>0</CodeSel>
+ <OptFeed>0</OptFeed>
+ <NoZi1>0</NoZi1>
+ <NoZi2>0</NoZi2>
+ <NoZi3>0</NoZi3>
+ <NoZi4>0</NoZi4>
+ <NoZi5>0</NoZi5>
+ <Ro1Chk>0</Ro1Chk>
+ <Ro2Chk>0</Ro2Chk>
+ <Ro3Chk>0</Ro3Chk>
+ <Ir1Chk>1</Ir1Chk>
+ <Ir2Chk>0</Ir2Chk>
+ <Ra1Chk>0</Ra1Chk>
+ <Ra2Chk>0</Ra2Chk>
+ <Ra3Chk>0</Ra3Chk>
+ <Im1Chk>1</Im1Chk>
+ <Im2Chk>0</Im2Chk>
+ <OnChipMemories>
+ <Ocm1>
+ <Type>0</Type>
+ <StartAddress>0x0</StartAddress>
+ <Size>0x0</Size>
+ </Ocm1>
+ <Ocm2>
+ <Type>0</Type>
+ <StartAddress>0x0</StartAddress>
+ <Size>0x0</Size>
+ </Ocm2>
+ <Ocm3>
+ <Type>0</Type>
+ <StartAddress>0x0</StartAddress>
+ <Size>0x0</Size>
+ </Ocm3>
+ <Ocm4>
+ <Type>0</Type>
+ <StartAddress>0x0</StartAddress>
+ <Size>0x0</Size>
+ </Ocm4>
+ <Ocm5>
+ <Type>0</Type>
+ <StartAddress>0x0</StartAddress>
+ <Size>0x0</Size>
+ </Ocm5>
+ <Ocm6>
+ <Type>0</Type>
+ <StartAddress>0x0</StartAddress>
+ <Size>0x0</Size>
+ </Ocm6>
+ <IRAM>
+ <Type>0</Type>
+ <StartAddress>0x10000000</StartAddress>
+ <Size>0x10000</Size>
+ </IRAM>
+ <IROM>
+ <Type>1</Type>
+ <StartAddress>0x0</StartAddress>
+ <Size>0x80000</Size>
+ </IROM>
+ <XRAM>
+ <Type>0</Type>
+ <StartAddress>0x0</StartAddress>
+ <Size>0x0</Size>
+ </XRAM>
+ <OCR_RVCT1>
+ <Type>1</Type>
+ <StartAddress>0x0</StartAddress>
+ <Size>0x0</Size>
+ </OCR_RVCT1>
+ <OCR_RVCT2>
+ <Type>1</Type>
+ <StartAddress>0x0</StartAddress>
+ <Size>0x0</Size>
+ </OCR_RVCT2>
+ <OCR_RVCT3>
+ <Type>1</Type>
+ <StartAddress>0x0</StartAddress>
+ <Size>0x0</Size>
+ </OCR_RVCT3>
+ <OCR_RVCT4>
+ <Type>1</Type>
+ <StartAddress>0x0</StartAddress>
+ <Size>0x80000</Size>
+ </OCR_RVCT4>
+ <OCR_RVCT5>
+ <Type>1</Type>
+ <StartAddress>0x0</StartAddress>
+ <Size>0x0</Size>
+ </OCR_RVCT5>
+ <OCR_RVCT6>
+ <Type>0</Type>
+ <StartAddress>0x0</StartAddress>
+ <Size>0x0</Size>
+ </OCR_RVCT6>
+ <OCR_RVCT7>
+ <Type>0</Type>
+ <StartAddress>0x0</StartAddress>
+ <Size>0x0</Size>
+ </OCR_RVCT7>
+ <OCR_RVCT8>
+ <Type>0</Type>
+ <StartAddress>0x0</StartAddress>
+ <Size>0x0</Size>
+ </OCR_RVCT8>
+ <OCR_RVCT9>
+ <Type>0</Type>
+ <StartAddress>0x10000000</StartAddress>
+ <Size>0x10000</Size>
+ </OCR_RVCT9>
+ <OCR_RVCT10>
+ <Type>0</Type>
+ <StartAddress>0x20000000</StartAddress>
+ <Size>0x8000</Size>
+ </OCR_RVCT10>
+ </OnChipMemories>
+ <RvctStartVector />
+ </ArmAdsMisc>
+ <Cads>
+ <interw>1</interw>
+ <Optim>1</Optim>
+ <oTime>0</oTime>
+ <SplitLS>0</SplitLS>
+ <OneElfS>0</OneElfS>
+ <Strict>0</Strict>
+ <EnumInt>0</EnumInt>
+ <PlainCh>0</PlainCh>
+ <Ropi>0</Ropi>
+ <Rwpi>0</Rwpi>
+ <wLevel>0</wLevel>
+ <uThumb>0</uThumb>
+ <uSurpInc>0</uSurpInc>
+ <VariousControls>
+ <MiscControls />
+ <Define>CORE_M4, RT_USING_ARM_LIBC</Define>
+ <Undefine />
+ <IncludePath>Libraries/Device/NXP/LPC407x_8x_177x_8x/Include;Libraries/CMSIS/Include;Libraries/Drivers/include;applications;.;drivers;../../include;../../libcpu/arm/cortex-m4;../../libcpu/arm/common;../../components/pthreads;../../components/libc/armlibc;../../components/drivers/include;../../components/drivers/include;../../components/finsh</IncludePath>
+ </VariousControls>
+ </Cads>
+ <Aads>
+ <interw>1</interw>
+ <Ropi>0</Ropi>
+ <Rwpi>0</Rwpi>
+ <thumb>0</thumb>
+ <SplitLS>0</SplitLS>
+ <SwStkChk>0</SwStkChk>
+ <NoWarn>0</NoWarn>
+ <uSurpInc>0</uSurpInc>
+ <VariousControls>
+ <MiscControls />
+ <Define />
+ <Undefine />
+ <IncludePath />
+ </VariousControls>
+ </Aads>
+ <LDads>
+ <umfTarg>1</umfTarg>
+ <Ropi>0</Ropi>
+ <Rwpi>0</Rwpi>
+ <noStLib>0</noStLib>
+ <RepFail>1</RepFail>
+ <useFile>0</useFile>
+ <TextAddressRange>0x00000000</TextAddressRange>
+ <DataAddressRange>0x10000000</DataAddressRange>
+ <ScatterFile />
+ <IncludeLibs />
+ <IncludeLibsPath />
+ <Misc> --keep *.o(.rti_fn.*) --keep *.o(FSymTab) --keep *.o(VSymTab) </Misc>
+ <LinkerInputFile />
+ <DisabledWarnings />
+ </LDads>
+ </TargetArmAds>
+ </TargetOption>
+ <Groups>
+ <Group>
+ <GroupName>CMSIS</GroupName>
+ <Files>
+ <File>
+ <FileName>system_LPC407x_8x_177x_8x.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>Libraries/Device/NXP/LPC407x_8x_177x_8x/Source/Templates/system_LPC407x_8x_177x_8x.c</FilePath>
+ </File>
+ </Files>
+ <Files>
+ <File>
+ <FileName>startup_LPC407x_8x_177x_8x.s</FileName>
+ <FileType>2</FileType>
+ <FilePath>Libraries/Device/NXP/LPC407x_8x_177x_8x/Source/Templates/ARM/startup_LPC407x_8x_177x_8x.s</FilePath>
+ </File>
+ </Files>
+ </Group>
+ <Group>
+ <GroupName>Libraries</GroupName>
+ <Files>
+ <File>
+ <FileName>lpc_adc.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>Libraries/Drivers/source/lpc_adc.c</FilePath>
+ </File>
+ </Files>
+ <Files>
+ <File>
+ <FileName>lpc_bod.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>Libraries/Drivers/source/lpc_bod.c</FilePath>
+ </File>
+ </Files>
+ <Files>
+ <File>
+ <FileName>lpc_can.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>Libraries/Drivers/source/lpc_can.c</FilePath>
+ </File>
+ </Files>
+ <Files>
+ <File>
+ <FileName>lpc_clkpwr.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>Libraries/Drivers/source/lpc_clkpwr.c</FilePath>
+ </File>
+ </Files>
+ <Files>
+ <File>
+ <FileName>lpc_crc.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>Libraries/Drivers/source/lpc_crc.c</FilePath>
+ </File>
+ </Files>
+ <Files>
+ <File>
+ <FileName>lpc_dac.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>Libraries/Drivers/source/lpc_dac.c</FilePath>
+ </File>
+ </Files>
+ <Files>
+ <File>
+ <FileName>lpc_eeprom.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>Libraries/Drivers/source/lpc_eeprom.c</FilePath>
+ </File>
+ </Files>
+ <Files>
+ <File>
+ <FileName>lpc_emc.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>Libraries/Drivers/source/lpc_emc.c</FilePath>
+ </File>
+ </Files>
+ <Files>
+ <File>
+ <FileName>lpc_exti.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>Libraries/Drivers/source/lpc_exti.c</FilePath>
+ </File>
+ </Files>
+ <Files>
+ <File>
+ <FileName>lpc_gpdma.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>Libraries/Drivers/source/lpc_gpdma.c</FilePath>
+ </File>
+ </Files>
+ <Files>
+ <File>
+ <FileName>lpc_gpio.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>Libraries/Drivers/source/lpc_gpio.c</FilePath>
+ </File>
+ </Files>
+ <Files>
+ <File>
+ <FileName>lpc_i2c.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>Libraries/Drivers/source/lpc_i2c.c</FilePath>
+ </File>
+ </Files>
+ <Files>
+ <File>
+ <FileName>lpc_i2s.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>Libraries/Drivers/source/lpc_i2s.c</FilePath>
+ </File>
+ </Files>
+ <Files>
+ <File>
+ <FileName>lpc_iap.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>Libraries/Drivers/source/lpc_iap.c</FilePath>
+ </File>
+ </Files>
+ <Files>
+ <File>
+ <FileName>lpc_lcd.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>Libraries/Drivers/source/lpc_lcd.c</FilePath>
+ </File>
+ </Files>
+ <Files>
+ <File>
+ <FileName>lpc_mcpwm.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>Libraries/Drivers/source/lpc_mcpwm.c</FilePath>
+ </File>
+ </Files>
+ <Files>
+ <File>
+ <FileName>lpc_nvic.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>Libraries/Drivers/source/lpc_nvic.c</FilePath>
+ </File>
+ </Files>
+ <Files>
+ <File>
+ <FileName>lpc_pinsel.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>Libraries/Drivers/source/lpc_pinsel.c</FilePath>
+ </File>
+ </Files>
+ <Files>
+ <File>
+ <FileName>lpc_pwm.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>Libraries/Drivers/source/lpc_pwm.c</FilePath>
+ </File>
+ </Files>
+ <Files>
+ <File>
+ <FileName>lpc_qei.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>Libraries/Drivers/source/lpc_qei.c</FilePath>
+ </File>
+ </Files>
+ <Files>
+ <File>
+ <FileName>lpc_rtc.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>Libraries/Drivers/source/lpc_rtc.c</FilePath>
+ </File>
+ </Files>
+ <Files>
+ <File>
+ <FileName>lpc_ssp.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>Libraries/Drivers/source/lpc_ssp.c</FilePath>
+ </File>
+ </Files>
+ <Files>
+ <File>
+ <FileName>lpc_systick.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>Libraries/Drivers/source/lpc_systick.c</FilePath>
+ </File>
+ </Files>
+ <Files>
+ <File>
+ <FileName>lpc_timer.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>Libraries/Drivers/source/lpc_timer.c</FilePath>
+ </File>
+ </Files>
+ <Files>
+ <File>
+ <FileName>lpc_uart.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>Libraries/Drivers/source/lpc_uart.c</FilePath>
+ </File>
+ </Files>
+ <Files>
+ <File>
+ <FileName>lpc_wwdt.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>Libraries/Drivers/source/lpc_wwdt.c</FilePath>
+ </File>
+ </Files>
+ </Group>
+ <Group>
+ <GroupName>Applications</GroupName>
+ <Files>
+ <File>
+ <FileName>application.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>applications/application.c</FilePath>
+ </File>
+ </Files>
+ <Files>
+ <File>
+ <FileName>board.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>applications/board.c</FilePath>
+ </File>
+ </Files>
+ <Files>
+ <File>
+ <FileName>sram.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>applications/sram.c</FilePath>
+ </File>
+ </Files>
+ <Files>
+ <File>
+ <FileName>startup.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>applications/startup.c</FilePath>
+ </File>
+ </Files>
+ </Group>
+ <Group>
+ <GroupName>Drivers</GroupName>
+ <Files>
+ <File>
+ <FileName>drv_led.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>drivers/drv_led.c</FilePath>
+ </File>
+ </Files>
+ <Files>
+ <File>
+ <FileName>drv_uart.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>drivers/drv_uart.c</FilePath>
+ </File>
+ </Files>
+ </Group>
+ <Group>
+ <GroupName>Kernel</GroupName>
+ <Files>
+ <File>
+ <FileName>clock.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../../src/clock.c</FilePath>
+ </File>
+ </Files>
+ <Files>
+ <File>
+ <FileName>components.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../../src/components.c</FilePath>
+ </File>
+ </Files>
+ <Files>
+ <File>
+ <FileName>device.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../../src/device.c</FilePath>
+ </File>
+ </Files>
+ <Files>
+ <File>
+ <FileName>idle.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../../src/idle.c</FilePath>
+ </File>
+ </Files>
+ <Files>
+ <File>
+ <FileName>ipc.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../../src/ipc.c</FilePath>
+ </File>
+ </Files>
+ <Files>
+ <File>
+ <FileName>irq.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../../src/irq.c</FilePath>
+ </File>
+ </Files>
+ <Files>
+ <File>
+ <FileName>kservice.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../../src/kservice.c</FilePath>
+ </File>
+ </Files>
+ <Files>
+ <File>
+ <FileName>mem.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../../src/mem.c</FilePath>
+ </File>
+ </Files>
+ <Files>
+ <File>
+ <FileName>memheap.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../../src/memheap.c</FilePath>
+ </File>
+ </Files>
+ <Files>
+ <File>
+ <FileName>mempool.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../../src/mempool.c</FilePath>
+ </File>
+ </Files>
+ <Files>
+ <File>
+ <FileName>object.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../../src/object.c</FilePath>
+ </File>
+ </Files>
+ <Files>
+ <File>
+ <FileName>scheduler.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../../src/scheduler.c</FilePath>
+ </File>
+ </Files>
+ <Files>
+ <File>
+ <FileName>thread.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../../src/thread.c</FilePath>
+ </File>
+ </Files>
+ <Files>
+ <File>
+ <FileName>timer.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../../src/timer.c</FilePath>
+ </File>
+ </Files>
+ </Group>
+ <Group>
+ <GroupName>CORTEX-M4</GroupName>
+ <Files>
+ <File>
+ <FileName>cpuport.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../../libcpu/arm/cortex-m4/cpuport.c</FilePath>
+ </File>
+ </Files>
+ <Files>
+ <File>
+ <FileName>context_rvds.S</FileName>
+ <FileType>2</FileType>
+ <FilePath>../../libcpu/arm/cortex-m4/context_rvds.S</FilePath>
+ </File>
+ </Files>
+ <Files>
+ <File>
+ <FileName>backtrace.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../../libcpu/arm/common/backtrace.c</FilePath>
+ </File>
+ </Files>
+ <Files>
+ <File>
+ <FileName>div0.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../../libcpu/arm/common/div0.c</FilePath>
+ </File>
+ </Files>
+ <Files>
+ <File>
+ <FileName>showmem.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../../libcpu/arm/common/showmem.c</FilePath>
+ </File>
+ </Files>
+ </Group>
+ <Group>
+ <GroupName>pthreads</GroupName>
+ <Files>
+ <File>
+ <FileName>clock_time.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../../components/pthreads/clock_time.c</FilePath>
+ </File>
+ </Files>
+ <Files>
+ <File>
+ <FileName>mqueue.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../../components/pthreads/mqueue.c</FilePath>
+ </File>
+ </Files>
+ <Files>
+ <File>
+ <FileName>pthread.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../../components/pthreads/pthread.c</FilePath>
+ </File>
+ </Files>
+ <Files>
+ <File>
+ <FileName>pthread_attr.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../../components/pthreads/pthread_attr.c</FilePath>
+ </File>
+ </Files>
+ <Files>
+ <File>
+ <FileName>pthread_barrier.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../../components/pthreads/pthread_barrier.c</FilePath>
+ </File>
+ </Files>
+ <Files>
+ <File>
+ <FileName>pthread_cond.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../../components/pthreads/pthread_cond.c</FilePath>
+ </File>
+ </Files>
+ <Files>
+ <File>
+ <FileName>pthread_mutex.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../../components/pthreads/pthread_mutex.c</FilePath>
+ </File>
+ </Files>
+ <Files>
+ <File>
+ <FileName>pthread_rwlock.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../../components/pthreads/pthread_rwlock.c</FilePath>
+ </File>
+ </Files>
+ <Files>
+ <File>
+ <FileName>pthread_spin.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../../components/pthreads/pthread_spin.c</FilePath>
+ </File>
+ </Files>
+ <Files>
+ <File>
+ <FileName>pthread_tls.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../../components/pthreads/pthread_tls.c</FilePath>
+ </File>
+ </Files>
+ <Files>
+ <File>
+ <FileName>sched.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../../components/pthreads/sched.c</FilePath>
+ </File>
+ </Files>
+ <Files>
+ <File>
+ <FileName>semaphore.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../../components/pthreads/semaphore.c</FilePath>
+ </File>
+ </Files>
+ </Group>
+ <Group>
+ <GroupName>libc</GroupName>
+ <Files>
+ <File>
+ <FileName>mem_std.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../../components/libc/armlibc/mem_std.c</FilePath>
+ </File>
+ </Files>
+ <Files>
+ <File>
+ <FileName>stubs.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../../components/libc/armlibc/stubs.c</FilePath>
+ </File>
+ </Files>
+ </Group>
+ <Group>
+ <GroupName>DeviceDrivers</GroupName>
+ <Files>
+ <File>
+ <FileName>serial.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../../components/drivers/serial/serial.c</FilePath>
+ </File>
+ </Files>
+ <Files>
+ <File>
+ <FileName>completion.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../../components/drivers/src/completion.c</FilePath>
+ </File>
+ </Files>
+ <Files>
+ <File>
+ <FileName>dataqueue.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../../components/drivers/src/dataqueue.c</FilePath>
+ </File>
+ </Files>
+ <Files>
+ <File>
+ <FileName>pipe.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../../components/drivers/src/pipe.c</FilePath>
+ </File>
+ </Files>
+ <Files>
+ <File>
+ <FileName>portal.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../../components/drivers/src/portal.c</FilePath>
+ </File>
+ </Files>
+ <Files>
+ <File>
+ <FileName>ringbuffer.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../../components/drivers/src/ringbuffer.c</FilePath>
+ </File>
+ </Files>
+ <Files>
+ <File>
+ <FileName>workqueue.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../../components/drivers/src/workqueue.c</FilePath>
+ </File>
+ </Files>
+ </Group>
+ <Group>
+ <GroupName>finsh</GroupName>
+ <Files>
+ <File>
+ <FileName>shell.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../../components/finsh/shell.c</FilePath>
+ </File>
+ </Files>
+ <Files>
+ <File>
+ <FileName>symbol.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../../components/finsh/symbol.c</FilePath>
+ </File>
+ </Files>
+ <Files>
+ <File>
+ <FileName>cmd.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../../components/finsh/cmd.c</FilePath>
+ </File>
+ </Files>
+ <Files>
+ <File>
+ <FileName>finsh_compiler.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../../components/finsh/finsh_compiler.c</FilePath>
+ </File>
+ </Files>
+ <Files>
+ <File>
+ <FileName>finsh_error.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../../components/finsh/finsh_error.c</FilePath>
+ </File>
+ </Files>
+ <Files>
+ <File>
+ <FileName>finsh_heap.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../../components/finsh/finsh_heap.c</FilePath>
+ </File>
+ </Files>
+ <Files>
+ <File>
+ <FileName>finsh_init.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../../components/finsh/finsh_init.c</FilePath>
+ </File>
+ </Files>
+ <Files>
+ <File>
+ <FileName>finsh_node.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../../components/finsh/finsh_node.c</FilePath>
+ </File>
+ </Files>
+ <Files>
+ <File>
+ <FileName>finsh_ops.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../../components/finsh/finsh_ops.c</FilePath>
+ </File>
+ </Files>
+ <Files>
+ <File>
+ <FileName>finsh_parser.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../../components/finsh/finsh_parser.c</FilePath>
+ </File>
+ </Files>
+ <Files>
+ <File>
+ <FileName>finsh_var.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../../components/finsh/finsh_var.c</FilePath>
+ </File>
+ </Files>
+ <Files>
+ <File>
+ <FileName>finsh_vm.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../../components/finsh/finsh_vm.c</FilePath>
+ </File>
+ </Files>
+ <Files>
+ <File>
+ <FileName>finsh_token.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../../components/finsh/finsh_token.c</FilePath>
+ </File>
+ </Files>
+ </Group>
+ </Groups>
+ </Target>
+ </Targets>
+</Project>
diff --git a/bsp/mb9bf506r/project.uvproj b/bsp/mb9bf506r/project.uvproj
index e6b538f29d..6b43252f74 100644
--- a/bsp/mb9bf506r/project.uvproj
+++ b/bsp/mb9bf506r/project.uvproj
@@ -1,10 +1,7 @@
<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
<Project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="project_proj.xsd">
-
<SchemaVersion>1.1</SchemaVersion>
-
<Header>### uVision Project, (C) Keil Software</Header>
-
<Targets>
<Target>
<TargetName>rtthread-fm3</TargetName>
@@ -15,25 +12,25 @@
<Device>MB9BF506R</Device>
<Vendor>Fujitsu Semiconductors</Vendor>
<Cpu>IRAM(0x20000000-0x20007FFF) IRAM2(0x1FFF8000-0x1FFFFFFF) IROM(0x00000000-0x0007FFFF) CLOCK(4000000) CPUTYPE("Cortex-M3")</Cpu>
- <FlashUtilSpec></FlashUtilSpec>
+ <FlashUtilSpec />
<StartupFile>"Startup\Fujitsu\MB9B500\startup_MB9BF50x.s" ("Fujitsu MB9BF50x Startup Code")</StartupFile>
<FlashDriverDll>UL2CM3(-O207 -S0 -C0 -FO7 -FD20000000 -FC800 -FN1 -FF0MB9BFx06_512 -FS00 -FL080000)</FlashDriverDll>
<DeviceId>5216</DeviceId>
<RegisterFile>MB9BF506R.h</RegisterFile>
- <MemoryEnv></MemoryEnv>
- <Cmp></Cmp>
- <Asm></Asm>
- <Linker></Linker>
- <OHString></OHString>
- <InfinionOptionDll></InfinionOptionDll>
- <SLE66CMisc></SLE66CMisc>
- <SLE66AMisc></SLE66AMisc>
- <SLE66LinkerMisc></SLE66LinkerMisc>
+ <MemoryEnv />
+ <Cmp />
+ <Asm />
+ <Linker />
+ <OHString />
+ <InfinionOptionDll />
+ <SLE66CMisc />
+ <SLE66AMisc />
+ <SLE66LinkerMisc />
<SFDFile>SFD\Fujitsu\MB9B500\MB9BF506R.SFR</SFDFile>
<UseEnv>0</UseEnv>
- <BinPath></BinPath>
- <IncludePath></IncludePath>
- <LibPath></LibPath>
+ <BinPath />
+ <IncludePath />
+ <LibPath />
<RegisterFilePath>Fujitsu\MB9B500\</RegisterFilePath>
<DBRegisterFilePath>Fujitsu\MB9B500\</DBRegisterFilePath>
<TargetStatus>
@@ -57,31 +54,29 @@
<BeforeCompile>
<RunUserProg1>0</RunUserProg1>
<RunUserProg2>0</RunUserProg2>
- <UserProg1Name></UserProg1Name>
- <UserProg2Name></UserProg2Name>
+ <UserProg1Name />
+ <UserProg2Name />
<UserProg1Dos16Mode>0</UserProg1Dos16Mode>
<UserProg2Dos16Mode>0</UserProg2Dos16Mode>
- <nStopU1X>0</nStopU1X>
- <nStopU2X>0</nStopU2X>
</BeforeCompile>
<BeforeMake>
<RunUserProg1>0</RunUserProg1>
<RunUserProg2>0</RunUserProg2>
- <UserProg1Name></UserProg1Name>
- <UserProg2Name></UserProg2Name>
+ <UserProg1Name />
+ <UserProg2Name />
<UserProg1Dos16Mode>0</UserProg1Dos16Mode>
<UserProg2Dos16Mode>0</UserProg2Dos16Mode>
</BeforeMake>
<AfterMake>
<RunUserProg1>0</RunUserProg1>
<RunUserProg2>0</RunUserProg2>
- <UserProg1Name></UserProg1Name>
- <UserProg2Name></UserProg2Name>
+ <UserProg1Name />
+ <UserProg2Name />
<UserProg1Dos16Mode>0</UserProg1Dos16Mode>
<UserProg2Dos16Mode>0</UserProg2Dos16Mode>
</AfterMake>
<SelectedForBatchBuild>0</SelectedForBatchBuild>
- <SVCSIdString></SVCSIdString>
+ <SVCSIdString />
</TargetCommonOption>
<CommonProperty>
<UseCPPCompiler>0</UseCPPCompiler>
@@ -95,8 +90,8 @@
<AssembleAssemblyFile>0</AssembleAssemblyFile>
<PublicsOnly>0</PublicsOnly>
<StopOnExitCode>3</StopOnExitCode>
- <CustomArgument></CustomArgument>
- <IncludeLibraryModules></IncludeLibraryModules>
+ <CustomArgument />
+ <IncludeLibraryModules />
</CommonProperty>
<DllOption>
<SimDllName>SARMCM3.DLL</SimDllName>
@@ -130,29 +125,28 @@
<Target>
<UseTarget>1</UseTarget>
<LoadApplicationAtStartup>1</LoadApplicationAtStartup>
- <RunToMain>1</RunToMain>
+ <RunToMain>0</RunToMain>
<RestoreBreakpoints>1</RestoreBreakpoints>
<RestoreWatchpoints>1</RestoreWatchpoints>
<RestoreMemoryDisplay>1</RestoreMemoryDisplay>
<RestoreFunctions>0</RestoreFunctions>
<RestoreToolbox>1</RestoreToolbox>
- <RestoreTracepoints>0</RestoreTracepoints>
</Target>
<RunDebugAfterBuild>0</RunDebugAfterBuild>
<TargetSelection>7</TargetSelection>
<SimDlls>
- <CpuDll></CpuDll>
- <CpuDllArguments></CpuDllArguments>
- <PeripheralDll></PeripheralDll>
- <PeripheralDllArguments></PeripheralDllArguments>
- <InitializationFile></InitializationFile>
+ <CpuDll />
+ <CpuDllArguments />
+ <PeripheralDll />
+ <PeripheralDllArguments />
+ <InitializationFile />
</SimDlls>
<TargetDlls>
- <CpuDll></CpuDll>
- <CpuDllArguments></CpuDllArguments>
- <PeripheralDll></PeripheralDll>
- <PeripheralDllArguments></PeripheralDllArguments>
- <InitializationFile></InitializationFile>
+ <CpuDll />
+ <CpuDllArguments />
+ <PeripheralDll />
+ <PeripheralDllArguments />
+ <InitializationFile />
<Driver>Segger\JL2CM3.dll</Driver>
</TargetDlls>
</DebugOption>
@@ -167,7 +161,7 @@
</Flash1>
<Flash2>Segger\JL2CM3.dll</Flash2>
<Flash3>"" ()</Flash3>
- <Flash4></Flash4>
+ <Flash4 />
</Utilities>
<TargetArmAds>
<ArmAdsMisc>
@@ -199,7 +193,7 @@
<RvctClst>0</RvctClst>
<GenPPlst>0</GenPPlst>
<AdsCpuType>"Cortex-M3"</AdsCpuType>
- <RvctDeviceName></RvctDeviceName>
+ <RvctDeviceName />
<mOS>0</mOS>
<uocRom>0</uocRom>
<uocRam>0</uocRam>
@@ -330,7 +324,7 @@
<Size>0x8000</Size>
</OCR_RVCT10>
</OnChipMemories>
- <RvctStartVector></RvctStartVector>
+ <RvctStartVector />
</ArmAdsMisc>
<Cads>
<interw>1</interw>
@@ -345,12 +339,11 @@
<Rwpi>0</Rwpi>
<wLevel>0</wLevel>
<uThumb>0</uThumb>
- <uSurpInc>0</uSurpInc>
<VariousControls>
- <MiscControls></MiscControls>
- <Define></Define>
- <Undefine></Undefine>
- <IncludePath>.;..\..\components\CMSIS\Include;..\..\components\drivers\include;..\..\components\finsh;..\..\components\init;..\..\include;..\..\libcpu\arm\common;..\..\libcpu\arm\cortex-m3;applications;drivers;libraries\Device\FUJISTU\MB9BF50x\Include</IncludePath>
+ <MiscControls />
+ <Define />
+ <Undefine />
+ <IncludePath>libraries/Device/FUJISTU/MB9BF50x/Include;../../components/CMSIS/Include;applications;.;drivers;../../include;../../libcpu/arm/cortex-m3;../../libcpu/arm/common;../../components/drivers/include;../../components/drivers/include;../../components/finsh</IncludePath>
</VariousControls>
</Cads>
<Aads>
@@ -361,12 +354,11 @@
<SplitLS>0</SplitLS>
<SwStkChk>0</SwStkChk>
<NoWarn>0</NoWarn>
- <uSurpInc>0</uSurpInc>
<VariousControls>
- <MiscControls></MiscControls>
- <Define></Define>
- <Undefine></Undefine>
- <IncludePath></IncludePath>
+ <MiscControls />
+ <Define />
+ <Undefine />
+ <IncludePath />
</VariousControls>
</Aads>
<LDads>
@@ -378,28 +370,47 @@
<useFile>0</useFile>
<TextAddressRange>0x08000000</TextAddressRange>
<DataAddressRange>0x20000000</DataAddressRange>
- <ScatterFile></ScatterFile>
- <IncludeLibs></IncludeLibs>
- <IncludeLibsPath></IncludeLibsPath>
- <Misc> --keep __fsym_* --keep __vsym_* </Misc>
- <LinkerInputFile></LinkerInputFile>
- <DisabledWarnings></DisabledWarnings>
+ <ScatterFile />
+ <IncludeLibs />
+ <IncludeLibsPath />
+ <Misc> --keep *.o(.rti_fn.*) --keep *.o(FSymTab) --keep *.o(VSymTab) </Misc>
+ <LinkerInputFile />
+ <DisabledWarnings />
</LDads>
</TargetArmAds>
</TargetOption>
<Groups>
<Group>
+ <GroupName>CMSIS</GroupName>
+ <Files>
+ <File>
+ <FileName>system_mb9bf50x.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>libraries/Device/FUJISTU/MB9BF50x/Source/system_mb9bf50x.c</FilePath>
+ </File>
+ </Files>
+ <Files>
+ <File>
+ <FileName>startup_mb9bf50x.S</FileName>
+ <FileType>2</FileType>
+ <FilePath>libraries/Device/FUJISTU/MB9BF50x/Source/ARM/startup_mb9bf50x.S</FilePath>
+ </File>
+ </Files>
+ </Group>
+ <Group>
<GroupName>Applications</GroupName>
<Files>
<File>
<FileName>application.c</FileName>
<FileType>1</FileType>
- <FilePath>applications\application.c</FilePath>
+ <FilePath>applications/application.c</FilePath>
</File>
+ </Files>
+ <Files>
<File>
<FileName>startup.c</FileName>
<FileType>1</FileType>
- <FilePath>applications\startup.c</FilePath>
+ <FilePath>applications/startup.c</FilePath>
</File>
</Files>
</Group>
@@ -409,107 +420,129 @@
<File>
<FileName>board.c</FileName>
<FileType>1</FileType>
- <FilePath>drivers\board.c</FilePath>
+ <FilePath>drivers/board.c</FilePath>
</File>
+ </Files>
+ <Files>
<File>
<FileName>fm3_uart.c</FileName>
<FileType>1</FileType>
- <FilePath>drivers\fm3_uart.c</FilePath>
+ <FilePath>drivers/fm3_uart.c</FilePath>
</File>
+ </Files>
+ <Files>
<File>
<FileName>led.c</FileName>
<FileType>1</FileType>
- <FilePath>drivers\led.c</FilePath>
+ <FilePath>drivers/led.c</FilePath>
</File>
+ </Files>
+ <Files>
<File>
<FileName>nand.c</FileName>
<FileType>1</FileType>
- <FilePath>drivers\nand.c</FilePath>
+ <FilePath>drivers/nand.c</FilePath>
</File>
</Files>
</Group>
<Group>
- <GroupName>CMSIS</GroupName>
+ <GroupName>Kernel</GroupName>
<Files>
<File>
- <FileName>system_mb9bf50x.c</FileName>
+ <FileName>clock.c</FileName>
<FileType>1</FileType>
- <FilePath>libraries\Device\FUJISTU\MB9BF50x\Source\system_mb9bf50x.c</FilePath>
- </File>
- <File>
- <FileName>startup_mb9bf50x.S</FileName>
- <FileType>2</FileType>
- <FilePath>libraries\Device\FUJISTU\MB9BF50x\Source\ARM\startup_mb9bf50x.S</FilePath>
+ <FilePath>../../src/clock.c</FilePath>
</File>
</Files>
- </Group>
- <Group>
- <GroupName>Kernel</GroupName>
<Files>
<File>
- <FileName>clock.c</FileName>
+ <FileName>components.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\src\clock.c</FilePath>
+ <FilePath>../../src/components.c</FilePath>
</File>
+ </Files>
+ <Files>
<File>
<FileName>device.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\src\device.c</FilePath>
+ <FilePath>../../src/device.c</FilePath>
</File>
+ </Files>
+ <Files>
<File>
<FileName>idle.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\src\idle.c</FilePath>
+ <FilePath>../../src/idle.c</FilePath>
</File>
+ </Files>
+ <Files>
<File>
<FileName>ipc.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\src\ipc.c</FilePath>
+ <FilePath>../../src/ipc.c</FilePath>
</File>
+ </Files>
+ <Files>
<File>
<FileName>irq.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\src\irq.c</FilePath>
+ <FilePath>../../src/irq.c</FilePath>
</File>
+ </Files>
+ <Files>
<File>
<FileName>kservice.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\src\kservice.c</FilePath>
+ <FilePath>../../src/kservice.c</FilePath>
</File>
+ </Files>
+ <Files>
<File>
<FileName>mem.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\src\mem.c</FilePath>
+ <FilePath>../../src/mem.c</FilePath>
</File>
+ </Files>
+ <Files>
<File>
<FileName>memheap.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\src\memheap.c</FilePath>
+ <FilePath>../../src/memheap.c</FilePath>
</File>
+ </Files>
+ <Files>
<File>
<FileName>mempool.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\src\mempool.c</FilePath>
+ <FilePath>../../src/mempool.c</FilePath>
</File>
+ </Files>
+ <Files>
<File>
<FileName>object.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\src\object.c</FilePath>
+ <FilePath>../../src/object.c</FilePath>
</File>
+ </Files>
+ <Files>
<File>
<FileName>scheduler.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\src\scheduler.c</FilePath>
+ <FilePath>../../src/scheduler.c</FilePath>
</File>
+ </Files>
+ <Files>
<File>
<FileName>thread.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\src\thread.c</FilePath>
+ <FilePath>../../src/thread.c</FilePath>
</File>
+ </Files>
+ <Files>
<File>
<FileName>timer.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\src\timer.c</FilePath>
+ <FilePath>../../src/timer.c</FilePath>
</File>
</Files>
</Group>
@@ -519,27 +552,35 @@
<File>
<FileName>cpuport.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\libcpu\arm\cortex-m3\cpuport.c</FilePath>
+ <FilePath>../../libcpu/arm/cortex-m3/cpuport.c</FilePath>
</File>
+ </Files>
+ <Files>
<File>
<FileName>context_rvds.S</FileName>
<FileType>2</FileType>
- <FilePath>..\..\libcpu\arm\cortex-m3\context_rvds.S</FilePath>
+ <FilePath>../../libcpu/arm/cortex-m3/context_rvds.S</FilePath>
</File>
+ </Files>
+ <Files>
<File>
<FileName>backtrace.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\libcpu\arm\common\backtrace.c</FilePath>
+ <FilePath>../../libcpu/arm/common/backtrace.c</FilePath>
</File>
+ </Files>
+ <Files>
<File>
<FileName>div0.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\libcpu\arm\common\div0.c</FilePath>
+ <FilePath>../../libcpu/arm/common/div0.c</FilePath>
</File>
+ </Files>
+ <Files>
<File>
<FileName>showmem.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\libcpu\arm\common\showmem.c</FilePath>
+ <FilePath>../../libcpu/arm/common/showmem.c</FilePath>
</File>
</Files>
</Group>
@@ -549,27 +590,49 @@
<File>
<FileName>serial.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\components\drivers\serial\serial.c</FilePath>
+ <FilePath>../../components/drivers/serial/serial.c</FilePath>
</File>
+ </Files>
+ <Files>
<File>
<FileName>completion.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\components\drivers\src\completion.c</FilePath>
+ <FilePath>../../components/drivers/src/completion.c</FilePath>
</File>
+ </Files>
+ <Files>
<File>
<FileName>dataqueue.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\components\drivers\src\dataqueue.c</FilePath>
+ <FilePath>../../components/drivers/src/dataqueue.c</FilePath>
</File>
+ </Files>
+ <Files>
<File>
<FileName>pipe.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\components\drivers\src\pipe.c</FilePath>
+ <FilePath>../../components/drivers/src/pipe.c</FilePath>
</File>
+ </Files>
+ <Files>
+ <File>
+ <FileName>portal.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../../components/drivers/src/portal.c</FilePath>
+ </File>
+ </Files>
+ <Files>
<File>
<FileName>ringbuffer.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\components\drivers\src\ringbuffer.c</FilePath>
+ <FilePath>../../components/drivers/src/ringbuffer.c</FilePath>
+ </File>
+ </Files>
+ <Files>
+ <File>
+ <FileName>workqueue.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../../components/drivers/src/workqueue.c</FilePath>
</File>
</Files>
</Group>
@@ -577,84 +640,97 @@
<GroupName>finsh</GroupName>
<Files>
<File>
+ <FileName>shell.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../../components/finsh/shell.c</FilePath>
+ </File>
+ </Files>
+ <Files>
+ <File>
+ <FileName>symbol.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../../components/finsh/symbol.c</FilePath>
+ </File>
+ </Files>
+ <Files>
+ <File>
<FileName>cmd.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\components\finsh\cmd.c</FilePath>
+ <FilePath>../../components/finsh/cmd.c</FilePath>
</File>
+ </Files>
+ <Files>
<File>
<FileName>finsh_compiler.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\components\finsh\finsh_compiler.c</FilePath>
+ <FilePath>../../components/finsh/finsh_compiler.c</FilePath>
</File>
+ </Files>
+ <Files>
<File>
<FileName>finsh_error.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\components\finsh\finsh_error.c</FilePath>
+ <FilePath>../../components/finsh/finsh_error.c</FilePath>
</File>
+ </Files>
+ <Files>
<File>
<FileName>finsh_heap.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\components\finsh\finsh_heap.c</FilePath>
+ <FilePath>../../components/finsh/finsh_heap.c</FilePath>
</File>
+ </Files>
+ <Files>
<File>
<FileName>finsh_init.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\components\finsh\finsh_init.c</FilePath>
+ <FilePath>../../components/finsh/finsh_init.c</FilePath>
</File>
+ </Files>
+ <Files>
<File>
<FileName>finsh_node.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\components\finsh\finsh_node.c</FilePath>
+ <FilePath>../../components/finsh/finsh_node.c</FilePath>
</File>
+ </Files>
+ <Files>
<File>
<FileName>finsh_ops.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\components\finsh\finsh_ops.c</FilePath>
+ <FilePath>../../components/finsh/finsh_ops.c</FilePath>
</File>
+ </Files>
+ <Files>
<File>
<FileName>finsh_parser.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\components\finsh\finsh_parser.c</FilePath>
- </File>
- <File>
- <FileName>finsh_token.c</FileName>
- <FileType>1</FileType>
- <FilePath>..\..\components\finsh\finsh_token.c</FilePath>
+ <FilePath>../../components/finsh/finsh_parser.c</FilePath>
</File>
+ </Files>
+ <Files>
<File>
<FileName>finsh_var.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\components\finsh\finsh_var.c</FilePath>
+ <FilePath>../../components/finsh/finsh_var.c</FilePath>
</File>
+ </Files>
+ <Files>
<File>
<FileName>finsh_vm.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\components\finsh\finsh_vm.c</FilePath>
- </File>
- <File>
- <FileName>shell.c</FileName>
- <FileType>1</FileType>
- <FilePath>..\..\components\finsh\shell.c</FilePath>
- </File>
- <File>
- <FileName>symbol.c</FileName>
- <FileType>1</FileType>
- <FilePath>..\..\components\finsh\symbol.c</FilePath>
+ <FilePath>../../components/finsh/finsh_vm.c</FilePath>
</File>
</Files>
- </Group>
- <Group>
- <GroupName>Components</GroupName>
<Files>
<File>
- <FileName>components.c</FileName>
+ <FileName>finsh_token.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\components\init\components.c</FilePath>
+ <FilePath>../../components/finsh/finsh_token.c</FilePath>
</File>
</Files>
</Group>
</Groups>
</Target>
</Targets>
-
</Project>
diff --git a/bsp/mb9bf568r/project.uvproj b/bsp/mb9bf568r/project.uvproj
new file mode 100644
index 0000000000..cdffbd0c81
--- /dev/null
+++ b/bsp/mb9bf568r/project.uvproj
@@ -0,0 +1,682 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
+<Project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="project_proj.xsd">
+ <SchemaVersion>1.1</SchemaVersion>
+ <Header>### uVision Project, (C) Keil Software</Header>
+ <Targets>
+ <Target>
+ <TargetName>rtthread-fm4</TargetName>
+ <ToolsetNumber>0x4</ToolsetNumber>
+ <ToolsetName>ARM-ADS</ToolsetName>
+ <TargetOption>
+ <TargetCommonOption>
+ <Device>Cortex-M4 FPU</Device>
+ <Vendor>ARM</Vendor>
+ <Cpu>CLOCK(12000000) CPUTYPE("Cortex-M4") ESEL ELITTLE FPU2</Cpu>
+ <FlashUtilSpec />
+ <StartupFile />
+ <FlashDriverDll />
+ <DeviceId>5237</DeviceId>
+ <RegisterFile />
+ <MemoryEnv />
+ <Cmp />
+ <Asm />
+ <Linker />
+ <OHString />
+ <InfinionOptionDll />
+ <SLE66CMisc />
+ <SLE66AMisc />
+ <SLE66LinkerMisc />
+ <SFDFile />
+ <UseEnv>0</UseEnv>
+ <BinPath />
+ <IncludePath />
+ <LibPath />
+ <RegisterFilePath />
+ <DBRegisterFilePath />
+ <TargetStatus>
+ <Error>0</Error>
+ <ExitCodeStop>0</ExitCodeStop>
+ <ButtonStop>0</ButtonStop>
+ <NotGenerated>0</NotGenerated>
+ <InvalidFlash>1</InvalidFlash>
+ </TargetStatus>
+ <OutputDirectory>.\build\</OutputDirectory>
+ <OutputName>template_mb9b56xx</OutputName>
+ <CreateExecutable>1</CreateExecutable>
+ <CreateLib>0</CreateLib>
+ <CreateHexFile>0</CreateHexFile>
+ <DebugInformation>1</DebugInformation>
+ <BrowseInformation>1</BrowseInformation>
+ <ListingPath>.\build\</ListingPath>
+ <HexFormatSelection>1</HexFormatSelection>
+ <Merge32K>0</Merge32K>
+ <CreateBatchFile>0</CreateBatchFile>
+ <BeforeCompile>
+ <RunUserProg1>0</RunUserProg1>
+ <RunUserProg2>0</RunUserProg2>
+ <UserProg1Name />
+ <UserProg2Name />
+ <UserProg1Dos16Mode>0</UserProg1Dos16Mode>
+ <UserProg2Dos16Mode>0</UserProg2Dos16Mode>
+ <nStopU1X>0</nStopU1X>
+ <nStopU2X>0</nStopU2X>
+ </BeforeCompile>
+ <BeforeMake>
+ <RunUserProg1>0</RunUserProg1>
+ <RunUserProg2>0</RunUserProg2>
+ <UserProg1Name />
+ <UserProg2Name />
+ <UserProg1Dos16Mode>0</UserProg1Dos16Mode>
+ <UserProg2Dos16Mode>0</UserProg2Dos16Mode>
+ </BeforeMake>
+ <AfterMake>
+ <RunUserProg1>0</RunUserProg1>
+ <RunUserProg2>0</RunUserProg2>
+ <UserProg1Name />
+ <UserProg2Name />
+ <UserProg1Dos16Mode>0</UserProg1Dos16Mode>
+ <UserProg2Dos16Mode>0</UserProg2Dos16Mode>
+ </AfterMake>
+ <SelectedForBatchBuild>0</SelectedForBatchBuild>
+ <SVCSIdString />
+ </TargetCommonOption>
+ <CommonProperty>
+ <UseCPPCompiler>0</UseCPPCompiler>
+ <RVCTCodeConst>0</RVCTCodeConst>
+ <RVCTZI>0</RVCTZI>
+ <RVCTOtherData>0</RVCTOtherData>
+ <ModuleSelection>0</ModuleSelection>
+ <IncludeInBuild>1</IncludeInBuild>
+ <AlwaysBuild>0</AlwaysBuild>
+ <GenerateAssemblyFile>0</GenerateAssemblyFile>
+ <AssembleAssemblyFile>0</AssembleAssemblyFile>
+ <PublicsOnly>0</PublicsOnly>
+ <StopOnExitCode>3</StopOnExitCode>
+ <CustomArgument />
+ <IncludeLibraryModules />
+ </CommonProperty>
+ <DllOption>
+ <SimDllName>SARMCM3.DLL</SimDllName>
+ <SimDllArguments />
+ <SimDlgDll>DCM.DLL</SimDlgDll>
+ <SimDlgDllArguments>-pCM4</SimDlgDllArguments>
+ <TargetDllName>SARMCM3.DLL</TargetDllName>
+ <TargetDllArguments />
+ <TargetDlgDll>TCM.DLL</TargetDlgDll>
+ <TargetDlgDllArguments>-pCM4</TargetDlgDllArguments>
+ </DllOption>
+ <DebugOption>
+ <OPTHX>
+ <HexSelection>1</HexSelection>
+ <HexRangeLowAddress>0</HexRangeLowAddress>
+ <HexRangeHighAddress>0</HexRangeHighAddress>
+ <HexOffset>0</HexOffset>
+ <Oh166RecLen>16</Oh166RecLen>
+ </OPTHX>
+ <Simulator>
+ <UseSimulator>0</UseSimulator>
+ <LoadApplicationAtStartup>1</LoadApplicationAtStartup>
+ <RunToMain>1</RunToMain>
+ <RestoreBreakpoints>1</RestoreBreakpoints>
+ <RestoreWatchpoints>1</RestoreWatchpoints>
+ <RestoreMemoryDisplay>1</RestoreMemoryDisplay>
+ <RestoreFunctions>1</RestoreFunctions>
+ <RestoreToolbox>1</RestoreToolbox>
+ <LimitSpeedToRealTime>0</LimitSpeedToRealTime>
+ </Simulator>
+ <Target>
+ <UseTarget>1</UseTarget>
+ <LoadApplicationAtStartup>1</LoadApplicationAtStartup>
+ <RunToMain>1</RunToMain>
+ <RestoreBreakpoints>1</RestoreBreakpoints>
+ <RestoreWatchpoints>1</RestoreWatchpoints>
+ <RestoreMemoryDisplay>1</RestoreMemoryDisplay>
+ <RestoreFunctions>0</RestoreFunctions>
+ <RestoreToolbox>1</RestoreToolbox>
+ <RestoreTracepoints>1</RestoreTracepoints>
+ </Target>
+ <RunDebugAfterBuild>0</RunDebugAfterBuild>
+ <TargetSelection>14</TargetSelection>
+ <SimDlls>
+ <CpuDll />
+ <CpuDllArguments />
+ <PeripheralDll />
+ <PeripheralDllArguments />
+ <InitializationFile />
+ </SimDlls>
+ <TargetDlls>
+ <CpuDll />
+ <CpuDllArguments />
+ <PeripheralDll />
+ <PeripheralDllArguments />
+ <InitializationFile />
+ <Driver>BIN\CMSIS_AGDI.dll</Driver>
+ </TargetDlls>
+ </DebugOption>
+ <Utilities>
+ <Flash1>
+ <UseTargetDll>1</UseTargetDll>
+ <UseExternalTool>0</UseExternalTool>
+ <RunIndependent>0</RunIndependent>
+ <UpdateFlashBeforeDebugging>0</UpdateFlashBeforeDebugging>
+ <Capability>1</Capability>
+ <DriverSelection>4105</DriverSelection>
+ </Flash1>
+ <Flash2>BIN\CMSIS_AGDI.dll</Flash2>
+ <Flash3>"" ()</Flash3>
+ <Flash4 />
+ </Utilities>
+ <TargetArmAds>
+ <ArmAdsMisc>
+ <GenerateListings>0</GenerateListings>
+ <asHll>1</asHll>
+ <asAsm>1</asAsm>
+ <asMacX>1</asMacX>
+ <asSyms>1</asSyms>
+ <asFals>1</asFals>
+ <asDbgD>1</asDbgD>
+ <asForm>1</asForm>
+ <ldLst>0</ldLst>
+ <ldmm>1</ldmm>
+ <ldXref>1</ldXref>
+ <BigEnd>0</BigEnd>
+ <AdsALst>0</AdsALst>
+ <AdsACrf>0</AdsACrf>
+ <AdsANop>0</AdsANop>
+ <AdsANot>0</AdsANot>
+ <AdsLLst>1</AdsLLst>
+ <AdsLmap>1</AdsLmap>
+ <AdsLcgr>0</AdsLcgr>
+ <AdsLsym>0</AdsLsym>
+ <AdsLszi>0</AdsLszi>
+ <AdsLtoi>0</AdsLtoi>
+ <AdsLsun>0</AdsLsun>
+ <AdsLven>0</AdsLven>
+ <AdsLsxf>0</AdsLsxf>
+ <RvctClst>0</RvctClst>
+ <GenPPlst>0</GenPPlst>
+ <AdsCpuType>"Cortex-M4"</AdsCpuType>
+ <RvctDeviceName />
+ <mOS>0</mOS>
+ <uocRom>0</uocRom>
+ <uocRam>0</uocRam>
+ <hadIROM>0</hadIROM>
+ <hadIRAM>0</hadIRAM>
+ <hadXRAM>0</hadXRAM>
+ <uocXRam>0</uocXRam>
+ <RvdsVP>2</RvdsVP>
+ <hadIRAM2>0</hadIRAM2>
+ <hadIROM2>0</hadIROM2>
+ <StupSel>8</StupSel>
+ <useUlib>0</useUlib>
+ <EndSel>1</EndSel>
+ <uLtcg>0</uLtcg>
+ <RoSelD>0</RoSelD>
+ <RwSelD>5</RwSelD>
+ <CodeSel>0</CodeSel>
+ <OptFeed>0</OptFeed>
+ <NoZi1>0</NoZi1>
+ <NoZi2>0</NoZi2>
+ <NoZi3>0</NoZi3>
+ <NoZi4>0</NoZi4>
+ <NoZi5>0</NoZi5>
+ <Ro1Chk>0</Ro1Chk>
+ <Ro2Chk>0</Ro2Chk>
+ <Ro3Chk>0</Ro3Chk>
+ <Ir1Chk>1</Ir1Chk>
+ <Ir2Chk>1</Ir2Chk>
+ <Ra1Chk>0</Ra1Chk>
+ <Ra2Chk>0</Ra2Chk>
+ <Ra3Chk>0</Ra3Chk>
+ <Im1Chk>1</Im1Chk>
+ <Im2Chk>1</Im2Chk>
+ <OnChipMemories>
+ <Ocm1>
+ <Type>0</Type>
+ <StartAddress>0x0</StartAddress>
+ <Size>0x0</Size>
+ </Ocm1>
+ <Ocm2>
+ <Type>0</Type>
+ <StartAddress>0x0</StartAddress>
+ <Size>0x0</Size>
+ </Ocm2>
+ <Ocm3>
+ <Type>0</Type>
+ <StartAddress>0x0</StartAddress>
+ <Size>0x0</Size>
+ </Ocm3>
+ <Ocm4>
+ <Type>0</Type>
+ <StartAddress>0x0</StartAddress>
+ <Size>0x0</Size>
+ </Ocm4>
+ <Ocm5>
+ <Type>0</Type>
+ <StartAddress>0x0</StartAddress>
+ <Size>0x0</Size>
+ </Ocm5>
+ <Ocm6>
+ <Type>0</Type>
+ <StartAddress>0x0</StartAddress>
+ <Size>0x0</Size>
+ </Ocm6>
+ <IRAM>
+ <Type>0</Type>
+ <StartAddress>0x0</StartAddress>
+ <Size>0x0</Size>
+ </IRAM>
+ <IROM>
+ <Type>0</Type>
+ <StartAddress>0x0</StartAddress>
+ <Size>0x0</Size>
+ </IROM>
+ <XRAM>
+ <Type>0</Type>
+ <StartAddress>0x0</StartAddress>
+ <Size>0x0</Size>
+ </XRAM>
+ <OCR_RVCT1>
+ <Type>1</Type>
+ <StartAddress>0x0</StartAddress>
+ <Size>0x0</Size>
+ </OCR_RVCT1>
+ <OCR_RVCT2>
+ <Type>1</Type>
+ <StartAddress>0x0</StartAddress>
+ <Size>0x0</Size>
+ </OCR_RVCT2>
+ <OCR_RVCT3>
+ <Type>1</Type>
+ <StartAddress>0x0</StartAddress>
+ <Size>0x0</Size>
+ </OCR_RVCT3>
+ <OCR_RVCT4>
+ <Type>1</Type>
+ <StartAddress>0x0</StartAddress>
+ <Size>0x100000</Size>
+ </OCR_RVCT4>
+ <OCR_RVCT5>
+ <Type>1</Type>
+ <StartAddress>0x200c0000</StartAddress>
+ <Size>0x8000</Size>
+ </OCR_RVCT5>
+ <OCR_RVCT6>
+ <Type>0</Type>
+ <StartAddress>0x0</StartAddress>
+ <Size>0x0</Size>
+ </OCR_RVCT6>
+ <OCR_RVCT7>
+ <Type>0</Type>
+ <StartAddress>0x0</StartAddress>
+ <Size>0x0</Size>
+ </OCR_RVCT7>
+ <OCR_RVCT8>
+ <Type>0</Type>
+ <StartAddress>0x0</StartAddress>
+ <Size>0x0</Size>
+ </OCR_RVCT8>
+ <OCR_RVCT9>
+ <Type>0</Type>
+ <StartAddress>0x1fff0000</StartAddress>
+ <Size>0x10000</Size>
+ </OCR_RVCT9>
+ <OCR_RVCT10>
+ <Type>0</Type>
+ <StartAddress>0x20038000</StartAddress>
+ <Size>0x10000</Size>
+ </OCR_RVCT10>
+ </OnChipMemories>
+ <RvctStartVector />
+ </ArmAdsMisc>
+ <Cads>
+ <interw>1</interw>
+ <Optim>1</Optim>
+ <oTime>0</oTime>
+ <SplitLS>0</SplitLS>
+ <OneElfS>0</OneElfS>
+ <Strict>0</Strict>
+ <EnumInt>0</EnumInt>
+ <PlainCh>0</PlainCh>
+ <Ropi>0</Ropi>
+ <Rwpi>0</Rwpi>
+ <wLevel>0</wLevel>
+ <uThumb>0</uThumb>
+ <uSurpInc>0</uSurpInc>
+ <VariousControls>
+ <MiscControls />
+ <Define />
+ <Undefine />
+ <IncludePath>applications;.;drivers;CMSIS/Include;CMSIS/DeviceSupport;../../include;../../libcpu/arm/cortex-m4;../../libcpu/arm/common;../../components/finsh</IncludePath>
+ </VariousControls>
+ </Cads>
+ <Aads>
+ <interw>1</interw>
+ <Ropi>0</Ropi>
+ <Rwpi>0</Rwpi>
+ <thumb>0</thumb>
+ <SplitLS>0</SplitLS>
+ <SwStkChk>0</SwStkChk>
+ <NoWarn>0</NoWarn>
+ <uSurpInc>0</uSurpInc>
+ <VariousControls>
+ <MiscControls />
+ <Define />
+ <Undefine />
+ <IncludePath />
+ </VariousControls>
+ </Aads>
+ <LDads>
+ <umfTarg>1</umfTarg>
+ <Ropi>0</Ropi>
+ <Rwpi>0</Rwpi>
+ <noStLib>0</noStLib>
+ <RepFail>1</RepFail>
+ <useFile>0</useFile>
+ <TextAddressRange>0x00000000</TextAddressRange>
+ <DataAddressRange>0x00000000</DataAddressRange>
+ <ScatterFile />
+ <IncludeLibs />
+ <IncludeLibsPath />
+ <Misc> --keep *.o(.rti_fn.*) --keep *.o(FSymTab) --keep *.o(VSymTab) </Misc>
+ <LinkerInputFile />
+ <DisabledWarnings />
+ </LDads>
+ </TargetArmAds>
+ </TargetOption>
+ <Groups>
+ <Group>
+ <GroupName>Applications</GroupName>
+ <Files>
+ <File>
+ <FileName>application.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>applications/application.c</FilePath>
+ </File>
+ </Files>
+ <Files>
+ <File>
+ <FileName>demo.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>applications/demo.c</FilePath>
+ </File>
+ </Files>
+ <Files>
+ <File>
+ <FileName>startup.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>applications/startup.c</FilePath>
+ </File>
+ </Files>
+ </Group>
+ <Group>
+ <GroupName>Drivers</GroupName>
+ <Files>
+ <File>
+ <FileName>board.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>drivers/board.c</FilePath>
+ </File>
+ </Files>
+ <Files>
+ <File>
+ <FileName>led.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>drivers/led.c</FilePath>
+ </File>
+ </Files>
+ <Files>
+ <File>
+ <FileName>serial.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>drivers/serial.c</FilePath>
+ </File>
+ </Files>
+ </Group>
+ <Group>
+ <GroupName>CMSIS</GroupName>
+ <Files>
+ <File>
+ <FileName>system_mb9abxxx.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>CMSIS/DeviceSupport/system_mb9abxxx.c</FilePath>
+ </File>
+ </Files>
+ <Files>
+ <File>
+ <FileName>startup_mb9bf56xr.s</FileName>
+ <FileType>2</FileType>
+ <FilePath>CMSIS/DeviceSupport/arm/startup_mb9bf56xr.s</FilePath>
+ </File>
+ </Files>
+ </Group>
+ <Group>
+ <GroupName>Kernel</GroupName>
+ <Files>
+ <File>
+ <FileName>clock.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../../src/clock.c</FilePath>
+ </File>
+ </Files>
+ <Files>
+ <File>
+ <FileName>components.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../../src/components.c</FilePath>
+ </File>
+ </Files>
+ <Files>
+ <File>
+ <FileName>device.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../../src/device.c</FilePath>
+ </File>
+ </Files>
+ <Files>
+ <File>
+ <FileName>idle.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../../src/idle.c</FilePath>
+ </File>
+ </Files>
+ <Files>
+ <File>
+ <FileName>ipc.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../../src/ipc.c</FilePath>
+ </File>
+ </Files>
+ <Files>
+ <File>
+ <FileName>irq.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../../src/irq.c</FilePath>
+ </File>
+ </Files>
+ <Files>
+ <File>
+ <FileName>kservice.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../../src/kservice.c</FilePath>
+ </File>
+ </Files>
+ <Files>
+ <File>
+ <FileName>mem.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../../src/mem.c</FilePath>
+ </File>
+ </Files>
+ <Files>
+ <File>
+ <FileName>mempool.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../../src/mempool.c</FilePath>
+ </File>
+ </Files>
+ <Files>
+ <File>
+ <FileName>object.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../../src/object.c</FilePath>
+ </File>
+ </Files>
+ <Files>
+ <File>
+ <FileName>scheduler.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../../src/scheduler.c</FilePath>
+ </File>
+ </Files>
+ <Files>
+ <File>
+ <FileName>thread.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../../src/thread.c</FilePath>
+ </File>
+ </Files>
+ <Files>
+ <File>
+ <FileName>timer.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../../src/timer.c</FilePath>
+ </File>
+ </Files>
+ </Group>
+ <Group>
+ <GroupName>CORTEX-M4</GroupName>
+ <Files>
+ <File>
+ <FileName>cpuport.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../../libcpu/arm/cortex-m4/cpuport.c</FilePath>
+ </File>
+ </Files>
+ <Files>
+ <File>
+ <FileName>context_rvds.S</FileName>
+ <FileType>2</FileType>
+ <FilePath>../../libcpu/arm/cortex-m4/context_rvds.S</FilePath>
+ </File>
+ </Files>
+ <Files>
+ <File>
+ <FileName>backtrace.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../../libcpu/arm/common/backtrace.c</FilePath>
+ </File>
+ </Files>
+ <Files>
+ <File>
+ <FileName>div0.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../../libcpu/arm/common/div0.c</FilePath>
+ </File>
+ </Files>
+ <Files>
+ <File>
+ <FileName>showmem.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../../libcpu/arm/common/showmem.c</FilePath>
+ </File>
+ </Files>
+ </Group>
+ <Group>
+ <GroupName>finsh</GroupName>
+ <Files>
+ <File>
+ <FileName>shell.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../../components/finsh/shell.c</FilePath>
+ </File>
+ </Files>
+ <Files>
+ <File>
+ <FileName>symbol.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../../components/finsh/symbol.c</FilePath>
+ </File>
+ </Files>
+ <Files>
+ <File>
+ <FileName>cmd.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../../components/finsh/cmd.c</FilePath>
+ </File>
+ </Files>
+ <Files>
+ <File>
+ <FileName>finsh_compiler.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../../components/finsh/finsh_compiler.c</FilePath>
+ </File>
+ </Files>
+ <Files>
+ <File>
+ <FileName>finsh_error.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../../components/finsh/finsh_error.c</FilePath>
+ </File>
+ </Files>
+ <Files>
+ <File>
+ <FileName>finsh_heap.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../../components/finsh/finsh_heap.c</FilePath>
+ </File>
+ </Files>
+ <Files>
+ <File>
+ <FileName>finsh_init.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../../components/finsh/finsh_init.c</FilePath>
+ </File>
+ </Files>
+ <Files>
+ <File>
+ <FileName>finsh_node.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../../components/finsh/finsh_node.c</FilePath>
+ </File>
+ </Files>
+ <Files>
+ <File>
+ <FileName>finsh_ops.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../../components/finsh/finsh_ops.c</FilePath>
+ </File>
+ </Files>
+ <Files>
+ <File>
+ <FileName>finsh_parser.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../../components/finsh/finsh_parser.c</FilePath>
+ </File>
+ </Files>
+ <Files>
+ <File>
+ <FileName>finsh_var.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../../components/finsh/finsh_var.c</FilePath>
+ </File>
+ </Files>
+ <Files>
+ <File>
+ <FileName>finsh_vm.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../../components/finsh/finsh_vm.c</FilePath>
+ </File>
+ </Files>
+ <Files>
+ <File>
+ <FileName>finsh_token.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../../components/finsh/finsh_token.c</FilePath>
+ </File>
+ </Files>
+ </Group>
+ </Groups>
+ </Target>
+ </Targets>
+</Project>
diff --git a/bsp/mini2440/project.Uv2 b/bsp/mini2440/project.Uv2
new file mode 100644
index 0000000000..7864fdd64e
--- /dev/null
+++ b/bsp/mini2440/project.Uv2
@@ -0,0 +1,431 @@
+### uVision2 Project, (C) Keil Software
+### Do not modify !
+
+Target (RT-Thread Mini2440), 0x0004 // Tools: 'ARM-ADS'
+
+Group (Startup)
+Group (Kernel)
+Group (S3C24X0)
+Group (pthreads)
+Group (libc)
+Group (libz)
+Group (jpeg)
+Group (libpng)
+Group (libdl)
+Group (finsh)
+Group (LwIP)
+Group (Filesystem)
+
+File 1,1,<./application.c><application.c>
+File 1,1,<./startup.c><startup.c>
+File 1,1,<./board.c><board.c>
+File 1,1,<./console.c><console.c>
+File 1,1,<./led.c><led.c>
+File 1,1,<./sdcard.c><sdcard.c>
+File 1,1,<./dm9000.c><dm9000.c>
+File 1,1,<../../src/clock.c><clock.c>
+File 1,1,<../../src/components.c><components.c>
+File 1,1,<../../src/device.c><device.c>
+File 1,1,<../../src/idle.c><idle.c>
+File 1,1,<../../src/ipc.c><ipc.c>
+File 1,1,<../../src/irq.c><irq.c>
+File 1,1,<../../src/kservice.c><kservice.c>
+File 1,1,<../../src/mem.c><mem.c>
+File 1,1,<../../src/mempool.c><mempool.c>
+File 1,1,<../../src/module.c><module.c>
+File 1,1,<../../src/object.c><object.c>
+File 1,1,<../../src/scheduler.c><scheduler.c>
+File 1,1,<../../src/thread.c><thread.c>
+File 1,1,<../../src/timer.c><timer.c>
+File 1,1,<../../libcpu/arm/s3c24x0/cpu.c><cpu.c>
+File 1,1,<../../libcpu/arm/s3c24x0/interrupt.c><interrupt.c>
+File 1,1,<../../libcpu/arm/s3c24x0/mmu.c><mmu.c>
+File 1,1,<../../libcpu/arm/s3c24x0/rtc.c><rtc.c>
+File 1,1,<../../libcpu/arm/s3c24x0/serial.c><serial.c>
+File 1,1,<../../libcpu/arm/s3c24x0/stack.c><stack.c>
+File 1,1,<../../libcpu/arm/s3c24x0/system_clock.c><system_clock.c>
+File 1,1,<../../libcpu/arm/s3c24x0/trap.c><trap.c>
+File 1,2,<../../libcpu/arm/s3c24x0/context_rvds.S><context_rvds.S>
+File 1,2,<../../libcpu/arm/s3c24x0/start_rvds.S><start_rvds.S>
+File 1,1,<../../libcpu/arm/common/backtrace.c><backtrace.c>
+File 1,1,<../../libcpu/arm/common/div0.c><div0.c>
+File 1,1,<../../libcpu/arm/common/showmem.c><showmem.c>
+File 1,1,<../../components/pthreads/clock_time.c><clock_time.c>
+File 1,1,<../../components/pthreads/mqueue.c><mqueue.c>
+File 1,1,<../../components/pthreads/pthread.c><pthread.c>
+File 1,1,<../../components/pthreads/pthread_attr.c><pthread_attr.c>
+File 1,1,<../../components/pthreads/pthread_barrier.c><pthread_barrier.c>
+File 1,1,<../../components/pthreads/pthread_cond.c><pthread_cond.c>
+File 1,1,<../../components/pthreads/pthread_mutex.c><pthread_mutex.c>
+File 1,1,<../../components/pthreads/pthread_rwlock.c><pthread_rwlock.c>
+File 1,1,<../../components/pthreads/pthread_spin.c><pthread_spin.c>
+File 1,1,<../../components/pthreads/pthread_tls.c><pthread_tls.c>
+File 1,1,<../../components/pthreads/sched.c><sched.c>
+File 1,1,<../../components/pthreads/semaphore.c><semaphore.c>
+File 1,1,<../../components/libc/armlibc/mem_std.c><mem_std.c>
+File 1,1,<../../components/libc/armlibc/stubs.c><stubs.c>
+File 1,1,<../../components/external/libz/adler32.c><adler32.c>
+File 1,1,<../../components/external/libz/compress.c><compress.c>
+File 1,1,<../../components/external/libz/crc32.c><crc32.c>
+File 1,1,<../../components/external/libz/deflate.c><deflate.c>
+File 1,1,<../../components/external/libz/infback.c><infback.c>
+File 1,1,<../../components/external/libz/inffast.c><inffast.c>
+File 1,1,<../../components/external/libz/inflate.c><inflate.c>
+File 1,1,<../../components/external/libz/inftrees.c><inftrees.c>
+File 1,1,<../../components/external/libz/trees.c><trees.c>
+File 1,1,<../../components/external/libz/uncompr.c><uncompr.c>
+File 1,1,<../../components/external/libz/zutil.c><zutil.c>
+File 1,1,<../../components/external/jpeg/jaricom.c><jaricom.c>
+File 1,1,<../../components/external/jpeg/jcomapi.c><jcomapi.c>
+File 1,1,<../../components/external/jpeg/jutils.c><jutils.c>
+File 1,1,<../../components/external/jpeg/jerror.c><jerror.c>
+File 1,1,<../../components/external/jpeg/jmemmgr.c><jmemmgr.c>
+File 1,1,<../../components/external/jpeg/jdapimin.c><jdapimin.c>
+File 1,1,<../../components/external/jpeg/jdapistd.c><jdapistd.c>
+File 1,1,<../../components/external/jpeg/jdarith.c><jdarith.c>
+File 1,1,<../../components/external/jpeg/jdtrans.c><jdtrans.c>
+File 1,1,<../../components/external/jpeg/jdmaster.c><jdmaster.c>
+File 1,1,<../../components/external/jpeg/jdinput.c><jdinput.c>
+File 1,1,<../../components/external/jpeg/jdmarker.c><jdmarker.c>
+File 1,1,<../../components/external/jpeg/jdhuff.c><jdhuff.c>
+File 1,1,<../../components/external/jpeg/jdmainct.c><jdmainct.c>
+File 1,1,<../../components/external/jpeg/jdcoefct.c><jdcoefct.c>
+File 1,1,<../../components/external/jpeg/jdpostct.c><jdpostct.c>
+File 1,1,<../../components/external/jpeg/jddctmgr.c><jddctmgr.c>
+File 1,1,<../../components/external/jpeg/jidctfst.c><jidctfst.c>
+File 1,1,<../../components/external/jpeg/jidctflt.c><jidctflt.c>
+File 1,1,<../../components/external/jpeg/jidctint.c><jidctint.c>
+File 1,1,<../../components/external/jpeg/jdsample.c><jdsample.c>
+File 1,1,<../../components/external/jpeg/jdcolor.c><jdcolor.c>
+File 1,1,<../../components/external/jpeg/jquant1.c><jquant1.c>
+File 1,1,<../../components/external/jpeg/jquant2.c><jquant2.c>
+File 1,1,<../../components/external/jpeg/jdmerge.c><jdmerge.c>
+File 1,1,<../../components/external/jpeg/jmemnobs.c><jmemnobs.c>
+File 1,1,<../../components/external/libpng/png.c><png.c>
+File 1,1,<../../components/external/libpng/pngerror.c><pngerror.c>
+File 1,1,<../../components/external/libpng/pnggccrd.c><pnggccrd.c>
+File 1,1,<../../components/external/libpng/pngget.c><pngget.c>
+File 1,1,<../../components/external/libpng/pngmem.c><pngmem.c>
+File 1,1,<../../components/external/libpng/pngpread.c><pngpread.c>
+File 1,1,<../../components/external/libpng/pngread.c><pngread.c>
+File 1,1,<../../components/external/libpng/pngrio.c><pngrio.c>
+File 1,1,<../../components/external/libpng/pngrtran.c><pngrtran.c>
+File 1,1,<../../components/external/libpng/pngrutil.c><pngrutil.c>
+File 1,1,<../../components/external/libpng/pngset.c><pngset.c>
+File 1,1,<../../components/external/libpng/pngtrans.c><pngtrans.c>
+File 1,1,<../../components/external/libpng/pngvcrd.c><pngvcrd.c>
+File 1,1,<../../components/external/libpng/pngwio.c><pngwio.c>
+File 1,1,<../../components/external/libpng/pngwrite.c><pngwrite.c>
+File 1,1,<../../components/external/libpng/pngwtran.c><pngwtran.c>
+File 1,1,<../../components/external/libpng/pngwutil.c><pngwutil.c>
+File 1,1,<../../components/libdl/dlclose.c><dlclose.c>
+File 1,1,<../../components/libdl/dlerror.c><dlerror.c>
+File 1,1,<../../components/libdl/dlopen.c><dlopen.c>
+File 1,1,<../../components/libdl/dlsym.c><dlsym.c>
+File 1,1,<../../components/finsh/shell.c><shell.c>
+File 1,1,<../../components/finsh/symbol.c><symbol.c>
+File 1,1,<../../components/finsh/cmd.c><cmd.c>
+File 1,1,<../../components/finsh/finsh_compiler.c><finsh_compiler.c>
+File 1,1,<../../components/finsh/finsh_error.c><finsh_error.c>
+File 1,1,<../../components/finsh/finsh_heap.c><finsh_heap.c>
+File 1,1,<../../components/finsh/finsh_init.c><finsh_init.c>
+File 1,1,<../../components/finsh/finsh_node.c><finsh_node.c>
+File 1,1,<../../components/finsh/finsh_ops.c><finsh_ops.c>
+File 1,1,<../../components/finsh/finsh_parser.c><finsh_parser.c>
+File 1,1,<../../components/finsh/finsh_var.c><finsh_var.c>
+File 1,1,<../../components/finsh/finsh_vm.c><finsh_vm.c>
+File 1,1,<../../components/finsh/finsh_token.c><finsh_token.c>
+File 1,1,<../../components/net/lwip-1.4.1/src/api/api_lib.c><api_lib.c>
+File 1,1,<../../components/net/lwip-1.4.1/src/api/api_msg.c><api_msg.c>
+File 1,1,<../../components/net/lwip-1.4.1/src/api/err.c><err.c>
+File 1,1,<../../components/net/lwip-1.4.1/src/api/netbuf.c><netbuf.c>
+File 1,1,<../../components/net/lwip-1.4.1/src/api/netdb.c><netdb.c>
+File 1,1,<../../components/net/lwip-1.4.1/src/api/netifapi.c><netifapi.c>
+File 1,1,<../../components/net/lwip-1.4.1/src/api/sockets.c><sockets.c>
+File 1,1,<../../components/net/lwip-1.4.1/src/api/tcpip.c><tcpip.c>
+File 1,1,<../../components/net/lwip-1.4.1/src/arch/sys_arch.c><sys_arch.c>
+File 1,1,<../../components/net/lwip-1.4.1/src/core/def.c><def.c>
+File 1,1,<../../components/net/lwip-1.4.1/src/core/dhcp.c><dhcp.c>
+File 1,1,<../../components/net/lwip-1.4.1/src/core/dns.c><dns.c>
+File 1,1,<../../components/net/lwip-1.4.1/src/core/init.c><init.c>
+File 1,1,<../../components/net/lwip-1.4.1/src/core/memp.c><memp.c>
+File 1,1,<../../components/net/lwip-1.4.1/src/core/netif.c><netif.c>
+File 1,1,<../../components/net/lwip-1.4.1/src/core/pbuf.c><pbuf.c>
+File 1,1,<../../components/net/lwip-1.4.1/src/core/raw.c><raw.c>
+File 1,1,<../../components/net/lwip-1.4.1/src/core/stats.c><stats.c>
+File 1,1,<../../components/net/lwip-1.4.1/src/core/sys.c><sys.c>
+File 1,1,<../../components/net/lwip-1.4.1/src/core/tcp.c><tcp.c>
+File 1,1,<../../components/net/lwip-1.4.1/src/core/tcp_in.c><tcp_in.c>
+File 1,1,<../../components/net/lwip-1.4.1/src/core/tcp_out.c><tcp_out.c>
+File 1,1,<../../components/net/lwip-1.4.1/src/core/timers.c><timers.c>
+File 1,1,<../../components/net/lwip-1.4.1/src/core/udp.c><udp.c>
+File 1,1,<../../components/net/lwip-1.4.1/src/core/ipv4/autoip.c><autoip.c>
+File 1,1,<../../components/net/lwip-1.4.1/src/core/ipv4/icmp.c><icmp.c>
+File 1,1,<../../components/net/lwip-1.4.1/src/core/ipv4/igmp.c><igmp.c>
+File 1,1,<../../components/net/lwip-1.4.1/src/core/ipv4/inet.c><inet.c>
+File 1,1,<../../components/net/lwip-1.4.1/src/core/ipv4/inet_chksum.c><inet_chksum.c>
+File 1,1,<../../components/net/lwip-1.4.1/src/core/ipv4/ip.c><ip.c>
+File 1,1,<../../components/net/lwip-1.4.1/src/core/ipv4/ip_addr.c><ip_addr.c>
+File 1,1,<../../components/net/lwip-1.4.1/src/core/ipv4/ip_frag.c><ip_frag.c>
+File 1,1,<../../components/net/lwip-1.4.1/src/netif/etharp.c><etharp.c>
+File 1,1,<../../components/net/lwip-1.4.1/src/netif/ethernetif.c><ethernetif.c>
+File 1,1,<../../components/net/lwip-1.4.1/src/netif/slipif.c><slipif.c>
+File 1,1,<../../components/dfs/src/dfs.c><dfs.c>
+File 1,1,<../../components/dfs/src/dfs_file.c><dfs_file.c>
+File 1,1,<../../components/dfs/src/dfs_fs.c><dfs_fs.c>
+File 1,1,<../../components/dfs/src/dfs_posix.c><dfs_posix.c>
+File 1,1,<../../components/dfs/filesystems/elmfat/dfs_elm.c><dfs_elm.c>
+File 1,1,<../../components/dfs/filesystems/elmfat/ff.c><ff.c>
+File 1,1,<../../components/dfs/filesystems/elmfat/option/cc936.c><cc936.c>
+File 1,1,<../../components/dfs/filesystems/devfs/console.c><devfs_console.c>
+File 1,1,<../../components/dfs/filesystems/devfs/devfs.c><devfs.c>
+File 2,1,<../../src/clock.c><src_clock.c>
+File 2,1,<../../src/components.c><src_components.c>
+File 2,1,<../../src/device.c><src_device.c>
+File 2,1,<../../src/idle.c><src_idle.c>
+File 2,1,<../../src/ipc.c><src_ipc.c>
+File 2,1,<../../src/irq.c><src_irq.c>
+File 2,1,<../../src/kservice.c><src_kservice.c>
+File 2,1,<../../src/mem.c><src_mem.c>
+File 2,1,<../../src/mempool.c><src_mempool.c>
+File 2,1,<../../src/module.c><src_module.c>
+File 2,1,<../../src/object.c><src_object.c>
+File 2,1,<../../src/scheduler.c><src_scheduler.c>
+File 2,1,<../../src/thread.c><src_thread.c>
+File 2,1,<../../src/timer.c><src_timer.c>
+File 3,1,<../../libcpu/arm/s3c24x0/cpu.c><s3c24x0_cpu.c>
+File 3,1,<../../libcpu/arm/s3c24x0/interrupt.c><s3c24x0_interrupt.c>
+File 3,1,<../../libcpu/arm/s3c24x0/mmu.c><s3c24x0_mmu.c>
+File 3,1,<../../libcpu/arm/s3c24x0/rtc.c><s3c24x0_rtc.c>
+File 3,1,<../../libcpu/arm/s3c24x0/serial.c><s3c24x0_serial.c>
+File 3,1,<../../libcpu/arm/s3c24x0/stack.c><s3c24x0_stack.c>
+File 3,1,<../../libcpu/arm/s3c24x0/system_clock.c><s3c24x0_system_clock.c>
+File 3,1,<../../libcpu/arm/s3c24x0/trap.c><s3c24x0_trap.c>
+File 3,2,<../../libcpu/arm/s3c24x0/context_rvds.S><s3c24x0_context_rvds.S>
+File 3,2,<../../libcpu/arm/s3c24x0/start_rvds.S><s3c24x0_start_rvds.S>
+File 3,1,<../../libcpu/arm/common/backtrace.c><common_backtrace.c>
+File 3,1,<../../libcpu/arm/common/div0.c><common_div0.c>
+File 3,1,<../../libcpu/arm/common/showmem.c><common_showmem.c>
+File 4,1,<../../components/pthreads/clock_time.c><pthreads_clock_time.c>
+File 4,1,<../../components/pthreads/mqueue.c><pthreads_mqueue.c>
+File 4,1,<../../components/pthreads/pthread.c><pthreads_pthread.c>
+File 4,1,<../../components/pthreads/pthread_attr.c><pthreads_pthread_attr.c>
+File 4,1,<../../components/pthreads/pthread_barrier.c><pthreads_pthread_barrier.c>
+File 4,1,<../../components/pthreads/pthread_cond.c><pthreads_pthread_cond.c>
+File 4,1,<../../components/pthreads/pthread_mutex.c><pthreads_pthread_mutex.c>
+File 4,1,<../../components/pthreads/pthread_rwlock.c><pthreads_pthread_rwlock.c>
+File 4,1,<../../components/pthreads/pthread_spin.c><pthreads_pthread_spin.c>
+File 4,1,<../../components/pthreads/pthread_tls.c><pthreads_pthread_tls.c>
+File 4,1,<../../components/pthreads/sched.c><pthreads_sched.c>
+File 4,1,<../../components/pthreads/semaphore.c><pthreads_semaphore.c>
+File 5,1,<../../components/libc/armlibc/mem_std.c><armlibc_mem_std.c>
+File 5,1,<../../components/libc/armlibc/stubs.c><armlibc_stubs.c>
+File 6,1,<../../components/external/libz/adler32.c><libz_adler32.c>
+File 6,1,<../../components/external/libz/compress.c><libz_compress.c>
+File 6,1,<../../components/external/libz/crc32.c><libz_crc32.c>
+File 6,1,<../../components/external/libz/deflate.c><libz_deflate.c>
+File 6,1,<../../components/external/libz/infback.c><libz_infback.c>
+File 6,1,<../../components/external/libz/inffast.c><libz_inffast.c>
+File 6,1,<../../components/external/libz/inflate.c><libz_inflate.c>
+File 6,1,<../../components/external/libz/inftrees.c><libz_inftrees.c>
+File 6,1,<../../components/external/libz/trees.c><libz_trees.c>
+File 6,1,<../../components/external/libz/uncompr.c><libz_uncompr.c>
+File 6,1,<../../components/external/libz/zutil.c><libz_zutil.c>
+File 7,1,<../../components/external/jpeg/jaricom.c><jpeg_jaricom.c>
+File 7,1,<../../components/external/jpeg/jcomapi.c><jpeg_jcomapi.c>
+File 7,1,<../../components/external/jpeg/jutils.c><jpeg_jutils.c>
+File 7,1,<../../components/external/jpeg/jerror.c><jpeg_jerror.c>
+File 7,1,<../../components/external/jpeg/jmemmgr.c><jpeg_jmemmgr.c>
+File 7,1,<../../components/external/jpeg/jdapimin.c><jpeg_jdapimin.c>
+File 7,1,<../../components/external/jpeg/jdapistd.c><jpeg_jdapistd.c>
+File 7,1,<../../components/external/jpeg/jdarith.c><jpeg_jdarith.c>
+File 7,1,<../../components/external/jpeg/jdtrans.c><jpeg_jdtrans.c>
+File 7,1,<../../components/external/jpeg/jdmaster.c><jpeg_jdmaster.c>
+File 7,1,<../../components/external/jpeg/jdinput.c><jpeg_jdinput.c>
+File 7,1,<../../components/external/jpeg/jdmarker.c><jpeg_jdmarker.c>
+File 7,1,<../../components/external/jpeg/jdhuff.c><jpeg_jdhuff.c>
+File 7,1,<../../components/external/jpeg/jdmainct.c><jpeg_jdmainct.c>
+File 7,1,<../../components/external/jpeg/jdcoefct.c><jpeg_jdcoefct.c>
+File 7,1,<../../components/external/jpeg/jdpostct.c><jpeg_jdpostct.c>
+File 7,1,<../../components/external/jpeg/jddctmgr.c><jpeg_jddctmgr.c>
+File 7,1,<../../components/external/jpeg/jidctfst.c><jpeg_jidctfst.c>
+File 7,1,<../../components/external/jpeg/jidctflt.c><jpeg_jidctflt.c>
+File 7,1,<../../components/external/jpeg/jidctint.c><jpeg_jidctint.c>
+File 7,1,<../../components/external/jpeg/jdsample.c><jpeg_jdsample.c>
+File 7,1,<../../components/external/jpeg/jdcolor.c><jpeg_jdcolor.c>
+File 7,1,<../../components/external/jpeg/jquant1.c><jpeg_jquant1.c>
+File 7,1,<../../components/external/jpeg/jquant2.c><jpeg_jquant2.c>
+File 7,1,<../../components/external/jpeg/jdmerge.c><jpeg_jdmerge.c>
+File 7,1,<../../components/external/jpeg/jmemnobs.c><jpeg_jmemnobs.c>
+File 8,1,<../../components/external/libpng/png.c><libpng_png.c>
+File 8,1,<../../components/external/libpng/pngerror.c><libpng_pngerror.c>
+File 8,1,<../../components/external/libpng/pnggccrd.c><libpng_pnggccrd.c>
+File 8,1,<../../components/external/libpng/pngget.c><libpng_pngget.c>
+File 8,1,<../../components/external/libpng/pngmem.c><libpng_pngmem.c>
+File 8,1,<../../components/external/libpng/pngpread.c><libpng_pngpread.c>
+File 8,1,<../../components/external/libpng/pngread.c><libpng_pngread.c>
+File 8,1,<../../components/external/libpng/pngrio.c><libpng_pngrio.c>
+File 8,1,<../../components/external/libpng/pngrtran.c><libpng_pngrtran.c>
+File 8,1,<../../components/external/libpng/pngrutil.c><libpng_pngrutil.c>
+File 8,1,<../../components/external/libpng/pngset.c><libpng_pngset.c>
+File 8,1,<../../components/external/libpng/pngtrans.c><libpng_pngtrans.c>
+File 8,1,<../../components/external/libpng/pngvcrd.c><libpng_pngvcrd.c>
+File 8,1,<../../components/external/libpng/pngwio.c><libpng_pngwio.c>
+File 8,1,<../../components/external/libpng/pngwrite.c><libpng_pngwrite.c>
+File 8,1,<../../components/external/libpng/pngwtran.c><libpng_pngwtran.c>
+File 8,1,<../../components/external/libpng/pngwutil.c><libpng_pngwutil.c>
+File 9,1,<../../components/libdl/dlclose.c><libdl_dlclose.c>
+File 9,1,<../../components/libdl/dlerror.c><libdl_dlerror.c>
+File 9,1,<../../components/libdl/dlopen.c><libdl_dlopen.c>
+File 9,1,<../../components/libdl/dlsym.c><libdl_dlsym.c>
+File 10,1,<../../components/finsh/shell.c><finsh_shell.c>
+File 10,1,<../../components/finsh/symbol.c><finsh_symbol.c>
+File 10,1,<../../components/finsh/cmd.c><finsh_cmd.c>
+File 10,1,<../../components/finsh/finsh_compiler.c><finsh_finsh_compiler.c>
+File 10,1,<../../components/finsh/finsh_error.c><finsh_finsh_error.c>
+File 10,1,<../../components/finsh/finsh_heap.c><finsh_finsh_heap.c>
+File 10,1,<../../components/finsh/finsh_init.c><finsh_finsh_init.c>
+File 10,1,<../../components/finsh/finsh_node.c><finsh_finsh_node.c>
+File 10,1,<../../components/finsh/finsh_ops.c><finsh_finsh_ops.c>
+File 10,1,<../../components/finsh/finsh_parser.c><finsh_finsh_parser.c>
+File 10,1,<../../components/finsh/finsh_var.c><finsh_finsh_var.c>
+File 10,1,<../../components/finsh/finsh_vm.c><finsh_finsh_vm.c>
+File 10,1,<../../components/finsh/finsh_token.c><finsh_finsh_token.c>
+File 11,1,<../../components/net/lwip-1.4.1/src/api/api_lib.c><api_api_lib.c>
+File 11,1,<../../components/net/lwip-1.4.1/src/api/api_msg.c><api_api_msg.c>
+File 11,1,<../../components/net/lwip-1.4.1/src/api/err.c><api_err.c>
+File 11,1,<../../components/net/lwip-1.4.1/src/api/netbuf.c><api_netbuf.c>
+File 11,1,<../../components/net/lwip-1.4.1/src/api/netdb.c><api_netdb.c>
+File 11,1,<../../components/net/lwip-1.4.1/src/api/netifapi.c><api_netifapi.c>
+File 11,1,<../../components/net/lwip-1.4.1/src/api/sockets.c><api_sockets.c>
+File 11,1,<../../components/net/lwip-1.4.1/src/api/tcpip.c><api_tcpip.c>
+File 11,1,<../../components/net/lwip-1.4.1/src/arch/sys_arch.c><arch_sys_arch.c>
+File 11,1,<../../components/net/lwip-1.4.1/src/core/def.c><core_def.c>
+File 11,1,<../../components/net/lwip-1.4.1/src/core/dhcp.c><core_dhcp.c>
+File 11,1,<../../components/net/lwip-1.4.1/src/core/dns.c><core_dns.c>
+File 11,1,<../../components/net/lwip-1.4.1/src/core/init.c><core_init.c>
+File 11,1,<../../components/net/lwip-1.4.1/src/core/memp.c><core_memp.c>
+File 11,1,<../../components/net/lwip-1.4.1/src/core/netif.c><core_netif.c>
+File 11,1,<../../components/net/lwip-1.4.1/src/core/pbuf.c><core_pbuf.c>
+File 11,1,<../../components/net/lwip-1.4.1/src/core/raw.c><core_raw.c>
+File 11,1,<../../components/net/lwip-1.4.1/src/core/stats.c><core_stats.c>
+File 11,1,<../../components/net/lwip-1.4.1/src/core/sys.c><core_sys.c>
+File 11,1,<../../components/net/lwip-1.4.1/src/core/tcp.c><core_tcp.c>
+File 11,1,<../../components/net/lwip-1.4.1/src/core/tcp_in.c><core_tcp_in.c>
+File 11,1,<../../components/net/lwip-1.4.1/src/core/tcp_out.c><core_tcp_out.c>
+File 11,1,<../../components/net/lwip-1.4.1/src/core/timers.c><core_timers.c>
+File 11,1,<../../components/net/lwip-1.4.1/src/core/udp.c><core_udp.c>
+File 11,1,<../../components/net/lwip-1.4.1/src/core/ipv4/autoip.c><ipv4_autoip.c>
+File 11,1,<../../components/net/lwip-1.4.1/src/core/ipv4/icmp.c><ipv4_icmp.c>
+File 11,1,<../../components/net/lwip-1.4.1/src/core/ipv4/igmp.c><ipv4_igmp.c>
+File 11,1,<../../components/net/lwip-1.4.1/src/core/ipv4/inet.c><ipv4_inet.c>
+File 11,1,<../../components/net/lwip-1.4.1/src/core/ipv4/inet_chksum.c><ipv4_inet_chksum.c>
+File 11,1,<../../components/net/lwip-1.4.1/src/core/ipv4/ip.c><ipv4_ip.c>
+File 11,1,<../../components/net/lwip-1.4.1/src/core/ipv4/ip_addr.c><ipv4_ip_addr.c>
+File 11,1,<../../components/net/lwip-1.4.1/src/core/ipv4/ip_frag.c><ipv4_ip_frag.c>
+File 11,1,<../../components/net/lwip-1.4.1/src/netif/etharp.c><netif_etharp.c>
+File 11,1,<../../components/net/lwip-1.4.1/src/netif/ethernetif.c><netif_ethernetif.c>
+File 11,1,<../../components/net/lwip-1.4.1/src/netif/slipif.c><netif_slipif.c>
+File 12,1,<../../components/dfs/src/dfs.c><src_dfs.c>
+File 12,1,<../../components/dfs/src/dfs_file.c><src_dfs_file.c>
+File 12,1,<../../components/dfs/src/dfs_fs.c><src_dfs_fs.c>
+File 12,1,<../../components/dfs/src/dfs_posix.c><src_dfs_posix.c>
+File 12,1,<../../components/dfs/filesystems/elmfat/dfs_elm.c><elmfat_dfs_elm.c>
+File 12,1,<../../components/dfs/filesystems/elmfat/ff.c><elmfat_ff.c>
+File 12,1,<../../components/dfs/filesystems/elmfat/option/cc936.c><option_cc936.c>
+File 12,1,<../../components/dfs/filesystems/devfs/console.c><devfs_console.c>
+File 12,1,<../../components/dfs/filesystems/devfs/devfs.c><devfs_devfs.c>
+
+
+
+
+Options 1,0,0 // Target 'RT-Thread Mini2440'
+ Device (S3C2440A)
+ Vendor (Samsung)
+ Cpu (IRAM(0x40000000-0x40000FFF) CLOCK(12000000) CPUTYPE(ARM920T))
+ FlashUt ()
+ StupF ("STARTUP\Samsung\S3C2440.s" ("Samsung S3C2440 Startup Code"))
+ FlashDR (UL2ARM(-UV2077N9E -O40 -S0 -C0 -N00("ARM920T Core") -D00(0032409D) -L00(4) -FO7 -FD40000000 -FC1000 -FN1 -FF0S3C2440_NAND_SP -FS030000000 -FL07FFC000))
+ DevID (4277)
+ Rgf (S3C2440.H)
+ Mem ()
+ C ()
+ A ()
+ RL ()
+ OH ()
+ DBC_IFX ()
+ DBC_CMS ()
+ DBC_AMS ()
+ DBC_LMS ()
+ UseEnv=0
+ EnvBin ()
+ EnvInc ()
+ EnvLib ()
+ EnvReg (�Samsung\)
+ OrgReg (�Samsung\)
+ TgStat=16
+ OutDir (.\obj\)
+ OutName (rtthread-mini2440)
+ GenApp=1
+ GenLib=0
+ GenHex=0
+ Debug=1
+ Browse=0
+ LstDir (.\obj)
+ HexSel=1
+ MG32K=0
+ TGMORE=0
+ RunUsr 0 0 <>
+ RunUsr 1 0 <>
+ BrunUsr 0 0 <>
+ BrunUsr 1 0 <>
+ CrunUsr 0 0 <>
+ CrunUsr 1 0 <>
+ SVCSID <>
+ GLFLAGS=1790
+ ADSFLGA { 242,31,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 }
+ ACPUTYP (ARM920T)
+ RVDEV ()
+ ADSTFLGA { 0,8,64,0,96,0,64,64,0,0,0,0,0,0,0,0,0,0,0,0 }
+ OCMADSOCM { 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 }
+ OCMADSIRAM { 0,0,0,0,64,0,16,0,0 }
+ OCMADSIROM { 0,0,0,0,0,0,0,0,0 }
+ OCMADSXRAM { 0,0,0,0,0,0,0,0,0 }
+ OCR_RVCT { 1,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,64,0,16,0,0,0,0,0,0,0,0,0,0,0 }
+ RV_STAVEC ()
+ ADSCCFLG { 5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 }
+ ADSCMISC (--diag_suppress=870)
+ ADSCDEFN (RT_USING_ARM_LIBC)
+ ADSCUDEF ()
+ ADSCINCD (../../components/libdl;../../components/external/libpng;../../libcpu/arm/s3c24x0;../../components/finsh;../../components/net/lwip-1.4.1/src;../../components/pthreads;../../components/dfs/filesystems/elmfat;../../libcpu/arm/common;../../components/dfs/filesystems/devfs;.;../../components/external/libz;../../components/net/lwip-1.4.1/src/include/netif;../../include;../../components/dfs/include;../../components/net/lwip-1.4.1/src/include;../../components/external/jpeg;../../components/libc/armlibc;../../components/net/lwip-1.4.1/src/arch/include;../../components/net/lwip-1.4.1/src/include/ipv4)
+ ADSASFLG { 1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 }
+ ADSAMISC ()
+ ADSADEFN ()
+ ADSAUDEF ()
+ ADSAINCD ()
+ PropFld { 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 }
+ IncBld=1
+ AlwaysBuild=0
+ GenAsm=0
+ AsmAsm=0
+ PublicsOnly=0
+ StopCode=3
+ CustArgs ()
+ LibMods ()
+ ADSLDFG { 16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 }
+ ADSLDTA (0x30000000)
+ ADSLDDA (0x40000000)
+ ADSLDSC (rtthread-mini2440.sct)
+ ADSLDIB ()
+ ADSLDIC ()
+ ADSLDMC ( --keep *.o(RTMSymTab) --keep *.o(FSymTab) --keep *.o(VSymTab) )
+ ADSLDIF ()
+ ADSLDDW ()
+ OPTDL (SARM.DLL)()(DARMSS9.DLL)(-pS3C2440A)(SARM.DLL)()(TARMSS9.DLL)(-pS3C2440A)
+ OPTDBG 47614,6,()()()()()()()()()(.\Ext_RAM.ini) (Segger\JLTAgdi.dll)()()()
+ FLASH1 { 1,0,0,0,1,0,0,0,4,16,0,0,0,0,0,0,0,0,0,0 }
+ FLASH2 (Segger\JLTAgdi.dll)
+ FLASH3 ("" ())
+ FLASH4 ()
+EndOpt
+
diff --git a/bsp/nrf51822/project.uvproj b/bsp/nrf51822/project.uvproj
new file mode 100644
index 0000000000..689bd1c80c
--- /dev/null
+++ b/bsp/nrf51822/project.uvproj
@@ -0,0 +1,646 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
+<Project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="project_projx.xsd">
+ <SchemaVersion>2.1</SchemaVersion>
+ <Header>### uVision Project, (C) Keil Software</Header>
+ <Targets>
+ <Target>
+ <TargetName>rt-thread</TargetName>
+ <ToolsetNumber>0x4</ToolsetNumber>
+ <ToolsetName>ARM-ADS</ToolsetName>
+ <TargetOption>
+ <TargetCommonOption>
+ <Device>nRF51822_xxAA</Device>
+ <Vendor>Nordic Semiconductor</Vendor>
+ <PackID>NordicSemiconductor.nRF_DeviceFamilyPack.1.1.4</PackID>
+ <PackURL>http://developer.nordicsemi.com/nRF51_SDK/pieces/nRF_DeviceFamilyPack/</PackURL>
+ <Cpu>IROM(0x00000000,0x40000) IRAM(0x20000000,0x4000) CPUTYPE("Cortex-M0") CLOCK(12000000) ELITTLE</Cpu>
+ <FlashUtilSpec />
+ <StartupFile />
+ <FlashDriverDll>UL2CM3(-S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0nrf51xxx -FS00 -FL0200000 -FP0($$Device:nRF51822_xxAA$Flash\nrf51xxx.flm))</FlashDriverDll>
+ <DeviceId>0</DeviceId>
+ <RegisterFile>$$Device:nRF51822_xxAA$Device\Include\nrf.h</RegisterFile>
+ <MemoryEnv />
+ <Cmp />
+ <Asm />
+ <Linker />
+ <OHString />
+ <InfinionOptionDll />
+ <SLE66CMisc />
+ <SLE66AMisc />
+ <SLE66LinkerMisc />
+ <SFDFile>$$Device:nRF51822_xxAA$SVD\nrf51.xml</SFDFile>
+ <bCustSvd>0</bCustSvd>
+ <UseEnv>0</UseEnv>
+ <BinPath />
+ <IncludePath />
+ <LibPath />
+ <RegisterFilePath />
+ <DBRegisterFilePath />
+ <TargetStatus>
+ <Error>0</Error>
+ <ExitCodeStop>0</ExitCodeStop>
+ <ButtonStop>0</ButtonStop>
+ <NotGenerated>0</NotGenerated>
+ <InvalidFlash>1</InvalidFlash>
+ </TargetStatus>
+ <OutputDirectory>.\build\</OutputDirectory>
+ <OutputName>template</OutputName>
+ <CreateExecutable>1</CreateExecutable>
+ <CreateLib>0</CreateLib>
+ <CreateHexFile>0</CreateHexFile>
+ <DebugInformation>1</DebugInformation>
+ <BrowseInformation>1</BrowseInformation>
+ <ListingPath>.\build\</ListingPath>
+ <HexFormatSelection>1</HexFormatSelection>
+ <Merge32K>0</Merge32K>
+ <CreateBatchFile>0</CreateBatchFile>
+ <BeforeCompile>
+ <RunUserProg1>0</RunUserProg1>
+ <RunUserProg2>0</RunUserProg2>
+ <UserProg1Name />
+ <UserProg2Name />
+ <UserProg1Dos16Mode>0</UserProg1Dos16Mode>
+ <UserProg2Dos16Mode>0</UserProg2Dos16Mode>
+ <nStopU1X>0</nStopU1X>
+ <nStopU2X>0</nStopU2X>
+ </BeforeCompile>
+ <BeforeMake>
+ <RunUserProg1>0</RunUserProg1>
+ <RunUserProg2>0</RunUserProg2>
+ <UserProg1Name />
+ <UserProg2Name />
+ <UserProg1Dos16Mode>0</UserProg1Dos16Mode>
+ <UserProg2Dos16Mode>0</UserProg2Dos16Mode>
+ <nStopB1X>0</nStopB1X>
+ <nStopB2X>0</nStopB2X>
+ </BeforeMake>
+ <AfterMake>
+ <RunUserProg1>0</RunUserProg1>
+ <RunUserProg2>0</RunUserProg2>
+ <UserProg1Name />
+ <UserProg2Name />
+ <UserProg1Dos16Mode>0</UserProg1Dos16Mode>
+ <UserProg2Dos16Mode>0</UserProg2Dos16Mode>
+ </AfterMake>
+ <SelectedForBatchBuild>0</SelectedForBatchBuild>
+ <SVCSIdString />
+ </TargetCommonOption>
+ <CommonProperty>
+ <UseCPPCompiler>0</UseCPPCompiler>
+ <RVCTCodeConst>0</RVCTCodeConst>
+ <RVCTZI>0</RVCTZI>
+ <RVCTOtherData>0</RVCTOtherData>
+ <ModuleSelection>0</ModuleSelection>
+ <IncludeInBuild>1</IncludeInBuild>
+ <AlwaysBuild>0</AlwaysBuild>
+ <GenerateAssemblyFile>0</GenerateAssemblyFile>
+ <AssembleAssemblyFile>0</AssembleAssemblyFile>
+ <PublicsOnly>0</PublicsOnly>
+ <StopOnExitCode>3</StopOnExitCode>
+ <CustomArgument />
+ <IncludeLibraryModules />
+ <ComprImg>1</ComprImg>
+ </CommonProperty>
+ <DllOption>
+ <SimDllName>SARMCM3.DLL</SimDllName>
+ <SimDllArguments> </SimDllArguments>
+ <SimDlgDll>DARMCM1.DLL</SimDlgDll>
+ <SimDlgDllArguments>-pCM0</SimDlgDllArguments>
+ <TargetDllName>SARMCM3.DLL</TargetDllName>
+ <TargetDllArguments> </TargetDllArguments>
+ <TargetDlgDll>TARMCM1.DLL</TargetDlgDll>
+ <TargetDlgDllArguments>-pCM0</TargetDlgDllArguments>
+ </DllOption>
+ <DebugOption>
+ <OPTHX>
+ <HexSelection>1</HexSelection>
+ <HexRangeLowAddress>0</HexRangeLowAddress>
+ <HexRangeHighAddress>0</HexRangeHighAddress>
+ <HexOffset>0</HexOffset>
+ <Oh166RecLen>16</Oh166RecLen>
+ </OPTHX>
+ <Simulator>
+ <UseSimulator>0</UseSimulator>
+ <LoadApplicationAtStartup>1</LoadApplicationAtStartup>
+ <RunToMain>1</RunToMain>
+ <RestoreBreakpoints>1</RestoreBreakpoints>
+ <RestoreWatchpoints>1</RestoreWatchpoints>
+ <RestoreMemoryDisplay>1</RestoreMemoryDisplay>
+ <RestoreFunctions>1</RestoreFunctions>
+ <RestoreToolbox>1</RestoreToolbox>
+ <LimitSpeedToRealTime>0</LimitSpeedToRealTime>
+ <RestoreSysVw>1</RestoreSysVw>
+ </Simulator>
+ <Target>
+ <UseTarget>1</UseTarget>
+ <LoadApplicationAtStartup>1</LoadApplicationAtStartup>
+ <RunToMain>1</RunToMain>
+ <RestoreBreakpoints>1</RestoreBreakpoints>
+ <RestoreWatchpoints>1</RestoreWatchpoints>
+ <RestoreMemoryDisplay>1</RestoreMemoryDisplay>
+ <RestoreFunctions>0</RestoreFunctions>
+ <RestoreToolbox>1</RestoreToolbox>
+ <RestoreTracepoints>0</RestoreTracepoints>
+ <RestoreSysVw>1</RestoreSysVw>
+ </Target>
+ <RunDebugAfterBuild>0</RunDebugAfterBuild>
+ <TargetSelection>6</TargetSelection>
+ <SimDlls>
+ <CpuDll />
+ <CpuDllArguments />
+ <PeripheralDll />
+ <PeripheralDllArguments />
+ <InitializationFile />
+ </SimDlls>
+ <TargetDlls>
+ <CpuDll />
+ <CpuDllArguments />
+ <PeripheralDll />
+ <PeripheralDllArguments />
+ <InitializationFile />
+ <Driver>Segger\JL2CM3.dll</Driver>
+ </TargetDlls>
+ </DebugOption>
+ <Utilities>
+ <Flash1>
+ <UseTargetDll>1</UseTargetDll>
+ <UseExternalTool>0</UseExternalTool>
+ <RunIndependent>0</RunIndependent>
+ <UpdateFlashBeforeDebugging>1</UpdateFlashBeforeDebugging>
+ <Capability>1</Capability>
+ <DriverSelection>4096</DriverSelection>
+ </Flash1>
+ <bUseTDR>1</bUseTDR>
+ <Flash2>BIN\UL2CM3.DLL</Flash2>
+ <Flash3>"" ()</Flash3>
+ <Flash4 />
+ <pFcarmOut />
+ <pFcarmGrp />
+ <pFcArmRoot />
+ <FcArmLst>0</FcArmLst>
+ </Utilities>
+ <TargetArmAds>
+ <ArmAdsMisc>
+ <GenerateListings>0</GenerateListings>
+ <asHll>1</asHll>
+ <asAsm>1</asAsm>
+ <asMacX>1</asMacX>
+ <asSyms>1</asSyms>
+ <asFals>1</asFals>
+ <asDbgD>1</asDbgD>
+ <asForm>1</asForm>
+ <ldLst>0</ldLst>
+ <ldmm>1</ldmm>
+ <ldXref>1</ldXref>
+ <BigEnd>0</BigEnd>
+ <AdsALst>1</AdsALst>
+ <AdsACrf>1</AdsACrf>
+ <AdsANop>0</AdsANop>
+ <AdsANot>0</AdsANot>
+ <AdsLLst>1</AdsLLst>
+ <AdsLmap>1</AdsLmap>
+ <AdsLcgr>1</AdsLcgr>
+ <AdsLsym>1</AdsLsym>
+ <AdsLszi>1</AdsLszi>
+ <AdsLtoi>1</AdsLtoi>
+ <AdsLsun>1</AdsLsun>
+ <AdsLven>1</AdsLven>
+ <AdsLsxf>1</AdsLsxf>
+ <RvctClst>0</RvctClst>
+ <GenPPlst>0</GenPPlst>
+ <AdsCpuType>"Cortex-M0"</AdsCpuType>
+ <RvctDeviceName />
+ <mOS>0</mOS>
+ <uocRom>0</uocRom>
+ <uocRam>0</uocRam>
+ <hadIROM>1</hadIROM>
+ <hadIRAM>1</hadIRAM>
+ <hadXRAM>0</hadXRAM>
+ <uocXRam>0</uocXRam>
+ <RvdsVP>0</RvdsVP>
+ <hadIRAM2>0</hadIRAM2>
+ <hadIROM2>0</hadIROM2>
+ <StupSel>8</StupSel>
+ <useUlib>0</useUlib>
+ <EndSel>0</EndSel>
+ <uLtcg>0</uLtcg>
+ <RoSelD>3</RoSelD>
+ <RwSelD>3</RwSelD>
+ <CodeSel>0</CodeSel>
+ <OptFeed>0</OptFeed>
+ <NoZi1>0</NoZi1>
+ <NoZi2>0</NoZi2>
+ <NoZi3>0</NoZi3>
+ <NoZi4>0</NoZi4>
+ <NoZi5>0</NoZi5>
+ <Ro1Chk>0</Ro1Chk>
+ <Ro2Chk>0</Ro2Chk>
+ <Ro3Chk>0</Ro3Chk>
+ <Ir1Chk>1</Ir1Chk>
+ <Ir2Chk>0</Ir2Chk>
+ <Ra1Chk>0</Ra1Chk>
+ <Ra2Chk>0</Ra2Chk>
+ <Ra3Chk>0</Ra3Chk>
+ <Im1Chk>1</Im1Chk>
+ <Im2Chk>0</Im2Chk>
+ <OnChipMemories>
+ <Ocm1>
+ <Type>0</Type>
+ <StartAddress>0x0</StartAddress>
+ <Size>0x0</Size>
+ </Ocm1>
+ <Ocm2>
+ <Type>0</Type>
+ <StartAddress>0x0</StartAddress>
+ <Size>0x0</Size>
+ </Ocm2>
+ <Ocm3>
+ <Type>0</Type>
+ <StartAddress>0x0</StartAddress>
+ <Size>0x0</Size>
+ </Ocm3>
+ <Ocm4>
+ <Type>0</Type>
+ <StartAddress>0x0</StartAddress>
+ <Size>0x0</Size>
+ </Ocm4>
+ <Ocm5>
+ <Type>0</Type>
+ <StartAddress>0x0</StartAddress>
+ <Size>0x0</Size>
+ </Ocm5>
+ <Ocm6>
+ <Type>0</Type>
+ <StartAddress>0x0</StartAddress>
+ <Size>0x0</Size>
+ </Ocm6>
+ <IRAM>
+ <Type>0</Type>
+ <StartAddress>0x20000000</StartAddress>
+ <Size>0x4000</Size>
+ </IRAM>
+ <IROM>
+ <Type>1</Type>
+ <StartAddress>0x0</StartAddress>
+ <Size>0x40000</Size>
+ </IROM>
+ <XRAM>
+ <Type>0</Type>
+ <StartAddress>0x0</StartAddress>
+ <Size>0x0</Size>
+ </XRAM>
+ <OCR_RVCT1>
+ <Type>1</Type>
+ <StartAddress>0x0</StartAddress>
+ <Size>0x0</Size>
+ </OCR_RVCT1>
+ <OCR_RVCT2>
+ <Type>1</Type>
+ <StartAddress>0x0</StartAddress>
+ <Size>0x0</Size>
+ </OCR_RVCT2>
+ <OCR_RVCT3>
+ <Type>1</Type>
+ <StartAddress>0x0</StartAddress>
+ <Size>0x0</Size>
+ </OCR_RVCT3>
+ <OCR_RVCT4>
+ <Type>1</Type>
+ <StartAddress>0x0</StartAddress>
+ <Size>0x40000</Size>
+ </OCR_RVCT4>
+ <OCR_RVCT5>
+ <Type>1</Type>
+ <StartAddress>0x0</StartAddress>
+ <Size>0x0</Size>
+ </OCR_RVCT5>
+ <OCR_RVCT6>
+ <Type>0</Type>
+ <StartAddress>0x0</StartAddress>
+ <Size>0x0</Size>
+ </OCR_RVCT6>
+ <OCR_RVCT7>
+ <Type>0</Type>
+ <StartAddress>0x0</StartAddress>
+ <Size>0x0</Size>
+ </OCR_RVCT7>
+ <OCR_RVCT8>
+ <Type>0</Type>
+ <StartAddress>0x0</StartAddress>
+ <Size>0x0</Size>
+ </OCR_RVCT8>
+ <OCR_RVCT9>
+ <Type>0</Type>
+ <StartAddress>0x20000000</StartAddress>
+ <Size>0x4000</Size>
+ </OCR_RVCT9>
+ <OCR_RVCT10>
+ <Type>0</Type>
+ <StartAddress>0x0</StartAddress>
+ <Size>0x0</Size>
+ </OCR_RVCT10>
+ </OnChipMemories>
+ <RvctStartVector />
+ </ArmAdsMisc>
+ <Cads>
+ <interw>1</interw>
+ <Optim>1</Optim>
+ <oTime>0</oTime>
+ <SplitLS>0</SplitLS>
+ <OneElfS>1</OneElfS>
+ <Strict>0</Strict>
+ <EnumInt>0</EnumInt>
+ <PlainCh>0</PlainCh>
+ <Ropi>0</Ropi>
+ <Rwpi>0</Rwpi>
+ <wLevel>0</wLevel>
+ <uThumb>0</uThumb>
+ <uSurpInc>0</uSurpInc>
+ <uC99>0</uC99>
+ <useXO>0</useXO>
+ <VariousControls>
+ <MiscControls>--c99</MiscControls>
+ <Define>NRF51, USE_STDPERIPH_DRIVER</Define>
+ <Undefine />
+ <IncludePath>Libraries/CMSIS/Include;Libraries/nrf51822/Include;applications;.;drivers;../../include;../../libcpu/arm/cortex-m0;../../libcpu/arm/common;../../components/drivers/include;../../components/finsh</IncludePath>
+ </VariousControls>
+ </Cads>
+ <Aads>
+ <interw>1</interw>
+ <Ropi>0</Ropi>
+ <Rwpi>0</Rwpi>
+ <thumb>0</thumb>
+ <SplitLS>0</SplitLS>
+ <SwStkChk>0</SwStkChk>
+ <NoWarn>0</NoWarn>
+ <uSurpInc>0</uSurpInc>
+ <useXO>0</useXO>
+ <VariousControls>
+ <MiscControls />
+ <Define />
+ <Undefine />
+ <IncludePath />
+ </VariousControls>
+ </Aads>
+ <LDads>
+ <umfTarg>1</umfTarg>
+ <Ropi>0</Ropi>
+ <Rwpi>0</Rwpi>
+ <noStLib>0</noStLib>
+ <RepFail>1</RepFail>
+ <useFile>0</useFile>
+ <TextAddressRange>0x08000000</TextAddressRange>
+ <DataAddressRange>0x20000000</DataAddressRange>
+ <pXoBase />
+ <ScatterFile />
+ <IncludeLibs />
+ <IncludeLibsPath />
+ <Misc> --keep *.o(FSymTab)</Misc>
+ <LinkerInputFile />
+ <DisabledWarnings />
+ </LDads>
+ </TargetArmAds>
+ </TargetOption>
+ <Groups>
+ <Group>
+ <GroupName>Startup Code</GroupName>
+ <Files>
+ <File>
+ <FileName>system_nrf51.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>Libraries/nrf51822/Source/templates/system_nrf51.c</FilePath>
+ </File>
+ </Files>
+ <Files>
+ <File>
+ <FileName>arm_startup_nrf51.s</FileName>
+ <FileType>2</FileType>
+ <FilePath>Libraries/nrf51822/Source/templates/arm/arm_startup_nrf51.s</FilePath>
+ </File>
+ </Files>
+ </Group>
+ <Group>
+ <GroupName>Applications</GroupName>
+ <Files>
+ <File>
+ <FileName>application.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>applications/application.c</FilePath>
+ </File>
+ </Files>
+ <Files>
+ <File>
+ <FileName>startup.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>applications/startup.c</FilePath>
+ </File>
+ </Files>
+ </Group>
+ <Group>
+ <GroupName>Drivers</GroupName>
+ <Files>
+ <File>
+ <FileName>board.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>drivers/board.c</FilePath>
+ </File>
+ </Files>
+ <Files>
+ <File>
+ <FileName>uart.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>drivers/uart.c</FilePath>
+ </File>
+ </Files>
+ </Group>
+ <Group>
+ <GroupName>Kernel</GroupName>
+ <Files>
+ <File>
+ <FileName>clock.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../../src/clock.c</FilePath>
+ </File>
+ </Files>
+ <Files>
+ <File>
+ <FileName>components.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../../src/components.c</FilePath>
+ </File>
+ </Files>
+ <Files>
+ <File>
+ <FileName>device.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../../src/device.c</FilePath>
+ </File>
+ </Files>
+ <Files>
+ <File>
+ <FileName>idle.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../../src/idle.c</FilePath>
+ </File>
+ </Files>
+ <Files>
+ <File>
+ <FileName>ipc.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../../src/ipc.c</FilePath>
+ </File>
+ </Files>
+ <Files>
+ <File>
+ <FileName>irq.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../../src/irq.c</FilePath>
+ </File>
+ </Files>
+ <Files>
+ <File>
+ <FileName>kservice.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../../src/kservice.c</FilePath>
+ </File>
+ </Files>
+ <Files>
+ <File>
+ <FileName>object.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../../src/object.c</FilePath>
+ </File>
+ </Files>
+ <Files>
+ <File>
+ <FileName>scheduler.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../../src/scheduler.c</FilePath>
+ </File>
+ </Files>
+ <Files>
+ <File>
+ <FileName>thread.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../../src/thread.c</FilePath>
+ </File>
+ </Files>
+ <Files>
+ <File>
+ <FileName>timer.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../../src/timer.c</FilePath>
+ </File>
+ </Files>
+ </Group>
+ <Group>
+ <GroupName>CORTEX-M0</GroupName>
+ <Files>
+ <File>
+ <FileName>cpuport.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../../libcpu/arm/cortex-m0/cpuport.c</FilePath>
+ </File>
+ </Files>
+ <Files>
+ <File>
+ <FileName>context_rvds.S</FileName>
+ <FileType>2</FileType>
+ <FilePath>../../libcpu/arm/cortex-m0/context_rvds.S</FilePath>
+ </File>
+ </Files>
+ <Files>
+ <File>
+ <FileName>backtrace.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../../libcpu/arm/common/backtrace.c</FilePath>
+ </File>
+ </Files>
+ <Files>
+ <File>
+ <FileName>div0.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../../libcpu/arm/common/div0.c</FilePath>
+ </File>
+ </Files>
+ <Files>
+ <File>
+ <FileName>showmem.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../../libcpu/arm/common/showmem.c</FilePath>
+ </File>
+ </Files>
+ </Group>
+ <Group>
+ <GroupName>DeviceDrivers</GroupName>
+ <Files>
+ <File>
+ <FileName>completion.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../../components/drivers/src/completion.c</FilePath>
+ </File>
+ </Files>
+ <Files>
+ <File>
+ <FileName>portal.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../../components/drivers/src/portal.c</FilePath>
+ </File>
+ </Files>
+ <Files>
+ <File>
+ <FileName>ringbuffer.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../../components/drivers/src/ringbuffer.c</FilePath>
+ </File>
+ </Files>
+ <Files>
+ <File>
+ <FileName>workqueue.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../../components/drivers/src/workqueue.c</FilePath>
+ </File>
+ </Files>
+ </Group>
+ <Group>
+ <GroupName>finsh</GroupName>
+ <Files>
+ <File>
+ <FileName>shell.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../../components/finsh/shell.c</FilePath>
+ </File>
+ </Files>
+ <Files>
+ <File>
+ <FileName>symbol.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../../components/finsh/symbol.c</FilePath>
+ </File>
+ </Files>
+ <Files>
+ <File>
+ <FileName>cmd.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../../components/finsh/cmd.c</FilePath>
+ </File>
+ </Files>
+ <Files>
+ <File>
+ <FileName>msh_cmd.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../../components/finsh/msh_cmd.c</FilePath>
+ </File>
+ </Files>
+ <Files>
+ <File>
+ <FileName>msh.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../../components/finsh/msh.c</FilePath>
+ </File>
+ </Files>
+ </Group>
+ </Groups>
+ </Target>
+ </Targets>
+</Project>
diff --git a/bsp/sam7x/project.uvproj b/bsp/sam7x/project.uvproj
index c30f48ab07..29a1b42672 100644
--- a/bsp/sam7x/project.uvproj
+++ b/bsp/sam7x/project.uvproj
@@ -1,10 +1,7 @@
<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
<Project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="project_proj.xsd">
-
<SchemaVersion>1.1</SchemaVersion>
-
<Header>### uVision Project, (C) Keil Software</Header>
-
<Targets>
<Target>
<TargetName>RT-Thread/AT91SAM7X256</TargetName>
@@ -15,25 +12,25 @@
<Device>AT91SAM7X256</Device>
<Vendor>Atmel</Vendor>
<Cpu>IRAM(0x200000-0x20FFFF) IROM(0x100000-0x13FFFF) CLOCK(18432000) CPUTYPE(ARM7TDMI)</Cpu>
- <FlashUtilSpec></FlashUtilSpec>
+ <FlashUtilSpec />
<StartupFile>"STARTUP\Atmel\SAM7.s" ("Atmel AT91SAM7 Startup Code")</StartupFile>
<FlashDriverDll>UL2ARM(-U56240812 -O15 -S0 -C0 -FO7 -FD200000 -FC800 -FN1 -FF0AT91SAM7_256 -FS0100000 -FL040000)</FlashDriverDll>
<DeviceId>4081</DeviceId>
<RegisterFile>AT91SAM7X256.H</RegisterFile>
- <MemoryEnv></MemoryEnv>
- <Cmp></Cmp>
- <Asm></Asm>
- <Linker></Linker>
- <OHString></OHString>
- <InfinionOptionDll></InfinionOptionDll>
- <SLE66CMisc></SLE66CMisc>
- <SLE66AMisc></SLE66AMisc>
- <SLE66LinkerMisc></SLE66LinkerMisc>
- <SFDFile></SFDFile>
+ <MemoryEnv />
+ <Cmp />
+ <Asm />
+ <Linker />
+ <OHString />
+ <InfinionOptionDll />
+ <SLE66CMisc />
+ <SLE66AMisc />
+ <SLE66LinkerMisc />
+ <SFDFile />
<UseEnv>0</UseEnv>
- <BinPath></BinPath>
- <IncludePath></IncludePath>
- <LibPath></LibPath>
+ <BinPath />
+ <IncludePath />
+ <LibPath />
<RegisterFilePath>Atmel\SAM7X\</RegisterFilePath>
<DBRegisterFilePath>Atmel\SAM7X\</DBRegisterFilePath>
<TargetStatus>
@@ -57,31 +54,29 @@
<BeforeCompile>
<RunUserProg1>0</RunUserProg1>
<RunUserProg2>0</RunUserProg2>
- <UserProg1Name></UserProg1Name>
- <UserProg2Name></UserProg2Name>
+ <UserProg1Name />
+ <UserProg2Name />
<UserProg1Dos16Mode>0</UserProg1Dos16Mode>
<UserProg2Dos16Mode>0</UserProg2Dos16Mode>
- <nStopU1X>0</nStopU1X>
- <nStopU2X>0</nStopU2X>
</BeforeCompile>
<BeforeMake>
<RunUserProg1>0</RunUserProg1>
<RunUserProg2>0</RunUserProg2>
- <UserProg1Name></UserProg1Name>
- <UserProg2Name></UserProg2Name>
+ <UserProg1Name />
+ <UserProg2Name />
<UserProg1Dos16Mode>0</UserProg1Dos16Mode>
<UserProg2Dos16Mode>0</UserProg2Dos16Mode>
</BeforeMake>
<AfterMake>
<RunUserProg1>0</RunUserProg1>
<RunUserProg2>0</RunUserProg2>
- <UserProg1Name></UserProg1Name>
- <UserProg2Name></UserProg2Name>
+ <UserProg1Name />
+ <UserProg2Name />
<UserProg1Dos16Mode>0</UserProg1Dos16Mode>
<UserProg2Dos16Mode>0</UserProg2Dos16Mode>
</AfterMake>
<SelectedForBatchBuild>0</SelectedForBatchBuild>
- <SVCSIdString></SVCSIdString>
+ <SVCSIdString />
</TargetCommonOption>
<CommonProperty>
<UseCPPCompiler>0</UseCPPCompiler>
@@ -95,8 +90,8 @@
<AssembleAssemblyFile>0</AssembleAssemblyFile>
<PublicsOnly>0</PublicsOnly>
<StopOnExitCode>3</StopOnExitCode>
- <CustomArgument></CustomArgument>
- <IncludeLibraryModules></IncludeLibraryModules>
+ <CustomArgument />
+ <IncludeLibraryModules />
</CommonProperty>
<DllOption>
<SimDllName>SARM.DLL</SimDllName>
@@ -104,7 +99,7 @@
<SimDlgDll>DARMATS.DLL</SimDlgDll>
<SimDlgDllArguments>-p91SAM7X256</SimDlgDllArguments>
<TargetDllName>SARM.DLL</TargetDllName>
- <TargetDllArguments></TargetDllArguments>
+ <TargetDllArguments />
<TargetDlgDll>TARMATS.DLL</TargetDlgDll>
<TargetDlgDllArguments>-p91SAM7X256</TargetDlgDllArguments>
</DllOption>
@@ -140,18 +135,18 @@
<RunDebugAfterBuild>0</RunDebugAfterBuild>
<TargetSelection>6</TargetSelection>
<SimDlls>
- <CpuDll></CpuDll>
- <CpuDllArguments></CpuDllArguments>
- <PeripheralDll></PeripheralDll>
- <PeripheralDllArguments></PeripheralDllArguments>
- <InitializationFile></InitializationFile>
+ <CpuDll />
+ <CpuDllArguments />
+ <PeripheralDll />
+ <PeripheralDllArguments />
+ <InitializationFile />
</SimDlls>
<TargetDlls>
- <CpuDll></CpuDll>
- <CpuDllArguments></CpuDllArguments>
- <PeripheralDll></PeripheralDll>
- <PeripheralDllArguments></PeripheralDllArguments>
- <InitializationFile></InitializationFile>
+ <CpuDll />
+ <CpuDllArguments />
+ <PeripheralDll />
+ <PeripheralDllArguments />
+ <InitializationFile />
<Driver>Segger\JLTAgdi.dll</Driver>
</TargetDlls>
</DebugOption>
@@ -166,7 +161,7 @@
</Flash1>
<Flash2>Segger\JLTAgdi.dll</Flash2>
<Flash3>"" ()</Flash3>
- <Flash4></Flash4>
+ <Flash4 />
</Utilities>
<TargetArmAds>
<ArmAdsMisc>
@@ -198,7 +193,7 @@
<RvctClst>0</RvctClst>
<GenPPlst>0</GenPPlst>
<AdsCpuType>ARM7TDMI</AdsCpuType>
- <RvctDeviceName></RvctDeviceName>
+ <RvctDeviceName />
<mOS>0</mOS>
<uocRom>0</uocRom>
<uocRam>0</uocRam>
@@ -329,7 +324,7 @@
<Size>0x0</Size>
</OCR_RVCT10>
</OnChipMemories>
- <RvctStartVector></RvctStartVector>
+ <RvctStartVector />
</ArmAdsMisc>
<Cads>
<interw>1</interw>
@@ -345,10 +340,10 @@
<wLevel>0</wLevel>
<uThumb>0</uThumb>
<VariousControls>
- <MiscControls></MiscControls>
- <Define></Define>
- <Undefine></Undefine>
- <IncludePath>.;..\..\components\finsh;..\..\components\net\lwip\src;..\..\components\net\lwip\src\arch\include;..\..\components\net\lwip\src\include;..\..\components\net\lwip\src\include\ipv4;..\..\components\net\lwip\src\include\netif;..\..\include;..\..\libcpu\arm\AT91SAM7X;..\..\libcpu\arm\common;applications;drivers</IncludePath>
+ <MiscControls />
+ <Define />
+ <Undefine />
+ <IncludePath>applications;.;drivers;../../include;../../libcpu/arm/AT91SAM7X;../../libcpu/arm/common;../../components/finsh;../../components/net/lwip-1.4.1/src;../../components/net/lwip-1.4.1/src/include;../../components/net/lwip-1.4.1/src/include/ipv4;../../components/net/lwip-1.4.1/src/arch/include;../../components/net/lwip-1.4.1/src/include/netif</IncludePath>
</VariousControls>
</Cads>
<Aads>
@@ -360,10 +355,10 @@
<SwStkChk>0</SwStkChk>
<NoWarn>0</NoWarn>
<VariousControls>
- <MiscControls></MiscControls>
- <Define></Define>
- <Undefine></Undefine>
- <IncludePath></IncludePath>
+ <MiscControls />
+ <Define />
+ <Undefine />
+ <IncludePath />
</VariousControls>
</Aads>
<LDads>
@@ -375,12 +370,12 @@
<useFile>0</useFile>
<TextAddressRange>0x00100000</TextAddressRange>
<DataAddressRange>0x00200000</DataAddressRange>
- <ScatterFile></ScatterFile>
- <IncludeLibs></IncludeLibs>
- <IncludeLibsPath></IncludeLibsPath>
- <Misc> --keep __fsym_* --keep __vsym_* </Misc>
- <LinkerInputFile></LinkerInputFile>
- <DisabledWarnings></DisabledWarnings>
+ <ScatterFile />
+ <IncludeLibs />
+ <IncludeLibsPath />
+ <Misc> --keep *.o(FSymTab) --keep *.o(VSymTab) </Misc>
+ <LinkerInputFile />
+ <DisabledWarnings />
</LDads>
</TargetArmAds>
</TargetOption>
@@ -391,12 +386,14 @@
<File>
<FileName>application.c</FileName>
<FileType>1</FileType>
- <FilePath>applications\application.c</FilePath>
+ <FilePath>applications/application.c</FilePath>
</File>
+ </Files>
+ <Files>
<File>
<FileName>startup.c</FileName>
<FileType>1</FileType>
- <FilePath>applications\startup.c</FilePath>
+ <FilePath>applications/startup.c</FilePath>
</File>
</Files>
</Group>
@@ -406,17 +403,21 @@
<File>
<FileName>board.c</FileName>
<FileType>1</FileType>
- <FilePath>drivers\board.c</FilePath>
+ <FilePath>drivers/board.c</FilePath>
</File>
+ </Files>
+ <Files>
<File>
<FileName>sam7x_emac.c</FileName>
<FileType>1</FileType>
- <FilePath>drivers\sam7x_emac.c</FilePath>
+ <FilePath>drivers/sam7x_emac.c</FilePath>
</File>
+ </Files>
+ <Files>
<File>
<FileName>serial.c</FileName>
<FileType>1</FileType>
- <FilePath>drivers\serial.c</FilePath>
+ <FilePath>drivers/serial.c</FilePath>
</File>
</Files>
</Group>
@@ -426,62 +427,91 @@
<File>
<FileName>clock.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\src\clock.c</FilePath>
+ <FilePath>../../src/clock.c</FilePath>
+ </File>
+ </Files>
+ <Files>
+ <File>
+ <FileName>components.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../../src/components.c</FilePath>
</File>
+ </Files>
+ <Files>
<File>
<FileName>device.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\src\device.c</FilePath>
+ <FilePath>../../src/device.c</FilePath>
</File>
+ </Files>
+ <Files>
<File>
<FileName>idle.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\src\idle.c</FilePath>
+ <FilePath>../../src/idle.c</FilePath>
</File>
+ </Files>
+ <Files>
<File>
<FileName>ipc.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\src\ipc.c</FilePath>
+ <FilePath>../../src/ipc.c</FilePath>
</File>
+ </Files>
+ <Files>
<File>
<FileName>irq.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\src\irq.c</FilePath>
+ <FilePath>../../src/irq.c</FilePath>
</File>
+ </Files>
+ <Files>
<File>
<FileName>kservice.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\src\kservice.c</FilePath>
+ <FilePath>../../src/kservice.c</FilePath>
</File>
+ </Files>
+ <Files>
<File>
<FileName>mem.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\src\mem.c</FilePath>
+ <FilePath>../../src/mem.c</FilePath>
</File>
+ </Files>
+ <Files>
<File>
<FileName>mempool.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\src\mempool.c</FilePath>
+ <FilePath>../../src/mempool.c</FilePath>
</File>
+ </Files>
+ <Files>
<File>
<FileName>object.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\src\object.c</FilePath>
+ <FilePath>../../src/object.c</FilePath>
</File>
+ </Files>
+ <Files>
<File>
<FileName>scheduler.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\src\scheduler.c</FilePath>
+ <FilePath>../../src/scheduler.c</FilePath>
</File>
+ </Files>
+ <Files>
<File>
<FileName>thread.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\src\thread.c</FilePath>
+ <FilePath>../../src/thread.c</FilePath>
</File>
+ </Files>
+ <Files>
<File>
<FileName>timer.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\src\timer.c</FilePath>
+ <FilePath>../../src/timer.c</FilePath>
</File>
</Files>
</Group>
@@ -491,47 +521,63 @@
<File>
<FileName>cpu.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\libcpu\arm\AT91SAM7X\cpu.c</FilePath>
+ <FilePath>../../libcpu/arm/AT91SAM7X/cpu.c</FilePath>
</File>
+ </Files>
+ <Files>
<File>
<FileName>interrupt.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\libcpu\arm\AT91SAM7X\interrupt.c</FilePath>
+ <FilePath>../../libcpu/arm/AT91SAM7X/interrupt.c</FilePath>
</File>
+ </Files>
+ <Files>
<File>
<FileName>stack.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\libcpu\arm\AT91SAM7X\stack.c</FilePath>
+ <FilePath>../../libcpu/arm/AT91SAM7X/stack.c</FilePath>
</File>
+ </Files>
+ <Files>
<File>
<FileName>trap.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\libcpu\arm\AT91SAM7X\trap.c</FilePath>
+ <FilePath>../../libcpu/arm/AT91SAM7X/trap.c</FilePath>
</File>
+ </Files>
+ <Files>
<File>
<FileName>context_rvds.S</FileName>
<FileType>2</FileType>
- <FilePath>..\..\libcpu\arm\AT91SAM7X\context_rvds.S</FilePath>
+ <FilePath>../../libcpu/arm/AT91SAM7X/context_rvds.S</FilePath>
</File>
+ </Files>
+ <Files>
<File>
<FileName>start_rvds.S</FileName>
<FileType>2</FileType>
- <FilePath>..\..\libcpu\arm\AT91SAM7X\start_rvds.S</FilePath>
+ <FilePath>../../libcpu/arm/AT91SAM7X/start_rvds.S</FilePath>
</File>
+ </Files>
+ <Files>
<File>
<FileName>backtrace.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\libcpu\arm\common\backtrace.c</FilePath>
+ <FilePath>../../libcpu/arm/common/backtrace.c</FilePath>
</File>
+ </Files>
+ <Files>
<File>
<FileName>div0.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\libcpu\arm\common\div0.c</FilePath>
+ <FilePath>../../libcpu/arm/common/div0.c</FilePath>
</File>
+ </Files>
+ <Files>
<File>
<FileName>showmem.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\libcpu\arm\common\showmem.c</FilePath>
+ <FilePath>../../libcpu/arm/common/showmem.c</FilePath>
</File>
</Files>
</Group>
@@ -539,69 +585,93 @@
<GroupName>finsh</GroupName>
<Files>
<File>
+ <FileName>shell.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../../components/finsh/shell.c</FilePath>
+ </File>
+ </Files>
+ <Files>
+ <File>
+ <FileName>symbol.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../../components/finsh/symbol.c</FilePath>
+ </File>
+ </Files>
+ <Files>
+ <File>
<FileName>cmd.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\components\finsh\cmd.c</FilePath>
+ <FilePath>../../components/finsh/cmd.c</FilePath>
</File>
+ </Files>
+ <Files>
<File>
<FileName>finsh_compiler.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\components\finsh\finsh_compiler.c</FilePath>
+ <FilePath>../../components/finsh/finsh_compiler.c</FilePath>
</File>
+ </Files>
+ <Files>
<File>
<FileName>finsh_error.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\components\finsh\finsh_error.c</FilePath>
+ <FilePath>../../components/finsh/finsh_error.c</FilePath>
</File>
+ </Files>
+ <Files>
<File>
<FileName>finsh_heap.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\components\finsh\finsh_heap.c</FilePath>
+ <FilePath>../../components/finsh/finsh_heap.c</FilePath>
</File>
+ </Files>
+ <Files>
<File>
<FileName>finsh_init.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\components\finsh\finsh_init.c</FilePath>
+ <FilePath>../../components/finsh/finsh_init.c</FilePath>
</File>
+ </Files>
+ <Files>
<File>
<FileName>finsh_node.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\components\finsh\finsh_node.c</FilePath>
+ <FilePath>../../components/finsh/finsh_node.c</FilePath>
</File>
+ </Files>
+ <Files>
<File>
<FileName>finsh_ops.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\components\finsh\finsh_ops.c</FilePath>
+ <FilePath>../../components/finsh/finsh_ops.c</FilePath>
</File>
+ </Files>
+ <Files>
<File>
<FileName>finsh_parser.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\components\finsh\finsh_parser.c</FilePath>
- </File>
- <File>
- <FileName>finsh_token.c</FileName>
- <FileType>1</FileType>
- <FilePath>..\..\components\finsh\finsh_token.c</FilePath>
+ <FilePath>../../components/finsh/finsh_parser.c</FilePath>
</File>
+ </Files>
+ <Files>
<File>
<FileName>finsh_var.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\components\finsh\finsh_var.c</FilePath>
+ <FilePath>../../components/finsh/finsh_var.c</FilePath>
</File>
+ </Files>
+ <Files>
<File>
<FileName>finsh_vm.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\components\finsh\finsh_vm.c</FilePath>
- </File>
- <File>
- <FileName>shell.c</FileName>
- <FileType>1</FileType>
- <FilePath>..\..\components\finsh\shell.c</FilePath>
+ <FilePath>../../components/finsh/finsh_vm.c</FilePath>
</File>
+ </Files>
+ <Files>
<File>
- <FileName>symbol.c</FileName>
+ <FileName>finsh_token.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\components\finsh\symbol.c</FilePath>
+ <FilePath>../../components/finsh/finsh_token.c</FilePath>
</File>
</Files>
</Group>
@@ -611,182 +681,249 @@
<File>
<FileName>api_lib.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\components\net\lwip\src\api\api_lib.c</FilePath>
+ <FilePath>../../components/net/lwip-1.4.1/src/api/api_lib.c</FilePath>
</File>
+ </Files>
+ <Files>
<File>
<FileName>api_msg.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\components\net\lwip\src\api\api_msg.c</FilePath>
+ <FilePath>../../components/net/lwip-1.4.1/src/api/api_msg.c</FilePath>
</File>
+ </Files>
+ <Files>
<File>
<FileName>err.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\components\net\lwip\src\api\err.c</FilePath>
+ <FilePath>../../components/net/lwip-1.4.1/src/api/err.c</FilePath>
</File>
+ </Files>
+ <Files>
<File>
<FileName>netbuf.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\components\net\lwip\src\api\netbuf.c</FilePath>
+ <FilePath>../../components/net/lwip-1.4.1/src/api/netbuf.c</FilePath>
</File>
+ </Files>
+ <Files>
<File>
<FileName>netdb.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\components\net\lwip\src\api\netdb.c</FilePath>
+ <FilePath>../../components/net/lwip-1.4.1/src/api/netdb.c</FilePath>
</File>
+ </Files>
+ <Files>
<File>
<FileName>netifapi.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\components\net\lwip\src\api\netifapi.c</FilePath>
+ <FilePath>../../components/net/lwip-1.4.1/src/api/netifapi.c</FilePath>
</File>
+ </Files>
+ <Files>
<File>
<FileName>sockets.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\components\net\lwip\src\api\sockets.c</FilePath>
+ <FilePath>../../components/net/lwip-1.4.1/src/api/sockets.c</FilePath>
</File>
+ </Files>
+ <Files>
<File>
<FileName>tcpip.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\components\net\lwip\src\api\tcpip.c</FilePath>
+ <FilePath>../../components/net/lwip-1.4.1/src/api/tcpip.c</FilePath>
</File>
+ </Files>
+ <Files>
<File>
<FileName>sys_arch.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\components\net\lwip\src\arch\sys_arch.c</FilePath>
+ <FilePath>../../components/net/lwip-1.4.1/src/arch/sys_arch.c</FilePath>
</File>
+ </Files>
+ <Files>
<File>
<FileName>def.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\components\net\lwip\src\core\def.c</FilePath>
+ <FilePath>../../components/net/lwip-1.4.1/src/core/def.c</FilePath>
</File>
+ </Files>
+ <Files>
<File>
<FileName>dhcp.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\components\net\lwip\src\core\dhcp.c</FilePath>
+ <FilePath>../../components/net/lwip-1.4.1/src/core/dhcp.c</FilePath>
</File>
+ </Files>
+ <Files>
<File>
<FileName>dns.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\components\net\lwip\src\core\dns.c</FilePath>
+ <FilePath>../../components/net/lwip-1.4.1/src/core/dns.c</FilePath>
</File>
+ </Files>
+ <Files>
<File>
<FileName>init.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\components\net\lwip\src\core\init.c</FilePath>
+ <FilePath>../../components/net/lwip-1.4.1/src/core/init.c</FilePath>
</File>
+ </Files>
+ <Files>
<File>
<FileName>memp.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\components\net\lwip\src\core\memp.c</FilePath>
+ <FilePath>../../components/net/lwip-1.4.1/src/core/memp.c</FilePath>
</File>
+ </Files>
+ <Files>
<File>
<FileName>netif.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\components\net\lwip\src\core\netif.c</FilePath>
+ <FilePath>../../components/net/lwip-1.4.1/src/core/netif.c</FilePath>
</File>
+ </Files>
+ <Files>
<File>
<FileName>pbuf.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\components\net\lwip\src\core\pbuf.c</FilePath>
+ <FilePath>../../components/net/lwip-1.4.1/src/core/pbuf.c</FilePath>
</File>
+ </Files>
+ <Files>
<File>
<FileName>raw.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\components\net\lwip\src\core\raw.c</FilePath>
+ <FilePath>../../components/net/lwip-1.4.1/src/core/raw.c</FilePath>
</File>
+ </Files>
+ <Files>
<File>
<FileName>stats.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\components\net\lwip\src\core\stats.c</FilePath>
+ <FilePath>../../components/net/lwip-1.4.1/src/core/stats.c</FilePath>
</File>
+ </Files>
+ <Files>
<File>
<FileName>sys.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\components\net\lwip\src\core\sys.c</FilePath>
+ <FilePath>../../components/net/lwip-1.4.1/src/core/sys.c</FilePath>
</File>
+ </Files>
+ <Files>
<File>
<FileName>tcp.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\components\net\lwip\src\core\tcp.c</FilePath>
+ <FilePath>../../components/net/lwip-1.4.1/src/core/tcp.c</FilePath>
</File>
+ </Files>
+ <Files>
<File>
<FileName>tcp_in.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\components\net\lwip\src\core\tcp_in.c</FilePath>
+ <FilePath>../../components/net/lwip-1.4.1/src/core/tcp_in.c</FilePath>
</File>
+ </Files>
+ <Files>
<File>
<FileName>tcp_out.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\components\net\lwip\src\core\tcp_out.c</FilePath>
+ <FilePath>../../components/net/lwip-1.4.1/src/core/tcp_out.c</FilePath>
</File>
+ </Files>
+ <Files>
<File>
<FileName>timers.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\components\net\lwip\src\core\timers.c</FilePath>
+ <FilePath>../../components/net/lwip-1.4.1/src/core/timers.c</FilePath>
</File>
+ </Files>
+ <Files>
<File>
<FileName>udp.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\components\net\lwip\src\core\udp.c</FilePath>
+ <FilePath>../../components/net/lwip-1.4.1/src/core/udp.c</FilePath>
</File>
+ </Files>
+ <Files>
<File>
<FileName>autoip.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\components\net\lwip\src\core\ipv4\autoip.c</FilePath>
+ <FilePath>../../components/net/lwip-1.4.1/src/core/ipv4/autoip.c</FilePath>
</File>
+ </Files>
+ <Files>
<File>
<FileName>icmp.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\components\net\lwip\src\core\ipv4\icmp.c</FilePath>
+ <FilePath>../../components/net/lwip-1.4.1/src/core/ipv4/icmp.c</FilePath>
</File>
+ </Files>
+ <Files>
<File>
<FileName>igmp.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\components\net\lwip\src\core\ipv4\igmp.c</FilePath>
+ <FilePath>../../components/net/lwip-1.4.1/src/core/ipv4/igmp.c</FilePath>
</File>
+ </Files>
+ <Files>
<File>
<FileName>inet.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\components\net\lwip\src\core\ipv4\inet.c</FilePath>
+ <FilePath>../../components/net/lwip-1.4.1/src/core/ipv4/inet.c</FilePath>
</File>
+ </Files>
+ <Files>
<File>
<FileName>inet_chksum.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\components\net\lwip\src\core\ipv4\inet_chksum.c</FilePath>
+ <FilePath>../../components/net/lwip-1.4.1/src/core/ipv4/inet_chksum.c</FilePath>
</File>
+ </Files>
+ <Files>
<File>
<FileName>ip.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\components\net\lwip\src\core\ipv4\ip.c</FilePath>
+ <FilePath>../../components/net/lwip-1.4.1/src/core/ipv4/ip.c</FilePath>
</File>
+ </Files>
+ <Files>
<File>
<FileName>ip_addr.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\components\net\lwip\src\core\ipv4\ip_addr.c</FilePath>
+ <FilePath>../../components/net/lwip-1.4.1/src/core/ipv4/ip_addr.c</FilePath>
</File>
+ </Files>
+ <Files>
<File>
<FileName>ip_frag.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\components\net\lwip\src\core\ipv4\ip_frag.c</FilePath>
+ <FilePath>../../components/net/lwip-1.4.1/src/core/ipv4/ip_frag.c</FilePath>
</File>
+ </Files>
+ <Files>
<File>
<FileName>etharp.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\components\net\lwip\src\netif\etharp.c</FilePath>
+ <FilePath>../../components/net/lwip-1.4.1/src/netif/etharp.c</FilePath>
</File>
+ </Files>
+ <Files>
<File>
<FileName>ethernetif.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\components\net\lwip\src\netif\ethernetif.c</FilePath>
+ <FilePath>../../components/net/lwip-1.4.1/src/netif/ethernetif.c</FilePath>
</File>
+ </Files>
+ <Files>
<File>
<FileName>slipif.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\components\net\lwip\src\netif\slipif.c</FilePath>
+ <FilePath>../../components/net/lwip-1.4.1/src/netif/slipif.c</FilePath>
</File>
</Files>
</Group>
</Groups>
</Target>
</Targets>
-
</Project>
diff --git a/bsp/stm32f0x/project.uvproj b/bsp/stm32f0x/project.uvproj
index ccf96a948d..f2d0040daf 100644
--- a/bsp/stm32f0x/project.uvproj
+++ b/bsp/stm32f0x/project.uvproj
@@ -1,10 +1,7 @@
<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
<Project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="project_proj.xsd">
-
<SchemaVersion>1.1</SchemaVersion>
-
<Header>### uVision Project, (C) Keil Software</Header>
-
<Targets>
<Target>
<TargetName>rt-thread</TargetName>
@@ -15,25 +12,25 @@
<Device>STM32F051R8</Device>
<Vendor>STMicroelectronics</Vendor>
<Cpu>IRAM(0x20000000-0x20001FFF) IROM(0x8000000-0x800FFFF) CLOCK(8000000) CPUTYPE("Cortex-M0")</Cpu>
- <FlashUtilSpec></FlashUtilSpec>
+ <FlashUtilSpec />
<StartupFile>"Startup\ST\STM32F0xx\startup_stm32f0xx.s" ("STM32F0xx Startup Code")</StartupFile>
<FlashDriverDll>UL2CM3(-O207 -S0 -C0 -FO7 -FD20000000 -FC800 -FN1 -FF0STM32F05x_64 -FS08000000 -FL010000)</FlashDriverDll>
<DeviceId>6188</DeviceId>
<RegisterFile>stm32f0xx.h</RegisterFile>
- <MemoryEnv></MemoryEnv>
- <Cmp></Cmp>
- <Asm></Asm>
- <Linker></Linker>
- <OHString></OHString>
- <InfinionOptionDll></InfinionOptionDll>
- <SLE66CMisc></SLE66CMisc>
- <SLE66AMisc></SLE66AMisc>
- <SLE66LinkerMisc></SLE66LinkerMisc>
+ <MemoryEnv />
+ <Cmp />
+ <Asm />
+ <Linker />
+ <OHString />
+ <InfinionOptionDll />
+ <SLE66CMisc />
+ <SLE66AMisc />
+ <SLE66LinkerMisc />
<SFDFile>SFD\ST\STM32F0xx\STM32F051xx.sfr</SFDFile>
<UseEnv>0</UseEnv>
- <BinPath></BinPath>
- <IncludePath></IncludePath>
- <LibPath></LibPath>
+ <BinPath />
+ <IncludePath />
+ <LibPath />
<RegisterFilePath>ST\STM32F0xx\</RegisterFilePath>
<DBRegisterFilePath>ST\STM32F0xx\</DBRegisterFilePath>
<TargetStatus>
@@ -57,8 +54,8 @@
<BeforeCompile>
<RunUserProg1>0</RunUserProg1>
<RunUserProg2>0</RunUserProg2>
- <UserProg1Name></UserProg1Name>
- <UserProg2Name></UserProg2Name>
+ <UserProg1Name />
+ <UserProg2Name />
<UserProg1Dos16Mode>0</UserProg1Dos16Mode>
<UserProg2Dos16Mode>0</UserProg2Dos16Mode>
<nStopU1X>0</nStopU1X>
@@ -67,21 +64,21 @@
<BeforeMake>
<RunUserProg1>0</RunUserProg1>
<RunUserProg2>0</RunUserProg2>
- <UserProg1Name></UserProg1Name>
- <UserProg2Name></UserProg2Name>
+ <UserProg1Name />
+ <UserProg2Name />
<UserProg1Dos16Mode>0</UserProg1Dos16Mode>
<UserProg2Dos16Mode>0</UserProg2Dos16Mode>
</BeforeMake>
<AfterMake>
<RunUserProg1>0</RunUserProg1>
<RunUserProg2>0</RunUserProg2>
- <UserProg1Name></UserProg1Name>
- <UserProg2Name></UserProg2Name>
+ <UserProg1Name />
+ <UserProg2Name />
<UserProg1Dos16Mode>0</UserProg1Dos16Mode>
<UserProg2Dos16Mode>0</UserProg2Dos16Mode>
</AfterMake>
<SelectedForBatchBuild>0</SelectedForBatchBuild>
- <SVCSIdString></SVCSIdString>
+ <SVCSIdString />
</TargetCommonOption>
<CommonProperty>
<UseCPPCompiler>0</UseCPPCompiler>
@@ -95,16 +92,16 @@
<AssembleAssemblyFile>0</AssembleAssemblyFile>
<PublicsOnly>0</PublicsOnly>
<StopOnExitCode>3</StopOnExitCode>
- <CustomArgument></CustomArgument>
- <IncludeLibraryModules></IncludeLibraryModules>
+ <CustomArgument />
+ <IncludeLibraryModules />
</CommonProperty>
<DllOption>
<SimDllName>SARMCM3.DLL</SimDllName>
- <SimDllArguments></SimDllArguments>
+ <SimDllArguments />
<SimDlgDll>DARMCM1.DLL</SimDlgDll>
<SimDlgDllArguments>-pCM0</SimDlgDllArguments>
<TargetDllName>SARMCM3.DLL</TargetDllName>
- <TargetDllArguments></TargetDllArguments>
+ <TargetDllArguments />
<TargetDlgDll>TARMCM1.DLL</TargetDlgDll>
<TargetDlgDllArguments>-pCM0</TargetDlgDllArguments>
</DllOption>
@@ -140,18 +137,18 @@
<RunDebugAfterBuild>0</RunDebugAfterBuild>
<TargetSelection>13</TargetSelection>
<SimDlls>
- <CpuDll></CpuDll>
- <CpuDllArguments></CpuDllArguments>
- <PeripheralDll></PeripheralDll>
- <PeripheralDllArguments></PeripheralDllArguments>
- <InitializationFile></InitializationFile>
+ <CpuDll />
+ <CpuDllArguments />
+ <PeripheralDll />
+ <PeripheralDllArguments />
+ <InitializationFile />
</SimDlls>
<TargetDlls>
- <CpuDll></CpuDll>
- <CpuDllArguments></CpuDllArguments>
- <PeripheralDll></PeripheralDll>
- <PeripheralDllArguments></PeripheralDllArguments>
- <InitializationFile></InitializationFile>
+ <CpuDll />
+ <CpuDllArguments />
+ <PeripheralDll />
+ <PeripheralDllArguments />
+ <InitializationFile />
<Driver>STLink\ST-LINKIII-KEIL_SWO.dll</Driver>
</TargetDlls>
</DebugOption>
@@ -166,7 +163,7 @@
</Flash1>
<Flash2>STLink\ST-LINKIII-KEIL_SWO.dll</Flash2>
<Flash3>"" ()</Flash3>
- <Flash4></Flash4>
+ <Flash4 />
</Utilities>
<TargetArmAds>
<ArmAdsMisc>
@@ -198,7 +195,7 @@
<RvctClst>0</RvctClst>
<GenPPlst>0</GenPPlst>
<AdsCpuType>"Cortex-M0"</AdsCpuType>
- <RvctDeviceName></RvctDeviceName>
+ <RvctDeviceName />
<mOS>0</mOS>
<uocRom>0</uocRom>
<uocRam>0</uocRam>
@@ -329,7 +326,7 @@
<Size>0x0</Size>
</OCR_RVCT10>
</OnChipMemories>
- <RvctStartVector></RvctStartVector>
+ <RvctStartVector />
</ArmAdsMisc>
<Cads>
<interw>1</interw>
@@ -345,10 +342,10 @@
<wLevel>0</wLevel>
<uThumb>0</uThumb>
<VariousControls>
- <MiscControls></MiscControls>
- <Define>USE_STDPERIPH_DRIVER</Define>
- <Undefine></Undefine>
- <IncludePath>.;..\..\include;..\..\libcpu\arm\common;..\..\libcpu\arm\cortex-m0;Libraries\CMSIS\Include;Libraries\CMSIS\ST\STM32F0xx\Include;Libraries\STM32F0xx_StdPeriph_Driver\inc;applications;drivers</IncludePath>
+ <MiscControls />
+ <Define>RT_USING_ARM_LIBC, USE_STDPERIPH_DRIVER</Define>
+ <Undefine />
+ <IncludePath>Libraries/STM32F0xx_StdPeriph_Driver/inc;Libraries/CMSIS/ST/STM32F0xx/Include;Libraries/CMSIS/Include;applications;.;drivers;../../include;../../libcpu/arm/cortex-m0;../../libcpu/arm/common;../../components/libc/armlibc;../../components/drivers/include;../../components/drivers/include;../../components/finsh</IncludePath>
</VariousControls>
</Cads>
<Aads>
@@ -360,10 +357,10 @@
<SwStkChk>0</SwStkChk>
<NoWarn>0</NoWarn>
<VariousControls>
- <MiscControls></MiscControls>
- <Define></Define>
- <Undefine></Undefine>
- <IncludePath></IncludePath>
+ <MiscControls />
+ <Define />
+ <Undefine />
+ <IncludePath />
</VariousControls>
</Aads>
<LDads>
@@ -375,163 +372,225 @@
<useFile>0</useFile>
<TextAddressRange>0x08000000</TextAddressRange>
<DataAddressRange>0x20000000</DataAddressRange>
- <ScatterFile></ScatterFile>
- <IncludeLibs></IncludeLibs>
- <IncludeLibsPath></IncludeLibsPath>
- <Misc></Misc>
- <LinkerInputFile></LinkerInputFile>
- <DisabledWarnings></DisabledWarnings>
+ <ScatterFile />
+ <IncludeLibs />
+ <IncludeLibsPath />
+ <Misc> --keep *.o(.rti_fn.*) --keep *.o(FSymTab) --keep *.o(VSymTab) </Misc>
+ <LinkerInputFile />
+ <DisabledWarnings />
</LDads>
</TargetArmAds>
</TargetOption>
<Groups>
<Group>
- <GroupName>Applications</GroupName>
+ <GroupName>STM32_StdPeriph</GroupName>
<Files>
<File>
- <FileName>application.c</FileName>
- <FileType>1</FileType>
- <FilePath>applications\application.c</FilePath>
- </File>
- <File>
- <FileName>startup.c</FileName>
+ <FileName>system_stm32f0xx.c</FileName>
<FileType>1</FileType>
- <FilePath>applications\startup.c</FilePath>
+ <FilePath>Libraries/CMSIS/ST/STM32F0xx/Source/Templates/system_stm32f0xx.c</FilePath>
</File>
</Files>
- </Group>
- <Group>
- <GroupName>Drivers</GroupName>
<Files>
<File>
- <FileName>board.c</FileName>
- <FileType>1</FileType>
- <FilePath>drivers\board.c</FilePath>
- </File>
- <File>
- <FileName>stm32f0xx_it.c</FileName>
+ <FileName>stm32f0xx_adc.c</FileName>
<FileType>1</FileType>
- <FilePath>drivers\stm32f0xx_it.c</FilePath>
+ <FilePath>Libraries/STM32F0xx_StdPeriph_Driver/src/stm32f0xx_adc.c</FilePath>
</File>
</Files>
- </Group>
- <Group>
- <GroupName>STM32_StdPeriph</GroupName>
<Files>
<File>
- <FileName>system_stm32f0xx.c</FileName>
- <FileType>1</FileType>
- <FilePath>Libraries\CMSIS\ST\STM32F0xx\Source\Templates\system_stm32f0xx.c</FilePath>
- </File>
- <File>
- <FileName>stm32f0xx_adc.c</FileName>
- <FileType>1</FileType>
- <FilePath>Libraries\STM32F0xx_StdPeriph_Driver\src\stm32f0xx_adc.c</FilePath>
- </File>
- <File>
<FileName>stm32f0xx_cec.c</FileName>
<FileType>1</FileType>
- <FilePath>Libraries\STM32F0xx_StdPeriph_Driver\src\stm32f0xx_cec.c</FilePath>
+ <FilePath>Libraries/STM32F0xx_StdPeriph_Driver/src/stm32f0xx_cec.c</FilePath>
</File>
+ </Files>
+ <Files>
<File>
<FileName>stm32f0xx_comp.c</FileName>
<FileType>1</FileType>
- <FilePath>Libraries\STM32F0xx_StdPeriph_Driver\src\stm32f0xx_comp.c</FilePath>
+ <FilePath>Libraries/STM32F0xx_StdPeriph_Driver/src/stm32f0xx_comp.c</FilePath>
</File>
+ </Files>
+ <Files>
<File>
<FileName>stm32f0xx_crc.c</FileName>
<FileType>1</FileType>
- <FilePath>Libraries\STM32F0xx_StdPeriph_Driver\src\stm32f0xx_crc.c</FilePath>
+ <FilePath>Libraries/STM32F0xx_StdPeriph_Driver/src/stm32f0xx_crc.c</FilePath>
</File>
+ </Files>
+ <Files>
<File>
<FileName>stm32f0xx_dac.c</FileName>
<FileType>1</FileType>
- <FilePath>Libraries\STM32F0xx_StdPeriph_Driver\src\stm32f0xx_dac.c</FilePath>
+ <FilePath>Libraries/STM32F0xx_StdPeriph_Driver/src/stm32f0xx_dac.c</FilePath>
</File>
+ </Files>
+ <Files>
<File>
<FileName>stm32f0xx_dbgmcu.c</FileName>
<FileType>1</FileType>
- <FilePath>Libraries\STM32F0xx_StdPeriph_Driver\src\stm32f0xx_dbgmcu.c</FilePath>
+ <FilePath>Libraries/STM32F0xx_StdPeriph_Driver/src/stm32f0xx_dbgmcu.c</FilePath>
</File>
+ </Files>
+ <Files>
<File>
<FileName>stm32f0xx_dma.c</FileName>
<FileType>1</FileType>
- <FilePath>Libraries\STM32F0xx_StdPeriph_Driver\src\stm32f0xx_dma.c</FilePath>
+ <FilePath>Libraries/STM32F0xx_StdPeriph_Driver/src/stm32f0xx_dma.c</FilePath>
</File>
+ </Files>
+ <Files>
<File>
<FileName>stm32f0xx_exti.c</FileName>
<FileType>1</FileType>
- <FilePath>Libraries\STM32F0xx_StdPeriph_Driver\src\stm32f0xx_exti.c</FilePath>
+ <FilePath>Libraries/STM32F0xx_StdPeriph_Driver/src/stm32f0xx_exti.c</FilePath>
</File>
+ </Files>
+ <Files>
<File>
<FileName>stm32f0xx_flash.c</FileName>
<FileType>1</FileType>
- <FilePath>Libraries\STM32F0xx_StdPeriph_Driver\src\stm32f0xx_flash.c</FilePath>
+ <FilePath>Libraries/STM32F0xx_StdPeriph_Driver/src/stm32f0xx_flash.c</FilePath>
</File>
+ </Files>
+ <Files>
<File>
<FileName>stm32f0xx_gpio.c</FileName>
<FileType>1</FileType>
- <FilePath>Libraries\STM32F0xx_StdPeriph_Driver\src\stm32f0xx_gpio.c</FilePath>
+ <FilePath>Libraries/STM32F0xx_StdPeriph_Driver/src/stm32f0xx_gpio.c</FilePath>
</File>
+ </Files>
+ <Files>
<File>
<FileName>stm32f0xx_i2c.c</FileName>
<FileType>1</FileType>
- <FilePath>Libraries\STM32F0xx_StdPeriph_Driver\src\stm32f0xx_i2c.c</FilePath>
+ <FilePath>Libraries/STM32F0xx_StdPeriph_Driver/src/stm32f0xx_i2c.c</FilePath>
</File>
+ </Files>
+ <Files>
<File>
<FileName>stm32f0xx_iwdg.c</FileName>
<FileType>1</FileType>
- <FilePath>Libraries\STM32F0xx_StdPeriph_Driver\src\stm32f0xx_iwdg.c</FilePath>
+ <FilePath>Libraries/STM32F0xx_StdPeriph_Driver/src/stm32f0xx_iwdg.c</FilePath>
</File>
+ </Files>
+ <Files>
<File>
<FileName>stm32f0xx_misc.c</FileName>
<FileType>1</FileType>
- <FilePath>Libraries\STM32F0xx_StdPeriph_Driver\src\stm32f0xx_misc.c</FilePath>
+ <FilePath>Libraries/STM32F0xx_StdPeriph_Driver/src/stm32f0xx_misc.c</FilePath>
</File>
+ </Files>
+ <Files>
<File>
<FileName>stm32f0xx_pwr.c</FileName>
<FileType>1</FileType>
- <FilePath>Libraries\STM32F0xx_StdPeriph_Driver\src\stm32f0xx_pwr.c</FilePath>
+ <FilePath>Libraries/STM32F0xx_StdPeriph_Driver/src/stm32f0xx_pwr.c</FilePath>
</File>
+ </Files>
+ <Files>
<File>
<FileName>stm32f0xx_rcc.c</FileName>
<FileType>1</FileType>
- <FilePath>Libraries\STM32F0xx_StdPeriph_Driver\src\stm32f0xx_rcc.c</FilePath>
+ <FilePath>Libraries/STM32F0xx_StdPeriph_Driver/src/stm32f0xx_rcc.c</FilePath>
</File>
+ </Files>
+ <Files>
<File>
<FileName>stm32f0xx_rtc.c</FileName>
<FileType>1</FileType>
- <FilePath>Libraries\STM32F0xx_StdPeriph_Driver\src\stm32f0xx_rtc.c</FilePath>
+ <FilePath>Libraries/STM32F0xx_StdPeriph_Driver/src/stm32f0xx_rtc.c</FilePath>
</File>
+ </Files>
+ <Files>
<File>
<FileName>stm32f0xx_spi.c</FileName>
<FileType>1</FileType>
- <FilePath>Libraries\STM32F0xx_StdPeriph_Driver\src\stm32f0xx_spi.c</FilePath>
+ <FilePath>Libraries/STM32F0xx_StdPeriph_Driver/src/stm32f0xx_spi.c</FilePath>
</File>
+ </Files>
+ <Files>
<File>
<FileName>stm32f0xx_syscfg.c</FileName>
<FileType>1</FileType>
- <FilePath>Libraries\STM32F0xx_StdPeriph_Driver\src\stm32f0xx_syscfg.c</FilePath>
+ <FilePath>Libraries/STM32F0xx_StdPeriph_Driver/src/stm32f0xx_syscfg.c</FilePath>
</File>
+ </Files>
+ <Files>
<File>
<FileName>stm32f0xx_tim.c</FileName>
<FileType>1</FileType>
- <FilePath>Libraries\STM32F0xx_StdPeriph_Driver\src\stm32f0xx_tim.c</FilePath>
+ <FilePath>Libraries/STM32F0xx_StdPeriph_Driver/src/stm32f0xx_tim.c</FilePath>
</File>
+ </Files>
+ <Files>
<File>
<FileName>stm32f0xx_usart.c</FileName>
<FileType>1</FileType>
- <FilePath>Libraries\STM32F0xx_StdPeriph_Driver\src\stm32f0xx_usart.c</FilePath>
+ <FilePath>Libraries/STM32F0xx_StdPeriph_Driver/src/stm32f0xx_usart.c</FilePath>
</File>
+ </Files>
+ <Files>
<File>
<FileName>stm32f0xx_wwdg.c</FileName>
<FileType>1</FileType>
- <FilePath>Libraries\STM32F0xx_StdPeriph_Driver\src\stm32f0xx_wwdg.c</FilePath>
+ <FilePath>Libraries/STM32F0xx_StdPeriph_Driver/src/stm32f0xx_wwdg.c</FilePath>
</File>
+ </Files>
+ <Files>
<File>
<FileName>startup_stm32f0xx.s</FileName>
<FileType>2</FileType>
- <FilePath>Libraries\CMSIS\ST\STM32F0xx\Source\Templates\arm\startup_stm32f0xx.s</FilePath>
+ <FilePath>Libraries/CMSIS/ST/STM32F0xx/Source/Templates/arm/startup_stm32f0xx.s</FilePath>
+ </File>
+ </Files>
+ </Group>
+ <Group>
+ <GroupName>Applications</GroupName>
+ <Files>
+ <File>
+ <FileName>application.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>applications/application.c</FilePath>
+ </File>
+ </Files>
+ <Files>
+ <File>
+ <FileName>startup.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>applications/startup.c</FilePath>
+ </File>
+ </Files>
+ </Group>
+ <Group>
+ <GroupName>Drivers</GroupName>
+ <Files>
+ <File>
+ <FileName>board.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>drivers/board.c</FilePath>
+ </File>
+ </Files>
+ <Files>
+ <File>
+ <FileName>led.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>drivers/led.c</FilePath>
+ </File>
+ </Files>
+ <Files>
+ <File>
+ <FileName>stm32f0xx_it.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>drivers/stm32f0xx_it.c</FilePath>
+ </File>
+ </Files>
+ <Files>
+ <File>
+ <FileName>usart.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>drivers/usart.c</FilePath>
</File>
</Files>
</Group>
@@ -541,47 +600,84 @@
<File>
<FileName>clock.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\src\clock.c</FilePath>
+ <FilePath>../../src/clock.c</FilePath>
</File>
+ </Files>
+ <Files>
+ <File>
+ <FileName>components.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../../src/components.c</FilePath>
+ </File>
+ </Files>
+ <Files>
+ <File>
+ <FileName>device.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../../src/device.c</FilePath>
+ </File>
+ </Files>
+ <Files>
<File>
<FileName>idle.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\src\idle.c</FilePath>
+ <FilePath>../../src/idle.c</FilePath>
</File>
+ </Files>
+ <Files>
<File>
<FileName>ipc.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\src\ipc.c</FilePath>
+ <FilePath>../../src/ipc.c</FilePath>
</File>
+ </Files>
+ <Files>
<File>
<FileName>irq.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\src\irq.c</FilePath>
+ <FilePath>../../src/irq.c</FilePath>
</File>
+ </Files>
+ <Files>
<File>
<FileName>kservice.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\src\kservice.c</FilePath>
+ <FilePath>../../src/kservice.c</FilePath>
</File>
+ </Files>
+ <Files>
+ <File>
+ <FileName>mem.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../../src/mem.c</FilePath>
+ </File>
+ </Files>
+ <Files>
<File>
<FileName>object.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\src\object.c</FilePath>
+ <FilePath>../../src/object.c</FilePath>
</File>
+ </Files>
+ <Files>
<File>
<FileName>scheduler.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\src\scheduler.c</FilePath>
+ <FilePath>../../src/scheduler.c</FilePath>
</File>
+ </Files>
+ <Files>
<File>
<FileName>thread.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\src\thread.c</FilePath>
+ <FilePath>../../src/thread.c</FilePath>
</File>
+ </Files>
+ <Files>
<File>
<FileName>timer.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\src\timer.c</FilePath>
+ <FilePath>../../src/timer.c</FilePath>
</File>
</Files>
</Group>
@@ -591,32 +687,202 @@
<File>
<FileName>cpuport.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\libcpu\arm\cortex-m0\cpuport.c</FilePath>
+ <FilePath>../../libcpu/arm/cortex-m0/cpuport.c</FilePath>
</File>
+ </Files>
+ <Files>
<File>
<FileName>context_rvds.S</FileName>
<FileType>2</FileType>
- <FilePath>..\..\libcpu\arm\cortex-m0\context_rvds.S</FilePath>
+ <FilePath>../../libcpu/arm/cortex-m0/context_rvds.S</FilePath>
</File>
+ </Files>
+ <Files>
<File>
<FileName>backtrace.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\libcpu\arm\common\backtrace.c</FilePath>
+ <FilePath>../../libcpu/arm/common/backtrace.c</FilePath>
</File>
+ </Files>
+ <Files>
<File>
<FileName>div0.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\libcpu\arm\common\div0.c</FilePath>
+ <FilePath>../../libcpu/arm/common/div0.c</FilePath>
</File>
+ </Files>
+ <Files>
<File>
<FileName>showmem.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\libcpu\arm\common\showmem.c</FilePath>
+ <FilePath>../../libcpu/arm/common/showmem.c</FilePath>
+ </File>
+ </Files>
+ </Group>
+ <Group>
+ <GroupName>libc</GroupName>
+ <Files>
+ <File>
+ <FileName>mem_std.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../../components/libc/armlibc/mem_std.c</FilePath>
+ </File>
+ </Files>
+ <Files>
+ <File>
+ <FileName>stubs.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../../components/libc/armlibc/stubs.c</FilePath>
+ </File>
+ </Files>
+ </Group>
+ <Group>
+ <GroupName>DeviceDrivers</GroupName>
+ <Files>
+ <File>
+ <FileName>serial.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../../components/drivers/serial/serial.c</FilePath>
+ </File>
+ </Files>
+ <Files>
+ <File>
+ <FileName>completion.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../../components/drivers/src/completion.c</FilePath>
+ </File>
+ </Files>
+ <Files>
+ <File>
+ <FileName>dataqueue.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../../components/drivers/src/dataqueue.c</FilePath>
+ </File>
+ </Files>
+ <Files>
+ <File>
+ <FileName>pipe.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../../components/drivers/src/pipe.c</FilePath>
+ </File>
+ </Files>
+ <Files>
+ <File>
+ <FileName>portal.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../../components/drivers/src/portal.c</FilePath>
+ </File>
+ </Files>
+ <Files>
+ <File>
+ <FileName>ringbuffer.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../../components/drivers/src/ringbuffer.c</FilePath>
+ </File>
+ </Files>
+ <Files>
+ <File>
+ <FileName>workqueue.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../../components/drivers/src/workqueue.c</FilePath>
+ </File>
+ </Files>
+ </Group>
+ <Group>
+ <GroupName>finsh</GroupName>
+ <Files>
+ <File>
+ <FileName>shell.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../../components/finsh/shell.c</FilePath>
+ </File>
+ </Files>
+ <Files>
+ <File>
+ <FileName>symbol.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../../components/finsh/symbol.c</FilePath>
+ </File>
+ </Files>
+ <Files>
+ <File>
+ <FileName>cmd.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../../components/finsh/cmd.c</FilePath>
+ </File>
+ </Files>
+ <Files>
+ <File>
+ <FileName>finsh_compiler.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../../components/finsh/finsh_compiler.c</FilePath>
+ </File>
+ </Files>
+ <Files>
+ <File>
+ <FileName>finsh_error.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../../components/finsh/finsh_error.c</FilePath>
+ </File>
+ </Files>
+ <Files>
+ <File>
+ <FileName>finsh_heap.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../../components/finsh/finsh_heap.c</FilePath>
+ </File>
+ </Files>
+ <Files>
+ <File>
+ <FileName>finsh_init.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../../components/finsh/finsh_init.c</FilePath>
+ </File>
+ </Files>
+ <Files>
+ <File>
+ <FileName>finsh_node.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../../components/finsh/finsh_node.c</FilePath>
+ </File>
+ </Files>
+ <Files>
+ <File>
+ <FileName>finsh_ops.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../../components/finsh/finsh_ops.c</FilePath>
+ </File>
+ </Files>
+ <Files>
+ <File>
+ <FileName>finsh_parser.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../../components/finsh/finsh_parser.c</FilePath>
+ </File>
+ </Files>
+ <Files>
+ <File>
+ <FileName>finsh_var.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../../components/finsh/finsh_var.c</FilePath>
+ </File>
+ </Files>
+ <Files>
+ <File>
+ <FileName>finsh_vm.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../../components/finsh/finsh_vm.c</FilePath>
+ </File>
+ </Files>
+ <Files>
+ <File>
+ <FileName>finsh_token.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../../components/finsh/finsh_token.c</FilePath>
</File>
</Files>
</Group>
</Groups>
</Target>
</Targets>
-
</Project>
diff --git a/bsp/stm32f107/project.uvopt b/bsp/stm32f107/project.uvopt
index 0912073847..b172f6a05b 100644
--- a/bsp/stm32f107/project.uvopt
+++ b/bsp/stm32f107/project.uvopt
@@ -71,7 +71,7 @@
<LExpSel>0</LExpSel>
</OPTXL>
<OPTFL>
- <tvExp>1</tvExp>
+ <tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<IsCurrentTarget>1</IsCurrentTarget>
</OPTFL>
@@ -102,7 +102,7 @@
<uSim>0</uSim>
<uTrg>1</uTrg>
<sLdApp>1</sLdApp>
- <sGomain>1</sGomain>
+ <sGomain>0</sGomain>
<sRbreak>1</sRbreak>
<sRwatch>1</sRwatch>
<sRmem>1</sRmem>
@@ -130,65 +130,6 @@
<tIfile></tIfile>
<pMon>Segger\JL2CM3.dll</pMon>
</DebugOpt>
- <TargetDriverDllRegistry>
- <SetRegEntry>
- <Number>0</Number>
- <Key>DLGUARM</Key>
- <Name>(106=-1,-1,-1,-1,0)(107=-1,-1,-1,-1,0)</Name>
- </SetRegEntry>
- <SetRegEntry>
- <Number>0</Number>
- <Key>DLGDARM</Key>
- <Name>(1010=-1,-1,-1,-1,0)(1007=-1,-1,-1,-1,0)(1008=-1,-1,-1,-1,0)(1009=-1,-1,-1,-1,0)</Name>
- </SetRegEntry>
- <SetRegEntry>
- <Number>0</Number>
- <Key>DLGTARM</Key>
- <Name>(1010=-1,-1,-1,-1,0)(1007=-1,-1,-1,-1,0)(1008=-1,-1,-1,-1,0)(1009=-1,-1,-1,-1,0)</Name>
- </SetRegEntry>
- <SetRegEntry>
- <Number>0</Number>
- <Key>ARMDBGFLAGS</Key>
- <Name>-T0</Name>
- </SetRegEntry>
- <SetRegEntry>
- <Number>0</Number>
- <Key>JL2CM3</Key>
- <Name>-U12345678 -O14 -S0 -A0 -C0 -JU1 -JI127.0.0.1 -JP0 -RST0 -N00("ARM CoreSight JTAG-DP") -D00(3BA00477) -L00(4) -N01("Unknown JTAG device") -D01(06418041) -L01(5) -TO18 -TC10000000 -TP21 -TDS8007 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -TB1 -TFE0 -FO27 -FD20000000 -FC800 -FN1 -FF0STM32F10x_CL -FS08000000 -FL040000</Name>
- </SetRegEntry>
- </TargetDriverDllRegistry>
- <Breakpoint>
- <Bp>
- <Number>0</Number>
- <Type>0</Type>
- <LineNumber>272</LineNumber>
- <EnabledFlag>1</EnabledFlag>
- <Address>134282140</Address>
- <ByteObject>0</ByteObject>
- <ManyObjects>0</ManyObjects>
- <SizeOfObject>0</SizeOfObject>
- <BreakByAccess>0</BreakByAccess>
- <BreakIfRCount>1</BreakIfRCount>
- <Filename></Filename>
- <ExecCommand></ExecCommand>
- <Expression>\\rtthread_stm32\init\272</Expression>
- </Bp>
- <Bp>
- <Number>1</Number>
- <Type>0</Type>
- <LineNumber>274</LineNumber>
- <EnabledFlag>1</EnabledFlag>
- <Address>134279930</Address>
- <ByteObject>0</ByteObject>
- <ManyObjects>0</ManyObjects>
- <SizeOfObject>0</SizeOfObject>
- <BreakByAccess>0</BreakByAccess>
- <BreakIfRCount>1</BreakIfRCount>
- <Filename></Filename>
- <ExecCommand></ExecCommand>
- <Expression>\\rtthread_stm32\dns\274</Expression>
- </Bp>
- </Breakpoint>
<DebugFlag>
<trace>0</trace>
<periodic>0</periodic>
@@ -197,7 +138,7 @@
<aSer1>0</aSer1>
<aSer2>0</aSer2>
<aPa>0</aPa>
- <viewmode>1</viewmode>
+ <viewmode>0</viewmode>
<vrSel>0</vrSel>
<aSym>0</aSym>
<aTbox>0</aTbox>
@@ -212,7 +153,7 @@
<aSer4>0</aSer4>
<StkLoc>0</StkLoc>
<TrcWin>0</TrcWin>
- <newCpu>0</newCpu>
+ <newCpu>3</newCpu>
<uProt>0</uProt>
</DebugFlag>
<LintExecutable></LintExecutable>
@@ -220,1565 +161,4 @@
</TargetOption>
</Target>
- <Group>
- <GroupName>Startup</GroupName>
- <tvExp>0</tvExp>
- <tvExpOptDlg>0</tvExpOptDlg>
- <cbSel>0</cbSel>
- <File>
- <GroupNumber>1</GroupNumber>
- <FileNumber>1</FileNumber>
- <FileType>1</FileType>
- <tvExp>0</tvExp>
- <Focus>0</Focus>
- <ColumnNumber>0</ColumnNumber>
- <tvExpOptDlg>0</tvExpOptDlg>
- <TopLine>70</TopLine>
- <CurrentLine>84</CurrentLine>
- <bDave2>0</bDave2>
- <PathWithFileName>.\application.c</PathWithFileName>
- <FilenameWithoutPath>application.c</FilenameWithoutPath>
- </File>
- <File>
- <GroupNumber>1</GroupNumber>
- <FileNumber>2</FileNumber>
- <FileType>1</FileType>
- <tvExp>0</tvExp>
- <Focus>0</Focus>
- <ColumnNumber>0</ColumnNumber>
- <tvExpOptDlg>0</tvExpOptDlg>
- <TopLine>108</TopLine>
- <CurrentLine>120</CurrentLine>
- <bDave2>0</bDave2>
- <PathWithFileName>.\startup.c</PathWithFileName>
- <FilenameWithoutPath>startup.c</FilenameWithoutPath>
- </File>
- <File>
- <GroupNumber>1</GroupNumber>
- <FileNumber>3</FileNumber>
- <FileType>1</FileType>
- <tvExp>0</tvExp>
- <Focus>0</Focus>
- <ColumnNumber>0</ColumnNumber>
- <tvExpOptDlg>0</tvExpOptDlg>
- <TopLine>0</TopLine>
- <CurrentLine>0</CurrentLine>
- <bDave2>0</bDave2>
- <PathWithFileName>.\board.c</PathWithFileName>
- <FilenameWithoutPath>board.c</FilenameWithoutPath>
- </File>
- <File>
- <GroupNumber>1</GroupNumber>
- <FileNumber>4</FileNumber>
- <FileType>1</FileType>
- <tvExp>0</tvExp>
- <Focus>0</Focus>
- <ColumnNumber>58</ColumnNumber>
- <tvExpOptDlg>0</tvExpOptDlg>
- <TopLine>166</TopLine>
- <CurrentLine>166</CurrentLine>
- <bDave2>0</bDave2>
- <PathWithFileName>.\stm32f10x_it.c</PathWithFileName>
- <FilenameWithoutPath>stm32f10x_it.c</FilenameWithoutPath>
- </File>
- <File>
- <GroupNumber>1</GroupNumber>
- <FileNumber>5</FileNumber>
- <FileType>1</FileType>
- <tvExp>0</tvExp>
- <Focus>0</Focus>
- <ColumnNumber>0</ColumnNumber>
- <tvExpOptDlg>0</tvExpOptDlg>
- <TopLine>0</TopLine>
- <CurrentLine>0</CurrentLine>
- <bDave2>0</bDave2>
- <PathWithFileName>.\usart.c</PathWithFileName>
- <FilenameWithoutPath>usart.c</FilenameWithoutPath>
- </File>
- <File>
- <GroupNumber>1</GroupNumber>
- <FileNumber>6</FileNumber>
- <FileType>1</FileType>
- <tvExp>0</tvExp>
- <Focus>0</Focus>
- <ColumnNumber>0</ColumnNumber>
- <tvExpOptDlg>0</tvExpOptDlg>
- <TopLine>1</TopLine>
- <CurrentLine>1</CurrentLine>
- <bDave2>0</bDave2>
- <PathWithFileName>.\serial.c</PathWithFileName>
- <FilenameWithoutPath>serial.c</FilenameWithoutPath>
- </File>
- <File>
- <GroupNumber>1</GroupNumber>
- <FileNumber>7</FileNumber>
- <FileType>1</FileType>
- <tvExp>0</tvExp>
- <Focus>0</Focus>
- <ColumnNumber>0</ColumnNumber>
- <tvExpOptDlg>0</tvExpOptDlg>
- <TopLine>0</TopLine>
- <CurrentLine>0</CurrentLine>
- <bDave2>0</bDave2>
- <PathWithFileName>.\stm32_eth.c</PathWithFileName>
- <FilenameWithoutPath>stm32_eth.c</FilenameWithoutPath>
- </File>
- <File>
- <GroupNumber>1</GroupNumber>
- <FileNumber>8</FileNumber>
- <FileType>1</FileType>
- <tvExp>0</tvExp>
- <Focus>0</Focus>
- <ColumnNumber>0</ColumnNumber>
- <tvExpOptDlg>0</tvExpOptDlg>
- <TopLine>0</TopLine>
- <CurrentLine>0</CurrentLine>
- <bDave2>0</bDave2>
- <PathWithFileName>.\msd.c</PathWithFileName>
- <FilenameWithoutPath>msd.c</FilenameWithoutPath>
- </File>
- </Group>
-
- <Group>
- <GroupName>Kernel</GroupName>
- <tvExp>0</tvExp>
- <tvExpOptDlg>0</tvExpOptDlg>
- <cbSel>0</cbSel>
- <File>
- <GroupNumber>2</GroupNumber>
- <FileNumber>9</FileNumber>
- <FileType>1</FileType>
- <tvExp>0</tvExp>
- <Focus>0</Focus>
- <ColumnNumber>0</ColumnNumber>
- <tvExpOptDlg>0</tvExpOptDlg>
- <TopLine>0</TopLine>
- <CurrentLine>0</CurrentLine>
- <bDave2>0</bDave2>
- <PathWithFileName>..\..\src\clock.c</PathWithFileName>
- <FilenameWithoutPath>clock.c</FilenameWithoutPath>
- </File>
- <File>
- <GroupNumber>2</GroupNumber>
- <FileNumber>10</FileNumber>
- <FileType>1</FileType>
- <tvExp>0</tvExp>
- <Focus>0</Focus>
- <ColumnNumber>0</ColumnNumber>
- <tvExpOptDlg>0</tvExpOptDlg>
- <TopLine>0</TopLine>
- <CurrentLine>0</CurrentLine>
- <bDave2>0</bDave2>
- <PathWithFileName>..\..\src\device.c</PathWithFileName>
- <FilenameWithoutPath>device.c</FilenameWithoutPath>
- </File>
- <File>
- <GroupNumber>2</GroupNumber>
- <FileNumber>11</FileNumber>
- <FileType>1</FileType>
- <tvExp>0</tvExp>
- <Focus>0</Focus>
- <ColumnNumber>0</ColumnNumber>
- <tvExpOptDlg>0</tvExpOptDlg>
- <TopLine>0</TopLine>
- <CurrentLine>0</CurrentLine>
- <bDave2>0</bDave2>
- <PathWithFileName>..\..\src\idle.c</PathWithFileName>
- <FilenameWithoutPath>idle.c</FilenameWithoutPath>
- </File>
- <File>
- <GroupNumber>2</GroupNumber>
- <FileNumber>12</FileNumber>
- <FileType>1</FileType>
- <tvExp>0</tvExp>
- <Focus>0</Focus>
- <ColumnNumber>0</ColumnNumber>
- <tvExpOptDlg>0</tvExpOptDlg>
- <TopLine>0</TopLine>
- <CurrentLine>0</CurrentLine>
- <bDave2>0</bDave2>
- <PathWithFileName>..\..\src\ipc.c</PathWithFileName>
- <FilenameWithoutPath>ipc.c</FilenameWithoutPath>
- </File>
- <File>
- <GroupNumber>2</GroupNumber>
- <FileNumber>13</FileNumber>
- <FileType>1</FileType>
- <tvExp>0</tvExp>
- <Focus>0</Focus>
- <ColumnNumber>0</ColumnNumber>
- <tvExpOptDlg>0</tvExpOptDlg>
- <TopLine>0</TopLine>
- <CurrentLine>0</CurrentLine>
- <bDave2>0</bDave2>
- <PathWithFileName>..\..\src\irq.c</PathWithFileName>
- <FilenameWithoutPath>irq.c</FilenameWithoutPath>
- </File>
- <File>
- <GroupNumber>2</GroupNumber>
- <FileNumber>14</FileNumber>
- <FileType>1</FileType>
- <tvExp>0</tvExp>
- <Focus>0</Focus>
- <ColumnNumber>0</ColumnNumber>
- <tvExpOptDlg>0</tvExpOptDlg>
- <TopLine>0</TopLine>
- <CurrentLine>0</CurrentLine>
- <bDave2>0</bDave2>
- <PathWithFileName>..\..\src\kservice.c</PathWithFileName>
- <FilenameWithoutPath>kservice.c</FilenameWithoutPath>
- </File>
- <File>
- <GroupNumber>2</GroupNumber>
- <FileNumber>15</FileNumber>
- <FileType>1</FileType>
- <tvExp>0</tvExp>
- <Focus>0</Focus>
- <ColumnNumber>0</ColumnNumber>
- <tvExpOptDlg>0</tvExpOptDlg>
- <TopLine>0</TopLine>
- <CurrentLine>0</CurrentLine>
- <bDave2>0</bDave2>
- <PathWithFileName>..\..\src\mem.c</PathWithFileName>
- <FilenameWithoutPath>mem.c</FilenameWithoutPath>
- </File>
- <File>
- <GroupNumber>2</GroupNumber>
- <FileNumber>16</FileNumber>
- <FileType>1</FileType>
- <tvExp>0</tvExp>
- <Focus>0</Focus>
- <ColumnNumber>0</ColumnNumber>
- <tvExpOptDlg>0</tvExpOptDlg>
- <TopLine>0</TopLine>
- <CurrentLine>0</CurrentLine>
- <bDave2>0</bDave2>
- <PathWithFileName>..\..\src\mempool.c</PathWithFileName>
- <FilenameWithoutPath>mempool.c</FilenameWithoutPath>
- </File>
- <File>
- <GroupNumber>2</GroupNumber>
- <FileNumber>17</FileNumber>
- <FileType>1</FileType>
- <tvExp>0</tvExp>
- <Focus>0</Focus>
- <ColumnNumber>0</ColumnNumber>
- <tvExpOptDlg>0</tvExpOptDlg>
- <TopLine>0</TopLine>
- <CurrentLine>0</CurrentLine>
- <bDave2>0</bDave2>
- <PathWithFileName>..\..\src\module.c</PathWithFileName>
- <FilenameWithoutPath>module.c</FilenameWithoutPath>
- </File>
- <File>
- <GroupNumber>2</GroupNumber>
- <FileNumber>18</FileNumber>
- <FileType>1</FileType>
- <tvExp>0</tvExp>
- <Focus>0</Focus>
- <ColumnNumber>0</ColumnNumber>
- <tvExpOptDlg>0</tvExpOptDlg>
- <TopLine>0</TopLine>
- <CurrentLine>0</CurrentLine>
- <bDave2>0</bDave2>
- <PathWithFileName>..\..\src\object.c</PathWithFileName>
- <FilenameWithoutPath>object.c</FilenameWithoutPath>
- </File>
- <File>
- <GroupNumber>2</GroupNumber>
- <FileNumber>19</FileNumber>
- <FileType>1</FileType>
- <tvExp>0</tvExp>
- <Focus>0</Focus>
- <ColumnNumber>0</ColumnNumber>
- <tvExpOptDlg>0</tvExpOptDlg>
- <TopLine>0</TopLine>
- <CurrentLine>0</CurrentLine>
- <bDave2>0</bDave2>
- <PathWithFileName>..\..\src\rtm.c</PathWithFileName>
- <FilenameWithoutPath>rtm.c</FilenameWithoutPath>
- </File>
- <File>
- <GroupNumber>2</GroupNumber>
- <FileNumber>20</FileNumber>
- <FileType>1</FileType>
- <tvExp>0</tvExp>
- <Focus>0</Focus>
- <ColumnNumber>0</ColumnNumber>
- <tvExpOptDlg>0</tvExpOptDlg>
- <TopLine>0</TopLine>
- <CurrentLine>0</CurrentLine>
- <bDave2>0</bDave2>
- <PathWithFileName>..\..\src\scheduler.c</PathWithFileName>
- <FilenameWithoutPath>scheduler.c</FilenameWithoutPath>
- </File>
- <File>
- <GroupNumber>2</GroupNumber>
- <FileNumber>21</FileNumber>
- <FileType>1</FileType>
- <tvExp>0</tvExp>
- <Focus>0</Focus>
- <ColumnNumber>0</ColumnNumber>
- <tvExpOptDlg>0</tvExpOptDlg>
- <TopLine>0</TopLine>
- <CurrentLine>0</CurrentLine>
- <bDave2>0</bDave2>
- <PathWithFileName>..\..\src\slab.c</PathWithFileName>
- <FilenameWithoutPath>slab.c</FilenameWithoutPath>
- </File>
- <File>
- <GroupNumber>2</GroupNumber>
- <FileNumber>22</FileNumber>
- <FileType>1</FileType>
- <tvExp>0</tvExp>
- <Focus>0</Focus>
- <ColumnNumber>0</ColumnNumber>
- <tvExpOptDlg>0</tvExpOptDlg>
- <TopLine>0</TopLine>
- <CurrentLine>0</CurrentLine>
- <bDave2>0</bDave2>
- <PathWithFileName>..\..\src\thread.c</PathWithFileName>
- <FilenameWithoutPath>thread.c</FilenameWithoutPath>
- </File>
- <File>
- <GroupNumber>2</GroupNumber>
- <FileNumber>23</FileNumber>
- <FileType>1</FileType>
- <tvExp>0</tvExp>
- <Focus>0</Focus>
- <ColumnNumber>0</ColumnNumber>
- <tvExpOptDlg>0</tvExpOptDlg>
- <TopLine>0</TopLine>
- <CurrentLine>0</CurrentLine>
- <bDave2>0</bDave2>
- <PathWithFileName>..\..\src\timer.c</PathWithFileName>
- <FilenameWithoutPath>timer.c</FilenameWithoutPath>
- </File>
- </Group>
-
- <Group>
- <GroupName>STM32</GroupName>
- <tvExp>0</tvExp>
- <tvExpOptDlg>0</tvExpOptDlg>
- <cbSel>0</cbSel>
- <File>
- <GroupNumber>3</GroupNumber>
- <FileNumber>26</FileNumber>
- <FileType>1</FileType>
- <tvExp>0</tvExp>
- <Focus>0</Focus>
- <ColumnNumber>0</ColumnNumber>
- <tvExpOptDlg>0</tvExpOptDlg>
- <TopLine>0</TopLine>
- <CurrentLine>0</CurrentLine>
- <bDave2>0</bDave2>
- <PathWithFileName>..\..\libcpu\arm\common\backtrace.c</PathWithFileName>
- <FilenameWithoutPath>backtrace.c</FilenameWithoutPath>
- </File>
- <File>
- <GroupNumber>3</GroupNumber>
- <FileNumber>27</FileNumber>
- <FileType>1</FileType>
- <tvExp>0</tvExp>
- <Focus>0</Focus>
- <ColumnNumber>0</ColumnNumber>
- <tvExpOptDlg>0</tvExpOptDlg>
- <TopLine>0</TopLine>
- <CurrentLine>0</CurrentLine>
- <bDave2>0</bDave2>
- <PathWithFileName>..\..\libcpu\arm\common\div0.c</PathWithFileName>
- <FilenameWithoutPath>div0.c</FilenameWithoutPath>
- </File>
- <File>
- <GroupNumber>3</GroupNumber>
- <FileNumber>28</FileNumber>
- <FileType>1</FileType>
- <tvExp>0</tvExp>
- <Focus>0</Focus>
- <ColumnNumber>0</ColumnNumber>
- <tvExpOptDlg>0</tvExpOptDlg>
- <TopLine>0</TopLine>
- <CurrentLine>0</CurrentLine>
- <bDave2>0</bDave2>
- <PathWithFileName>..\..\libcpu\arm\common\showmem.c</PathWithFileName>
- <FilenameWithoutPath>showmem.c</FilenameWithoutPath>
- </File>
- <File>
- <GroupNumber>3</GroupNumber>
- <FileNumber>0</FileNumber>
- <FileType>2</FileType>
- <tvExp>0</tvExp>
- <Focus>0</Focus>
- <ColumnNumber>0</ColumnNumber>
- <tvExpOptDlg>0</tvExpOptDlg>
- <TopLine>0</TopLine>
- <CurrentLine>0</CurrentLine>
- <bDave2>0</bDave2>
- <PathWithFileName>..\..\libcpu\arm\cortex-m3\context_rvds.S</PathWithFileName>
- <FilenameWithoutPath>context_rvds.S</FilenameWithoutPath>
- </File>
- <File>
- <GroupNumber>3</GroupNumber>
- <FileNumber>0</FileNumber>
- <FileType>1</FileType>
- <tvExp>0</tvExp>
- <Focus>0</Focus>
- <ColumnNumber>0</ColumnNumber>
- <tvExpOptDlg>0</tvExpOptDlg>
- <TopLine>0</TopLine>
- <CurrentLine>0</CurrentLine>
- <bDave2>0</bDave2>
- <PathWithFileName>..\..\libcpu\arm\cortex-m3\cpuport.c</PathWithFileName>
- <FilenameWithoutPath>cpuport.c</FilenameWithoutPath>
- </File>
- </Group>
-
- <Group>
- <GroupName>Filesystem</GroupName>
- <tvExp>0</tvExp>
- <tvExpOptDlg>0</tvExpOptDlg>
- <cbSel>0</cbSel>
- <File>
- <GroupNumber>4</GroupNumber>
- <FileNumber>29</FileNumber>
- <FileType>1</FileType>
- <tvExp>0</tvExp>
- <Focus>0</Focus>
- <ColumnNumber>0</ColumnNumber>
- <tvExpOptDlg>0</tvExpOptDlg>
- <TopLine>0</TopLine>
- <CurrentLine>0</CurrentLine>
- <bDave2>0</bDave2>
- <PathWithFileName>..\..\components\dfs\src\dfs.c</PathWithFileName>
- <FilenameWithoutPath>dfs.c</FilenameWithoutPath>
- </File>
- <File>
- <GroupNumber>4</GroupNumber>
- <FileNumber>30</FileNumber>
- <FileType>1</FileType>
- <tvExp>0</tvExp>
- <Focus>0</Focus>
- <ColumnNumber>0</ColumnNumber>
- <tvExpOptDlg>0</tvExpOptDlg>
- <TopLine>0</TopLine>
- <CurrentLine>0</CurrentLine>
- <bDave2>0</bDave2>
- <PathWithFileName>..\..\components\dfs\src\dfs_fs.c</PathWithFileName>
- <FilenameWithoutPath>dfs_fs.c</FilenameWithoutPath>
- </File>
- <File>
- <GroupNumber>4</GroupNumber>
- <FileNumber>31</FileNumber>
- <FileType>1</FileType>
- <tvExp>0</tvExp>
- <Focus>0</Focus>
- <ColumnNumber>0</ColumnNumber>
- <tvExpOptDlg>0</tvExpOptDlg>
- <TopLine>0</TopLine>
- <CurrentLine>0</CurrentLine>
- <bDave2>0</bDave2>
- <PathWithFileName>..\..\components\dfs\src\dfs_file.c</PathWithFileName>
- <FilenameWithoutPath>dfs_file.c</FilenameWithoutPath>
- </File>
- <File>
- <GroupNumber>4</GroupNumber>
- <FileNumber>32</FileNumber>
- <FileType>1</FileType>
- <tvExp>0</tvExp>
- <Focus>0</Focus>
- <ColumnNumber>0</ColumnNumber>
- <tvExpOptDlg>0</tvExpOptDlg>
- <TopLine>0</TopLine>
- <CurrentLine>0</CurrentLine>
- <bDave2>0</bDave2>
- <PathWithFileName>..\..\components\dfs\src\dfs_posix.c</PathWithFileName>
- <FilenameWithoutPath>dfs_posix.c</FilenameWithoutPath>
- </File>
- <File>
- <GroupNumber>4</GroupNumber>
- <FileNumber>33</FileNumber>
- <FileType>1</FileType>
- <tvExp>0</tvExp>
- <Focus>0</Focus>
- <ColumnNumber>0</ColumnNumber>
- <tvExpOptDlg>0</tvExpOptDlg>
- <TopLine>0</TopLine>
- <CurrentLine>0</CurrentLine>
- <bDave2>0</bDave2>
- <PathWithFileName>..\..\components\dfs\filesystems\elmfat\dfs_elm.c</PathWithFileName>
- <FilenameWithoutPath>dfs_elm.c</FilenameWithoutPath>
- </File>
- <File>
- <GroupNumber>4</GroupNumber>
- <FileNumber>34</FileNumber>
- <FileType>1</FileType>
- <tvExp>0</tvExp>
- <Focus>0</Focus>
- <ColumnNumber>0</ColumnNumber>
- <tvExpOptDlg>0</tvExpOptDlg>
- <TopLine>0</TopLine>
- <CurrentLine>0</CurrentLine>
- <bDave2>0</bDave2>
- <PathWithFileName>..\..\components\dfs\filesystems\elmfat\ff.c</PathWithFileName>
- <FilenameWithoutPath>ff.c</FilenameWithoutPath>
- </File>
- </Group>
-
- <Group>
- <GroupName>finsh</GroupName>
- <tvExp>0</tvExp>
- <tvExpOptDlg>0</tvExpOptDlg>
- <cbSel>0</cbSel>
- <File>
- <GroupNumber>5</GroupNumber>
- <FileNumber>35</FileNumber>
- <FileType>1</FileType>
- <tvExp>0</tvExp>
- <Focus>0</Focus>
- <ColumnNumber>0</ColumnNumber>
- <tvExpOptDlg>0</tvExpOptDlg>
- <TopLine>0</TopLine>
- <CurrentLine>0</CurrentLine>
- <bDave2>0</bDave2>
- <PathWithFileName>..\..\components\finsh\cmd.c</PathWithFileName>
- <FilenameWithoutPath>cmd.c</FilenameWithoutPath>
- </File>
- <File>
- <GroupNumber>5</GroupNumber>
- <FileNumber>36</FileNumber>
- <FileType>1</FileType>
- <tvExp>0</tvExp>
- <Focus>0</Focus>
- <ColumnNumber>0</ColumnNumber>
- <tvExpOptDlg>0</tvExpOptDlg>
- <TopLine>0</TopLine>
- <CurrentLine>0</CurrentLine>
- <bDave2>0</bDave2>
- <PathWithFileName>..\..\components\finsh\finsh_compiler.c</PathWithFileName>
- <FilenameWithoutPath>finsh_compiler.c</FilenameWithoutPath>
- </File>
- <File>
- <GroupNumber>5</GroupNumber>
- <FileNumber>37</FileNumber>
- <FileType>1</FileType>
- <tvExp>0</tvExp>
- <Focus>0</Focus>
- <ColumnNumber>0</ColumnNumber>
- <tvExpOptDlg>0</tvExpOptDlg>
- <TopLine>0</TopLine>
- <CurrentLine>0</CurrentLine>
- <bDave2>0</bDave2>
- <PathWithFileName>..\..\components\finsh\finsh_error.c</PathWithFileName>
- <FilenameWithoutPath>finsh_error.c</FilenameWithoutPath>
- </File>
- <File>
- <GroupNumber>5</GroupNumber>
- <FileNumber>38</FileNumber>
- <FileType>1</FileType>
- <tvExp>0</tvExp>
- <Focus>0</Focus>
- <ColumnNumber>0</ColumnNumber>
- <tvExpOptDlg>0</tvExpOptDlg>
- <TopLine>0</TopLine>
- <CurrentLine>0</CurrentLine>
- <bDave2>0</bDave2>
- <PathWithFileName>..\..\components\finsh\finsh_heap.c</PathWithFileName>
- <FilenameWithoutPath>finsh_heap.c</FilenameWithoutPath>
- </File>
- <File>
- <GroupNumber>5</GroupNumber>
- <FileNumber>39</FileNumber>
- <FileType>1</FileType>
- <tvExp>0</tvExp>
- <Focus>0</Focus>
- <ColumnNumber>0</ColumnNumber>
- <tvExpOptDlg>0</tvExpOptDlg>
- <TopLine>0</TopLine>
- <CurrentLine>0</CurrentLine>
- <bDave2>0</bDave2>
- <PathWithFileName>..\..\components\finsh\finsh_init.c</PathWithFileName>
- <FilenameWithoutPath>finsh_init.c</FilenameWithoutPath>
- </File>
- <File>
- <GroupNumber>5</GroupNumber>
- <FileNumber>40</FileNumber>
- <FileType>1</FileType>
- <tvExp>0</tvExp>
- <Focus>0</Focus>
- <ColumnNumber>0</ColumnNumber>
- <tvExpOptDlg>0</tvExpOptDlg>
- <TopLine>0</TopLine>
- <CurrentLine>0</CurrentLine>
- <bDave2>0</bDave2>
- <PathWithFileName>..\..\components\finsh\finsh_node.c</PathWithFileName>
- <FilenameWithoutPath>finsh_node.c</FilenameWithoutPath>
- </File>
- <File>
- <GroupNumber>5</GroupNumber>
- <FileNumber>41</FileNumber>
- <FileType>1</FileType>
- <tvExp>0</tvExp>
- <Focus>0</Focus>
- <ColumnNumber>0</ColumnNumber>
- <tvExpOptDlg>0</tvExpOptDlg>
- <TopLine>0</TopLine>
- <CurrentLine>0</CurrentLine>
- <bDave2>0</bDave2>
- <PathWithFileName>..\..\components\finsh\finsh_ops.c</PathWithFileName>
- <FilenameWithoutPath>finsh_ops.c</FilenameWithoutPath>
- </File>
- <File>
- <GroupNumber>5</GroupNumber>
- <FileNumber>42</FileNumber>
- <FileType>1</FileType>
- <tvExp>0</tvExp>
- <Focus>0</Focus>
- <ColumnNumber>0</ColumnNumber>
- <tvExpOptDlg>0</tvExpOptDlg>
- <TopLine>0</TopLine>
- <CurrentLine>0</CurrentLine>
- <bDave2>0</bDave2>
- <PathWithFileName>..\..\components\finsh\finsh_parser.c</PathWithFileName>
- <FilenameWithoutPath>finsh_parser.c</FilenameWithoutPath>
- </File>
- <File>
- <GroupNumber>5</GroupNumber>
- <FileNumber>43</FileNumber>
- <FileType>1</FileType>
- <tvExp>0</tvExp>
- <Focus>0</Focus>
- <ColumnNumber>0</ColumnNumber>
- <tvExpOptDlg>0</tvExpOptDlg>
- <TopLine>0</TopLine>
- <CurrentLine>0</CurrentLine>
- <bDave2>0</bDave2>
- <PathWithFileName>..\..\components\finsh\finsh_token.c</PathWithFileName>
- <FilenameWithoutPath>finsh_token.c</FilenameWithoutPath>
- </File>
- <File>
- <GroupNumber>5</GroupNumber>
- <FileNumber>44</FileNumber>
- <FileType>1</FileType>
- <tvExp>0</tvExp>
- <Focus>0</Focus>
- <ColumnNumber>0</ColumnNumber>
- <tvExpOptDlg>0</tvExpOptDlg>
- <TopLine>0</TopLine>
- <CurrentLine>0</CurrentLine>
- <bDave2>0</bDave2>
- <PathWithFileName>..\..\components\finsh\finsh_var.c</PathWithFileName>
- <FilenameWithoutPath>finsh_var.c</FilenameWithoutPath>
- </File>
- <File>
- <GroupNumber>5</GroupNumber>
- <FileNumber>45</FileNumber>
- <FileType>1</FileType>
- <tvExp>0</tvExp>
- <Focus>0</Focus>
- <ColumnNumber>0</ColumnNumber>
- <tvExpOptDlg>0</tvExpOptDlg>
- <TopLine>0</TopLine>
- <CurrentLine>0</CurrentLine>
- <bDave2>0</bDave2>
- <PathWithFileName>..\..\components\finsh\finsh_vm.c</PathWithFileName>
- <FilenameWithoutPath>finsh_vm.c</FilenameWithoutPath>
- </File>
- <File>
- <GroupNumber>5</GroupNumber>
- <FileNumber>46</FileNumber>
- <FileType>1</FileType>
- <tvExp>0</tvExp>
- <Focus>0</Focus>
- <ColumnNumber>0</ColumnNumber>
- <tvExpOptDlg>0</tvExpOptDlg>
- <TopLine>0</TopLine>
- <CurrentLine>0</CurrentLine>
- <bDave2>0</bDave2>
- <PathWithFileName>..\..\components\finsh\shell.c</PathWithFileName>
- <FilenameWithoutPath>shell.c</FilenameWithoutPath>
- </File>
- <File>
- <GroupNumber>5</GroupNumber>
- <FileNumber>47</FileNumber>
- <FileType>1</FileType>
- <tvExp>0</tvExp>
- <Focus>0</Focus>
- <ColumnNumber>0</ColumnNumber>
- <tvExpOptDlg>0</tvExpOptDlg>
- <TopLine>0</TopLine>
- <CurrentLine>0</CurrentLine>
- <bDave2>0</bDave2>
- <PathWithFileName>..\..\components\finsh\symbol.c</PathWithFileName>
- <FilenameWithoutPath>symbol.c</FilenameWithoutPath>
- </File>
- </Group>
-
- <Group>
- <GroupName>LwIP</GroupName>
- <tvExp>0</tvExp>
- <tvExpOptDlg>0</tvExpOptDlg>
- <cbSel>0</cbSel>
- <File>
- <GroupNumber>6</GroupNumber>
- <FileNumber>48</FileNumber>
- <FileType>1</FileType>
- <tvExp>0</tvExp>
- <Focus>0</Focus>
- <ColumnNumber>0</ColumnNumber>
- <tvExpOptDlg>0</tvExpOptDlg>
- <TopLine>0</TopLine>
- <CurrentLine>0</CurrentLine>
- <bDave2>0</bDave2>
- <PathWithFileName>..\..\components\net\lwip\src\api\api_lib.c</PathWithFileName>
- <FilenameWithoutPath>api_lib.c</FilenameWithoutPath>
- </File>
- <File>
- <GroupNumber>6</GroupNumber>
- <FileNumber>49</FileNumber>
- <FileType>1</FileType>
- <tvExp>0</tvExp>
- <Focus>0</Focus>
- <ColumnNumber>0</ColumnNumber>
- <tvExpOptDlg>0</tvExpOptDlg>
- <TopLine>0</TopLine>
- <CurrentLine>0</CurrentLine>
- <bDave2>0</bDave2>
- <PathWithFileName>..\..\components\net\lwip\src\api\api_msg.c</PathWithFileName>
- <FilenameWithoutPath>api_msg.c</FilenameWithoutPath>
- </File>
- <File>
- <GroupNumber>6</GroupNumber>
- <FileNumber>50</FileNumber>
- <FileType>1</FileType>
- <tvExp>0</tvExp>
- <Focus>0</Focus>
- <ColumnNumber>0</ColumnNumber>
- <tvExpOptDlg>0</tvExpOptDlg>
- <TopLine>0</TopLine>
- <CurrentLine>0</CurrentLine>
- <bDave2>0</bDave2>
- <PathWithFileName>..\..\components\net\lwip\src\api\err.c</PathWithFileName>
- <FilenameWithoutPath>err.c</FilenameWithoutPath>
- </File>
- <File>
- <GroupNumber>6</GroupNumber>
- <FileNumber>51</FileNumber>
- <FileType>1</FileType>
- <tvExp>0</tvExp>
- <Focus>0</Focus>
- <ColumnNumber>0</ColumnNumber>
- <tvExpOptDlg>0</tvExpOptDlg>
- <TopLine>0</TopLine>
- <CurrentLine>0</CurrentLine>
- <bDave2>0</bDave2>
- <PathWithFileName>..\..\components\net\lwip\src\api\netbuf.c</PathWithFileName>
- <FilenameWithoutPath>netbuf.c</FilenameWithoutPath>
- </File>
- <File>
- <GroupNumber>6</GroupNumber>
- <FileNumber>52</FileNumber>
- <FileType>1</FileType>
- <tvExp>0</tvExp>
- <Focus>0</Focus>
- <ColumnNumber>0</ColumnNumber>
- <tvExpOptDlg>0</tvExpOptDlg>
- <TopLine>0</TopLine>
- <CurrentLine>0</CurrentLine>
- <bDave2>0</bDave2>
- <PathWithFileName>..\..\components\net\lwip\src\api\netdb.c</PathWithFileName>
- <FilenameWithoutPath>netdb.c</FilenameWithoutPath>
- </File>
- <File>
- <GroupNumber>6</GroupNumber>
- <FileNumber>53</FileNumber>
- <FileType>1</FileType>
- <tvExp>0</tvExp>
- <Focus>0</Focus>
- <ColumnNumber>0</ColumnNumber>
- <tvExpOptDlg>0</tvExpOptDlg>
- <TopLine>0</TopLine>
- <CurrentLine>0</CurrentLine>
- <bDave2>0</bDave2>
- <PathWithFileName>..\..\components\net\lwip\src\api\netifapi.c</PathWithFileName>
- <FilenameWithoutPath>netifapi.c</FilenameWithoutPath>
- </File>
- <File>
- <GroupNumber>6</GroupNumber>
- <FileNumber>54</FileNumber>
- <FileType>1</FileType>
- <tvExp>0</tvExp>
- <Focus>0</Focus>
- <ColumnNumber>0</ColumnNumber>
- <tvExpOptDlg>0</tvExpOptDlg>
- <TopLine>0</TopLine>
- <CurrentLine>0</CurrentLine>
- <bDave2>0</bDave2>
- <PathWithFileName>..\..\components\net\lwip\src\api\sockets.c</PathWithFileName>
- <FilenameWithoutPath>sockets.c</FilenameWithoutPath>
- </File>
- <File>
- <GroupNumber>6</GroupNumber>
- <FileNumber>55</FileNumber>
- <FileType>1</FileType>
- <tvExp>0</tvExp>
- <Focus>0</Focus>
- <ColumnNumber>0</ColumnNumber>
- <tvExpOptDlg>0</tvExpOptDlg>
- <TopLine>534</TopLine>
- <CurrentLine>546</CurrentLine>
- <bDave2>0</bDave2>
- <PathWithFileName>..\..\components\net\lwip\src\api\tcpip.c</PathWithFileName>
- <FilenameWithoutPath>tcpip.c</FilenameWithoutPath>
- </File>
- <File>
- <GroupNumber>6</GroupNumber>
- <FileNumber>56</FileNumber>
- <FileType>1</FileType>
- <tvExp>0</tvExp>
- <Focus>0</Focus>
- <ColumnNumber>0</ColumnNumber>
- <tvExpOptDlg>0</tvExpOptDlg>
- <TopLine>0</TopLine>
- <CurrentLine>0</CurrentLine>
- <bDave2>0</bDave2>
- <PathWithFileName>..\..\components\net\lwip\src\arch\sys_arch.c</PathWithFileName>
- <FilenameWithoutPath>sys_arch.c</FilenameWithoutPath>
- </File>
- <File>
- <GroupNumber>6</GroupNumber>
- <FileNumber>57</FileNumber>
- <FileType>1</FileType>
- <tvExp>0</tvExp>
- <Focus>0</Focus>
- <ColumnNumber>0</ColumnNumber>
- <tvExpOptDlg>0</tvExpOptDlg>
- <TopLine>25</TopLine>
- <CurrentLine>36</CurrentLine>
- <bDave2>0</bDave2>
- <PathWithFileName>..\..\components\net\lwip\src\arch\sys_arch_init.c</PathWithFileName>
- <FilenameWithoutPath>sys_arch_init.c</FilenameWithoutPath>
- </File>
- <File>
- <GroupNumber>6</GroupNumber>
- <FileNumber>58</FileNumber>
- <FileType>1</FileType>
- <tvExp>0</tvExp>
- <Focus>0</Focus>
- <ColumnNumber>0</ColumnNumber>
- <tvExpOptDlg>0</tvExpOptDlg>
- <TopLine>0</TopLine>
- <CurrentLine>0</CurrentLine>
- <bDave2>0</bDave2>
- <PathWithFileName>..\..\components\net\lwip\src\core\dhcp.c</PathWithFileName>
- <FilenameWithoutPath>dhcp.c</FilenameWithoutPath>
- </File>
- <File>
- <GroupNumber>6</GroupNumber>
- <FileNumber>59</FileNumber>
- <FileType>1</FileType>
- <tvExp>0</tvExp>
- <Focus>0</Focus>
- <ColumnNumber>0</ColumnNumber>
- <tvExpOptDlg>0</tvExpOptDlg>
- <TopLine>262</TopLine>
- <CurrentLine>274</CurrentLine>
- <bDave2>0</bDave2>
- <PathWithFileName>..\..\components\net\lwip\src\core\dns.c</PathWithFileName>
- <FilenameWithoutPath>dns.c</FilenameWithoutPath>
- </File>
- <File>
- <GroupNumber>6</GroupNumber>
- <FileNumber>60</FileNumber>
- <FileType>1</FileType>
- <tvExp>0</tvExp>
- <Focus>0</Focus>
- <ColumnNumber>0</ColumnNumber>
- <tvExpOptDlg>0</tvExpOptDlg>
- <TopLine>261</TopLine>
- <CurrentLine>272</CurrentLine>
- <bDave2>0</bDave2>
- <PathWithFileName>..\..\components\net\lwip\src\core\init.c</PathWithFileName>
- <FilenameWithoutPath>init.c</FilenameWithoutPath>
- </File>
- <File>
- <GroupNumber>6</GroupNumber>
- <FileNumber>61</FileNumber>
- <FileType>1</FileType>
- <tvExp>0</tvExp>
- <Focus>0</Focus>
- <ColumnNumber>0</ColumnNumber>
- <tvExpOptDlg>0</tvExpOptDlg>
- <TopLine>0</TopLine>
- <CurrentLine>0</CurrentLine>
- <bDave2>0</bDave2>
- <PathWithFileName>..\..\components\net\lwip\src\core\memp.c</PathWithFileName>
- <FilenameWithoutPath>memp.c</FilenameWithoutPath>
- </File>
- <File>
- <GroupNumber>6</GroupNumber>
- <FileNumber>62</FileNumber>
- <FileType>1</FileType>
- <tvExp>0</tvExp>
- <Focus>0</Focus>
- <ColumnNumber>0</ColumnNumber>
- <tvExpOptDlg>0</tvExpOptDlg>
- <TopLine>0</TopLine>
- <CurrentLine>0</CurrentLine>
- <bDave2>0</bDave2>
- <PathWithFileName>..\..\components\net\lwip\src\core\netif.c</PathWithFileName>
- <FilenameWithoutPath>netif.c</FilenameWithoutPath>
- </File>
- <File>
- <GroupNumber>6</GroupNumber>
- <FileNumber>63</FileNumber>
- <FileType>1</FileType>
- <tvExp>0</tvExp>
- <Focus>0</Focus>
- <ColumnNumber>0</ColumnNumber>
- <tvExpOptDlg>0</tvExpOptDlg>
- <TopLine>0</TopLine>
- <CurrentLine>0</CurrentLine>
- <bDave2>0</bDave2>
- <PathWithFileName>..\..\components\net\lwip\src\core\pbuf.c</PathWithFileName>
- <FilenameWithoutPath>pbuf.c</FilenameWithoutPath>
- </File>
- <File>
- <GroupNumber>6</GroupNumber>
- <FileNumber>64</FileNumber>
- <FileType>1</FileType>
- <tvExp>0</tvExp>
- <Focus>0</Focus>
- <ColumnNumber>0</ColumnNumber>
- <tvExpOptDlg>0</tvExpOptDlg>
- <TopLine>0</TopLine>
- <CurrentLine>0</CurrentLine>
- <bDave2>0</bDave2>
- <PathWithFileName>..\..\components\net\lwip\src\core\raw.c</PathWithFileName>
- <FilenameWithoutPath>raw.c</FilenameWithoutPath>
- </File>
- <File>
- <GroupNumber>6</GroupNumber>
- <FileNumber>65</FileNumber>
- <FileType>1</FileType>
- <tvExp>0</tvExp>
- <Focus>0</Focus>
- <ColumnNumber>0</ColumnNumber>
- <tvExpOptDlg>0</tvExpOptDlg>
- <TopLine>0</TopLine>
- <CurrentLine>0</CurrentLine>
- <bDave2>0</bDave2>
- <PathWithFileName>..\..\components\net\lwip\src\core\stats.c</PathWithFileName>
- <FilenameWithoutPath>stats.c</FilenameWithoutPath>
- </File>
- <File>
- <GroupNumber>6</GroupNumber>
- <FileNumber>66</FileNumber>
- <FileType>1</FileType>
- <tvExp>0</tvExp>
- <Focus>0</Focus>
- <ColumnNumber>0</ColumnNumber>
- <tvExpOptDlg>0</tvExpOptDlg>
- <TopLine>0</TopLine>
- <CurrentLine>0</CurrentLine>
- <bDave2>0</bDave2>
- <PathWithFileName>..\..\components\net\lwip\src\core\sys.c</PathWithFileName>
- <FilenameWithoutPath>sys.c</FilenameWithoutPath>
- </File>
- <File>
- <GroupNumber>6</GroupNumber>
- <FileNumber>67</FileNumber>
- <FileType>1</FileType>
- <tvExp>0</tvExp>
- <Focus>0</Focus>
- <ColumnNumber>0</ColumnNumber>
- <tvExpOptDlg>0</tvExpOptDlg>
- <TopLine>0</TopLine>
- <CurrentLine>0</CurrentLine>
- <bDave2>0</bDave2>
- <PathWithFileName>..\..\components\net\lwip\src\core\tcp.c</PathWithFileName>
- <FilenameWithoutPath>tcp.c</FilenameWithoutPath>
- </File>
- <File>
- <GroupNumber>6</GroupNumber>
- <FileNumber>68</FileNumber>
- <FileType>1</FileType>
- <tvExp>0</tvExp>
- <Focus>0</Focus>
- <ColumnNumber>0</ColumnNumber>
- <tvExpOptDlg>0</tvExpOptDlg>
- <TopLine>0</TopLine>
- <CurrentLine>0</CurrentLine>
- <bDave2>0</bDave2>
- <PathWithFileName>..\..\components\net\lwip\src\core\tcp_in.c</PathWithFileName>
- <FilenameWithoutPath>tcp_in.c</FilenameWithoutPath>
- </File>
- <File>
- <GroupNumber>6</GroupNumber>
- <FileNumber>69</FileNumber>
- <FileType>1</FileType>
- <tvExp>0</tvExp>
- <Focus>0</Focus>
- <ColumnNumber>0</ColumnNumber>
- <tvExpOptDlg>0</tvExpOptDlg>
- <TopLine>0</TopLine>
- <CurrentLine>0</CurrentLine>
- <bDave2>0</bDave2>
- <PathWithFileName>..\..\components\net\lwip\src\core\tcp_out.c</PathWithFileName>
- <FilenameWithoutPath>tcp_out.c</FilenameWithoutPath>
- </File>
- <File>
- <GroupNumber>6</GroupNumber>
- <FileNumber>70</FileNumber>
- <FileType>1</FileType>
- <tvExp>0</tvExp>
- <Focus>0</Focus>
- <ColumnNumber>18</ColumnNumber>
- <tvExpOptDlg>0</tvExpOptDlg>
- <TopLine>578</TopLine>
- <CurrentLine>590</CurrentLine>
- <bDave2>0</bDave2>
- <PathWithFileName>..\..\components\net\lwip\src\core\udp.c</PathWithFileName>
- <FilenameWithoutPath>udp.c</FilenameWithoutPath>
- </File>
- <File>
- <GroupNumber>6</GroupNumber>
- <FileNumber>71</FileNumber>
- <FileType>1</FileType>
- <tvExp>0</tvExp>
- <Focus>0</Focus>
- <ColumnNumber>0</ColumnNumber>
- <tvExpOptDlg>0</tvExpOptDlg>
- <TopLine>0</TopLine>
- <CurrentLine>0</CurrentLine>
- <bDave2>0</bDave2>
- <PathWithFileName>..\..\components\net\lwip\src\core\ipv4\autoip.c</PathWithFileName>
- <FilenameWithoutPath>autoip.c</FilenameWithoutPath>
- </File>
- <File>
- <GroupNumber>6</GroupNumber>
- <FileNumber>72</FileNumber>
- <FileType>1</FileType>
- <tvExp>0</tvExp>
- <Focus>0</Focus>
- <ColumnNumber>0</ColumnNumber>
- <tvExpOptDlg>0</tvExpOptDlg>
- <TopLine>0</TopLine>
- <CurrentLine>0</CurrentLine>
- <bDave2>0</bDave2>
- <PathWithFileName>..\..\components\net\lwip\src\core\ipv4\icmp.c</PathWithFileName>
- <FilenameWithoutPath>icmp.c</FilenameWithoutPath>
- </File>
- <File>
- <GroupNumber>6</GroupNumber>
- <FileNumber>73</FileNumber>
- <FileType>1</FileType>
- <tvExp>0</tvExp>
- <Focus>0</Focus>
- <ColumnNumber>0</ColumnNumber>
- <tvExpOptDlg>0</tvExpOptDlg>
- <TopLine>0</TopLine>
- <CurrentLine>0</CurrentLine>
- <bDave2>0</bDave2>
- <PathWithFileName>..\..\components\net\lwip\src\core\ipv4\igmp.c</PathWithFileName>
- <FilenameWithoutPath>igmp.c</FilenameWithoutPath>
- </File>
- <File>
- <GroupNumber>6</GroupNumber>
- <FileNumber>74</FileNumber>
- <FileType>1</FileType>
- <tvExp>0</tvExp>
- <Focus>0</Focus>
- <ColumnNumber>0</ColumnNumber>
- <tvExpOptDlg>0</tvExpOptDlg>
- <TopLine>0</TopLine>
- <CurrentLine>0</CurrentLine>
- <bDave2>0</bDave2>
- <PathWithFileName>..\..\components\net\lwip\src\core\ipv4\inet.c</PathWithFileName>
- <FilenameWithoutPath>inet.c</FilenameWithoutPath>
- </File>
- <File>
- <GroupNumber>6</GroupNumber>
- <FileNumber>75</FileNumber>
- <FileType>1</FileType>
- <tvExp>0</tvExp>
- <Focus>0</Focus>
- <ColumnNumber>0</ColumnNumber>
- <tvExpOptDlg>0</tvExpOptDlg>
- <TopLine>0</TopLine>
- <CurrentLine>0</CurrentLine>
- <bDave2>0</bDave2>
- <PathWithFileName>..\..\components\net\lwip\src\core\ipv4\inet_chksum.c</PathWithFileName>
- <FilenameWithoutPath>inet_chksum.c</FilenameWithoutPath>
- </File>
- <File>
- <GroupNumber>6</GroupNumber>
- <FileNumber>76</FileNumber>
- <FileType>1</FileType>
- <tvExp>0</tvExp>
- <Focus>0</Focus>
- <ColumnNumber>0</ColumnNumber>
- <tvExpOptDlg>0</tvExpOptDlg>
- <TopLine>0</TopLine>
- <CurrentLine>0</CurrentLine>
- <bDave2>0</bDave2>
- <PathWithFileName>..\..\components\net\lwip\src\core\ipv4\ip.c</PathWithFileName>
- <FilenameWithoutPath>ip.c</FilenameWithoutPath>
- </File>
- <File>
- <GroupNumber>6</GroupNumber>
- <FileNumber>77</FileNumber>
- <FileType>1</FileType>
- <tvExp>0</tvExp>
- <Focus>0</Focus>
- <ColumnNumber>0</ColumnNumber>
- <tvExpOptDlg>0</tvExpOptDlg>
- <TopLine>0</TopLine>
- <CurrentLine>0</CurrentLine>
- <bDave2>0</bDave2>
- <PathWithFileName>..\..\components\net\lwip\src\core\ipv4\ip_addr.c</PathWithFileName>
- <FilenameWithoutPath>ip_addr.c</FilenameWithoutPath>
- </File>
- <File>
- <GroupNumber>6</GroupNumber>
- <FileNumber>78</FileNumber>
- <FileType>1</FileType>
- <tvExp>0</tvExp>
- <Focus>0</Focus>
- <ColumnNumber>0</ColumnNumber>
- <tvExpOptDlg>0</tvExpOptDlg>
- <TopLine>0</TopLine>
- <CurrentLine>0</CurrentLine>
- <bDave2>0</bDave2>
- <PathWithFileName>..\..\components\net\lwip\src\core\ipv4\ip_frag.c</PathWithFileName>
- <FilenameWithoutPath>ip_frag.c</FilenameWithoutPath>
- </File>
- <File>
- <GroupNumber>6</GroupNumber>
- <FileNumber>79</FileNumber>
- <FileType>1</FileType>
- <tvExp>0</tvExp>
- <Focus>0</Focus>
- <ColumnNumber>0</ColumnNumber>
- <tvExpOptDlg>0</tvExpOptDlg>
- <TopLine>0</TopLine>
- <CurrentLine>0</CurrentLine>
- <bDave2>0</bDave2>
- <PathWithFileName>..\..\components\net\lwip\src\netif\etharp.c</PathWithFileName>
- <FilenameWithoutPath>etharp.c</FilenameWithoutPath>
- </File>
- <File>
- <GroupNumber>6</GroupNumber>
- <FileNumber>80</FileNumber>
- <FileType>1</FileType>
- <tvExp>0</tvExp>
- <Focus>0</Focus>
- <ColumnNumber>0</ColumnNumber>
- <tvExpOptDlg>0</tvExpOptDlg>
- <TopLine>0</TopLine>
- <CurrentLine>0</CurrentLine>
- <bDave2>0</bDave2>
- <PathWithFileName>..\..\components\net\lwip\src\netif\ethernetif.c</PathWithFileName>
- <FilenameWithoutPath>ethernetif.c</FilenameWithoutPath>
- </File>
- <File>
- <GroupNumber>6</GroupNumber>
- <FileNumber>81</FileNumber>
- <FileType>1</FileType>
- <tvExp>0</tvExp>
- <Focus>0</Focus>
- <ColumnNumber>0</ColumnNumber>
- <tvExpOptDlg>0</tvExpOptDlg>
- <TopLine>0</TopLine>
- <CurrentLine>0</CurrentLine>
- <bDave2>0</bDave2>
- <PathWithFileName>..\..\components\net\lwip\src\netif\loopif.c</PathWithFileName>
- <FilenameWithoutPath>loopif.c</FilenameWithoutPath>
- </File>
- <File>
- <GroupNumber>6</GroupNumber>
- <FileNumber>82</FileNumber>
- <FileType>1</FileType>
- <tvExp>0</tvExp>
- <Focus>0</Focus>
- <ColumnNumber>0</ColumnNumber>
- <tvExpOptDlg>0</tvExpOptDlg>
- <TopLine>148</TopLine>
- <CurrentLine>148</CurrentLine>
- <bDave2>0</bDave2>
- <PathWithFileName>..\..\components\net\lwip\src\netif\slipif.c</PathWithFileName>
- <FilenameWithoutPath>slipif.c</FilenameWithoutPath>
- </File>
- </Group>
-
- <Group>
- <GroupName>STM32_StdPeriph</GroupName>
- <tvExp>0</tvExp>
- <tvExpOptDlg>0</tvExpOptDlg>
- <cbSel>0</cbSel>
- <File>
- <GroupNumber>7</GroupNumber>
- <FileNumber>83</FileNumber>
- <FileType>1</FileType>
- <tvExp>0</tvExp>
- <Focus>0</Focus>
- <ColumnNumber>0</ColumnNumber>
- <tvExpOptDlg>0</tvExpOptDlg>
- <TopLine>0</TopLine>
- <CurrentLine>0</CurrentLine>
- <bDave2>0</bDave2>
- <PathWithFileName>Libraries\CMSIS\CM3\CoreSupport\core_cm3.c</PathWithFileName>
- <FilenameWithoutPath>core_cm3.c</FilenameWithoutPath>
- </File>
- <File>
- <GroupNumber>7</GroupNumber>
- <FileNumber>84</FileNumber>
- <FileType>1</FileType>
- <tvExp>0</tvExp>
- <Focus>0</Focus>
- <ColumnNumber>0</ColumnNumber>
- <tvExpOptDlg>0</tvExpOptDlg>
- <TopLine>257</TopLine>
- <CurrentLine>269</CurrentLine>
- <bDave2>0</bDave2>
- <PathWithFileName>Libraries\CMSIS\CM3\DeviceSupport\ST\STM32F10x\system_stm32f10x.c</PathWithFileName>
- <FilenameWithoutPath>system_stm32f10x.c</FilenameWithoutPath>
- </File>
- <File>
- <GroupNumber>7</GroupNumber>
- <FileNumber>85</FileNumber>
- <FileType>1</FileType>
- <tvExp>0</tvExp>
- <Focus>0</Focus>
- <ColumnNumber>0</ColumnNumber>
- <tvExpOptDlg>0</tvExpOptDlg>
- <TopLine>0</TopLine>
- <CurrentLine>0</CurrentLine>
- <bDave2>0</bDave2>
- <PathWithFileName>Libraries\STM32F10x_StdPeriph_Driver\src\stm32f10x_crc.c</PathWithFileName>
- <FilenameWithoutPath>stm32f10x_crc.c</FilenameWithoutPath>
- </File>
- <File>
- <GroupNumber>7</GroupNumber>
- <FileNumber>86</FileNumber>
- <FileType>1</FileType>
- <tvExp>0</tvExp>
- <Focus>0</Focus>
- <ColumnNumber>0</ColumnNumber>
- <tvExpOptDlg>0</tvExpOptDlg>
- <TopLine>0</TopLine>
- <CurrentLine>0</CurrentLine>
- <bDave2>0</bDave2>
- <PathWithFileName>Libraries\STM32F10x_StdPeriph_Driver\src\stm32f10x_rcc.c</PathWithFileName>
- <FilenameWithoutPath>stm32f10x_rcc.c</FilenameWithoutPath>
- </File>
- <File>
- <GroupNumber>7</GroupNumber>
- <FileNumber>87</FileNumber>
- <FileType>1</FileType>
- <tvExp>0</tvExp>
- <Focus>0</Focus>
- <ColumnNumber>0</ColumnNumber>
- <tvExpOptDlg>0</tvExpOptDlg>
- <TopLine>0</TopLine>
- <CurrentLine>0</CurrentLine>
- <bDave2>0</bDave2>
- <PathWithFileName>Libraries\STM32F10x_StdPeriph_Driver\src\stm32f10x_wwdg.c</PathWithFileName>
- <FilenameWithoutPath>stm32f10x_wwdg.c</FilenameWithoutPath>
- </File>
- <File>
- <GroupNumber>7</GroupNumber>
- <FileNumber>88</FileNumber>
- <FileType>1</FileType>
- <tvExp>0</tvExp>
- <Focus>0</Focus>
- <ColumnNumber>0</ColumnNumber>
- <tvExpOptDlg>0</tvExpOptDlg>
- <TopLine>0</TopLine>
- <CurrentLine>0</CurrentLine>
- <bDave2>0</bDave2>
- <PathWithFileName>Libraries\STM32F10x_StdPeriph_Driver\src\stm32f10x_pwr.c</PathWithFileName>
- <FilenameWithoutPath>stm32f10x_pwr.c</FilenameWithoutPath>
- </File>
- <File>
- <GroupNumber>7</GroupNumber>
- <FileNumber>89</FileNumber>
- <FileType>1</FileType>
- <tvExp>0</tvExp>
- <Focus>0</Focus>
- <ColumnNumber>0</ColumnNumber>
- <tvExpOptDlg>0</tvExpOptDlg>
- <TopLine>0</TopLine>
- <CurrentLine>0</CurrentLine>
- <bDave2>0</bDave2>
- <PathWithFileName>Libraries\STM32F10x_StdPeriph_Driver\src\stm32f10x_exti.c</PathWithFileName>
- <FilenameWithoutPath>stm32f10x_exti.c</FilenameWithoutPath>
- </File>
- <File>
- <GroupNumber>7</GroupNumber>
- <FileNumber>90</FileNumber>
- <FileType>1</FileType>
- <tvExp>0</tvExp>
- <Focus>0</Focus>
- <ColumnNumber>0</ColumnNumber>
- <tvExpOptDlg>0</tvExpOptDlg>
- <TopLine>0</TopLine>
- <CurrentLine>0</CurrentLine>
- <bDave2>0</bDave2>
- <PathWithFileName>Libraries\STM32F10x_StdPeriph_Driver\src\stm32f10x_bkp.c</PathWithFileName>
- <FilenameWithoutPath>stm32f10x_bkp.c</FilenameWithoutPath>
- </File>
- <File>
- <GroupNumber>7</GroupNumber>
- <FileNumber>91</FileNumber>
- <FileType>1</FileType>
- <tvExp>0</tvExp>
- <Focus>0</Focus>
- <ColumnNumber>0</ColumnNumber>
- <tvExpOptDlg>0</tvExpOptDlg>
- <TopLine>0</TopLine>
- <CurrentLine>0</CurrentLine>
- <bDave2>0</bDave2>
- <PathWithFileName>Libraries\STM32F10x_StdPeriph_Driver\src\stm32f10x_i2c.c</PathWithFileName>
- <FilenameWithoutPath>stm32f10x_i2c.c</FilenameWithoutPath>
- </File>
- <File>
- <GroupNumber>7</GroupNumber>
- <FileNumber>92</FileNumber>
- <FileType>1</FileType>
- <tvExp>0</tvExp>
- <Focus>0</Focus>
- <ColumnNumber>0</ColumnNumber>
- <tvExpOptDlg>0</tvExpOptDlg>
- <TopLine>0</TopLine>
- <CurrentLine>0</CurrentLine>
- <bDave2>0</bDave2>
- <PathWithFileName>Libraries\STM32F10x_StdPeriph_Driver\src\stm32f10x_adc.c</PathWithFileName>
- <FilenameWithoutPath>stm32f10x_adc.c</FilenameWithoutPath>
- </File>
- <File>
- <GroupNumber>7</GroupNumber>
- <FileNumber>93</FileNumber>
- <FileType>1</FileType>
- <tvExp>0</tvExp>
- <Focus>0</Focus>
- <ColumnNumber>0</ColumnNumber>
- <tvExpOptDlg>0</tvExpOptDlg>
- <TopLine>0</TopLine>
- <CurrentLine>0</CurrentLine>
- <bDave2>0</bDave2>
- <PathWithFileName>Libraries\STM32F10x_StdPeriph_Driver\src\stm32f10x_dac.c</PathWithFileName>
- <FilenameWithoutPath>stm32f10x_dac.c</FilenameWithoutPath>
- </File>
- <File>
- <GroupNumber>7</GroupNumber>
- <FileNumber>94</FileNumber>
- <FileType>1</FileType>
- <tvExp>0</tvExp>
- <Focus>0</Focus>
- <ColumnNumber>0</ColumnNumber>
- <tvExpOptDlg>0</tvExpOptDlg>
- <TopLine>0</TopLine>
- <CurrentLine>0</CurrentLine>
- <bDave2>0</bDave2>
- <PathWithFileName>Libraries\STM32F10x_StdPeriph_Driver\src\stm32f10x_rtc.c</PathWithFileName>
- <FilenameWithoutPath>stm32f10x_rtc.c</FilenameWithoutPath>
- </File>
- <File>
- <GroupNumber>7</GroupNumber>
- <FileNumber>95</FileNumber>
- <FileType>1</FileType>
- <tvExp>0</tvExp>
- <Focus>0</Focus>
- <ColumnNumber>0</ColumnNumber>
- <tvExpOptDlg>0</tvExpOptDlg>
- <TopLine>0</TopLine>
- <CurrentLine>0</CurrentLine>
- <bDave2>0</bDave2>
- <PathWithFileName>Libraries\STM32F10x_StdPeriph_Driver\src\stm32f10x_fsmc.c</PathWithFileName>
- <FilenameWithoutPath>stm32f10x_fsmc.c</FilenameWithoutPath>
- </File>
- <File>
- <GroupNumber>7</GroupNumber>
- <FileNumber>96</FileNumber>
- <FileType>1</FileType>
- <tvExp>0</tvExp>
- <Focus>0</Focus>
- <ColumnNumber>0</ColumnNumber>
- <tvExpOptDlg>0</tvExpOptDlg>
- <TopLine>0</TopLine>
- <CurrentLine>0</CurrentLine>
- <bDave2>0</bDave2>
- <PathWithFileName>Libraries\STM32F10x_StdPeriph_Driver\src\stm32f10x_tim.c</PathWithFileName>
- <FilenameWithoutPath>stm32f10x_tim.c</FilenameWithoutPath>
- </File>
- <File>
- <GroupNumber>7</GroupNumber>
- <FileNumber>97</FileNumber>
- <FileType>1</FileType>
- <tvExp>0</tvExp>
- <Focus>0</Focus>
- <ColumnNumber>0</ColumnNumber>
- <tvExpOptDlg>0</tvExpOptDlg>
- <TopLine>0</TopLine>
- <CurrentLine>0</CurrentLine>
- <bDave2>0</bDave2>
- <PathWithFileName>Libraries\STM32F10x_StdPeriph_Driver\src\stm32f10x_iwdg.c</PathWithFileName>
- <FilenameWithoutPath>stm32f10x_iwdg.c</FilenameWithoutPath>
- </File>
- <File>
- <GroupNumber>7</GroupNumber>
- <FileNumber>98</FileNumber>
- <FileType>1</FileType>
- <tvExp>0</tvExp>
- <Focus>0</Focus>
- <ColumnNumber>0</ColumnNumber>
- <tvExpOptDlg>0</tvExpOptDlg>
- <TopLine>0</TopLine>
- <CurrentLine>0</CurrentLine>
- <bDave2>0</bDave2>
- <PathWithFileName>Libraries\STM32F10x_StdPeriph_Driver\src\stm32f10x_spi.c</PathWithFileName>
- <FilenameWithoutPath>stm32f10x_spi.c</FilenameWithoutPath>
- </File>
- <File>
- <GroupNumber>7</GroupNumber>
- <FileNumber>99</FileNumber>
- <FileType>1</FileType>
- <tvExp>0</tvExp>
- <Focus>0</Focus>
- <ColumnNumber>0</ColumnNumber>
- <tvExpOptDlg>0</tvExpOptDlg>
- <TopLine>0</TopLine>
- <CurrentLine>0</CurrentLine>
- <bDave2>0</bDave2>
- <PathWithFileName>Libraries\STM32F10x_StdPeriph_Driver\src\stm32f10x_flash.c</PathWithFileName>
- <FilenameWithoutPath>stm32f10x_flash.c</FilenameWithoutPath>
- </File>
- <File>
- <GroupNumber>7</GroupNumber>
- <FileNumber>100</FileNumber>
- <FileType>1</FileType>
- <tvExp>0</tvExp>
- <Focus>0</Focus>
- <ColumnNumber>0</ColumnNumber>
- <tvExpOptDlg>0</tvExpOptDlg>
- <TopLine>0</TopLine>
- <CurrentLine>0</CurrentLine>
- <bDave2>0</bDave2>
- <PathWithFileName>Libraries\STM32F10x_StdPeriph_Driver\src\stm32f10x_sdio.c</PathWithFileName>
- <FilenameWithoutPath>stm32f10x_sdio.c</FilenameWithoutPath>
- </File>
- <File>
- <GroupNumber>7</GroupNumber>
- <FileNumber>101</FileNumber>
- <FileType>1</FileType>
- <tvExp>0</tvExp>
- <Focus>0</Focus>
- <ColumnNumber>0</ColumnNumber>
- <tvExpOptDlg>0</tvExpOptDlg>
- <TopLine>0</TopLine>
- <CurrentLine>0</CurrentLine>
- <bDave2>0</bDave2>
- <PathWithFileName>Libraries\STM32F10x_StdPeriph_Driver\src\stm32f10x_gpio.c</PathWithFileName>
- <FilenameWithoutPath>stm32f10x_gpio.c</FilenameWithoutPath>
- </File>
- <File>
- <GroupNumber>7</GroupNumber>
- <FileNumber>102</FileNumber>
- <FileType>1</FileType>
- <tvExp>0</tvExp>
- <Focus>0</Focus>
- <ColumnNumber>0</ColumnNumber>
- <tvExpOptDlg>0</tvExpOptDlg>
- <TopLine>0</TopLine>
- <CurrentLine>0</CurrentLine>
- <bDave2>0</bDave2>
- <PathWithFileName>Libraries\STM32F10x_StdPeriph_Driver\src\stm32f10x_usart.c</PathWithFileName>
- <FilenameWithoutPath>stm32f10x_usart.c</FilenameWithoutPath>
- </File>
- <File>
- <GroupNumber>7</GroupNumber>
- <FileNumber>103</FileNumber>
- <FileType>1</FileType>
- <tvExp>0</tvExp>
- <Focus>0</Focus>
- <ColumnNumber>0</ColumnNumber>
- <tvExpOptDlg>0</tvExpOptDlg>
- <TopLine>0</TopLine>
- <CurrentLine>0</CurrentLine>
- <bDave2>0</bDave2>
- <PathWithFileName>Libraries\STM32F10x_StdPeriph_Driver\src\stm32f10x_dbgmcu.c</PathWithFileName>
- <FilenameWithoutPath>stm32f10x_dbgmcu.c</FilenameWithoutPath>
- </File>
- <File>
- <GroupNumber>7</GroupNumber>
- <FileNumber>104</FileNumber>
- <FileType>1</FileType>
- <tvExp>0</tvExp>
- <Focus>0</Focus>
- <ColumnNumber>0</ColumnNumber>
- <tvExpOptDlg>0</tvExpOptDlg>
- <TopLine>0</TopLine>
- <CurrentLine>0</CurrentLine>
- <bDave2>0</bDave2>
- <PathWithFileName>Libraries\STM32F10x_StdPeriph_Driver\src\stm32f10x_dma.c</PathWithFileName>
- <FilenameWithoutPath>stm32f10x_dma.c</FilenameWithoutPath>
- </File>
- <File>
- <GroupNumber>7</GroupNumber>
- <FileNumber>105</FileNumber>
- <FileType>1</FileType>
- <tvExp>0</tvExp>
- <Focus>0</Focus>
- <ColumnNumber>0</ColumnNumber>
- <tvExpOptDlg>0</tvExpOptDlg>
- <TopLine>0</TopLine>
- <CurrentLine>0</CurrentLine>
- <bDave2>0</bDave2>
- <PathWithFileName>Libraries\STM32F10x_StdPeriph_Driver\src\stm32f10x_can.c</PathWithFileName>
- <FilenameWithoutPath>stm32f10x_can.c</FilenameWithoutPath>
- </File>
- <File>
- <GroupNumber>7</GroupNumber>
- <FileNumber>106</FileNumber>
- <FileType>1</FileType>
- <tvExp>0</tvExp>
- <Focus>0</Focus>
- <ColumnNumber>0</ColumnNumber>
- <tvExpOptDlg>0</tvExpOptDlg>
- <TopLine>0</TopLine>
- <CurrentLine>0</CurrentLine>
- <bDave2>0</bDave2>
- <PathWithFileName>Libraries\STM32F10x_StdPeriph_Driver\src\stm32f10x_cec.c</PathWithFileName>
- <FilenameWithoutPath>stm32f10x_cec.c</FilenameWithoutPath>
- </File>
- <File>
- <GroupNumber>7</GroupNumber>
- <FileNumber>107</FileNumber>
- <FileType>1</FileType>
- <tvExp>0</tvExp>
- <Focus>0</Focus>
- <ColumnNumber>0</ColumnNumber>
- <tvExpOptDlg>0</tvExpOptDlg>
- <TopLine>0</TopLine>
- <CurrentLine>0</CurrentLine>
- <bDave2>0</bDave2>
- <PathWithFileName>Libraries\STM32F10x_StdPeriph_Driver\src\misc.c</PathWithFileName>
- <FilenameWithoutPath>misc.c</FilenameWithoutPath>
- </File>
- <File>
- <GroupNumber>7</GroupNumber>
- <FileNumber>108</FileNumber>
- <FileType>2</FileType>
- <tvExp>0</tvExp>
- <Focus>0</Focus>
- <ColumnNumber>0</ColumnNumber>
- <tvExpOptDlg>0</tvExpOptDlg>
- <TopLine>1</TopLine>
- <CurrentLine>1</CurrentLine>
- <bDave2>0</bDave2>
- <PathWithFileName>Libraries\CMSIS\CM3\DeviceSupport\ST\STM32F10x\startup\arm\startup_stm32f10x_cl.s</PathWithFileName>
- <FilenameWithoutPath>startup_stm32f10x_cl.s</FilenameWithoutPath>
- </File>
- </Group>
-
</ProjectOpt>
diff --git a/bsp/stm32f107/project.uvproj b/bsp/stm32f107/project.uvproj
index b24ef8e9c1..8477594668 100644
--- a/bsp/stm32f107/project.uvproj
+++ b/bsp/stm32f107/project.uvproj
@@ -1,10 +1,7 @@
<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
<Project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="project_proj.xsd">
-
<SchemaVersion>1.1</SchemaVersion>
-
<Header>### uVision Project, (C) Keil Software</Header>
-
<Targets>
<Target>
<TargetName>RT-Thread STM32</TargetName>
@@ -15,25 +12,25 @@
<Device>STM32F107VC</Device>
<Vendor>STMicroelectronics</Vendor>
<Cpu>IRAM(0x20000000-0x2000FFFF) IROM(0x8000000-0x803FFFF) CLOCK(25000000) CPUTYPE("Cortex-M3")</Cpu>
- <FlashUtilSpec></FlashUtilSpec>
+ <FlashUtilSpec />
<StartupFile>"STARTUP\ST\STM32F10x.s" ("STM32 Startup Code")</StartupFile>
<FlashDriverDll>UL2CM3(-O14 -S0 -C0 -N00("ARM Cortex-M3") -D00(1BA00477) -L00(4) -FO7 -FD20000000 -FC800 -FN1 -FF0STM32F10x_CL -FS08000000 -FL040000)</FlashDriverDll>
<DeviceId>4889</DeviceId>
<RegisterFile>stm32f10x_lib.h</RegisterFile>
- <MemoryEnv></MemoryEnv>
- <Cmp></Cmp>
- <Asm></Asm>
- <Linker></Linker>
- <OHString></OHString>
- <InfinionOptionDll></InfinionOptionDll>
- <SLE66CMisc></SLE66CMisc>
- <SLE66AMisc></SLE66AMisc>
- <SLE66LinkerMisc></SLE66LinkerMisc>
+ <MemoryEnv />
+ <Cmp />
+ <Asm />
+ <Linker />
+ <OHString />
+ <InfinionOptionDll />
+ <SLE66CMisc />
+ <SLE66AMisc />
+ <SLE66LinkerMisc />
<SFDFile>SFD\ST\STM32F107x\STM32F107.sfr</SFDFile>
<UseEnv>0</UseEnv>
- <BinPath></BinPath>
- <IncludePath></IncludePath>
- <LibPath></LibPath>
+ <BinPath />
+ <IncludePath />
+ <LibPath />
<RegisterFilePath>ST\STM32F10x\</RegisterFilePath>
<DBRegisterFilePath>ST\STM32F10x\</DBRegisterFilePath>
<TargetStatus>
@@ -57,18 +54,16 @@
<BeforeCompile>
<RunUserProg1>0</RunUserProg1>
<RunUserProg2>0</RunUserProg2>
- <UserProg1Name></UserProg1Name>
- <UserProg2Name></UserProg2Name>
+ <UserProg1Name />
+ <UserProg2Name />
<UserProg1Dos16Mode>0</UserProg1Dos16Mode>
<UserProg2Dos16Mode>0</UserProg2Dos16Mode>
- <nStopU1X>0</nStopU1X>
- <nStopU2X>0</nStopU2X>
</BeforeCompile>
<BeforeMake>
<RunUserProg1>0</RunUserProg1>
<RunUserProg2>0</RunUserProg2>
- <UserProg1Name></UserProg1Name>
- <UserProg2Name></UserProg2Name>
+ <UserProg1Name />
+ <UserProg2Name />
<UserProg1Dos16Mode>0</UserProg1Dos16Mode>
<UserProg2Dos16Mode>0</UserProg2Dos16Mode>
</BeforeMake>
@@ -76,12 +71,12 @@
<RunUserProg1>1</RunUserProg1>
<RunUserProg2>0</RunUserProg2>
<UserProg1Name>fromelf --bin !L --output rtthread.bin</UserProg1Name>
- <UserProg2Name></UserProg2Name>
+ <UserProg2Name />
<UserProg1Dos16Mode>0</UserProg1Dos16Mode>
<UserProg2Dos16Mode>0</UserProg2Dos16Mode>
</AfterMake>
<SelectedForBatchBuild>0</SelectedForBatchBuild>
- <SVCSIdString></SVCSIdString>
+ <SVCSIdString />
</TargetCommonOption>
<CommonProperty>
<UseCPPCompiler>0</UseCPPCompiler>
@@ -95,16 +90,16 @@
<AssembleAssemblyFile>0</AssembleAssemblyFile>
<PublicsOnly>0</PublicsOnly>
<StopOnExitCode>3</StopOnExitCode>
- <CustomArgument></CustomArgument>
- <IncludeLibraryModules></IncludeLibraryModules>
+ <CustomArgument />
+ <IncludeLibraryModules />
</CommonProperty>
<DllOption>
<SimDllName>SARMCM3.DLL</SimDllName>
- <SimDllArguments></SimDllArguments>
+ <SimDllArguments />
<SimDlgDll>DARMSTM.DLL</SimDlgDll>
<SimDlgDllArguments>-pSTM32F107VC</SimDlgDllArguments>
<TargetDllName>SARMCM3.DLL</TargetDllName>
- <TargetDllArguments></TargetDllArguments>
+ <TargetDllArguments />
<TargetDlgDll>TARMSTM.DLL</TargetDlgDll>
<TargetDlgDllArguments>-pSTM32F107VC</TargetDlgDllArguments>
</DllOption>
@@ -136,23 +131,22 @@
<RestoreMemoryDisplay>1</RestoreMemoryDisplay>
<RestoreFunctions>0</RestoreFunctions>
<RestoreToolbox>1</RestoreToolbox>
- <RestoreTracepoints>0</RestoreTracepoints>
</Target>
<RunDebugAfterBuild>0</RunDebugAfterBuild>
<TargetSelection>7</TargetSelection>
<SimDlls>
- <CpuDll></CpuDll>
- <CpuDllArguments></CpuDllArguments>
- <PeripheralDll></PeripheralDll>
- <PeripheralDllArguments></PeripheralDllArguments>
- <InitializationFile></InitializationFile>
+ <CpuDll />
+ <CpuDllArguments />
+ <PeripheralDll />
+ <PeripheralDllArguments />
+ <InitializationFile />
</SimDlls>
<TargetDlls>
- <CpuDll></CpuDll>
- <CpuDllArguments></CpuDllArguments>
- <PeripheralDll></PeripheralDll>
- <PeripheralDllArguments></PeripheralDllArguments>
- <InitializationFile></InitializationFile>
+ <CpuDll />
+ <CpuDllArguments />
+ <PeripheralDll />
+ <PeripheralDllArguments />
+ <InitializationFile />
<Driver>Segger\JL2CM3.dll</Driver>
</TargetDlls>
</DebugOption>
@@ -166,8 +160,8 @@
<DriverSelection>4099</DriverSelection>
</Flash1>
<Flash2>Segger\JL2CM3.dll</Flash2>
- <Flash3>"" ()</Flash3>
- <Flash4></Flash4>
+ <Flash3 />
+ <Flash4 />
</Utilities>
<TargetArmAds>
<ArmAdsMisc>
@@ -199,7 +193,7 @@
<RvctClst>0</RvctClst>
<GenPPlst>0</GenPPlst>
<AdsCpuType>"Cortex-M3"</AdsCpuType>
- <RvctDeviceName></RvctDeviceName>
+ <RvctDeviceName />
<mOS>0</mOS>
<uocRom>0</uocRom>
<uocRam>0</uocRam>
@@ -330,7 +324,7 @@
<Size>0x0</Size>
</OCR_RVCT10>
</OnChipMemories>
- <RvctStartVector></RvctStartVector>
+ <RvctStartVector />
</ArmAdsMisc>
<Cads>
<interw>1</interw>
@@ -345,12 +339,11 @@
<Rwpi>0</Rwpi>
<wLevel>0</wLevel>
<uThumb>0</uThumb>
- <uSurpInc>0</uSurpInc>
<VariousControls>
- <MiscControls></MiscControls>
+ <MiscControls />
<Define>STM32F10X_CL, USE_STDPERIPH_DRIVER</Define>
- <Undefine></Undefine>
- <IncludePath>.;..\..\components\CMSIS\Include;..\..\components\dfs;..\..\components\dfs\include;..\..\components\drivers\include;..\..\components\finsh;..\..\components\init;..\..\components\net\lwip\src;..\..\components\net\lwip\src\arch\include;..\..\components\net\lwip\src\include;..\..\components\net\lwip\src\include\ipv4;..\..\components\net\lwip\src\include\netif;..\..\include;..\..\libcpu\arm\common;..\..\libcpu\arm\cortex-m3;Libraries\CMSIS\CM3\DeviceSupport\ST\STM32F10x;Libraries\STM32F10x_StdPeriph_Driver\inc;applications;drivers</IncludePath>
+ <Undefine />
+ <IncludePath>Libraries/STM32F10x_StdPeriph_Driver/inc;Libraries/CMSIS/CM3/DeviceSupport/ST/STM32F10x;../../components/CMSIS/Include;applications;.;drivers;../../include;../../libcpu/arm/cortex-m3;../../libcpu/arm/common;../../components/drivers/spi;../../components/drivers/include;../../components/finsh;../../components/net/lwip-1.4.1/src;../../components/net/lwip-1.4.1/src/include;../../components/net/lwip-1.4.1/src/include/ipv4;../../components/net/lwip-1.4.1/src/arch/include;../../components/net/lwip-1.4.1/src/include/netif;../../components/dfs/include;../../components/dfs/filesystems/elmfat</IncludePath>
</VariousControls>
</Cads>
<Aads>
@@ -361,12 +354,11 @@
<SplitLS>0</SplitLS>
<SwStkChk>0</SwStkChk>
<NoWarn>0</NoWarn>
- <uSurpInc>0</uSurpInc>
<VariousControls>
- <MiscControls></MiscControls>
- <Define></Define>
- <Undefine></Undefine>
- <IncludePath></IncludePath>
+ <MiscControls />
+ <Define />
+ <Undefine />
+ <IncludePath />
</VariousControls>
</Aads>
<LDads>
@@ -378,203 +370,267 @@
<useFile>0</useFile>
<TextAddressRange>0x08000000</TextAddressRange>
<DataAddressRange>0x20000000</DataAddressRange>
- <ScatterFile></ScatterFile>
- <IncludeLibs></IncludeLibs>
- <IncludeLibsPath></IncludeLibsPath>
- <Misc> --keep __fsym_* --keep __vsym_* </Misc>
- <LinkerInputFile></LinkerInputFile>
- <DisabledWarnings></DisabledWarnings>
+ <ScatterFile />
+ <IncludeLibs />
+ <IncludeLibsPath />
+ <Misc> --keep *.o(FSymTab) --keep *.o(VSymTab) </Misc>
+ <LinkerInputFile />
+ <DisabledWarnings />
</LDads>
</TargetArmAds>
</TargetOption>
<Groups>
<Group>
- <GroupName>Applications</GroupName>
+ <GroupName>STM32_StdPeriph</GroupName>
<Files>
<File>
- <FileName>application.c</FileName>
+ <FileName>system_stm32f10x.c</FileName>
<FileType>1</FileType>
- <FilePath>applications\application.c</FilePath>
+ <FilePath>Libraries/CMSIS/CM3/DeviceSupport/ST/STM32F10x/system_stm32f10x.c</FilePath>
</File>
+ </Files>
+ <Files>
<File>
- <FileName>startup.c</FileName>
+ <FileName>stm32f10x_crc.c</FileName>
<FileType>1</FileType>
- <FilePath>applications\startup.c</FilePath>
+ <FilePath>Libraries/STM32F10x_StdPeriph_Driver/src/stm32f10x_crc.c</FilePath>
</File>
</Files>
- </Group>
- <Group>
- <GroupName>Drivers</GroupName>
<Files>
<File>
- <FileName>board.c</FileName>
+ <FileName>stm32f10x_rcc.c</FileName>
<FileType>1</FileType>
- <FilePath>drivers\board.c</FilePath>
+ <FilePath>Libraries/STM32F10x_StdPeriph_Driver/src/stm32f10x_rcc.c</FilePath>
</File>
+ </Files>
+ <Files>
<File>
- <FileName>msd.c</FileName>
+ <FileName>stm32f10x_wwdg.c</FileName>
<FileType>1</FileType>
- <FilePath>drivers\msd.c</FilePath>
+ <FilePath>Libraries/STM32F10x_StdPeriph_Driver/src/stm32f10x_wwdg.c</FilePath>
</File>
+ </Files>
+ <Files>
<File>
- <FileName>platform.c</FileName>
+ <FileName>stm32f10x_pwr.c</FileName>
<FileType>1</FileType>
- <FilePath>drivers\platform.c</FilePath>
+ <FilePath>Libraries/STM32F10x_StdPeriph_Driver/src/stm32f10x_pwr.c</FilePath>
</File>
+ </Files>
+ <Files>
<File>
- <FileName>rt_stm32f10x_spi.c</FileName>
+ <FileName>stm32f10x_exti.c</FileName>
<FileType>1</FileType>
- <FilePath>drivers\rt_stm32f10x_spi.c</FilePath>
+ <FilePath>Libraries/STM32F10x_StdPeriph_Driver/src/stm32f10x_exti.c</FilePath>
</File>
+ </Files>
+ <Files>
<File>
- <FileName>serial.c</FileName>
+ <FileName>stm32f10x_bkp.c</FileName>
<FileType>1</FileType>
- <FilePath>drivers\serial.c</FilePath>
+ <FilePath>Libraries/STM32F10x_StdPeriph_Driver/src/stm32f10x_bkp.c</FilePath>
</File>
+ </Files>
+ <Files>
<File>
- <FileName>stm32_eth.c</FileName>
+ <FileName>stm32f10x_i2c.c</FileName>
<FileType>1</FileType>
- <FilePath>drivers\stm32_eth.c</FilePath>
+ <FilePath>Libraries/STM32F10x_StdPeriph_Driver/src/stm32f10x_i2c.c</FilePath>
</File>
+ </Files>
+ <Files>
<File>
- <FileName>stm32f10x_it.c</FileName>
+ <FileName>stm32f10x_adc.c</FileName>
<FileType>1</FileType>
- <FilePath>drivers\stm32f10x_it.c</FilePath>
+ <FilePath>Libraries/STM32F10x_StdPeriph_Driver/src/stm32f10x_adc.c</FilePath>
</File>
+ </Files>
+ <Files>
<File>
- <FileName>usart.c</FileName>
+ <FileName>stm32f10x_dac.c</FileName>
<FileType>1</FileType>
- <FilePath>drivers\usart.c</FilePath>
+ <FilePath>Libraries/STM32F10x_StdPeriph_Driver/src/stm32f10x_dac.c</FilePath>
</File>
</Files>
- </Group>
- <Group>
- <GroupName>STM32_StdPeriph</GroupName>
<Files>
<File>
- <FileName>system_stm32f10x.c</FileName>
+ <FileName>stm32f10x_rtc.c</FileName>
<FileType>1</FileType>
- <FilePath>Libraries\CMSIS\CM3\DeviceSupport\ST\STM32F10x\system_stm32f10x.c</FilePath>
+ <FilePath>Libraries/STM32F10x_StdPeriph_Driver/src/stm32f10x_rtc.c</FilePath>
</File>
+ </Files>
+ <Files>
<File>
- <FileName>stm32f10x_crc.c</FileName>
+ <FileName>stm32f10x_fsmc.c</FileName>
<FileType>1</FileType>
- <FilePath>Libraries\STM32F10x_StdPeriph_Driver\src\stm32f10x_crc.c</FilePath>
+ <FilePath>Libraries/STM32F10x_StdPeriph_Driver/src/stm32f10x_fsmc.c</FilePath>
</File>
+ </Files>
+ <Files>
<File>
- <FileName>stm32f10x_rcc.c</FileName>
+ <FileName>stm32f10x_tim.c</FileName>
<FileType>1</FileType>
- <FilePath>Libraries\STM32F10x_StdPeriph_Driver\src\stm32f10x_rcc.c</FilePath>
+ <FilePath>Libraries/STM32F10x_StdPeriph_Driver/src/stm32f10x_tim.c</FilePath>
</File>
+ </Files>
+ <Files>
<File>
- <FileName>stm32f10x_wwdg.c</FileName>
+ <FileName>stm32f10x_iwdg.c</FileName>
<FileType>1</FileType>
- <FilePath>Libraries\STM32F10x_StdPeriph_Driver\src\stm32f10x_wwdg.c</FilePath>
+ <FilePath>Libraries/STM32F10x_StdPeriph_Driver/src/stm32f10x_iwdg.c</FilePath>
</File>
+ </Files>
+ <Files>
<File>
- <FileName>stm32f10x_pwr.c</FileName>
+ <FileName>stm32f10x_spi.c</FileName>
<FileType>1</FileType>
- <FilePath>Libraries\STM32F10x_StdPeriph_Driver\src\stm32f10x_pwr.c</FilePath>
+ <FilePath>Libraries/STM32F10x_StdPeriph_Driver/src/stm32f10x_spi.c</FilePath>
</File>
+ </Files>
+ <Files>
<File>
- <FileName>stm32f10x_exti.c</FileName>
+ <FileName>stm32f10x_flash.c</FileName>
<FileType>1</FileType>
- <FilePath>Libraries\STM32F10x_StdPeriph_Driver\src\stm32f10x_exti.c</FilePath>
+ <FilePath>Libraries/STM32F10x_StdPeriph_Driver/src/stm32f10x_flash.c</FilePath>
</File>
+ </Files>
+ <Files>
<File>
- <FileName>stm32f10x_bkp.c</FileName>
+ <FileName>stm32f10x_sdio.c</FileName>
<FileType>1</FileType>
- <FilePath>Libraries\STM32F10x_StdPeriph_Driver\src\stm32f10x_bkp.c</FilePath>
+ <FilePath>Libraries/STM32F10x_StdPeriph_Driver/src/stm32f10x_sdio.c</FilePath>
</File>
+ </Files>
+ <Files>
<File>
- <FileName>stm32f10x_i2c.c</FileName>
+ <FileName>stm32f10x_gpio.c</FileName>
<FileType>1</FileType>
- <FilePath>Libraries\STM32F10x_StdPeriph_Driver\src\stm32f10x_i2c.c</FilePath>
+ <FilePath>Libraries/STM32F10x_StdPeriph_Driver/src/stm32f10x_gpio.c</FilePath>
</File>
+ </Files>
+ <Files>
<File>
- <FileName>stm32f10x_adc.c</FileName>
+ <FileName>stm32f10x_usart.c</FileName>
<FileType>1</FileType>
- <FilePath>Libraries\STM32F10x_StdPeriph_Driver\src\stm32f10x_adc.c</FilePath>
+ <FilePath>Libraries/STM32F10x_StdPeriph_Driver/src/stm32f10x_usart.c</FilePath>
</File>
+ </Files>
+ <Files>
<File>
- <FileName>stm32f10x_dac.c</FileName>
+ <FileName>stm32f10x_dbgmcu.c</FileName>
<FileType>1</FileType>
- <FilePath>Libraries\STM32F10x_StdPeriph_Driver\src\stm32f10x_dac.c</FilePath>
+ <FilePath>Libraries/STM32F10x_StdPeriph_Driver/src/stm32f10x_dbgmcu.c</FilePath>
</File>
+ </Files>
+ <Files>
<File>
- <FileName>stm32f10x_rtc.c</FileName>
+ <FileName>stm32f10x_dma.c</FileName>
<FileType>1</FileType>
- <FilePath>Libraries\STM32F10x_StdPeriph_Driver\src\stm32f10x_rtc.c</FilePath>
+ <FilePath>Libraries/STM32F10x_StdPeriph_Driver/src/stm32f10x_dma.c</FilePath>
</File>
+ </Files>
+ <Files>
<File>
- <FileName>stm32f10x_fsmc.c</FileName>
+ <FileName>stm32f10x_can.c</FileName>
<FileType>1</FileType>
- <FilePath>Libraries\STM32F10x_StdPeriph_Driver\src\stm32f10x_fsmc.c</FilePath>
+ <FilePath>Libraries/STM32F10x_StdPeriph_Driver/src/stm32f10x_can.c</FilePath>
</File>
+ </Files>
+ <Files>
<File>
- <FileName>stm32f10x_tim.c</FileName>
+ <FileName>stm32f10x_cec.c</FileName>
<FileType>1</FileType>
- <FilePath>Libraries\STM32F10x_StdPeriph_Driver\src\stm32f10x_tim.c</FilePath>
+ <FilePath>Libraries/STM32F10x_StdPeriph_Driver/src/stm32f10x_cec.c</FilePath>
</File>
+ </Files>
+ <Files>
<File>
- <FileName>stm32f10x_iwdg.c</FileName>
+ <FileName>misc.c</FileName>
<FileType>1</FileType>
- <FilePath>Libraries\STM32F10x_StdPeriph_Driver\src\stm32f10x_iwdg.c</FilePath>
+ <FilePath>Libraries/STM32F10x_StdPeriph_Driver/src/misc.c</FilePath>
</File>
+ </Files>
+ <Files>
<File>
- <FileName>stm32f10x_spi.c</FileName>
- <FileType>1</FileType>
- <FilePath>Libraries\STM32F10x_StdPeriph_Driver\src\stm32f10x_spi.c</FilePath>
+ <FileName>startup_stm32f10x_cl.s</FileName>
+ <FileType>2</FileType>
+ <FilePath>Libraries/CMSIS/CM3/DeviceSupport/ST/STM32F10x/startup/arm/startup_stm32f10x_cl.s</FilePath>
</File>
+ </Files>
+ </Group>
+ <Group>
+ <GroupName>Applications</GroupName>
+ <Files>
<File>
- <FileName>stm32f10x_flash.c</FileName>
+ <FileName>application.c</FileName>
<FileType>1</FileType>
- <FilePath>Libraries\STM32F10x_StdPeriph_Driver\src\stm32f10x_flash.c</FilePath>
+ <FilePath>applications/application.c</FilePath>
</File>
+ </Files>
+ <Files>
<File>
- <FileName>stm32f10x_sdio.c</FileName>
+ <FileName>startup.c</FileName>
<FileType>1</FileType>
- <FilePath>Libraries\STM32F10x_StdPeriph_Driver\src\stm32f10x_sdio.c</FilePath>
+ <FilePath>applications/startup.c</FilePath>
</File>
+ </Files>
+ </Group>
+ <Group>
+ <GroupName>Drivers</GroupName>
+ <Files>
<File>
- <FileName>stm32f10x_gpio.c</FileName>
+ <FileName>board.c</FileName>
<FileType>1</FileType>
- <FilePath>Libraries\STM32F10x_StdPeriph_Driver\src\stm32f10x_gpio.c</FilePath>
+ <FilePath>drivers/board.c</FilePath>
</File>
+ </Files>
+ <Files>
<File>
- <FileName>stm32f10x_usart.c</FileName>
+ <FileName>msd.c</FileName>
<FileType>1</FileType>
- <FilePath>Libraries\STM32F10x_StdPeriph_Driver\src\stm32f10x_usart.c</FilePath>
+ <FilePath>drivers/msd.c</FilePath>
</File>
+ </Files>
+ <Files>
<File>
- <FileName>stm32f10x_dbgmcu.c</FileName>
+ <FileName>platform.c</FileName>
<FileType>1</FileType>
- <FilePath>Libraries\STM32F10x_StdPeriph_Driver\src\stm32f10x_dbgmcu.c</FilePath>
+ <FilePath>drivers/platform.c</FilePath>
</File>
+ </Files>
+ <Files>
<File>
- <FileName>stm32f10x_dma.c</FileName>
+ <FileName>rt_stm32f10x_spi.c</FileName>
<FileType>1</FileType>
- <FilePath>Libraries\STM32F10x_StdPeriph_Driver\src\stm32f10x_dma.c</FilePath>
+ <FilePath>drivers/rt_stm32f10x_spi.c</FilePath>
</File>
+ </Files>
+ <Files>
<File>
- <FileName>stm32f10x_can.c</FileName>
+ <FileName>serial.c</FileName>
<FileType>1</FileType>
- <FilePath>Libraries\STM32F10x_StdPeriph_Driver\src\stm32f10x_can.c</FilePath>
+ <FilePath>drivers/serial.c</FilePath>
</File>
+ </Files>
+ <Files>
<File>
- <FileName>stm32f10x_cec.c</FileName>
+ <FileName>stm32_eth.c</FileName>
<FileType>1</FileType>
- <FilePath>Libraries\STM32F10x_StdPeriph_Driver\src\stm32f10x_cec.c</FilePath>
+ <FilePath>drivers/stm32_eth.c</FilePath>
</File>
+ </Files>
+ <Files>
<File>
- <FileName>misc.c</FileName>
+ <FileName>stm32f10x_it.c</FileName>
<FileType>1</FileType>
- <FilePath>Libraries\STM32F10x_StdPeriph_Driver\src\misc.c</FilePath>
+ <FilePath>drivers/stm32f10x_it.c</FilePath>
</File>
+ </Files>
+ <Files>
<File>
- <FileName>startup_stm32f10x_cl.s</FileName>
- <FileType>2</FileType>
- <FilePath>Libraries\CMSIS\CM3\DeviceSupport\ST\STM32F10x\startup\arm\startup_stm32f10x_cl.s</FilePath>
+ <FileName>usart.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>drivers/usart.c</FilePath>
</File>
</Files>
</Group>
@@ -584,62 +640,91 @@
<File>
<FileName>clock.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\src\clock.c</FilePath>
+ <FilePath>../../src/clock.c</FilePath>
</File>
+ </Files>
+ <Files>
+ <File>
+ <FileName>components.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../../src/components.c</FilePath>
+ </File>
+ </Files>
+ <Files>
<File>
<FileName>device.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\src\device.c</FilePath>
+ <FilePath>../../src/device.c</FilePath>
</File>
+ </Files>
+ <Files>
<File>
<FileName>idle.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\src\idle.c</FilePath>
+ <FilePath>../../src/idle.c</FilePath>
</File>
+ </Files>
+ <Files>
<File>
<FileName>ipc.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\src\ipc.c</FilePath>
+ <FilePath>../../src/ipc.c</FilePath>
</File>
+ </Files>
+ <Files>
<File>
<FileName>irq.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\src\irq.c</FilePath>
+ <FilePath>../../src/irq.c</FilePath>
</File>
+ </Files>
+ <Files>
<File>
<FileName>kservice.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\src\kservice.c</FilePath>
+ <FilePath>../../src/kservice.c</FilePath>
</File>
+ </Files>
+ <Files>
<File>
<FileName>mem.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\src\mem.c</FilePath>
+ <FilePath>../../src/mem.c</FilePath>
</File>
+ </Files>
+ <Files>
<File>
<FileName>mempool.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\src\mempool.c</FilePath>
+ <FilePath>../../src/mempool.c</FilePath>
</File>
+ </Files>
+ <Files>
<File>
<FileName>object.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\src\object.c</FilePath>
+ <FilePath>../../src/object.c</FilePath>
</File>
+ </Files>
+ <Files>
<File>
<FileName>scheduler.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\src\scheduler.c</FilePath>
+ <FilePath>../../src/scheduler.c</FilePath>
</File>
+ </Files>
+ <Files>
<File>
<FileName>thread.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\src\thread.c</FilePath>
+ <FilePath>../../src/thread.c</FilePath>
</File>
+ </Files>
+ <Files>
<File>
<FileName>timer.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\src\timer.c</FilePath>
+ <FilePath>../../src/timer.c</FilePath>
</File>
</Files>
</Group>
@@ -649,157 +734,146 @@
<File>
<FileName>cpuport.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\libcpu\arm\cortex-m3\cpuport.c</FilePath>
+ <FilePath>../../libcpu/arm/cortex-m3/cpuport.c</FilePath>
</File>
+ </Files>
+ <Files>
<File>
<FileName>context_rvds.S</FileName>
<FileType>2</FileType>
- <FilePath>..\..\libcpu\arm\cortex-m3\context_rvds.S</FilePath>
+ <FilePath>../../libcpu/arm/cortex-m3/context_rvds.S</FilePath>
</File>
+ </Files>
+ <Files>
<File>
<FileName>backtrace.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\libcpu\arm\common\backtrace.c</FilePath>
+ <FilePath>../../libcpu/arm/common/backtrace.c</FilePath>
</File>
+ </Files>
+ <Files>
<File>
<FileName>div0.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\libcpu\arm\common\div0.c</FilePath>
+ <FilePath>../../libcpu/arm/common/div0.c</FilePath>
</File>
+ </Files>
+ <Files>
<File>
<FileName>showmem.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\libcpu\arm\common\showmem.c</FilePath>
+ <FilePath>../../libcpu/arm/common/showmem.c</FilePath>
</File>
</Files>
</Group>
<Group>
- <GroupName>Filesystem</GroupName>
+ <GroupName>DeviceDrivers</GroupName>
<Files>
<File>
- <FileName>dfs.c</FileName>
- <FileType>1</FileType>
- <FilePath>..\..\components\dfs\src\dfs.c</FilePath>
- </File>
- <File>
- <FileName>dfs_fs.c</FileName>
- <FileType>1</FileType>
- <FilePath>..\..\components\dfs\src\dfs_fs.c</FilePath>
- </File>
- <File>
- <FileName>dfs_file.c</FileName>
- <FileType>1</FileType>
- <FilePath>..\..\components\dfs\src\dfs_file.c</FilePath>
- </File>
- <File>
- <FileName>dfs_posix.c</FileName>
- <FileType>1</FileType>
- <FilePath>..\..\components\dfs\src\dfs_posix.c</FilePath>
- </File>
- <File>
- <FileName>dfs_elm.c</FileName>
+ <FileName>spi_core.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\components\dfs\filesystems\elmfat\dfs_elm.c</FilePath>
+ <FilePath>../../components/drivers/spi/spi_core.c</FilePath>
</File>
+ </Files>
+ <Files>
<File>
- <FileName>ff.c</FileName>
+ <FileName>spi_dev.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\components\dfs\filesystems\elmfat\ff.c</FilePath>
+ <FilePath>../../components/drivers/spi/spi_dev.c</FilePath>
</File>
</Files>
</Group>
<Group>
- <GroupName>DeviceDrivers</GroupName>
+ <GroupName>finsh</GroupName>
<Files>
<File>
- <FileName>spi_core.c</FileName>
+ <FileName>shell.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\components\drivers\spi\spi_core.c</FilePath>
+ <FilePath>../../components/finsh/shell.c</FilePath>
</File>
+ </Files>
+ <Files>
<File>
- <FileName>spi_dev.c</FileName>
+ <FileName>symbol.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\components\drivers\spi\spi_dev.c</FilePath>
+ <FilePath>../../components/finsh/symbol.c</FilePath>
</File>
</Files>
- </Group>
- <Group>
- <GroupName>finsh</GroupName>
<Files>
<File>
<FileName>cmd.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\components\finsh\cmd.c</FilePath>
+ <FilePath>../../components/finsh/cmd.c</FilePath>
</File>
+ </Files>
+ <Files>
<File>
<FileName>finsh_compiler.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\components\finsh\finsh_compiler.c</FilePath>
+ <FilePath>../../components/finsh/finsh_compiler.c</FilePath>
</File>
+ </Files>
+ <Files>
<File>
<FileName>finsh_error.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\components\finsh\finsh_error.c</FilePath>
+ <FilePath>../../components/finsh/finsh_error.c</FilePath>
</File>
+ </Files>
+ <Files>
<File>
<FileName>finsh_heap.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\components\finsh\finsh_heap.c</FilePath>
+ <FilePath>../../components/finsh/finsh_heap.c</FilePath>
</File>
+ </Files>
+ <Files>
<File>
<FileName>finsh_init.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\components\finsh\finsh_init.c</FilePath>
+ <FilePath>../../components/finsh/finsh_init.c</FilePath>
</File>
+ </Files>
+ <Files>
<File>
<FileName>finsh_node.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\components\finsh\finsh_node.c</FilePath>
+ <FilePath>../../components/finsh/finsh_node.c</FilePath>
</File>
+ </Files>
+ <Files>
<File>
<FileName>finsh_ops.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\components\finsh\finsh_ops.c</FilePath>
+ <FilePath>../../components/finsh/finsh_ops.c</FilePath>
</File>
+ </Files>
+ <Files>
<File>
<FileName>finsh_parser.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\components\finsh\finsh_parser.c</FilePath>
- </File>
- <File>
- <FileName>finsh_token.c</FileName>
- <FileType>1</FileType>
- <FilePath>..\..\components\finsh\finsh_token.c</FilePath>
+ <FilePath>../../components/finsh/finsh_parser.c</FilePath>
</File>
+ </Files>
+ <Files>
<File>
<FileName>finsh_var.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\components\finsh\finsh_var.c</FilePath>
+ <FilePath>../../components/finsh/finsh_var.c</FilePath>
</File>
+ </Files>
+ <Files>
<File>
<FileName>finsh_vm.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\components\finsh\finsh_vm.c</FilePath>
- </File>
- <File>
- <FileName>shell.c</FileName>
- <FileType>1</FileType>
- <FilePath>..\..\components\finsh\shell.c</FilePath>
- </File>
- <File>
- <FileName>symbol.c</FileName>
- <FileType>1</FileType>
- <FilePath>..\..\components\finsh\symbol.c</FilePath>
+ <FilePath>../../components/finsh/finsh_vm.c</FilePath>
</File>
</Files>
- </Group>
- <Group>
- <GroupName>Components</GroupName>
<Files>
<File>
- <FileName>components.c</FileName>
+ <FileName>finsh_token.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\components\init\components.c</FilePath>
+ <FilePath>../../components/finsh/finsh_token.c</FilePath>
</File>
</Files>
</Group>
@@ -809,182 +883,294 @@
<File>
<FileName>api_lib.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\components\net\lwip\src\api\api_lib.c</FilePath>
+ <FilePath>../../components/net/lwip-1.4.1/src/api/api_lib.c</FilePath>
</File>
+ </Files>
+ <Files>
<File>
<FileName>api_msg.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\components\net\lwip\src\api\api_msg.c</FilePath>
+ <FilePath>../../components/net/lwip-1.4.1/src/api/api_msg.c</FilePath>
</File>
+ </Files>
+ <Files>
<File>
<FileName>err.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\components\net\lwip\src\api\err.c</FilePath>
+ <FilePath>../../components/net/lwip-1.4.1/src/api/err.c</FilePath>
</File>
+ </Files>
+ <Files>
<File>
<FileName>netbuf.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\components\net\lwip\src\api\netbuf.c</FilePath>
+ <FilePath>../../components/net/lwip-1.4.1/src/api/netbuf.c</FilePath>
</File>
+ </Files>
+ <Files>
<File>
<FileName>netdb.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\components\net\lwip\src\api\netdb.c</FilePath>
+ <FilePath>../../components/net/lwip-1.4.1/src/api/netdb.c</FilePath>
</File>
+ </Files>
+ <Files>
<File>
<FileName>netifapi.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\components\net\lwip\src\api\netifapi.c</FilePath>
+ <FilePath>../../components/net/lwip-1.4.1/src/api/netifapi.c</FilePath>
</File>
+ </Files>
+ <Files>
<File>
<FileName>sockets.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\components\net\lwip\src\api\sockets.c</FilePath>
+ <FilePath>../../components/net/lwip-1.4.1/src/api/sockets.c</FilePath>
</File>
+ </Files>
+ <Files>
<File>
<FileName>tcpip.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\components\net\lwip\src\api\tcpip.c</FilePath>
+ <FilePath>../../components/net/lwip-1.4.1/src/api/tcpip.c</FilePath>
</File>
+ </Files>
+ <Files>
<File>
<FileName>sys_arch.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\components\net\lwip\src\arch\sys_arch.c</FilePath>
+ <FilePath>../../components/net/lwip-1.4.1/src/arch/sys_arch.c</FilePath>
</File>
+ </Files>
+ <Files>
<File>
<FileName>def.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\components\net\lwip\src\core\def.c</FilePath>
+ <FilePath>../../components/net/lwip-1.4.1/src/core/def.c</FilePath>
</File>
+ </Files>
+ <Files>
<File>
<FileName>dhcp.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\components\net\lwip\src\core\dhcp.c</FilePath>
+ <FilePath>../../components/net/lwip-1.4.1/src/core/dhcp.c</FilePath>
</File>
+ </Files>
+ <Files>
<File>
<FileName>dns.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\components\net\lwip\src\core\dns.c</FilePath>
+ <FilePath>../../components/net/lwip-1.4.1/src/core/dns.c</FilePath>
</File>
+ </Files>
+ <Files>
<File>
<FileName>init.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\components\net\lwip\src\core\init.c</FilePath>
+ <FilePath>../../components/net/lwip-1.4.1/src/core/init.c</FilePath>
</File>
+ </Files>
+ <Files>
<File>
<FileName>memp.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\components\net\lwip\src\core\memp.c</FilePath>
+ <FilePath>../../components/net/lwip-1.4.1/src/core/memp.c</FilePath>
</File>
+ </Files>
+ <Files>
<File>
<FileName>netif.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\components\net\lwip\src\core\netif.c</FilePath>
+ <FilePath>../../components/net/lwip-1.4.1/src/core/netif.c</FilePath>
</File>
+ </Files>
+ <Files>
<File>
<FileName>pbuf.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\components\net\lwip\src\core\pbuf.c</FilePath>
+ <FilePath>../../components/net/lwip-1.4.1/src/core/pbuf.c</FilePath>
</File>
+ </Files>
+ <Files>
<File>
<FileName>raw.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\components\net\lwip\src\core\raw.c</FilePath>
+ <FilePath>../../components/net/lwip-1.4.1/src/core/raw.c</FilePath>
</File>
+ </Files>
+ <Files>
<File>
<FileName>stats.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\components\net\lwip\src\core\stats.c</FilePath>
+ <FilePath>../../components/net/lwip-1.4.1/src/core/stats.c</FilePath>
</File>
+ </Files>
+ <Files>
<File>
<FileName>sys.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\components\net\lwip\src\core\sys.c</FilePath>
+ <FilePath>../../components/net/lwip-1.4.1/src/core/sys.c</FilePath>
</File>
+ </Files>
+ <Files>
<File>
<FileName>tcp.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\components\net\lwip\src\core\tcp.c</FilePath>
+ <FilePath>../../components/net/lwip-1.4.1/src/core/tcp.c</FilePath>
</File>
+ </Files>
+ <Files>
<File>
<FileName>tcp_in.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\components\net\lwip\src\core\tcp_in.c</FilePath>
+ <FilePath>../../components/net/lwip-1.4.1/src/core/tcp_in.c</FilePath>
</File>
+ </Files>
+ <Files>
<File>
<FileName>tcp_out.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\components\net\lwip\src\core\tcp_out.c</FilePath>
+ <FilePath>../../components/net/lwip-1.4.1/src/core/tcp_out.c</FilePath>
</File>
+ </Files>
+ <Files>
<File>
<FileName>timers.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\components\net\lwip\src\core\timers.c</FilePath>
+ <FilePath>../../components/net/lwip-1.4.1/src/core/timers.c</FilePath>
</File>
+ </Files>
+ <Files>
<File>
<FileName>udp.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\components\net\lwip\src\core\udp.c</FilePath>
+ <FilePath>../../components/net/lwip-1.4.1/src/core/udp.c</FilePath>
</File>
+ </Files>
+ <Files>
<File>
<FileName>autoip.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\components\net\lwip\src\core\ipv4\autoip.c</FilePath>
+ <FilePath>../../components/net/lwip-1.4.1/src/core/ipv4/autoip.c</FilePath>
</File>
+ </Files>
+ <Files>
<File>
<FileName>icmp.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\components\net\lwip\src\core\ipv4\icmp.c</FilePath>
+ <FilePath>../../components/net/lwip-1.4.1/src/core/ipv4/icmp.c</FilePath>
</File>
+ </Files>
+ <Files>
<File>
<FileName>igmp.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\components\net\lwip\src\core\ipv4\igmp.c</FilePath>
+ <FilePath>../../components/net/lwip-1.4.1/src/core/ipv4/igmp.c</FilePath>
</File>
+ </Files>
+ <Files>
<File>
<FileName>inet.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\components\net\lwip\src\core\ipv4\inet.c</FilePath>
+ <FilePath>../../components/net/lwip-1.4.1/src/core/ipv4/inet.c</FilePath>
</File>
+ </Files>
+ <Files>
<File>
<FileName>inet_chksum.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\components\net\lwip\src\core\ipv4\inet_chksum.c</FilePath>
+ <FilePath>../../components/net/lwip-1.4.1/src/core/ipv4/inet_chksum.c</FilePath>
</File>
+ </Files>
+ <Files>
<File>
<FileName>ip.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\components\net\lwip\src\core\ipv4\ip.c</FilePath>
+ <FilePath>../../components/net/lwip-1.4.1/src/core/ipv4/ip.c</FilePath>
</File>
+ </Files>
+ <Files>
<File>
<FileName>ip_addr.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\components\net\lwip\src\core\ipv4\ip_addr.c</FilePath>
+ <FilePath>../../components/net/lwip-1.4.1/src/core/ipv4/ip_addr.c</FilePath>
</File>
+ </Files>
+ <Files>
<File>
<FileName>ip_frag.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\components\net\lwip\src\core\ipv4\ip_frag.c</FilePath>
+ <FilePath>../../components/net/lwip-1.4.1/src/core/ipv4/ip_frag.c</FilePath>
</File>
+ </Files>
+ <Files>
<File>
<FileName>etharp.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\components\net\lwip\src\netif\etharp.c</FilePath>
+ <FilePath>../../components/net/lwip-1.4.1/src/netif/etharp.c</FilePath>
</File>
+ </Files>
+ <Files>
<File>
<FileName>ethernetif.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\components\net\lwip\src\netif\ethernetif.c</FilePath>
+ <FilePath>../../components/net/lwip-1.4.1/src/netif/ethernetif.c</FilePath>
</File>
+ </Files>
+ <Files>
<File>
<FileName>slipif.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\components\net\lwip\src\netif\slipif.c</FilePath>
+ <FilePath>../../components/net/lwip-1.4.1/src/netif/slipif.c</FilePath>
+ </File>
+ </Files>
+ </Group>
+ <Group>
+ <GroupName>Filesystem</GroupName>
+ <Files>
+ <File>
+ <FileName>dfs.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../../components/dfs/src/dfs.c</FilePath>
+ </File>
+ </Files>
+ <Files>
+ <File>
+ <FileName>dfs_file.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../../components/dfs/src/dfs_file.c</FilePath>
+ </File>
+ </Files>
+ <Files>
+ <File>
+ <FileName>dfs_fs.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../../components/dfs/src/dfs_fs.c</FilePath>
+ </File>
+ </Files>
+ <Files>
+ <File>
+ <FileName>dfs_posix.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../../components/dfs/src/dfs_posix.c</FilePath>
+ </File>
+ </Files>
+ <Files>
+ <File>
+ <FileName>dfs_elm.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../../components/dfs/filesystems/elmfat/dfs_elm.c</FilePath>
+ </File>
+ </Files>
+ <Files>
+ <File>
+ <FileName>ff.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../../components/dfs/filesystems/elmfat/ff.c</FilePath>
</File>
</Files>
</Group>
</Groups>
</Target>
</Targets>
-
</Project>
diff --git a/bsp/stm32f10x/applications/canapp.c b/bsp/stm32f10x/applications/canapp.c
new file mode 100644
index 0000000000..01ca1c9cbb
--- /dev/null
+++ b/bsp/stm32f10x/applications/canapp.c
@@ -0,0 +1,145 @@
+/*
+ * File : canapp.c
+ * This file is part of RT-Thread RTOS
+ * COPYRIGHT (C) 2006, 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
+ * 2015-05-14 [email protected] first version
+ */
+
+#ifdef RT_USING_CAN
+#include <board.h>
+#include <rtthread.h>
+#include <rtdevice.h>
+struct can_app_struct
+{
+ const char* name;
+ struct rt_event event;
+ struct rt_can_filter_config * filter;
+ rt_uint8_t eventopt;
+};
+static struct can_app_struct can_data[2];
+static rt_err_t can1ind(rt_device_t dev, void* args, rt_int32_t hdr, rt_size_t size)
+{
+ rt_event_t pevent = (rt_event_t)args;
+ rt_event_send(pevent, 1 << (hdr));
+ return RT_EOK;
+}
+static rt_err_t can2ind(rt_device_t dev, void* args, rt_int32_t hdr, rt_size_t size)
+{
+ rt_event_t pevent = (rt_event_t)args;
+ rt_event_send(pevent, 1 << (hdr));
+ return RT_EOK;
+}
+struct rt_can_filter_item filter1item[4] =
+{
+ RT_CAN_FILTER_STD_INIT(1,can1ind,&can_data[0].event),
+ RT_CAN_FILTER_STD_INIT(2,can1ind,&can_data[0].event),
+ RT_CAN_STD_RMT_FILTER_INIT(3,can1ind,&can_data[0].event),
+ RT_CAN_STD_RMT_DATA_FILTER_INIT(4,can1ind,&can_data[0].event),
+};
+struct rt_can_filter_item filter2item[4] =
+{
+ RT_CAN_FILTER_STD_INIT(1,can2ind,&can_data[1].event),
+ RT_CAN_FILTER_STD_INIT(2,can2ind,&can_data[1].event),
+ RT_CAN_STD_RMT_FILTER_INIT(3,can2ind,&can_data[1].event),
+ RT_CAN_STD_RMT_DATA_FILTER_INIT(4,can2ind,&can_data[1].event),
+};
+struct rt_can_filter_config filter1 =
+{
+ .count = 4,
+ .actived = 1,
+ .items = filter1item,
+};
+struct rt_can_filter_config filter2 =
+{
+ .count = 4,
+ .actived = 1,
+ .items = filter2item,
+};
+static struct can_app_struct can_data[2] = {
+ {
+ .name = "bxcan1",
+ .filter = &filter1,
+ .eventopt = RT_EVENT_FLAG_OR | RT_EVENT_FLAG_CLEAR,
+ },
+ {
+ .name = "bxcan2",
+ .filter = &filter2,
+ .eventopt = RT_EVENT_FLAG_AND | RT_EVENT_FLAG_CLEAR,
+ },
+};
+void rt_can_thread_entry(void* parameter)
+{
+ struct rt_can_msg msg;
+ struct can_app_struct* canpara = (struct can_app_struct*) parameter;
+ rt_device_t candev;
+ rt_uint32_t e;
+
+ candev = rt_device_find(canpara->name);
+ RT_ASSERT(candev);
+ rt_event_init(&canpara->event, canpara->name, RT_IPC_FLAG_FIFO);
+ rt_device_open(candev, (RT_DEVICE_OFLAG_RDWR | RT_DEVICE_FLAG_INT_RX | RT_DEVICE_FLAG_INT_TX));
+ rt_device_control(candev,RT_CAN_CMD_SET_FILTER,canpara->filter);
+ while(1) {
+ if (
+ rt_event_recv(&canpara->event,
+ ((1 << canpara->filter->items[0].hdr) |
+ (1 << canpara->filter->items[1].hdr) |
+ (1 << canpara->filter->items[2].hdr) |
+ (1 << canpara->filter->items[3].hdr)),
+ canpara->eventopt,
+ RT_WAITING_FOREVER, &e) != RT_EOK
+ ) {
+ continue;
+ }
+ if(e & (1 << canpara->filter->items[0].hdr)) {
+ msg.hdr = canpara->filter->items[0].hdr;
+ while (rt_device_read(candev, 0, &msg, sizeof(msg)) == sizeof(msg)) {
+ rt_device_write(candev, 0, &msg, sizeof(msg));
+ }
+ }
+ if(e & (1 << canpara->filter->items[1].hdr)) {
+ msg.hdr = canpara->filter->items[1].hdr;
+ while (rt_device_read(candev, 0, &msg, sizeof(msg)) == sizeof(msg)) {
+ rt_device_write(candev, 0, &msg, sizeof(msg));
+ }
+ }
+ if(e & (1 << canpara->filter->items[2].hdr)) {
+ msg.hdr = canpara->filter->items[2].hdr;
+ while (rt_device_read(candev, 0, &msg, sizeof(msg)) == sizeof(msg)) {
+ rt_device_write(candev, 0, &msg, sizeof(msg));
+ }
+ }
+ if(e & (1 << canpara->filter->items[3].hdr)) {
+ msg.hdr = canpara->filter->items[3].hdr;
+ while (rt_device_read(candev, 0, &msg, sizeof(msg)) == sizeof(msg)) {
+ rt_device_write(candev, 0, &msg, sizeof(msg));
+ }
+ }
+ }
+}
+int rt_can_app_init(void)
+{
+ rt_thread_t tid;
+
+ tid = rt_thread_create("canapp1",
+ rt_can_thread_entry, &can_data[0],
+ 512, RT_THREAD_PRIORITY_MAX /3 - 1, 20);
+ if (tid != RT_NULL) rt_thread_startup(tid);
+
+ tid = rt_thread_create("canapp2",
+ rt_can_thread_entry, &can_data[1],
+ 512, RT_THREAD_PRIORITY_MAX /3 - 1, 20);
+ if (tid != RT_NULL) rt_thread_startup(tid);
+
+ return 0;
+}
+
+INIT_APP_EXPORT(rt_can_app_init);
+#endif /*RT_USING_CAN*/
diff --git a/bsp/stm32f10x/drivers/bxcan.c b/bsp/stm32f10x/drivers/bxcan.c
new file mode 100644
index 0000000000..a21f9f1c4d
--- /dev/null
+++ b/bsp/stm32f10x/drivers/bxcan.c
@@ -0,0 +1,1412 @@
+/*
+ * File : bxcan.c
+ * This file is part of RT-Thread RTOS
+ * COPYRIGHT (C) 2015, 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
+ * 2015-05-14 [email protected] first version
+ */
+#include <rthw.h>
+#include <rtdevice.h>
+#include <board.h>
+#include <bxcan.h>
+#ifdef RT_USING_COMPONENTS_INIT
+#include <init/components.h>
+#endif
+#ifdef RT_USING_CAN
+
+#ifndef STM32F10X_CL
+#define BX_CAN_FMRNUMBER 14
+#define BX_CAN2_FMRSTART 7
+#else
+#define BX_CAN_FMRNUMBER 28
+#define BX_CAN2_FMRSTART 14
+#endif
+
+#define BX_CAN_MAX_FILTERS (BX_CAN_FMRNUMBER * 4)
+#define BX_CAN_MAX_FILTER_MASKS BX_CAN_MAX_FILTERS
+#define BX_CAN_FILTER_MAX_ARRAY_SIZE ((BX_CAN_MAX_FILTERS + 32 - 1) / 32)
+
+struct stm_bxcanfiltermap {
+ rt_uint32_t id32mask_cnt;
+ rt_uint32_t id32bit_cnt;
+ rt_uint32_t id16mask_cnt;
+ rt_uint32_t id16bit_cnt;
+};
+struct stm_bxcanfilter_masks {
+ rt_uint32_t id32maskm[BX_CAN_FILTER_MAX_ARRAY_SIZE];
+ rt_uint32_t id32bitm[BX_CAN_FILTER_MAX_ARRAY_SIZE];
+ rt_uint32_t id16maskm[BX_CAN_FILTER_MAX_ARRAY_SIZE];
+ rt_uint32_t id16bitm[BX_CAN_FILTER_MAX_ARRAY_SIZE];
+ rt_uint32_t id32maskshift[2];
+ rt_uint32_t id32bitshift[2];
+ rt_uint32_t id16maskshift[2];
+ rt_uint32_t id16bitshift[2];
+};
+struct stm_bxcan
+{
+ CAN_TypeDef* reg;
+ void* mfrbase;
+ IRQn_Type sndirq;
+ IRQn_Type rcvirq0;
+ IRQn_Type rcvirq1;
+ IRQn_Type errirq;
+ struct stm_bxcanfilter_masks filtermask;
+ rt_uint32_t alocmask[BX_CAN_FILTER_MAX_ARRAY_SIZE];
+ const rt_uint32_t filtercnt;
+ const rt_uint32_t fifo1filteroff;
+ const struct stm_bxcanfiltermap filtermap[2];
+};
+static void calcfiltermasks(struct stm_bxcan *pbxcan);
+static void bxcan1_filter_init(struct rt_can_device *can)
+{
+ rt_uint32_t i;
+ rt_uint32_t mask;
+ struct stm_bxcan *pbxcan = (struct stm_bxcan *) can->parent.user_data;
+ for(i = 0; i < BX_CAN2_FMRSTART; i++) {
+ CAN1->FMR |= FMR_FINIT;
+ mask = 0x01 << (i + 0);
+ if(i < pbxcan->fifo1filteroff) {
+ if(pbxcan->filtermap[0].id32mask_cnt && i < pbxcan->filtermap[0].id32mask_cnt) {
+ CAN1->FS1R |= mask;
+ CAN1->FM1R &= ~mask;
+ CAN1->FFA1R &= ~mask;
+ } else if(pbxcan->filtermap[0].id32bit_cnt &&
+ i < pbxcan->filtermap[0].id32mask_cnt + pbxcan->filtermap[0].id32bit_cnt /2) {
+ CAN1->FS1R |= mask;
+ CAN1->FM1R |= mask;
+ CAN1->FFA1R &= ~mask;
+ } else if(pbxcan->filtermap[0].id16mask_cnt &&
+ i < pbxcan->filtermap[0].id32mask_cnt + pbxcan->filtermap[0].id32bit_cnt /2
+ + pbxcan->filtermap[0].id16mask_cnt /2) {
+ CAN1->FS1R &= ~mask;
+ CAN1->FM1R &= ~mask;
+ CAN1->FFA1R &= ~mask;
+ } else if(pbxcan->filtermap[0].id16bit_cnt &&
+ i < pbxcan->filtermap[0].id32mask_cnt + pbxcan->filtermap[0].id32bit_cnt /2
+ + pbxcan->filtermap[0].id16mask_cnt /2 + pbxcan->filtermap[0].id16bit_cnt / 4
+ ) {
+ CAN1->FS1R &= ~mask;
+ CAN1->FM1R |= mask;
+ CAN1->FFA1R &= ~mask;
+ }
+ } else {
+ if(pbxcan->filtermap[1].id32mask_cnt &&
+ i < pbxcan->filtermap[1].id32mask_cnt + pbxcan->fifo1filteroff) {
+ CAN1->FS1R |= mask;
+ CAN1->FM1R &= ~mask;
+ CAN1->FFA1R |= mask;
+ } else if(pbxcan->filtermap[1].id32bit_cnt &&
+ i < pbxcan->filtermap[1].id32mask_cnt + pbxcan->filtermap[1].id32bit_cnt /2
+ + pbxcan->fifo1filteroff) {
+ CAN1->FS1R |= mask;
+ CAN1->FM1R |= mask;
+ CAN1->FFA1R |= mask;
+ } else if(pbxcan->filtermap[1].id16mask_cnt &&
+ i < pbxcan->filtermap[1].id32mask_cnt + pbxcan->filtermap[1].id32bit_cnt /2
+ + pbxcan->filtermap[1].id16mask_cnt / 2 + pbxcan->fifo1filteroff) {
+ CAN1->FS1R &= ~mask;
+ CAN1->FM1R &= ~mask;
+ CAN1->FFA1R |= mask;
+ } else if(pbxcan->filtermap[1].id16bit_cnt &&
+ i < pbxcan->filtermap[1].id32mask_cnt + pbxcan->filtermap[1].id32bit_cnt /2
+ + pbxcan->filtermap[1].id16mask_cnt /2 + pbxcan->filtermap[1].id16bit_cnt / 4
+ + pbxcan->fifo1filteroff) {
+ CAN1->FS1R &= ~mask;
+ CAN1->FM1R |= mask;
+ CAN1->FFA1R |= mask;
+ }
+ }
+ CAN1->sFilterRegister[i].FR1 = 0xFFFFFFFF;
+ CAN1->sFilterRegister[i].FR2 = 0xFFFFFFFF;
+ CAN1->FMR &= ~FMR_FINIT;
+ }
+ calcfiltermasks(pbxcan);
+}
+static void bxcan2_filter_init(struct rt_can_device *can)
+{
+ rt_uint32_t i;
+ rt_uint32_t off;
+ rt_uint32_t mask;
+ CAN_SlaveStartBank(BX_CAN2_FMRSTART);
+ struct stm_bxcan *pbxcan = (struct stm_bxcan *) can->parent.user_data;
+ for(i = BX_CAN2_FMRSTART; i < BX_CAN_FMRNUMBER; i++) {
+ CAN1->FMR |= FMR_FINIT;
+ mask = 0x01 << (i + 0);
+ off = i - BX_CAN2_FMRSTART;
+ if(i < pbxcan->fifo1filteroff) {
+ if(pbxcan->filtermap[0].id32mask_cnt && off < pbxcan->filtermap[0].id32mask_cnt) {
+ CAN1->FS1R |= mask;
+ CAN1->FM1R &= ~mask;
+ CAN1->FFA1R &= ~mask;
+ } else if(pbxcan->filtermap[0].id32bit_cnt &&
+ off < pbxcan->filtermap[0].id32mask_cnt + pbxcan->filtermap[0].id32bit_cnt /2) {
+ CAN1->FS1R |= mask;
+ CAN1->FM1R |= mask;
+ CAN1->FFA1R &= ~mask;
+ } else if(pbxcan->filtermap[0].id16mask_cnt &&
+ off < pbxcan->filtermap[0].id32mask_cnt + pbxcan->filtermap[0].id32bit_cnt /2
+ + pbxcan->filtermap[0].id16mask_cnt /2) {
+ CAN1->FS1R &= ~mask;
+ CAN1->FM1R &= ~mask;
+ CAN1->FFA1R &= ~mask;
+ } else if(pbxcan->filtermap[0].id16bit_cnt &&
+ off < pbxcan->filtermap[0].id32mask_cnt + pbxcan->filtermap[0].id32bit_cnt /2
+ + pbxcan->filtermap[0].id16mask_cnt /2 + pbxcan->filtermap[0].id16bit_cnt / 4
+ ) {
+ CAN1->FS1R &= ~mask;
+ CAN1->FM1R |= mask;
+ CAN1->FFA1R &= ~mask;
+ }
+ } else {
+ if(pbxcan->filtermap[1].id32mask_cnt &&
+ off < pbxcan->filtermap[1].id32mask_cnt + pbxcan->fifo1filteroff) {
+ CAN1->FS1R |= mask;
+ CAN1->FM1R &= ~mask;
+ CAN1->FFA1R |= mask;
+ } else if(pbxcan->filtermap[1].id32bit_cnt &&
+ off < pbxcan->filtermap[1].id32mask_cnt + pbxcan->filtermap[1].id32bit_cnt /2
+ + pbxcan->fifo1filteroff) {
+ CAN1->FS1R |= mask;
+ CAN1->FM1R |= mask;
+ CAN1->FFA1R |= mask;
+ } else if(pbxcan->filtermap[1].id16mask_cnt &&
+ off < pbxcan->filtermap[1].id32mask_cnt + pbxcan->filtermap[1].id32bit_cnt /2
+ + pbxcan->filtermap[1].id16mask_cnt / 2 + pbxcan->fifo1filteroff) {
+ CAN1->FS1R &= ~mask;
+ CAN1->FM1R &= ~mask;
+ CAN1->FFA1R |= mask;
+ } else if(pbxcan->filtermap[1].id16bit_cnt &&
+ off < pbxcan->filtermap[1].id32mask_cnt + pbxcan->filtermap[1].id32bit_cnt /2
+ + pbxcan->filtermap[1].id16mask_cnt /2 + pbxcan->filtermap[1].id16bit_cnt / 4
+ + pbxcan->fifo1filteroff) {
+ CAN1->FS1R &= ~mask;
+ CAN1->FM1R |= mask;
+ CAN1->FFA1R |= mask;
+ }
+ }
+ CAN1->sFilterRegister[i].FR1 = 0xFFFFFFFF;
+ CAN1->sFilterRegister[i].FR2 = 0xFFFFFFFF;
+ CAN1->FMR &= ~FMR_FINIT;
+ }
+ calcfiltermasks(pbxcan);
+}
+#define BS1SHIFT 16
+#define BS2SHIFT 20
+#define RRESCLSHIFT 0
+#define SJWSHIFT 24
+#define BS1MASK ( (0x0F) << BS1SHIFT )
+#define BS2MASK ( (0x07) << BS2SHIFT )
+#define RRESCLMASK ( 0x3FF << RRESCLSHIFT )
+#define SJWMASK ( 0x3 << SJWSHIFT )
+
+#define MK_BKCAN_BAUD(SJW,BS1,BS2,PRES) \
+ ((SJW << SJWSHIFT) | (BS1 << BS1SHIFT) | (BS2 << BS2SHIFT) | (PRES << RRESCLSHIFT))
+
+static const rt_uint32_t bxcan_baud_rate_tab[] =
+{
+ // 48 M
+ MK_BKCAN_BAUD(CAN_SJW_2tq,CAN_BS1_12tq,CAN_BS2_3tq,3),
+ MK_BKCAN_BAUD(CAN_SJW_2tq,CAN_BS1_6tq,CAN_BS2_3tq,6),
+ MK_BKCAN_BAUD(CAN_SJW_2tq,CAN_BS1_12tq,CAN_BS2_3tq,5),
+ MK_BKCAN_BAUD(CAN_SJW_2tq,CAN_BS1_12tq,CAN_BS2_3tq,11),
+ MK_BKCAN_BAUD(CAN_SJW_2tq,CAN_BS1_12tq,CAN_BS2_3tq,23),
+ MK_BKCAN_BAUD(CAN_SJW_2tq,CAN_BS1_12tq,CAN_BS2_3tq,29),
+ MK_BKCAN_BAUD(CAN_SJW_2tq,CAN_BS1_12tq,CAN_BS2_3tq,59),
+ MK_BKCAN_BAUD(CAN_SJW_2tq,CAN_BS1_14tq,CAN_BS2_3tq,149),
+ MK_BKCAN_BAUD(CAN_SJW_2tq,CAN_BS1_16tq,CAN_BS2_8tq,199),
+};
+
+#define BAUD_DATA(TYPE,NO) \
+ ((bxcan_baud_rate_tab[NO] & TYPE##MASK) >> TYPE##SHIFT)
+
+static void bxcan_init(CAN_TypeDef* pcan, rt_uint32_t baud, rt_uint32_t mode)
+{
+ CAN_InitTypeDef CAN_InitStructure;
+
+ CAN_InitStructure.CAN_TTCM = DISABLE;
+ CAN_InitStructure.CAN_ABOM = ENABLE;
+ CAN_InitStructure.CAN_AWUM = DISABLE;
+ CAN_InitStructure.CAN_NART = DISABLE;
+ CAN_InitStructure.CAN_RFLM = DISABLE;
+ CAN_InitStructure.CAN_TXFP = ENABLE;
+ switch(mode)
+ {
+ case RT_CAN_MODE_NORMAL:
+ CAN_InitStructure.CAN_Mode = CAN_Mode_Normal;
+ break;
+ case RT_CAN_MODE_LISEN:
+ CAN_InitStructure.CAN_Mode = CAN_Mode_Silent;
+ break;
+ case RT_CAN_MODE_LOOPBACK:
+ CAN_InitStructure.CAN_Mode = CAN_Mode_LoopBack;
+ break;
+ case RT_CAN_MODE_LOOPBACKANLISEN:
+ CAN_InitStructure.CAN_Mode = CAN_Mode_Silent_LoopBack;
+ break;
+ }
+ CAN_InitStructure.CAN_SJW = BAUD_DATA(SJW,baud);
+ CAN_InitStructure.CAN_BS1 = BAUD_DATA(BS1,baud);
+ CAN_InitStructure.CAN_BS2 = BAUD_DATA(BS2,baud);
+ CAN_InitStructure.CAN_Prescaler =BAUD_DATA(RRESCL,baud);
+
+ CAN_Init(pcan, &CAN_InitStructure);
+}
+static void bxcan1_hw_init(void)
+{
+ GPIO_InitTypeDef GPIO_InitStructure;
+ NVIC_InitTypeDef NVIC_InitStructure;
+
+ RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO | RCC_APB2Periph_GPIOA, ENABLE);
+
+ GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11;
+ GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
+ GPIO_Init(GPIOA, &GPIO_InitStructure);
+
+ GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12;
+ GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
+ GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
+ GPIO_Init(GPIOA, &GPIO_InitStructure);
+
+ RCC_APB1PeriphClockCmd(RCC_APB1Periph_CAN1 , ENABLE);
+
+ CAN_DeInit(CAN1);
+ NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);
+ NVIC_InitStructure.NVIC_IRQChannel = CAN1_RX0_IRQn;
+ NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x1;
+ NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x0;
+ NVIC_InitStructure.NVIC_IRQChannelCmd = DISABLE;
+ NVIC_Init(&NVIC_InitStructure);
+ NVIC_InitStructure.NVIC_IRQChannel = CAN1_RX1_IRQn;
+ NVIC_Init(&NVIC_InitStructure);
+ NVIC_InitStructure.NVIC_IRQChannel = CAN1_TX_IRQn;
+ NVIC_Init(&NVIC_InitStructure);
+}
+static void bxcan2_hw_init(void)
+{
+ GPIO_InitTypeDef GPIO_InitStructure;
+ NVIC_InitTypeDef NVIC_InitStructure;
+
+ RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO | RCC_APB2Periph_GPIOB, ENABLE);
+
+ GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
+ GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12;
+ GPIO_Init(GPIOB, &GPIO_InitStructure);
+
+ GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13;
+ GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
+ GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
+ GPIO_Init(GPIOB, &GPIO_InitStructure);
+
+ RCC_APB1PeriphClockCmd(RCC_APB1Periph_CAN2, ENABLE);
+
+ CAN_DeInit(CAN2);
+
+ NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);
+ NVIC_InitStructure.NVIC_IRQChannel = CAN2_RX0_IRQn;
+ NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x1;
+ NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x0;
+ NVIC_InitStructure.NVIC_IRQChannelCmd = DISABLE;
+ NVIC_Init(&NVIC_InitStructure);
+ NVIC_InitStructure.NVIC_IRQChannel = CAN2_RX1_IRQn;
+ NVIC_Init(&NVIC_InitStructure);
+ NVIC_InitStructure.NVIC_IRQChannel = CAN2_TX_IRQn;
+ NVIC_Init(&NVIC_InitStructure);
+}
+static inline rt_err_t bxcan_enter_init(CAN_TypeDef* pcan)
+{
+ uint32_t wait_ack = 0x00000000;
+
+ pcan->MCR |= CAN_MCR_INRQ ;
+
+ while (((pcan->MSR & CAN_MSR_INAK) != CAN_MSR_INAK) && (wait_ack != INAK_TIMEOUT))
+ {
+ wait_ack++;
+ }
+ if ((pcan->MSR & CAN_MSR_INAK) != CAN_MSR_INAK)
+ {
+ return RT_ERROR;
+ }
+ return RT_EOK;
+}
+static inline rt_err_t bxcan_exit_init(CAN_TypeDef* pcan)
+{
+ uint32_t wait_ack = 0x00000000;
+
+ pcan->MCR &= ~(uint32_t)CAN_MCR_INRQ;
+
+ while (((pcan->MSR & CAN_MSR_INAK) == CAN_MSR_INAK) && (wait_ack != INAK_TIMEOUT))
+ {
+ wait_ack++;
+ }
+ if ((pcan->MSR & CAN_MSR_INAK) != CAN_MSR_INAK)
+ {
+ return RT_ERROR;
+ }
+ return RT_EOK;
+}
+static rt_err_t bxcan_set_mode(CAN_TypeDef* pcan, rt_uint32_t mode)
+{
+ if(bxcan_enter_init(pcan) != RT_EOK)
+ {
+ return RT_ERROR;
+ }
+ pcan->BTR &= ~(uint32_t)((uint32_t)0x03 << 30);
+ switch(mode)
+ {
+ case RT_CAN_MODE_NORMAL:
+ mode = CAN_Mode_Normal;
+ break;
+ case RT_CAN_MODE_LISEN:
+ mode = CAN_Mode_Silent;
+ break;
+ case RT_CAN_MODE_LOOPBACK:
+ mode = CAN_Mode_LoopBack;
+ break;
+ case RT_CAN_MODE_LOOPBACKANLISEN:
+ mode = CAN_Mode_Silent_LoopBack;
+ break;
+ }
+ pcan->BTR |= ~(uint32_t)(mode << 30);
+ if(bxcan_exit_init(pcan) != RT_EOK)
+ {
+ return RT_ERROR;
+ }
+ return RT_EOK;
+}
+static rt_err_t bxcan_set_privmode(CAN_TypeDef* pcan, rt_uint32_t mode)
+{
+ if(bxcan_enter_init(pcan) != RT_EOK)
+ {
+ return RT_ERROR;
+ }
+ if (mode == ENABLE)
+ {
+ pcan->MCR |= CAN_MCR_TXFP;
+ }
+ else
+ {
+ pcan->MCR &= ~(uint32_t)CAN_MCR_TXFP;
+ }
+ if(bxcan_exit_init(pcan) != RT_EOK)
+ {
+ return RT_ERROR;
+ }
+ return RT_EOK;
+}
+static rt_err_t bxcan_set_baud_rate(CAN_TypeDef* pcan, rt_uint32_t baud)
+{
+ rt_uint32_t mode;
+ if(bxcan_enter_init(pcan) != RT_EOK)
+ {
+ return RT_ERROR;
+ }
+ pcan->BTR = 0;
+ mode = pcan->BTR & ((rt_uint32_t)0x03 << 30);
+ pcan->BTR = (mode | \
+ ((BAUD_DATA(SJW,baud)) << 24) | \
+ ((BAUD_DATA(BS1,baud)) << 16) | \
+ ((BAUD_DATA(BS2,baud)) << 20) | \
+ (BAUD_DATA(RRESCL,baud)));
+ if(bxcan_exit_init(pcan) != RT_EOK)
+ {
+ return RT_ERROR;
+ }
+ return RT_EOK;
+}
+static rt_err_t bxcancalcbaseoff(struct stm_bxcan *pbxcan, rt_int32_t hdr,
+ rt_int32_t * pbase, rt_int32_t * poff)
+{
+ rt_uint32_t fifo0start,fifo0end;
+ rt_uint32_t fifo1start,fifo1end;
+ rt_uint32_t ptr;
+ fifo0start = 0;
+ fifo0end = pbxcan->filtermap[0].id32mask_cnt
+ + pbxcan->filtermap[0].id32bit_cnt
+ + pbxcan->filtermap[0].id16mask_cnt
+ + pbxcan->filtermap[0].id16bit_cnt ;
+ fifo1start = pbxcan->fifo1filteroff * 4;
+ fifo1end = pbxcan->filtermap[1].id32mask_cnt
+ + pbxcan->filtermap[1].id32bit_cnt
+ + pbxcan->filtermap[1].id16mask_cnt
+ + pbxcan->filtermap[1].id16bit_cnt ;
+ if(hdr >= fifo0start && hdr < fifo0end) {
+ *pbase = 0;
+ ptr = 0;
+ } else if(hdr >= fifo1start && hdr < fifo1end) {
+ *pbase = pbxcan->fifo1filteroff;
+ ptr = 1;
+ } else {
+ return RT_ERROR;
+ }
+ ptr = 0;
+ if(hdr > pbxcan->filtermap[ptr].id32mask_cnt) {
+ hdr -= pbxcan->filtermap[ptr].id32mask_cnt;
+ *pbase += pbxcan->filtermap[ptr].id32mask_cnt;
+ } else {
+ *pbase += hdr;
+ *poff = 0;
+ return RT_EOK;
+ }
+ if(hdr > pbxcan->filtermap[ptr].id32bit_cnt) {
+ hdr -= pbxcan->filtermap[ptr].id32bit_cnt;
+ *pbase += pbxcan->filtermap[ptr].id32bit_cnt / 2;
+ } else {
+ *pbase += hdr / 2;
+ *poff = hdr % 2;
+ return RT_EOK;
+ }
+ if(hdr > pbxcan->filtermap[ptr].id16mask_cnt) {
+ hdr -= pbxcan->filtermap[ptr].id16mask_cnt;
+ *pbase += pbxcan->filtermap[ptr].id16mask_cnt / 2;
+ } else {
+ *pbase += hdr / 2;
+ *poff = hdr % 2;
+ return RT_EOK;
+ }
+ if(hdr > pbxcan->filtermap[ptr].id16bit_cnt) {
+ return RT_ERROR;
+ } else {
+ *pbase += hdr / 4;
+ *poff = hdr % 4;
+ return RT_EOK;
+ }
+}
+static void calcandormask(rt_uint32_t* pmask,rt_uint32_t shift,rt_int32_t count)
+{
+ rt_uint32_t tmpmask;
+ rt_uint32_t tmpmaskarray[BX_CAN_FILTER_MAX_ARRAY_SIZE] = {0,};
+ rt_int32_t i;
+ i = 0;
+ while(count > 0) {
+ if(i >= 32) {
+ tmpmaskarray[i] = 0xFFFFFFFF;
+ } else {
+ tmpmaskarray[i] = (0x01 << count) - 1;
+ }
+ count -= 32;
+ i++;
+ };
+ count = i;
+ for(i = 0; i < count && i < BX_CAN_FILTER_MAX_ARRAY_SIZE; i++) {
+ tmpmask = tmpmaskarray[i];
+ pmask[i] |= (rt_uint32_t)(tmpmask << shift);
+ if(i < BX_CAN_FILTER_MAX_ARRAY_SIZE - 1) {
+ pmask[i + 1] |= (rt_uint32_t)(tmpmask >> (32 - shift));
+ }
+ }
+}
+static void calcfiltermasks(struct stm_bxcan *pbxcan)
+{
+ rt_memset(&pbxcan->filtermask,0,sizeof(pbxcan->filtermask));
+ pbxcan->filtermask.id32maskshift[0] = 0;
+ if(pbxcan->filtermap[0].id32mask_cnt) {
+ calcandormask(pbxcan->filtermask.id32maskm,pbxcan->filtermask.id32maskshift[0],
+ pbxcan->filtermap[0].id32mask_cnt);
+ }
+ pbxcan->filtermask.id32maskshift[1] = pbxcan->fifo1filteroff * 4;
+ if(pbxcan->filtermap[1].id32mask_cnt) {
+ calcandormask(pbxcan->filtermask.id32maskm,pbxcan->filtermask.id32maskshift[1],
+ pbxcan->filtermap[1].id32mask_cnt);
+ }
+ pbxcan->filtermask.id32bitshift[0] = pbxcan->filtermask.id32maskshift[0] +
+ pbxcan->filtermap[0].id32mask_cnt;
+ if(pbxcan->filtermap[0].id32bit_cnt) {
+ calcandormask(pbxcan->filtermask.id32bitm,pbxcan->filtermask.id32bitshift[0],
+ pbxcan->filtermap[0].id32bit_cnt);
+ }
+ pbxcan->filtermask.id32bitshift[1] = pbxcan->filtermask.id32maskshift[1] +
+ pbxcan->filtermap[1].id32mask_cnt;
+ if(pbxcan->filtermap[1].id32bit_cnt) {
+ calcandormask(pbxcan->filtermask.id32bitm,pbxcan->filtermask.id32bitshift[1],
+ pbxcan->filtermap[1].id32bit_cnt);
+ }
+ pbxcan->filtermask.id16maskshift[0] = pbxcan->filtermask.id32bitshift[0] +
+ pbxcan->filtermap[0].id32bit_cnt;
+ if(pbxcan->filtermap[0].id16mask_cnt) {
+ calcandormask(pbxcan->filtermask.id16maskm,pbxcan->filtermask.id16maskshift[0],
+ pbxcan->filtermap[0].id16mask_cnt);
+ }
+ pbxcan->filtermask.id16maskshift[1] = pbxcan->filtermask.id32bitshift[1] +
+ pbxcan->filtermap[1].id32bit_cnt;
+ if(pbxcan->filtermap[1].id16mask_cnt) {
+ calcandormask(pbxcan->filtermask.id16maskm,pbxcan->filtermask.id16maskshift[1],
+ pbxcan->filtermap[1].id16mask_cnt);
+ }
+ pbxcan->filtermask.id16bitshift[0] = pbxcan->filtermask.id16maskshift[0] +
+ pbxcan->filtermap[0].id16mask_cnt;
+ if(pbxcan->filtermap[0].id16bit_cnt) {
+ calcandormask(pbxcan->filtermask.id16bitm,pbxcan->filtermask.id16bitshift[0],
+ pbxcan->filtermap[0].id16bit_cnt);
+ }
+ pbxcan->filtermask.id16bitshift[1] = pbxcan->filtermask.id16maskshift[1] +
+ pbxcan->filtermap[1].id16mask_cnt;
+ if(pbxcan->filtermap[1].id16bit_cnt) {
+ calcandormask(pbxcan->filtermask.id16bitm,pbxcan->filtermask.id16bitshift[1],
+ pbxcan->filtermap[1].id16bit_cnt);
+ }
+}
+static rt_int32_t bxcanfindfilter(struct stm_bxcan *pbxcan,struct rt_can_filter_item* pitem,
+ rt_int32_t type,rt_int32_t* base,rt_int32_t* off)
+{
+ rt_int32_t i;
+ rt_uint32_t bits,thisid,thismask,shift,found;
+ CAN_FilterRegister_TypeDef * pfilterreg;
+ found = 0;
+ switch(type) {
+ case 3:
+ shift = 3;
+ for(i = 0; i < BX_CAN_MAX_FILTERS; i++) {
+ bits = 0x01 << (i & 0x1F);
+ if(bits & (pbxcan->filtermask.id32maskm[i >> 5] & pbxcan->alocmask[i >> 5])) {
+ bxcancalcbaseoff(pbxcan,i,base,off);
+ pfilterreg = &((CAN_FilterRegister_TypeDef *)pbxcan->mfrbase)[*base];
+ thisid = (rt_uint32_t)pitem->id<<shift;
+ thismask = (rt_uint32_t)pitem->mask<<shift;
+ if(pitem->ide) {
+ thisid |= CAN_ID_EXT;
+ thismask |= CAN_ID_EXT;
+ }
+ if(pitem->rtr) {
+ thisid |= CAN_RTR_REMOTE;
+ thismask |= CAN_RTR_REMOTE;
+ }
+ if(pfilterreg->FR1 == thisid && pfilterreg->FR2 == thismask) {
+ found = 1;
+ break;
+ }
+ }
+ }
+ break;
+ case 2:
+ shift = 3;
+ for(i = 0; i < BX_CAN_MAX_FILTERS; i++) {
+ bits = 0x01 << (i % 32);
+ if(bits & (pbxcan->filtermask.id32bitm[i >> 5] & pbxcan->alocmask[i >> 5])) {
+ bxcancalcbaseoff(pbxcan,i,base,off);
+ pfilterreg = &((CAN_FilterRegister_TypeDef *)pbxcan->mfrbase)[*base];
+ thisid = (rt_uint32_t)pitem->id<<shift;
+ if(pitem->ide) {
+ thisid |= CAN_ID_EXT;
+ }
+ if(pitem->rtr) {
+ thisid |= CAN_RTR_REMOTE;
+ }
+ if((off == 0 && pfilterreg->FR1 == thisid) ||
+ (*off == 1 && pfilterreg->FR2 == thisid)
+ ) {
+ found = 1;
+ break;
+ }
+ }
+ }
+ break;
+ case 1:
+ shift = 5;
+ for(i = 0; i < BX_CAN_MAX_FILTERS; i++) {
+ bits = 0x01 << (i % 32);
+ if(bits & (pbxcan->filtermask.id16maskm[i >> 5] & pbxcan->alocmask[i >> 5])) {
+ bxcancalcbaseoff(pbxcan,i,base,off);
+ pfilterreg = &((CAN_FilterRegister_TypeDef *)pbxcan->mfrbase)[*base];
+ thisid = pitem->id << shift;
+ if(pitem->rtr) {
+ thisid |= CAN_RTR_REMOTE << (shift - 2);
+ }
+ thismask = pitem->mask << shift;
+ if(pitem->rtr) {
+ thismask |= CAN_RTR_REMOTE << (shift - 2);
+ }
+ if(*off == 0 && pfilterreg->FR1 == ((thisid & 0x0000FFFF) | ((thismask & 0x0000FFFF) << 16)) ||
+ *off == 1 && pfilterreg->FR2 == ((thisid & 0x0000FFFF) | ((thismask & 0x0000FFFF) << 16))
+ ){
+ found = 1;
+ break;
+ }
+ }
+ }
+ break;
+ case 0:
+ shift = 5;
+ for(i = 0; i < BX_CAN_MAX_FILTERS; i++) {
+ bits = 0x01 << (i % 32);
+ if(bits & (pbxcan->filtermask.id16bitm[i >> 5] & pbxcan->alocmask[i >> 5])) {
+ bxcancalcbaseoff(pbxcan,i,base,off);
+ pfilterreg = &((CAN_FilterRegister_TypeDef *)pbxcan->mfrbase)[*base];
+ thisid = pitem->id << shift;
+ if(pitem->rtr) {
+ thisid |= CAN_RTR_REMOTE << (shift - 2);
+ }
+ if(*off < 2 && ((rt_uint16_t*)&pfilterreg->FR1)[*off & 0x01] == thisid ||
+ *off >= 2 && ((rt_uint16_t*)&pfilterreg->FR2)[*off & 0x01] == thisid) {
+ found = 1;
+ break;
+ }
+ }
+ }
+ break;
+ }
+ if(found) {
+ return i;
+ }
+ return -1;
+}
+extern int __rt_ffs(int value);
+static rt_err_t bxcanallocfilter(rt_uint32_t * pmask, rt_uint32_t * palocmask,
+ rt_uint32_t count, rt_int32_t* hdr)
+{
+ rt_int32_t i;
+ for(i = 0; i < count; i++) {
+ rt_enter_critical();
+ if((pmask[i] & ~palocmask[i]) != 0) {
+ *hdr = __rt_ffs(pmask[i] & ~palocmask[i]) - 1 + i * 32;
+ palocmask[i] |= 0x01 <<(*hdr % 0x1F);
+ rt_exit_critical();
+ return RT_EOK;
+ }
+ rt_exit_critical();
+ }
+ if(i >= count) {
+ return RT_ENOMEM;
+ }
+ return RT_EOK;
+}
+static rt_err_t bxcanallocnewfilter(struct stm_bxcan *pbxcan, rt_int32_t actived,
+ rt_int32_t type, rt_int32_t* hdr, rt_int32_t* base, rt_int32_t* off)
+{
+ rt_err_t res;
+ *hdr = -1;
+ switch(type) {
+ case 0x03:
+ res = bxcanallocfilter(pbxcan->filtermask.id32maskm,pbxcan->alocmask,
+ BX_CAN_FILTER_MAX_ARRAY_SIZE,hdr);
+ break;
+ case 0x02:
+ res = bxcanallocfilter(pbxcan->filtermask.id32bitm,pbxcan->alocmask,
+ BX_CAN_FILTER_MAX_ARRAY_SIZE,hdr);
+ break;
+ case 0x01:
+ res = bxcanallocfilter(pbxcan->filtermask.id16maskm,pbxcan->alocmask,
+ BX_CAN_FILTER_MAX_ARRAY_SIZE,hdr);
+ break;
+ case 0x00:
+ res = bxcanallocfilter(pbxcan->filtermask.id16bitm,pbxcan->alocmask,
+ BX_CAN_FILTER_MAX_ARRAY_SIZE,hdr);
+ break;
+ }
+ if(res != RT_EOK || *hdr < 0) {
+ return RT_ENOMEM;
+ }
+ bxcancalcbaseoff(pbxcan,*hdr,base,off);
+ return RT_EOK;
+}
+static rt_err_t bxmodifyfilter(struct stm_bxcan *pbxcan, struct rt_can_filter_item* pitem, rt_uint32_t actived)
+{
+ rt_int32_t fcase;
+ rt_err_t res;
+ rt_int32_t hdr,fbase,foff;
+
+ fcase = (pitem->mode | (pitem->ide << 1));
+ hdr = bxcanfindfilter(pbxcan,pitem,fcase,&fbase,&foff);
+ if(hdr < 0) {
+ if(!actived) {
+ return RT_EOK;
+ } else if(pitem->hdr == -1) {
+ res = bxcanallocnewfilter(pbxcan,actived,fcase,&hdr,&fbase,&foff);
+ if(res != RT_EOK) {
+ return res;
+ }
+ } else if(pitem->hdr >= 0) {
+ rt_enter_critical();
+ res = bxcancalcbaseoff(pbxcan,pitem->hdr,&fbase,&foff);
+ if(res != RT_EOK) {
+ return res;
+ }
+ hdr = pitem->hdr;
+ if(actived) {
+ pbxcan->alocmask[hdr >> 5] |= 0x01 <<(hdr % 0x1F);
+ }
+ rt_exit_critical();
+ }
+ } else {
+ if(!actived) {
+ pitem->hdr = hdr;
+ } else if(hdr >= 0 && (pitem->hdr >= 0 || pitem->hdr == -1)) {
+ pitem->hdr = hdr;
+ return RT_EBUSY;
+ }
+ }
+ rt_uint32_t ID[2];
+ rt_uint32_t shift;
+ rt_uint32_t thisid;
+ rt_uint32_t thismask;
+ CAN_FilterInitTypeDef CAN_FilterInitStructure;
+
+ pitem->hdr = hdr;
+ CAN_FilterRegister_TypeDef * pfilterreg = &((CAN_FilterRegister_TypeDef *)pbxcan->mfrbase)[fbase];
+ ID[0] = pfilterreg->FR1;
+ ID[1] = pfilterreg->FR2;
+ CAN_FilterInitStructure.CAN_FilterNumber = (pfilterreg - &CAN1->sFilterRegister[0]);
+ if(pitem->mode) {
+ CAN_FilterInitStructure.CAN_FilterMode=CAN_FilterMode_IdMask;
+ } else {
+ CAN_FilterInitStructure.CAN_FilterMode=CAN_FilterMode_IdList;
+ }
+ if(pitem->ide) {
+ CAN_FilterInitStructure.CAN_FilterScale=CAN_FilterScale_32bit;
+ } else {
+ CAN_FilterInitStructure.CAN_FilterScale=CAN_FilterScale_16bit;
+ }
+ switch(fcase) {
+ case 0x03:
+ if(actived) {
+ shift = 3;
+ thisid = (rt_uint32_t)pitem->id<<shift;
+ thismask = (rt_uint32_t)pitem->mask<<shift;
+ if(pitem->ide) {
+ thisid |= CAN_ID_EXT;
+ thismask |= CAN_ID_EXT;
+ }
+ if(pitem->rtr) {
+ thisid |= CAN_RTR_REMOTE;
+ thismask |= CAN_RTR_REMOTE;
+ }
+ ID[0] = thisid;
+ ID[1] = thismask;
+ } else {
+ ID[0] = 0xFFFFFFFF;
+ ID[1] = 0xFFFFFFFF;
+ }
+ break;
+ case 0x02:
+ if(actived) {
+ shift = 3;
+ thisid = (rt_uint32_t)pitem->id<<shift;
+ if(pitem->ide) {
+ thisid |= CAN_ID_EXT;
+ }
+ if(pitem->rtr) {
+ thisid |= CAN_RTR_REMOTE;
+ }
+ ID[foff] = thisid;
+ } else {
+ ID[foff] = 0xFFFFFFFF;
+ }
+ break;
+ case 0x01:
+ if(actived) {
+ shift = 5;
+ thisid = pitem->id << shift;
+ if(pitem->rtr) {
+ thisid |= CAN_RTR_REMOTE << (shift - 2);
+ }
+ thismask = pitem->mask << shift;
+ if(pitem->rtr) {
+ thismask |= CAN_RTR_REMOTE << (shift - 2);
+ }
+ ID[foff] = (thisid & 0x0000FFFF) | ((thismask & 0x0000FFFF) << 16);
+ } else {
+ ID[foff] = 0xFFFFFFFF;
+ }
+ break;
+ case 0x00:
+ if(actived) {
+ shift = 5;
+ thisid = pitem->id << shift;
+ if(pitem->rtr) {
+ thisid |= CAN_RTR_REMOTE << (shift - 2);
+ }
+ ((rt_uint16_t*) ID)[foff] = thisid;
+ } else {
+ ((rt_uint16_t*) ID)[foff] = 0xFFFF;
+ }
+ break;
+ }
+ CAN_FilterInitStructure.CAN_FilterIdHigh = ((ID[1]) & 0x0000FFFF);
+ CAN_FilterInitStructure.CAN_FilterIdLow = ID[0] & 0x0000FFFF;
+ CAN_FilterInitStructure.CAN_FilterMaskIdHigh = (ID[1] & 0xFFFF0000) >> 16;
+ CAN_FilterInitStructure.CAN_FilterMaskIdLow = (ID[0] & 0xFFFF0000) >> 16;
+ if(fbase >= pbxcan->fifo1filteroff) {
+ CAN_FilterInitStructure.CAN_FilterFIFOAssignment = 1;
+ } else {
+ CAN_FilterInitStructure.CAN_FilterFIFOAssignment = 0;
+ }
+ if(ID[0] != 0xFFFFFFFF || ID[1] != 0xFFFFFFFF) {
+ CAN_FilterInitStructure.CAN_FilterActivation=ENABLE;
+ } else {
+ CAN_FilterInitStructure.CAN_FilterActivation=DISABLE;
+ }
+ if(!actived) {
+ rt_enter_critical();
+ pbxcan->alocmask[hdr >> 5] &= ~(0x01 <<(hdr % 0x1F));
+ rt_exit_critical();
+ }
+ CAN_FilterInit(&CAN_FilterInitStructure);
+ return RT_EOK;
+}
+static rt_err_t setfilter(struct stm_bxcan *pbxcan,struct rt_can_filter_config *pconfig)
+{
+ struct rt_can_filter_item* pitem = pconfig->items;
+ rt_uint32_t count = pconfig->count;
+ rt_err_t res;
+ while(count) {
+ res = bxmodifyfilter(pbxcan,pitem,pconfig->actived);
+ if(res != RT_EOK) {
+ return res;
+ }
+ pitem++;
+ count--;
+ }
+ return RT_EOK;
+}
+static rt_err_t configure(struct rt_can_device *can, struct can_configure *cfg)
+{
+ CAN_TypeDef* pbxcan;
+
+ pbxcan = ((struct stm_bxcan *) can->parent.user_data)->reg;
+ assert_param(IS_CAN_ALL_PERIPH(pbxcan));
+ if(pbxcan == CAN1)
+ {
+ bxcan1_hw_init();
+ bxcan_init(pbxcan,cfg->baud_rate,can->config.mode);
+ bxcan1_filter_init(can);
+ } else {
+ bxcan2_hw_init();
+ bxcan_init(pbxcan,cfg->baud_rate,can->config.mode);
+ bxcan2_filter_init(can);
+ }
+ return RT_EOK;
+}
+static rt_err_t control(struct rt_can_device *can, int cmd, void *arg)
+{
+ struct stm_bxcan* pbxcan;
+ rt_uint32_t argval;
+ NVIC_InitTypeDef NVIC_InitStructure;
+
+ pbxcan= (struct stm_bxcan *) can->parent.user_data;
+ assert_param(pbxcan != RT_NULL);
+
+ switch (cmd)
+ {
+ case RT_DEVICE_CTRL_CLR_INT:
+ argval = (rt_uint32_t) arg;
+ if(argval == RT_DEVICE_FLAG_INT_RX)
+ {
+ NVIC_DisableIRQ(pbxcan->rcvirq0);
+ NVIC_DisableIRQ(pbxcan->rcvirq1);
+ CAN_ITConfig(pbxcan->reg,CAN_IT_FMP0 ,DISABLE);
+ CAN_ITConfig(pbxcan->reg,CAN_IT_FF0 ,DISABLE);
+ CAN_ITConfig(pbxcan->reg,CAN_IT_FOV0 ,DISABLE);
+ CAN_ITConfig(pbxcan->reg,CAN_IT_FMP1 ,DISABLE);
+ CAN_ITConfig(pbxcan->reg,CAN_IT_FF1 ,DISABLE);
+ CAN_ITConfig(pbxcan->reg,CAN_IT_FOV1 ,DISABLE);
+ } else if(argval == RT_DEVICE_FLAG_INT_TX)
+ {
+ NVIC_DisableIRQ(pbxcan->sndirq);
+ CAN_ITConfig(pbxcan->reg,CAN_IT_TME,DISABLE);
+ } else if(argval == RT_DEVICE_CAN_INT_ERR) {
+ CAN_ITConfig(pbxcan->reg,CAN_IT_BOF ,DISABLE);
+ CAN_ITConfig(pbxcan->reg,CAN_IT_LEC ,DISABLE);
+ CAN_ITConfig(pbxcan->reg,CAN_IT_ERR ,DISABLE);
+ NVIC_DisableIRQ(pbxcan->errirq);
+ }
+ break;
+ case RT_DEVICE_CTRL_SET_INT:
+ argval = (rt_uint32_t) arg;
+ if(argval == RT_DEVICE_FLAG_INT_RX)
+ {
+ CAN_ITConfig(pbxcan->reg,CAN_IT_FMP0 ,ENABLE);
+ CAN_ITConfig(pbxcan->reg,CAN_IT_FF0 ,ENABLE);
+ CAN_ITConfig(pbxcan->reg,CAN_IT_FOV0 ,ENABLE);
+ CAN_ITConfig(pbxcan->reg,CAN_IT_FMP1 ,ENABLE);
+ CAN_ITConfig(pbxcan->reg,CAN_IT_FF1 ,ENABLE);
+ CAN_ITConfig(pbxcan->reg,CAN_IT_FOV1 ,ENABLE);
+ NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x1;
+ NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x0;
+ NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
+ NVIC_InitStructure.NVIC_IRQChannel = pbxcan->rcvirq0;
+ NVIC_Init(&NVIC_InitStructure);
+ NVIC_InitStructure.NVIC_IRQChannel = pbxcan->rcvirq1;
+ NVIC_Init(&NVIC_InitStructure);
+ } else if(argval == RT_DEVICE_FLAG_INT_TX)
+ {
+ CAN_ITConfig(pbxcan->reg,CAN_IT_TME,ENABLE);
+ NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x1;
+ NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x0;
+ NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
+ NVIC_InitStructure.NVIC_IRQChannel = pbxcan->sndirq;
+ NVIC_Init(&NVIC_InitStructure);
+ } else if(argval == RT_DEVICE_CAN_INT_ERR) {
+ CAN_ITConfig(pbxcan->reg,CAN_IT_BOF ,ENABLE);
+ CAN_ITConfig(pbxcan->reg,CAN_IT_LEC ,ENABLE);
+ CAN_ITConfig(pbxcan->reg,CAN_IT_ERR ,ENABLE);
+ NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x1;
+ NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x0;
+ NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
+ NVIC_InitStructure.NVIC_IRQChannel = pbxcan->errirq;
+ NVIC_Init(&NVIC_InitStructure);
+ }
+ break;
+ case RT_CAN_CMD_SET_FILTER:
+ return setfilter(pbxcan, (struct rt_can_filter_config*) arg);
+ break;
+ case RT_CAN_CMD_SET_MODE:
+ argval = (rt_uint32_t) arg;
+ if(argval != RT_CAN_MODE_NORMAL ||
+ argval != RT_CAN_MODE_LISEN ||
+ argval != RT_CAN_MODE_LOOPBACK ||
+ argval != RT_CAN_MODE_LOOPBACKANLISEN ) {
+ return RT_ERROR;
+ }
+ if(argval != can->config.mode)
+ {
+ can->config.mode = argval;
+ return bxcan_set_mode(pbxcan->reg, argval);
+ }
+ break;
+ case RT_CAN_CMD_SET_BAUD:
+ argval = (rt_uint32_t) arg;
+ if(argval != CAN1MBaud ||
+ argval != CAN800kBaud ||
+ argval != CAN500kBaud ||
+ argval != CAN250kBaud ||
+ argval != CAN125kBaud ||
+ argval != CAN100kBaud ||
+ argval != CAN50kBaud ||
+ argval != CAN20kBaud ||
+ argval != CAN10kBaud ) {
+ return RT_ERROR;
+ }
+ if(argval != can->config.baud_rate)
+ {
+ can->config.baud_rate = argval;
+ return bxcan_set_baud_rate(pbxcan->reg, argval);
+ }
+ break;
+ case RT_CAN_CMD_SET_PRIV:
+ argval = (rt_uint32_t) arg;
+ if(argval != RT_CAN_MODE_PRIV ||
+ argval != RT_CAN_MODE_NOPRIV) {
+ return RT_ERROR;
+ }
+ if(argval != can->config.privmode)
+ {
+ can->config.privmode = argval;
+ return bxcan_set_privmode(pbxcan->reg, argval);
+ }
+ break;
+ case RT_CAN_CMD_GET_STATUS:
+ {
+ rt_uint32_t errtype;
+ errtype = pbxcan->reg->ESR;
+ can->status.rcverrcnt = errtype >> 24;
+ can->status.snderrcnt = (errtype >> 16 & 0xFF);
+ can->status.errcode = errtype & 0x07;
+ if(arg != &can->status) {
+ rt_memcpy(arg,&can->status,sizeof(can->status));
+ }
+ }
+ break;
+ }
+
+ return RT_EOK;
+}
+static int sendmsg(struct rt_can_device *can, const void* buf, rt_uint32_t boxno)
+{
+ CAN_TypeDef* pbxcan;
+ struct rt_can_msg* pmsg = (struct rt_can_msg*) buf;
+
+ pbxcan= ((struct stm_bxcan *) can->parent.user_data)->reg;
+ assert_param(IS_CAN_ALL_PERIPH(pbxcan));
+
+ pbxcan->sTxMailBox[boxno].TIR &= TMIDxR_TXRQ;
+ if (pmsg->ide == RT_CAN_STDID)
+ {
+ assert_param(IS_CAN_STDID(pmsg->id));
+ pbxcan->sTxMailBox[boxno].TIR |= ((pmsg->id << 21) | \
+ pmsg->rtr);
+ }
+ else
+ {
+ assert_param(IS_CAN_EXTID(pmsg->id));
+ pbxcan->sTxMailBox[boxno].TIR |= ((pmsg->id << 3) | \
+ pmsg->ide <<2 | \
+ pmsg->rtr);
+ }
+
+ pmsg->len &= (uint8_t)0x0000000F;
+ pbxcan->sTxMailBox[boxno].TDTR &= (uint32_t)0xFFFFFFF0;
+ pbxcan->sTxMailBox[boxno].TDTR |= pmsg->len;
+
+ pbxcan->sTxMailBox[boxno].TDLR = (((uint32_t)pmsg->data[3] << 24) |
+ ((uint32_t)pmsg->data[2] << 16) |
+ ((uint32_t)pmsg->data[1] << 8) |
+ ((uint32_t)pmsg->data[0]));
+ if(pmsg->len > 4) {
+ pbxcan->sTxMailBox[boxno].TDHR = (((uint32_t)pmsg->data[7] << 24) |
+ ((uint32_t)pmsg->data[6] << 16) |
+ ((uint32_t)pmsg->data[5] << 8) |
+ ((uint32_t)pmsg->data[4]));
+ }
+ pbxcan->sTxMailBox[boxno].TIR |= TMIDxR_TXRQ;
+
+ return RT_EOK;
+}
+static int recvmsg(struct rt_can_device *can, void* buf, rt_uint32_t boxno)
+{
+ CAN_TypeDef* pbxcan;
+ struct rt_can_msg* pmsg = (struct rt_can_msg*) buf;
+
+ pbxcan= ((struct stm_bxcan *) can->parent.user_data)->reg;
+ assert_param(IS_CAN_ALL_PERIPH(pbxcan));
+ assert_param(IS_CAN_FIFO(boxno));
+ pmsg->ide = ((uint8_t)0x04 & pbxcan->sFIFOMailBox[boxno].RIR)>>2;
+ if (pmsg->ide == CAN_Id_Standard)
+ {
+ pmsg->id = (uint32_t)0x000007FF & (pbxcan->sFIFOMailBox[boxno].RIR >> 21);
+ }
+ else
+ {
+ pmsg->id = (uint32_t)0x1FFFFFFF & (pbxcan->sFIFOMailBox[boxno].RIR >> 3);
+ }
+
+ pmsg->rtr = (uint8_t)0x02 & pbxcan->sFIFOMailBox[boxno].RIR;
+ pmsg->len = (uint8_t)0x0F & pbxcan->sFIFOMailBox[boxno].RDTR;
+ pmsg->data[0] = (uint8_t)0xFF & pbxcan->sFIFOMailBox[boxno].RDLR;
+ pmsg->data[1] = (uint8_t)0xFF & (pbxcan->sFIFOMailBox[boxno].RDLR >> 8);
+ pmsg->data[2] = (uint8_t)0xFF & (pbxcan->sFIFOMailBox[boxno].RDLR >> 16);
+ pmsg->data[3] = (uint8_t)0xFF & (pbxcan->sFIFOMailBox[boxno].RDLR >> 24);
+ if(pmsg->len > 4) {
+ pmsg->data[4] = (uint8_t)0xFF & pbxcan->sFIFOMailBox[boxno].RDHR;
+ pmsg->data[5] = (uint8_t)0xFF & (pbxcan->sFIFOMailBox[boxno].RDHR >> 8);
+ pmsg->data[6] = (uint8_t)0xFF & (pbxcan->sFIFOMailBox[boxno].RDHR >> 16);
+ pmsg->data[7] = (uint8_t)0xFF & (pbxcan->sFIFOMailBox[boxno].RDHR >> 24);
+ }
+ pmsg->hdr = (uint8_t)0xFF & (pbxcan->sFIFOMailBox[boxno].RDTR >> 8);
+ if(boxno) pmsg->hdr += ((struct stm_bxcan *) can->parent.user_data)->fifo1filteroff * 4;
+ return RT_EOK;
+}
+
+static const struct rt_can_ops canops =
+{
+ configure,
+ control,
+ sendmsg,
+ recvmsg,
+};
+#ifdef USING_BXCAN1
+#ifdef RT_CAN_USING_LED
+static struct rt_can_led can1rcvled =
+{
+ CANRT1,PIN_MODE_OUTPUT_OD,1,
+};
+static struct rt_can_led can1errled =
+{
+ CANERR1,PIN_MODE_OUTPUT_OD,1,
+};
+#endif
+static struct stm_bxcan bxcan1data =
+{
+ .reg = CAN1,
+ .mfrbase = (void*)&CAN1->sFilterRegister[0],
+ .sndirq = CAN1_TX_IRQn,
+ .rcvirq0 = CAN1_RX0_IRQn,
+ .rcvirq1 = CAN1_RX1_IRQn,
+ .errirq = CAN1_SCE_IRQn,
+ .alocmask = {0,0},
+ .filtercnt = BX_CAN2_FMRSTART,
+ .fifo1filteroff = 7,
+ .filtermap = {
+ [0] = {
+ .id32mask_cnt = 0,
+ .id32bit_cnt = 0,
+ .id16mask_cnt = 2,
+ .id16bit_cnt =24,
+ },
+ [1] = {
+ .id32mask_cnt = 0,
+ .id32bit_cnt = 0,
+ .id16mask_cnt = 2,
+ .id16bit_cnt =24,
+ },
+ },
+};
+struct rt_can_device bxcan1;
+void CAN1_RX0_IRQHandler(void)
+{
+ while(CAN1->RF0R & 0x11)
+ {
+ if ((CAN1->RF0R & CAN_RF0R_FOVR0) != 0)
+ {
+ CAN1->RF0R = CAN_RF0R_FOVR0;
+ rt_hw_can_isr(&bxcan1,RT_CAN_EVENT_RXOF_IND | 0<<8);
+ } else {
+ rt_hw_can_isr(&bxcan1,RT_CAN_EVENT_RX_IND | 0<<8);
+ }
+ CAN1->RF0R |= CAN_RF0R_RFOM0;
+ }
+}
+void CAN1_RX1_IRQHandler(void)
+{
+ while(CAN1->RF1R & 0x11)
+ {
+ if ((CAN1->RF1R & CAN_RF1R_FOVR1) != 0)
+ {
+ CAN1->RF1R = CAN_RF1R_FOVR1;
+ rt_hw_can_isr(&bxcan1,RT_CAN_EVENT_RXOF_IND | 1<<8);
+ } else {
+ rt_hw_can_isr(&bxcan1,RT_CAN_EVENT_RX_IND | 1<<8);
+ }
+ CAN1->RF1R |= CAN_RF1R_RFOM1;
+ }
+}
+void CAN1_TX_IRQHandler(void)
+{
+ rt_uint32_t state;
+ if(CAN1->TSR & (CAN_TSR_RQCP0))
+ {
+ state = CAN1->TSR & (CAN_TSR_RQCP0 | CAN_TSR_TXOK0 | CAN_TSR_TME0);
+ CAN1->TSR |= CAN_TSR_RQCP0;
+ if(state == (CAN_TSR_RQCP0 | CAN_TSR_TXOK0 | CAN_TSR_TME0))
+ {
+ rt_hw_can_isr(&bxcan1,RT_CAN_EVENT_TX_DONE | 0<<8);
+ } else {
+ rt_hw_can_isr(&bxcan1,RT_CAN_EVENT_TX_FAIL | 0<<8);
+ }
+ }
+ if(CAN1->TSR & (CAN_TSR_RQCP1)) {
+ state = CAN1->TSR & (CAN_TSR_RQCP1 | CAN_TSR_TXOK1 | CAN_TSR_TME1);
+ CAN1->TSR |= CAN_TSR_RQCP1;
+ if(state == (CAN_TSR_RQCP1 | CAN_TSR_TXOK1 | CAN_TSR_TME1))
+ {
+ rt_hw_can_isr(&bxcan1,RT_CAN_EVENT_TX_DONE | 1<<8);
+ } else {
+ rt_hw_can_isr(&bxcan1,RT_CAN_EVENT_TX_FAIL | 1<<8);
+ }
+ }
+ if(CAN1->TSR & (CAN_TSR_RQCP2)) {
+ state = CAN1->TSR & (CAN_TSR_RQCP2 | CAN_TSR_TXOK2 | CAN_TSR_TME2);
+ CAN1->TSR |= CAN_TSR_RQCP2;
+ if(state == (CAN_TSR_RQCP2 | CAN_TSR_TXOK2 | CAN_TSR_TME2))
+ {
+ rt_hw_can_isr(&bxcan1,RT_CAN_EVENT_TX_DONE | 2<<8);
+ } else {
+ rt_hw_can_isr(&bxcan1,RT_CAN_EVENT_TX_FAIL | 2<<8);
+ }
+ }
+}
+void CAN1_SCE_IRQHandler(void)
+{
+ rt_uint32_t errtype;
+ errtype = CAN1->ESR;
+ if(errtype & 0x70 && bxcan1.status.lasterrtype == (errtype & 0x70)) {
+ switch((errtype & 0x70)>>4) {
+ case RT_CAN_BUS_BIT_PAD_ERR:
+ bxcan1.status.bitpaderrcnt++;
+ break;
+ case RT_CAN_BUS_FORMAT_ERR:
+ bxcan1.status.formaterrcnt++;
+ break;
+ case RT_CAN_BUS_ACK_ERR:
+ bxcan1.status.ackerrcnt++;
+ break;
+ case RT_CAN_BUS_IMPLICIT_BIT_ERR:
+ case RT_CAN_BUS_EXPLICIT_BIT_ERR:
+ bxcan1.status.biterrcnt++;
+ break;
+ case RT_CAN_BUS_CRC_ERR:
+ bxcan1.status.crcerrcnt++;
+ break;
+ }
+ bxcan1.status.lasterrtype = errtype & 0x70;
+ CAN1->ESR &= ~0x70;
+ }
+ bxcan1.status.rcverrcnt = errtype >> 24;
+ bxcan1.status.snderrcnt = (errtype >> 16 & 0xFF);
+ bxcan1.status.errcode = errtype & 0x07;
+ CAN1->MSR |= CAN_MSR_ERRI;
+}
+#endif /*USING_BXCAN1*/
+
+#ifdef USING_BXCAN2
+#ifdef RT_CAN_USING_LED
+static struct rt_can_led can2rcvled =
+{
+ CANRT2,PIN_MODE_OUTPUT_OD,1,
+};
+static struct rt_can_led can2errled =
+{
+ CANERR2,PIN_MODE_OUTPUT_OD,1,
+};
+#endif
+static struct stm_bxcan bxcan2data =
+{
+ .reg = CAN2,
+ .mfrbase = (void*)&CAN1->sFilterRegister[BX_CAN2_FMRSTART],
+ .sndirq = CAN2_TX_IRQn,
+ .rcvirq0 = CAN2_RX0_IRQn,
+ .rcvirq1 = CAN2_RX1_IRQn,
+ .errirq = CAN2_SCE_IRQn,
+ .alocmask = {0,0},
+ .filtercnt = BX_CAN_FMRNUMBER - BX_CAN2_FMRSTART,
+ .fifo1filteroff = 7,
+ .filtermap = {
+ [0] = {
+ .id32mask_cnt = 0,
+ .id32bit_cnt = 0,
+ .id16mask_cnt = 2,
+ .id16bit_cnt =24,
+ },
+ [1] = {
+ .id32mask_cnt = 0,
+ .id32bit_cnt = 0,
+ .id16mask_cnt = 2,
+ .id16bit_cnt =24,
+ },
+ },
+};
+
+struct rt_can_device bxcan2;
+void CAN2_RX0_IRQHandler(void)
+{
+ while(CAN2->RF0R & 0x11)
+ {
+ if ((CAN2->RF0R & CAN_RF0R_FOVR0) != 0)
+ {
+ CAN2->RF0R = CAN_RF0R_FOVR0;
+ rt_hw_can_isr(&bxcan2,RT_CAN_EVENT_RXOF_IND | 0<<8);
+ } else {
+ rt_hw_can_isr(&bxcan2,RT_CAN_EVENT_RX_IND | 0<<8);
+ }
+ CAN2->RF0R |= CAN_RF0R_RFOM0;
+ }
+}
+void CAN2_RX1_IRQHandler(void)
+{
+ while(CAN2->RF1R & 0x11)
+ {
+ if ((CAN2->RF1R & CAN_RF1R_FOVR1) != 0)
+ {
+ CAN2->RF1R = CAN_RF1R_FOVR1;
+ rt_hw_can_isr(&bxcan2,RT_CAN_EVENT_RXOF_IND | 1<<8);
+ } else {
+ rt_hw_can_isr(&bxcan2,RT_CAN_EVENT_RX_IND | 1<<8);
+ }
+ CAN2->RF1R |= CAN_RF1R_RFOM1;
+ }
+}
+void CAN2_TX_IRQHandler(void)
+{
+ rt_uint32_t state;
+ if(CAN2->TSR & (CAN_TSR_RQCP0))
+ {
+ state = CAN2->TSR & (CAN_TSR_RQCP0 | CAN_TSR_TXOK0 | CAN_TSR_TME0);
+ CAN2->TSR |= CAN_TSR_RQCP0;
+ if(state == (CAN_TSR_RQCP0 | CAN_TSR_TXOK0 | CAN_TSR_TME0))
+ {
+ rt_hw_can_isr(&bxcan2,RT_CAN_EVENT_TX_DONE | 0<<8);
+ } else {
+ rt_hw_can_isr(&bxcan2,RT_CAN_EVENT_TX_FAIL | 0<<8);
+ }
+ }
+ if(CAN2->TSR & (CAN_TSR_RQCP1)) {
+ state = CAN2->TSR & (CAN_TSR_RQCP1 | CAN_TSR_TXOK1 | CAN_TSR_TME1);
+ CAN2->TSR |= CAN_TSR_RQCP1;
+ if(state == (CAN_TSR_RQCP1 | CAN_TSR_TXOK1 | CAN_TSR_TME1))
+ {
+ rt_hw_can_isr(&bxcan2,RT_CAN_EVENT_TX_DONE | 1<<8);
+ } else {
+ rt_hw_can_isr(&bxcan2,RT_CAN_EVENT_TX_FAIL | 1<<8);
+ }
+ }
+ if(CAN2->TSR & (CAN_TSR_RQCP2)) {
+ state = CAN2->TSR & (CAN_TSR_RQCP2 | CAN_TSR_TXOK2 | CAN_TSR_TME2);
+ CAN2->TSR |= CAN_TSR_RQCP2;
+ if(state == (CAN_TSR_RQCP2 | CAN_TSR_TXOK2 | CAN_TSR_TME2))
+ {
+ rt_hw_can_isr(&bxcan2,RT_CAN_EVENT_TX_DONE | 2<<8);
+ } else {
+ rt_hw_can_isr(&bxcan2,RT_CAN_EVENT_TX_FAIL | 2<<8);
+ }
+ }
+}
+void CAN2_SCE_IRQHandler(void)
+{
+ rt_uint32_t errtype;
+ errtype = CAN2->ESR;
+ if(errtype & 0x70 && bxcan2.status.lasterrtype == (errtype & 0x70)) {
+ switch((errtype & 0x70)>>4) {
+ case RT_CAN_BUS_BIT_PAD_ERR:
+ bxcan2.status.bitpaderrcnt++;
+ break;
+ case RT_CAN_BUS_FORMAT_ERR:
+ bxcan2.status.formaterrcnt++;
+ break;
+ case RT_CAN_BUS_ACK_ERR:
+ bxcan2.status.ackerrcnt++;
+ break;
+ case RT_CAN_BUS_IMPLICIT_BIT_ERR:
+ case RT_CAN_BUS_EXPLICIT_BIT_ERR:
+ bxcan2.status.biterrcnt++;
+ break;
+ case RT_CAN_BUS_CRC_ERR:
+ bxcan2.status.crcerrcnt++;
+ break;
+ }
+ bxcan2.status.lasterrtype = errtype & 0x70;
+ CAN2->ESR &= ~0x70;
+ }
+ bxcan2.status.rcverrcnt = errtype >> 24;
+ bxcan2.status.snderrcnt = (errtype >> 16 & 0xFF);
+ bxcan2.status.errcode = errtype & 0x07;
+ CAN2->MSR |= CAN_MSR_ERRI;
+}
+#endif /*USING_BXCAN2*/
+
+int stm32_bxcan_init(void)
+{
+
+#ifdef USING_BXCAN1
+ bxcan1.config.baud_rate=CAN1MBaud;
+ bxcan1.config.msgboxsz=16;
+ bxcan1.config.sndboxnumber=3;
+ bxcan1.config.mode=RT_CAN_MODE_NORMAL;
+ bxcan1.config.privmode=0;
+ #ifdef RT_CAN_USING_LED
+ bxcan1.config.rcvled = &can1rcvled;
+ bxcan1.config.sndled = RT_NULL;
+ bxcan1.config.errled = &can1errled;
+ #endif
+ bxcan1.config.ticks = 50;
+#ifdef RT_CAN_USING_HDR
+ bxcan1.config.maxhdr = BX_CAN2_FMRSTART * 4;
+#endif
+ rt_hw_can_register(&bxcan1, "bxcan1", &canops, &bxcan1data);
+#endif
+
+#ifdef USING_BXCAN2
+ bxcan2.config.baud_rate=CAN1MBaud;
+ bxcan2.config.msgboxsz=16;
+ bxcan2.config.sndboxnumber=3;
+ bxcan2.config.mode=RT_CAN_MODE_NORMAL;
+ bxcan2.config.privmode=0;
+ #ifdef RT_CAN_USING_LED
+ bxcan2.config.rcvled = &can2rcvled;
+ bxcan2.config.sndled = RT_NULL;
+ bxcan2.config.errled = &can2errled;
+ #endif
+ bxcan2.config.ticks = 50;
+#ifdef RT_CAN_USING_HDR
+ bxcan2.config.maxhdr = (BX_CAN_FMRNUMBER - BX_CAN2_FMRSTART) * 4;
+#endif
+ rt_hw_can_register(&bxcan2, "bxcan2", &canops, &bxcan2data);
+#endif
+ return RT_EOK;
+}
+INIT_BOARD_EXPORT(stm32_bxcan_init);
+
+#endif /*RT_USING_CAN2*/
diff --git a/bsp/stm32f10x/drivers/bxcan.h b/bsp/stm32f10x/drivers/bxcan.h
new file mode 100644
index 0000000000..7ef77bde16
--- /dev/null
+++ b/bsp/stm32f10x/drivers/bxcan.h
@@ -0,0 +1,17 @@
+/*
+ * File : bxcan.h
+ * This file is part of RT-Thread RTOS
+ * COPYRIGHT (C) 2015, 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
+ * 2015-05-14 [email protected] first version
+ */
+
+#ifndef BXCAN_H_
+#define BXCAN_H_
+#endif /*BXCAN_H_*/
diff --git a/bsp/stm32f10x/project.Uv2 b/bsp/stm32f10x/project.Uv2
index 05ab3d45a4..24b5acc90b 100644
--- a/bsp/stm32f10x/project.Uv2
+++ b/bsp/stm32f10x/project.Uv2
@@ -3,84 +3,83 @@
Target (RT-Thread STM32), 0x0004 // Tools: 'ARM-ADS'
+Group (STM32_StdPeriph)
Group (Applications)
Group (Drivers)
-Group (STM32_StdPeriph)
Group (Kernel)
Group (CORTEX-M3)
Group (DeviceDrivers)
Group (finsh)
-Group (Components)
-File 1,1,<applications\application.c><application.c>
-File 1,1,<applications\startup.c><startup.c>
-File 2,1,<drivers\board.c><board.c>
-File 2,1,<drivers\stm32f10x_it.c><stm32f10x_it.c>
-File 2,1,<drivers\led.c><led.c>
-File 2,1,<drivers\usart.c><usart.c>
-File 3,1,<Libraries\CMSIS\CM3\DeviceSupport\ST\STM32F10x\system_stm32f10x.c><system_stm32f10x.c>
-File 3,1,<Libraries\STM32F10x_StdPeriph_Driver\src\stm32f10x_crc.c><stm32f10x_crc.c>
-File 3,1,<Libraries\STM32F10x_StdPeriph_Driver\src\stm32f10x_rcc.c><stm32f10x_rcc.c>
-File 3,1,<Libraries\STM32F10x_StdPeriph_Driver\src\stm32f10x_wwdg.c><stm32f10x_wwdg.c>
-File 3,1,<Libraries\STM32F10x_StdPeriph_Driver\src\stm32f10x_pwr.c><stm32f10x_pwr.c>
-File 3,1,<Libraries\STM32F10x_StdPeriph_Driver\src\stm32f10x_exti.c><stm32f10x_exti.c>
-File 3,1,<Libraries\STM32F10x_StdPeriph_Driver\src\stm32f10x_bkp.c><stm32f10x_bkp.c>
-File 3,1,<Libraries\STM32F10x_StdPeriph_Driver\src\stm32f10x_i2c.c><stm32f10x_i2c.c>
-File 3,1,<Libraries\STM32F10x_StdPeriph_Driver\src\stm32f10x_adc.c><stm32f10x_adc.c>
-File 3,1,<Libraries\STM32F10x_StdPeriph_Driver\src\stm32f10x_dac.c><stm32f10x_dac.c>
-File 3,1,<Libraries\STM32F10x_StdPeriph_Driver\src\stm32f10x_rtc.c><stm32f10x_rtc.c>
-File 3,1,<Libraries\STM32F10x_StdPeriph_Driver\src\stm32f10x_fsmc.c><stm32f10x_fsmc.c>
-File 3,1,<Libraries\STM32F10x_StdPeriph_Driver\src\stm32f10x_tim.c><stm32f10x_tim.c>
-File 3,1,<Libraries\STM32F10x_StdPeriph_Driver\src\stm32f10x_iwdg.c><stm32f10x_iwdg.c>
-File 3,1,<Libraries\STM32F10x_StdPeriph_Driver\src\stm32f10x_spi.c><stm32f10x_spi.c>
-File 3,1,<Libraries\STM32F10x_StdPeriph_Driver\src\stm32f10x_flash.c><stm32f10x_flash.c>
-File 3,1,<Libraries\STM32F10x_StdPeriph_Driver\src\stm32f10x_sdio.c><stm32f10x_sdio.c>
-File 3,1,<Libraries\STM32F10x_StdPeriph_Driver\src\stm32f10x_gpio.c><stm32f10x_gpio.c>
-File 3,1,<Libraries\STM32F10x_StdPeriph_Driver\src\stm32f10x_usart.c><stm32f10x_usart.c>
-File 3,1,<Libraries\STM32F10x_StdPeriph_Driver\src\stm32f10x_dbgmcu.c><stm32f10x_dbgmcu.c>
-File 3,1,<Libraries\STM32F10x_StdPeriph_Driver\src\stm32f10x_dma.c><stm32f10x_dma.c>
-File 3,1,<Libraries\STM32F10x_StdPeriph_Driver\src\stm32f10x_can.c><stm32f10x_can.c>
-File 3,1,<Libraries\STM32F10x_StdPeriph_Driver\src\stm32f10x_cec.c><stm32f10x_cec.c>
-File 3,1,<Libraries\STM32F10x_StdPeriph_Driver\src\misc.c><misc.c>
-File 3,2,<Libraries\CMSIS\CM3\DeviceSupport\ST\STM32F10x\startup\arm\startup_stm32f10x_hd.s><startup_stm32f10x_hd.s>
-File 4,1,<..\..\src\clock.c><clock.c>
-File 4,1,<..\..\src\device.c><device.c>
-File 4,1,<..\..\src\idle.c><idle.c>
-File 4,1,<..\..\src\ipc.c><ipc.c>
-File 4,1,<..\..\src\irq.c><irq.c>
-File 4,1,<..\..\src\kservice.c><kservice.c>
-File 4,1,<..\..\src\mem.c><mem.c>
-File 4,1,<..\..\src\mempool.c><mempool.c>
-File 4,1,<..\..\src\object.c><object.c>
-File 4,1,<..\..\src\scheduler.c><scheduler.c>
-File 4,1,<..\..\src\thread.c><thread.c>
-File 4,1,<..\..\src\timer.c><timer.c>
-File 5,1,<..\..\libcpu\arm\cortex-m3\cpuport.c><cpuport.c>
-File 5,2,<..\..\libcpu\arm\cortex-m3\context_rvds.S><context_rvds.S>
-File 5,1,<..\..\libcpu\arm\common\backtrace.c><backtrace.c>
-File 5,1,<..\..\libcpu\arm\common\div0.c><div0.c>
-File 5,1,<..\..\libcpu\arm\common\showmem.c><showmem.c>
-File 6,1,<..\..\components\drivers\serial\serial.c><serial.c>
-File 6,1,<..\..\components\drivers\src\completion.c><completion.c>
-File 6,1,<..\..\components\drivers\src\dataqueue.c><dataqueue.c>
-File 6,1,<..\..\components\drivers\src\pipe.c><pipe.c>
-File 6,1,<..\..\components\drivers\src\ringbuffer.c><ringbuffer.c>
-File 7,1,<..\..\components\finsh\cmd.c><cmd.c>
-File 7,1,<..\..\components\finsh\finsh_compiler.c><finsh_compiler.c>
-File 7,1,<..\..\components\finsh\finsh_error.c><finsh_error.c>
-File 7,1,<..\..\components\finsh\finsh_heap.c><finsh_heap.c>
-File 7,1,<..\..\components\finsh\finsh_init.c><finsh_init.c>
-File 7,1,<..\..\components\finsh\finsh_node.c><finsh_node.c>
-File 7,1,<..\..\components\finsh\finsh_ops.c><finsh_ops.c>
-File 7,1,<..\..\components\finsh\finsh_parser.c><finsh_parser.c>
-File 7,1,<..\..\components\finsh\finsh_token.c><finsh_token.c>
-File 7,1,<..\..\components\finsh\finsh_var.c><finsh_var.c>
-File 7,1,<..\..\components\finsh\finsh_vm.c><finsh_vm.c>
-File 7,1,<..\..\components\finsh\msh.c><msh.c>
-File 7,1,<..\..\components\finsh\msh_cmd.c><msh_cmd.c>
-File 7,1,<..\..\components\finsh\shell.c><shell.c>
-File 7,1,<..\..\components\finsh\symbol.c><symbol.c>
-File 8,1,<..\..\components\init\components.c><components.c>
+File 1,1,<Libraries/CMSIS/CM3/DeviceSupport/ST/STM32F10x/system_stm32f10x.c><system_stm32f10x.c>
+File 1,1,<Libraries/STM32F10x_StdPeriph_Driver/src/stm32f10x_crc.c><stm32f10x_crc.c>
+File 1,1,<Libraries/STM32F10x_StdPeriph_Driver/src/stm32f10x_rcc.c><stm32f10x_rcc.c>
+File 1,1,<Libraries/STM32F10x_StdPeriph_Driver/src/stm32f10x_wwdg.c><stm32f10x_wwdg.c>
+File 1,1,<Libraries/STM32F10x_StdPeriph_Driver/src/stm32f10x_pwr.c><stm32f10x_pwr.c>
+File 1,1,<Libraries/STM32F10x_StdPeriph_Driver/src/stm32f10x_exti.c><stm32f10x_exti.c>
+File 1,1,<Libraries/STM32F10x_StdPeriph_Driver/src/stm32f10x_bkp.c><stm32f10x_bkp.c>
+File 1,1,<Libraries/STM32F10x_StdPeriph_Driver/src/stm32f10x_i2c.c><stm32f10x_i2c.c>
+File 1,1,<Libraries/STM32F10x_StdPeriph_Driver/src/stm32f10x_adc.c><stm32f10x_adc.c>
+File 1,1,<Libraries/STM32F10x_StdPeriph_Driver/src/stm32f10x_dac.c><stm32f10x_dac.c>
+File 1,1,<Libraries/STM32F10x_StdPeriph_Driver/src/stm32f10x_rtc.c><stm32f10x_rtc.c>
+File 1,1,<Libraries/STM32F10x_StdPeriph_Driver/src/stm32f10x_fsmc.c><stm32f10x_fsmc.c>
+File 1,1,<Libraries/STM32F10x_StdPeriph_Driver/src/stm32f10x_tim.c><stm32f10x_tim.c>
+File 1,1,<Libraries/STM32F10x_StdPeriph_Driver/src/stm32f10x_iwdg.c><stm32f10x_iwdg.c>
+File 1,1,<Libraries/STM32F10x_StdPeriph_Driver/src/stm32f10x_spi.c><stm32f10x_spi.c>
+File 1,1,<Libraries/STM32F10x_StdPeriph_Driver/src/stm32f10x_flash.c><stm32f10x_flash.c>
+File 1,1,<Libraries/STM32F10x_StdPeriph_Driver/src/stm32f10x_sdio.c><stm32f10x_sdio.c>
+File 1,1,<Libraries/STM32F10x_StdPeriph_Driver/src/stm32f10x_gpio.c><stm32f10x_gpio.c>
+File 1,1,<Libraries/STM32F10x_StdPeriph_Driver/src/stm32f10x_usart.c><stm32f10x_usart.c>
+File 1,1,<Libraries/STM32F10x_StdPeriph_Driver/src/stm32f10x_dbgmcu.c><stm32f10x_dbgmcu.c>
+File 1,1,<Libraries/STM32F10x_StdPeriph_Driver/src/stm32f10x_dma.c><stm32f10x_dma.c>
+File 1,1,<Libraries/STM32F10x_StdPeriph_Driver/src/stm32f10x_can.c><stm32f10x_can.c>
+File 1,1,<Libraries/STM32F10x_StdPeriph_Driver/src/stm32f10x_cec.c><stm32f10x_cec.c>
+File 1,1,<Libraries/STM32F10x_StdPeriph_Driver/src/misc.c><misc.c>
+File 1,2,<Libraries/CMSIS/CM3/DeviceSupport/ST/STM32F10x/startup/arm/startup_stm32f10x_hd.s><startup_stm32f10x_hd.s>
+File 2,1,<applications/application.c><application.c>
+File 2,1,<applications/startup.c><startup.c>
+File 3,1,<drivers/board.c><board.c>
+File 3,1,<drivers/stm32f10x_it.c><stm32f10x_it.c>
+File 3,1,<drivers/led.c><led.c>
+File 3,1,<drivers/usart.c><usart.c>
+File 4,1,<../../src/clock.c><clock.c>
+File 4,1,<../../src/components.c><components.c>
+File 4,1,<../../src/device.c><device.c>
+File 4,1,<../../src/idle.c><idle.c>
+File 4,1,<../../src/ipc.c><ipc.c>
+File 4,1,<../../src/irq.c><irq.c>
+File 4,1,<../../src/kservice.c><kservice.c>
+File 4,1,<../../src/mem.c><mem.c>
+File 4,1,<../../src/mempool.c><mempool.c>
+File 4,1,<../../src/object.c><object.c>
+File 4,1,<../../src/scheduler.c><scheduler.c>
+File 4,1,<../../src/thread.c><thread.c>
+File 4,1,<../../src/timer.c><timer.c>
+File 5,1,<../../libcpu/arm/cortex-m3/cpuport.c><cpuport.c>
+File 5,2,<../../libcpu/arm/cortex-m3/context_rvds.S><context_rvds.S>
+File 5,1,<../../libcpu/arm/common/backtrace.c><backtrace.c>
+File 5,1,<../../libcpu/arm/common/div0.c><div0.c>
+File 5,1,<../../libcpu/arm/common/showmem.c><showmem.c>
+File 6,1,<../../components/drivers/serial/serial.c><serial.c>
+File 6,1,<../../components/drivers/src/completion.c><completion.c>
+File 6,1,<../../components/drivers/src/dataqueue.c><dataqueue.c>
+File 6,1,<../../components/drivers/src/pipe.c><pipe.c>
+File 6,1,<../../components/drivers/src/portal.c><portal.c>
+File 6,1,<../../components/drivers/src/ringbuffer.c><ringbuffer.c>
+File 6,1,<../../components/drivers/src/workqueue.c><workqueue.c>
+File 7,1,<../../components/finsh/shell.c><shell.c>
+File 7,1,<../../components/finsh/symbol.c><symbol.c>
+File 7,1,<../../components/finsh/cmd.c><cmd.c>
+File 7,1,<../../components/finsh/finsh_compiler.c><finsh_compiler.c>
+File 7,1,<../../components/finsh/finsh_error.c><finsh_error.c>
+File 7,1,<../../components/finsh/finsh_heap.c><finsh_heap.c>
+File 7,1,<../../components/finsh/finsh_init.c><finsh_init.c>
+File 7,1,<../../components/finsh/finsh_node.c><finsh_node.c>
+File 7,1,<../../components/finsh/finsh_ops.c><finsh_ops.c>
+File 7,1,<../../components/finsh/finsh_parser.c><finsh_parser.c>
+File 7,1,<../../components/finsh/finsh_var.c><finsh_var.c>
+File 7,1,<../../components/finsh/finsh_vm.c><finsh_vm.c>
+File 7,1,<../../components/finsh/finsh_token.c><finsh_token.c>
@@ -143,7 +142,7 @@ Options 1,0,0 // Target 'RT-Thread STM32'
ADSCMISC ()
ADSCDEFN (STM32F10X_HD, USE_STDPERIPH_DRIVER)
ADSCUDEF ()
- ADSCINCD (Libraries\STM32F10x_StdPeriph_Driver\inc;..\..\include;drivers;..\..\components\CMSIS\Include;.;applications;..\..\libcpu\arm\cortex-m3;..\..\components\drivers\include;..\..\libcpu\arm\common;..\..\components\init;..\..\components\finsh;Libraries\CMSIS\CM3\DeviceSupport\ST\STM32F10x)
+ ADSCINCD (../../libcpu/arm/cortex-m3;../../components/drivers/include;Libraries/CMSIS/CM3/DeviceSupport/ST/STM32F10x;../../libcpu/arm/common;.;applications;../../include;../../components/finsh;../../components/CMSIS/Include;drivers;Libraries/STM32F10x_StdPeriph_Driver/inc)
ADSASFLG { 1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 }
ADSAMISC ()
ADSADEFN ()
@@ -164,7 +163,7 @@ Options 1,0,0 // Target 'RT-Thread STM32'
ADSLDSC ()
ADSLDIB ()
ADSLDIC ()
- ADSLDMC ( --keep __fsym_* --keep __vsym_* --keep __rt_init* )
+ ADSLDMC ( --keep *.o(.rti_fn.*) --keep *.o(FSymTab) --keep *.o(VSymTab) )
ADSLDIF ()
ADSLDDW ()
OPTDL (SARMCM3.DLL)()(DARMSTM.DLL)(-pSTM32F103ZE)(SARMCM3.DLL)()(TARMSTM.DLL)(-pSTM32F103ZE)
diff --git a/bsp/stm32f20x/project.uvproj b/bsp/stm32f20x/project.uvproj
index 96322bfc57..908eed33a0 100644
--- a/bsp/stm32f20x/project.uvproj
+++ b/bsp/stm32f20x/project.uvproj
@@ -343,7 +343,7 @@
<MiscControls />
<Define>USE_STDPERIPH_DRIVER</Define>
<Undefine />
- <IncludePath>.;..\..\components\CMSIS\Include;..\..\components\finsh;..\..\include;..\..\libcpu\arm\common;..\..\libcpu\arm\cortex-m3;Drivers;Libraries\CMSIS\CM3\DeviceSupport\ST\STM32F2xx;Libraries\STM32F2xx_StdPeriph_Driver\inc;applications</IncludePath>
+ <IncludePath>Libraries/STM32F2xx_StdPeriph_Driver/inc;Libraries/CMSIS/CM3/DeviceSupport/ST/STM32F2xx;../../components/CMSIS/Include;applications;.;Drivers;../../include;../../libcpu/arm/cortex-m3;../../libcpu/arm/common;../../components/finsh</IncludePath>
</VariousControls>
</Cads>
<Aads>
@@ -373,7 +373,7 @@
<ScatterFile />
<IncludeLibs />
<IncludeLibsPath />
- <Misc> --keep __fsym_* --keep __vsym_* </Misc>
+ <Misc> --keep *.o(FSymTab) --keep *.o(VSymTab) </Misc>
<LinkerInputFile />
<DisabledWarnings />
</LDads>
@@ -381,312 +381,312 @@
</TargetOption>
<Groups>
<Group>
- <GroupName>Applications</GroupName>
+ <GroupName>STM32_StdPeriph</GroupName>
<Files>
<File>
- <FileName>application.c</FileName>
+ <FileName>system_stm32f2xx.c</FileName>
<FileType>1</FileType>
- <FilePath>applications\application.c</FilePath>
+ <FilePath>Libraries/CMSIS/CM3/DeviceSupport/ST/STM32F2xx/system_stm32f2xx.c</FilePath>
</File>
</Files>
<Files>
<File>
- <FileName>startup.c</FileName>
+ <FileName>misc.c</FileName>
<FileType>1</FileType>
- <FilePath>applications\startup.c</FilePath>
+ <FilePath>Libraries/STM32F2xx_StdPeriph_Driver/src/misc.c</FilePath>
</File>
</Files>
- </Group>
- <Group>
- <GroupName>Drivers</GroupName>
<Files>
<File>
- <FileName>24LCxx.c</FileName>
+ <FileName>stm32f2xx_adc.c</FileName>
<FileType>1</FileType>
- <FilePath>Drivers\24LCxx.c</FilePath>
+ <FilePath>Libraries/STM32F2xx_StdPeriph_Driver/src/stm32f2xx_adc.c</FilePath>
</File>
</Files>
<Files>
<File>
- <FileName>FM25Lx.c</FileName>
+ <FileName>stm32f2xx_can.c</FileName>
<FileType>1</FileType>
- <FilePath>Drivers\FM25Lx.c</FilePath>
+ <FilePath>Libraries/STM32F2xx_StdPeriph_Driver/src/stm32f2xx_can.c</FilePath>
</File>
</Files>
<Files>
<File>
- <FileName>board.c</FileName>
+ <FileName>stm32f2xx_crc.c</FileName>
<FileType>1</FileType>
- <FilePath>Drivers\board.c</FilePath>
+ <FilePath>Libraries/STM32F2xx_StdPeriph_Driver/src/stm32f2xx_crc.c</FilePath>
</File>
</Files>
<Files>
<File>
- <FileName>i2c.c</FileName>
+ <FileName>stm32f2xx_cryp.c</FileName>
<FileType>1</FileType>
- <FilePath>Drivers\i2c.c</FilePath>
+ <FilePath>Libraries/STM32F2xx_StdPeriph_Driver/src/stm32f2xx_cryp.c</FilePath>
</File>
</Files>
<Files>
<File>
- <FileName>rtc.c</FileName>
+ <FileName>stm32f2xx_cryp_aes.c</FileName>
<FileType>1</FileType>
- <FilePath>Drivers\rtc.c</FilePath>
+ <FilePath>Libraries/STM32F2xx_StdPeriph_Driver/src/stm32f2xx_cryp_aes.c</FilePath>
</File>
</Files>
<Files>
<File>
- <FileName>serial.c</FileName>
+ <FileName>stm32f2xx_cryp_des.c</FileName>
<FileType>1</FileType>
- <FilePath>Drivers\serial.c</FilePath>
+ <FilePath>Libraries/STM32F2xx_StdPeriph_Driver/src/stm32f2xx_cryp_des.c</FilePath>
</File>
</Files>
<Files>
<File>
- <FileName>stm32f2xx_it.c</FileName>
+ <FileName>stm32f2xx_cryp_tdes.c</FileName>
<FileType>1</FileType>
- <FilePath>Drivers\stm32f2xx_it.c</FilePath>
+ <FilePath>Libraries/STM32F2xx_StdPeriph_Driver/src/stm32f2xx_cryp_tdes.c</FilePath>
</File>
</Files>
<Files>
<File>
- <FileName>usart.c</FileName>
+ <FileName>stm32f2xx_dac.c</FileName>
<FileType>1</FileType>
- <FilePath>Drivers\usart.c</FilePath>
+ <FilePath>Libraries/STM32F2xx_StdPeriph_Driver/src/stm32f2xx_dac.c</FilePath>
</File>
</Files>
- </Group>
- <Group>
- <GroupName>STM32_StdPeriph</GroupName>
<Files>
<File>
- <FileName>system_stm32f2xx.c</FileName>
+ <FileName>stm32f2xx_dbgmcu.c</FileName>
<FileType>1</FileType>
- <FilePath>Libraries\CMSIS\CM3\DeviceSupport\ST\STM32F2xx\system_stm32f2xx.c</FilePath>
+ <FilePath>Libraries/STM32F2xx_StdPeriph_Driver/src/stm32f2xx_dbgmcu.c</FilePath>
</File>
</Files>
<Files>
<File>
- <FileName>misc.c</FileName>
+ <FileName>stm32f2xx_dcmi.c</FileName>
<FileType>1</FileType>
- <FilePath>Libraries\STM32F2xx_StdPeriph_Driver\src\misc.c</FilePath>
+ <FilePath>Libraries/STM32F2xx_StdPeriph_Driver/src/stm32f2xx_dcmi.c</FilePath>
</File>
</Files>
<Files>
<File>
- <FileName>stm32f2xx_adc.c</FileName>
+ <FileName>stm32f2xx_dma.c</FileName>
<FileType>1</FileType>
- <FilePath>Libraries\STM32F2xx_StdPeriph_Driver\src\stm32f2xx_adc.c</FilePath>
+ <FilePath>Libraries/STM32F2xx_StdPeriph_Driver/src/stm32f2xx_dma.c</FilePath>
</File>
</Files>
<Files>
<File>
- <FileName>stm32f2xx_can.c</FileName>
+ <FileName>stm32f2xx_exti.c</FileName>
<FileType>1</FileType>
- <FilePath>Libraries\STM32F2xx_StdPeriph_Driver\src\stm32f2xx_can.c</FilePath>
+ <FilePath>Libraries/STM32F2xx_StdPeriph_Driver/src/stm32f2xx_exti.c</FilePath>
</File>
</Files>
<Files>
<File>
- <FileName>stm32f2xx_crc.c</FileName>
+ <FileName>stm32f2xx_flash.c</FileName>
<FileType>1</FileType>
- <FilePath>Libraries\STM32F2xx_StdPeriph_Driver\src\stm32f2xx_crc.c</FilePath>
+ <FilePath>Libraries/STM32F2xx_StdPeriph_Driver/src/stm32f2xx_flash.c</FilePath>
</File>
</Files>
<Files>
<File>
- <FileName>stm32f2xx_cryp.c</FileName>
+ <FileName>stm32f2xx_fsmc.c</FileName>
<FileType>1</FileType>
- <FilePath>Libraries\STM32F2xx_StdPeriph_Driver\src\stm32f2xx_cryp.c</FilePath>
+ <FilePath>Libraries/STM32F2xx_StdPeriph_Driver/src/stm32f2xx_fsmc.c</FilePath>
</File>
</Files>
<Files>
<File>
- <FileName>stm32f2xx_cryp_aes.c</FileName>
+ <FileName>stm32f2xx_gpio.c</FileName>
<FileType>1</FileType>
- <FilePath>Libraries\STM32F2xx_StdPeriph_Driver\src\stm32f2xx_cryp_aes.c</FilePath>
+ <FilePath>Libraries/STM32F2xx_StdPeriph_Driver/src/stm32f2xx_gpio.c</FilePath>
</File>
</Files>
<Files>
<File>
- <FileName>stm32f2xx_cryp_des.c</FileName>
+ <FileName>stm32f2xx_hash.c</FileName>
<FileType>1</FileType>
- <FilePath>Libraries\STM32F2xx_StdPeriph_Driver\src\stm32f2xx_cryp_des.c</FilePath>
+ <FilePath>Libraries/STM32F2xx_StdPeriph_Driver/src/stm32f2xx_hash.c</FilePath>
</File>
</Files>
<Files>
<File>
- <FileName>stm32f2xx_cryp_tdes.c</FileName>
+ <FileName>stm32f2xx_hash_md5.c</FileName>
<FileType>1</FileType>
- <FilePath>Libraries\STM32F2xx_StdPeriph_Driver\src\stm32f2xx_cryp_tdes.c</FilePath>
+ <FilePath>Libraries/STM32F2xx_StdPeriph_Driver/src/stm32f2xx_hash_md5.c</FilePath>
</File>
</Files>
<Files>
<File>
- <FileName>stm32f2xx_dac.c</FileName>
+ <FileName>stm32f2xx_hash_sha1.c</FileName>
<FileType>1</FileType>
- <FilePath>Libraries\STM32F2xx_StdPeriph_Driver\src\stm32f2xx_dac.c</FilePath>
+ <FilePath>Libraries/STM32F2xx_StdPeriph_Driver/src/stm32f2xx_hash_sha1.c</FilePath>
</File>
</Files>
<Files>
<File>
- <FileName>stm32f2xx_dbgmcu.c</FileName>
+ <FileName>stm32f2xx_i2c.c</FileName>
<FileType>1</FileType>
- <FilePath>Libraries\STM32F2xx_StdPeriph_Driver\src\stm32f2xx_dbgmcu.c</FilePath>
+ <FilePath>Libraries/STM32F2xx_StdPeriph_Driver/src/stm32f2xx_i2c.c</FilePath>
</File>
</Files>
<Files>
<File>
- <FileName>stm32f2xx_dcmi.c</FileName>
+ <FileName>stm32f2xx_iwdg.c</FileName>
<FileType>1</FileType>
- <FilePath>Libraries\STM32F2xx_StdPeriph_Driver\src\stm32f2xx_dcmi.c</FilePath>
+ <FilePath>Libraries/STM32F2xx_StdPeriph_Driver/src/stm32f2xx_iwdg.c</FilePath>
</File>
</Files>
<Files>
<File>
- <FileName>stm32f2xx_dma.c</FileName>
+ <FileName>stm32f2xx_pwr.c</FileName>
<FileType>1</FileType>
- <FilePath>Libraries\STM32F2xx_StdPeriph_Driver\src\stm32f2xx_dma.c</FilePath>
+ <FilePath>Libraries/STM32F2xx_StdPeriph_Driver/src/stm32f2xx_pwr.c</FilePath>
</File>
</Files>
<Files>
<File>
- <FileName>stm32f2xx_exti.c</FileName>
+ <FileName>stm32f2xx_rcc.c</FileName>
<FileType>1</FileType>
- <FilePath>Libraries\STM32F2xx_StdPeriph_Driver\src\stm32f2xx_exti.c</FilePath>
+ <FilePath>Libraries/STM32F2xx_StdPeriph_Driver/src/stm32f2xx_rcc.c</FilePath>
</File>
</Files>
<Files>
<File>
- <FileName>stm32f2xx_flash.c</FileName>
+ <FileName>stm32f2xx_rng.c</FileName>
<FileType>1</FileType>
- <FilePath>Libraries\STM32F2xx_StdPeriph_Driver\src\stm32f2xx_flash.c</FilePath>
+ <FilePath>Libraries/STM32F2xx_StdPeriph_Driver/src/stm32f2xx_rng.c</FilePath>
</File>
</Files>
<Files>
<File>
- <FileName>stm32f2xx_fsmc.c</FileName>
+ <FileName>stm32f2xx_rtc.c</FileName>
<FileType>1</FileType>
- <FilePath>Libraries\STM32F2xx_StdPeriph_Driver\src\stm32f2xx_fsmc.c</FilePath>
+ <FilePath>Libraries/STM32F2xx_StdPeriph_Driver/src/stm32f2xx_rtc.c</FilePath>
</File>
</Files>
<Files>
<File>
- <FileName>stm32f2xx_gpio.c</FileName>
+ <FileName>stm32f2xx_sdio.c</FileName>
<FileType>1</FileType>
- <FilePath>Libraries\STM32F2xx_StdPeriph_Driver\src\stm32f2xx_gpio.c</FilePath>
+ <FilePath>Libraries/STM32F2xx_StdPeriph_Driver/src/stm32f2xx_sdio.c</FilePath>
</File>
</Files>
<Files>
<File>
- <FileName>stm32f2xx_hash.c</FileName>
+ <FileName>stm32f2xx_spi.c</FileName>
<FileType>1</FileType>
- <FilePath>Libraries\STM32F2xx_StdPeriph_Driver\src\stm32f2xx_hash.c</FilePath>
+ <FilePath>Libraries/STM32F2xx_StdPeriph_Driver/src/stm32f2xx_spi.c</FilePath>
</File>
</Files>
<Files>
<File>
- <FileName>stm32f2xx_hash_md5.c</FileName>
+ <FileName>stm32f2xx_syscfg.c</FileName>
<FileType>1</FileType>
- <FilePath>Libraries\STM32F2xx_StdPeriph_Driver\src\stm32f2xx_hash_md5.c</FilePath>
+ <FilePath>Libraries/STM32F2xx_StdPeriph_Driver/src/stm32f2xx_syscfg.c</FilePath>
</File>
</Files>
<Files>
<File>
- <FileName>stm32f2xx_hash_sha1.c</FileName>
+ <FileName>stm32f2xx_tim.c</FileName>
<FileType>1</FileType>
- <FilePath>Libraries\STM32F2xx_StdPeriph_Driver\src\stm32f2xx_hash_sha1.c</FilePath>
+ <FilePath>Libraries/STM32F2xx_StdPeriph_Driver/src/stm32f2xx_tim.c</FilePath>
</File>
</Files>
<Files>
<File>
- <FileName>stm32f2xx_i2c.c</FileName>
+ <FileName>stm32f2xx_usart.c</FileName>
<FileType>1</FileType>
- <FilePath>Libraries\STM32F2xx_StdPeriph_Driver\src\stm32f2xx_i2c.c</FilePath>
+ <FilePath>Libraries/STM32F2xx_StdPeriph_Driver/src/stm32f2xx_usart.c</FilePath>
</File>
</Files>
<Files>
<File>
- <FileName>stm32f2xx_iwdg.c</FileName>
+ <FileName>stm32f2xx_wwdg.c</FileName>
<FileType>1</FileType>
- <FilePath>Libraries\STM32F2xx_StdPeriph_Driver\src\stm32f2xx_iwdg.c</FilePath>
+ <FilePath>Libraries/STM32F2xx_StdPeriph_Driver/src/stm32f2xx_wwdg.c</FilePath>
</File>
</Files>
<Files>
<File>
- <FileName>stm32f2xx_pwr.c</FileName>
- <FileType>1</FileType>
- <FilePath>Libraries\STM32F2xx_StdPeriph_Driver\src\stm32f2xx_pwr.c</FilePath>
+ <FileName>startup_stm32f2xx.s</FileName>
+ <FileType>2</FileType>
+ <FilePath>Libraries/CMSIS/CM3/DeviceSupport/ST/STM32F2xx/startup/arm/startup_stm32f2xx.s</FilePath>
</File>
</Files>
+ </Group>
+ <Group>
+ <GroupName>Applications</GroupName>
<Files>
<File>
- <FileName>stm32f2xx_rcc.c</FileName>
+ <FileName>application.c</FileName>
<FileType>1</FileType>
- <FilePath>Libraries\STM32F2xx_StdPeriph_Driver\src\stm32f2xx_rcc.c</FilePath>
+ <FilePath>applications/application.c</FilePath>
</File>
</Files>
<Files>
<File>
- <FileName>stm32f2xx_rng.c</FileName>
+ <FileName>startup.c</FileName>
<FileType>1</FileType>
- <FilePath>Libraries\STM32F2xx_StdPeriph_Driver\src\stm32f2xx_rng.c</FilePath>
+ <FilePath>applications/startup.c</FilePath>
</File>
</Files>
+ </Group>
+ <Group>
+ <GroupName>Drivers</GroupName>
<Files>
<File>
- <FileName>stm32f2xx_rtc.c</FileName>
+ <FileName>24LCxx.c</FileName>
<FileType>1</FileType>
- <FilePath>Libraries\STM32F2xx_StdPeriph_Driver\src\stm32f2xx_rtc.c</FilePath>
+ <FilePath>Drivers/24LCxx.c</FilePath>
</File>
</Files>
<Files>
<File>
- <FileName>stm32f2xx_sdio.c</FileName>
+ <FileName>FM25Lx.c</FileName>
<FileType>1</FileType>
- <FilePath>Libraries\STM32F2xx_StdPeriph_Driver\src\stm32f2xx_sdio.c</FilePath>
+ <FilePath>Drivers/FM25Lx.c</FilePath>
</File>
</Files>
<Files>
<File>
- <FileName>stm32f2xx_spi.c</FileName>
+ <FileName>board.c</FileName>
<FileType>1</FileType>
- <FilePath>Libraries\STM32F2xx_StdPeriph_Driver\src\stm32f2xx_spi.c</FilePath>
+ <FilePath>Drivers/board.c</FilePath>
</File>
</Files>
<Files>
<File>
- <FileName>stm32f2xx_syscfg.c</FileName>
+ <FileName>i2c.c</FileName>
<FileType>1</FileType>
- <FilePath>Libraries\STM32F2xx_StdPeriph_Driver\src\stm32f2xx_syscfg.c</FilePath>
+ <FilePath>Drivers/i2c.c</FilePath>
</File>
</Files>
<Files>
<File>
- <FileName>stm32f2xx_tim.c</FileName>
+ <FileName>rtc.c</FileName>
<FileType>1</FileType>
- <FilePath>Libraries\STM32F2xx_StdPeriph_Driver\src\stm32f2xx_tim.c</FilePath>
+ <FilePath>Drivers/rtc.c</FilePath>
</File>
</Files>
<Files>
<File>
- <FileName>stm32f2xx_usart.c</FileName>
+ <FileName>serial.c</FileName>
<FileType>1</FileType>
- <FilePath>Libraries\STM32F2xx_StdPeriph_Driver\src\stm32f2xx_usart.c</FilePath>
+ <FilePath>Drivers/serial.c</FilePath>
</File>
</Files>
<Files>
<File>
- <FileName>stm32f2xx_wwdg.c</FileName>
+ <FileName>stm32f2xx_it.c</FileName>
<FileType>1</FileType>
- <FilePath>Libraries\STM32F2xx_StdPeriph_Driver\src\stm32f2xx_wwdg.c</FilePath>
+ <FilePath>Drivers/stm32f2xx_it.c</FilePath>
</File>
</Files>
<Files>
<File>
- <FileName>startup_stm32f2xx.s</FileName>
- <FileType>2</FileType>
- <FilePath>Libraries\CMSIS\CM3\DeviceSupport\ST\STM32F2xx\startup\arm\startup_stm32f2xx.s</FilePath>
+ <FileName>usart.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>Drivers/usart.c</FilePath>
</File>
</Files>
</Group>
@@ -696,84 +696,91 @@
<File>
<FileName>clock.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\src\clock.c</FilePath>
+ <FilePath>../../src/clock.c</FilePath>
+ </File>
+ </Files>
+ <Files>
+ <File>
+ <FileName>components.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../../src/components.c</FilePath>
</File>
</Files>
<Files>
<File>
<FileName>device.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\src\device.c</FilePath>
+ <FilePath>../../src/device.c</FilePath>
</File>
</Files>
<Files>
<File>
<FileName>idle.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\src\idle.c</FilePath>
+ <FilePath>../../src/idle.c</FilePath>
</File>
</Files>
<Files>
<File>
<FileName>ipc.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\src\ipc.c</FilePath>
+ <FilePath>../../src/ipc.c</FilePath>
</File>
</Files>
<Files>
<File>
<FileName>irq.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\src\irq.c</FilePath>
+ <FilePath>../../src/irq.c</FilePath>
</File>
</Files>
<Files>
<File>
<FileName>kservice.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\src\kservice.c</FilePath>
+ <FilePath>../../src/kservice.c</FilePath>
</File>
</Files>
<Files>
<File>
<FileName>mem.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\src\mem.c</FilePath>
+ <FilePath>../../src/mem.c</FilePath>
</File>
</Files>
<Files>
<File>
<FileName>mempool.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\src\mempool.c</FilePath>
+ <FilePath>../../src/mempool.c</FilePath>
</File>
</Files>
<Files>
<File>
<FileName>object.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\src\object.c</FilePath>
+ <FilePath>../../src/object.c</FilePath>
</File>
</Files>
<Files>
<File>
<FileName>scheduler.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\src\scheduler.c</FilePath>
+ <FilePath>../../src/scheduler.c</FilePath>
</File>
</Files>
<Files>
<File>
<FileName>thread.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\src\thread.c</FilePath>
+ <FilePath>../../src/thread.c</FilePath>
</File>
</Files>
<Files>
<File>
<FileName>timer.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\src\timer.c</FilePath>
+ <FilePath>../../src/timer.c</FilePath>
</File>
</Files>
</Group>
@@ -783,35 +790,35 @@
<File>
<FileName>cpuport.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\libcpu\arm\cortex-m3\cpuport.c</FilePath>
+ <FilePath>../../libcpu/arm/cortex-m3/cpuport.c</FilePath>
</File>
</Files>
<Files>
<File>
<FileName>context_rvds.S</FileName>
<FileType>2</FileType>
- <FilePath>..\..\libcpu\arm\cortex-m3\context_rvds.S</FilePath>
+ <FilePath>../../libcpu/arm/cortex-m3/context_rvds.S</FilePath>
</File>
</Files>
<Files>
<File>
<FileName>backtrace.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\libcpu\arm\common\backtrace.c</FilePath>
+ <FilePath>../../libcpu/arm/common/backtrace.c</FilePath>
</File>
</Files>
<Files>
<File>
<FileName>div0.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\libcpu\arm\common\div0.c</FilePath>
+ <FilePath>../../libcpu/arm/common/div0.c</FilePath>
</File>
</Files>
<Files>
<File>
<FileName>showmem.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\libcpu\arm\common\showmem.c</FilePath>
+ <FilePath>../../libcpu/arm/common/showmem.c</FilePath>
</File>
</Files>
</Group>
@@ -819,93 +826,93 @@
<GroupName>finsh</GroupName>
<Files>
<File>
- <FileName>cmd.c</FileName>
+ <FileName>shell.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\components\finsh\cmd.c</FilePath>
+ <FilePath>../../components/finsh/shell.c</FilePath>
</File>
</Files>
<Files>
<File>
- <FileName>finsh_compiler.c</FileName>
+ <FileName>symbol.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\components\finsh\finsh_compiler.c</FilePath>
+ <FilePath>../../components/finsh/symbol.c</FilePath>
</File>
</Files>
<Files>
<File>
- <FileName>finsh_error.c</FileName>
+ <FileName>cmd.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\components\finsh\finsh_error.c</FilePath>
+ <FilePath>../../components/finsh/cmd.c</FilePath>
</File>
</Files>
<Files>
<File>
- <FileName>finsh_heap.c</FileName>
+ <FileName>finsh_compiler.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\components\finsh\finsh_heap.c</FilePath>
+ <FilePath>../../components/finsh/finsh_compiler.c</FilePath>
</File>
</Files>
<Files>
<File>
- <FileName>finsh_init.c</FileName>
+ <FileName>finsh_error.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\components\finsh\finsh_init.c</FilePath>
+ <FilePath>../../components/finsh/finsh_error.c</FilePath>
</File>
</Files>
<Files>
<File>
- <FileName>finsh_node.c</FileName>
+ <FileName>finsh_heap.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\components\finsh\finsh_node.c</FilePath>
+ <FilePath>../../components/finsh/finsh_heap.c</FilePath>
</File>
</Files>
<Files>
<File>
- <FileName>finsh_ops.c</FileName>
+ <FileName>finsh_init.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\components\finsh\finsh_ops.c</FilePath>
+ <FilePath>../../components/finsh/finsh_init.c</FilePath>
</File>
</Files>
<Files>
<File>
- <FileName>finsh_parser.c</FileName>
+ <FileName>finsh_node.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\components\finsh\finsh_parser.c</FilePath>
+ <FilePath>../../components/finsh/finsh_node.c</FilePath>
</File>
</Files>
<Files>
<File>
- <FileName>finsh_token.c</FileName>
+ <FileName>finsh_ops.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\components\finsh\finsh_token.c</FilePath>
+ <FilePath>../../components/finsh/finsh_ops.c</FilePath>
</File>
</Files>
<Files>
<File>
- <FileName>finsh_var.c</FileName>
+ <FileName>finsh_parser.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\components\finsh\finsh_var.c</FilePath>
+ <FilePath>../../components/finsh/finsh_parser.c</FilePath>
</File>
</Files>
<Files>
<File>
- <FileName>finsh_vm.c</FileName>
+ <FileName>finsh_var.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\components\finsh\finsh_vm.c</FilePath>
+ <FilePath>../../components/finsh/finsh_var.c</FilePath>
</File>
</Files>
<Files>
<File>
- <FileName>shell.c</FileName>
+ <FileName>finsh_vm.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\components\finsh\shell.c</FilePath>
+ <FilePath>../../components/finsh/finsh_vm.c</FilePath>
</File>
</Files>
<Files>
<File>
- <FileName>symbol.c</FileName>
+ <FileName>finsh_token.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\components\finsh\symbol.c</FilePath>
+ <FilePath>../../components/finsh/finsh_token.c</FilePath>
</File>
</Files>
</Group>
diff --git a/bsp/stm32f40x/applications/application.c b/bsp/stm32f40x/applications/application.c
index c5e5bcf296..bfa3428eca 100644
--- a/bsp/stm32f40x/applications/application.c
+++ b/bsp/stm32f40x/applications/application.c
@@ -20,7 +20,7 @@
#include <lwip/sys.h>
#include <lwip/api.h>
#include <netif/ethernetif.h>
-#include "stm32_eth.h"
+#include "stm32f4xx_eth.h"
#endif
#ifdef RT_USING_GDB
diff --git a/bsp/stm32f40x/drivers/SConscript b/bsp/stm32f40x/drivers/SConscript
index 5bbef48785..8037c3ea5b 100644
--- a/bsp/stm32f40x/drivers/SConscript
+++ b/bsp/stm32f40x/drivers/SConscript
@@ -3,9 +3,25 @@ Import('rtconfig')
from building import *
cwd = os.path.join(str(Dir('#')), 'drivers')
-src = Glob('*.c')
+
+# add the general drivers.
+src = Split("""
+board.c
+stm32f4xx_it.c
+usart.c
+""")
+
+# add Ethernet drivers.
+if GetDepend('RT_USING_LWIP'):
+ src += ['stm32f4xx_eth.c']
+
+# add gpio drivers.
+if GetDepend('RT_USING_PIN'):
+ src += ['gpio.c']
+
CPPPATH = [cwd]
group = DefineGroup('Drivers', src, depend = [''], CPPPATH = CPPPATH)
Return('group')
+
diff --git a/bsp/stm32f40x/drivers/stm32f4xx_eth.c b/bsp/stm32f40x/drivers/stm32f4xx_eth.c
new file mode 100644
index 0000000000..6b3a6fece1
--- /dev/null
+++ b/bsp/stm32f40x/drivers/stm32f4xx_eth.c
@@ -0,0 +1,4038 @@
+/**
+ ******************************************************************************
+ * @file stm32f2xx_eth.c
+ * @author MCD Application Team
+ * @version V0.0.1
+ * @date 10/21/2010
+ * @brief This file provides all the ETH firmware functions for STM32F2xx devices.
+ * This driver is based on V1.1.0 of "stm32_eth.c" driver, and updated
+ * to support new feature added in STM32F2xx devices (Enhanced DMA descriptors)
+ ******************************************************************************
+ * @copy
+ *
+ * THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS
+ * WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE
+ * TIME. AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY
+ * DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING
+ * FROM THE CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE
+ * CODING INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.
+ *
+ * <h2><center>&copy; COPYRIGHT 2010 STMicroelectronics</center></h2>
+ */
+
+/*
+ * Change Logs:
+ * Date Author Notes
+ * 2011-07-22 aozima first implementation.
+ * 2012-09-24 aozima update for stm32f4.
+ * 2012-09-26 aozima add phy monitor.
+*/
+
+/* Includes ------------------------------------------------------------------*/
+#include "stm32f4xx_eth.h"
+#include "stm32f4xx_rcc.h"
+
+/* STM32F ETH dirver options */
+#define RMII_MODE /* MII_MODE or RMII_MODE */
+#define RMII_TX_GPIO_GROUP 2 /* 1:GPIOB or 2:GPIOG */
+#define CHECKSUM_BY_HARDWARE
+
+/** @addtogroup STM32F4XX_ETH_Driver
+ * @brief ETH driver modules
+ * @{
+ */
+
+/** @defgroup ETH_Private_TypesDefinitions
+ * @{
+ */
+/**
+ * @}
+ */
+
+/** @defgroup ETH_Private_Defines
+ * @{
+ */
+/* Global pointers on Tx and Rx descriptor used to track transmit and receive descriptors */
+ETH_DMADESCTypeDef *DMATxDescToSet;
+ETH_DMADESCTypeDef *DMARxDescToGet;
+
+ETH_DMADESCTypeDef *DMAPTPTxDescToSet;
+ETH_DMADESCTypeDef *DMAPTPRxDescToGet;
+
+/* ETHERNET MAC address offsets */
+#define ETH_MAC_ADDR_HBASE (ETH_MAC_BASE + 0x40) /* ETHERNET MAC address high offset */
+#define ETH_MAC_ADDR_LBASE (ETH_MAC_BASE + 0x44) /* ETHERNET MAC address low offset */
+
+/* ETHERNET MACMIIAR register Mask */
+#define MACMIIAR_CR_MASK ((uint32_t)0xFFFFFFE3)
+
+/* ETHERNET MACCR register Mask */
+#define MACCR_CLEAR_MASK ((uint32_t)0xFF20810F)
+
+/* ETHERNET MACFCR register Mask */
+#define MACFCR_CLEAR_MASK ((uint32_t)0x0000FF41)
+
+/* ETHERNET DMAOMR register Mask */
+#define DMAOMR_CLEAR_MASK ((uint32_t)0xF8DE3F23)
+
+/* ETHERNET Remote Wake-up frame register length */
+#define ETH_WAKEUP_REGISTER_LENGTH 8
+
+/* ETHERNET Missed frames counter Shift */
+#define ETH_DMA_RX_OVERFLOW_MISSEDFRAMES_COUNTERSHIFT 17
+
+/* ETHERNET DMA Tx descriptors Collision Count Shift */
+#define ETH_DMATXDESC_COLLISION_COUNTSHIFT 3
+
+/* ETHERNET DMA Tx descriptors Buffer2 Size Shift */
+#define ETH_DMATXDESC_BUFFER2_SIZESHIFT 16
+
+/* ETHERNET DMA Rx descriptors Frame Length Shift */
+#define ETH_DMARXDESC_FRAME_LENGTHSHIFT 16
+
+/* ETHERNET DMA Rx descriptors Buffer2 Size Shift */
+#define ETH_DMARXDESC_BUFFER2_SIZESHIFT 16
+
+/* ETHERNET errors */
+#define ETH_ERROR ((uint32_t)0)
+#define ETH_SUCCESS ((uint32_t)1)
+/**
+ * @}
+ */
+
+/** @defgroup ETH_Private_Macros
+ * @{
+ */
+/**
+ * @}
+ */
+
+/** @defgroup ETH_Private_Variables
+ * @{
+ */
+/**
+ * @}
+ */
+
+/** @defgroup ETH_Private_FunctionPrototypes
+ * @{
+ */
+
+/**
+ * @}
+ */
+
+/** @defgroup ETH_Private_Functions
+ * @{
+ */
+
+/**
+ * @brief Deinitializes the ETHERNET peripheral registers to their default reset values.
+ * @param None
+ * @retval None
+ */
+void ETH_DeInit(void)
+{
+ RCC_AHB1PeriphResetCmd(RCC_AHB1Periph_ETH_MAC, ENABLE);
+ RCC_AHB1PeriphResetCmd(RCC_AHB1Periph_ETH_MAC, DISABLE);
+}
+
+/**
+ * @brief Initializes the ETHERNET peripheral according to the specified
+ * parameters in the ETH_InitStruct .
+ * @param ETH_InitStruct: pointer to a ETH_InitTypeDef structure that contains
+ * the configuration information for the specified ETHERNET peripheral.
+ * @param PHYAddress: external PHY address
+ * @retval ETH_ERROR: Ethernet initialization failed
+ * ETH_SUCCESS: Ethernet successfully initialized
+ */
+uint32_t ETH_Init(ETH_InitTypeDef* ETH_InitStruct)
+{
+ uint32_t tmpreg = 0;
+ __IO uint32_t i = 0;
+ RCC_ClocksTypeDef rcc_clocks;
+ uint32_t hclk = 60000000;
+ __IO uint32_t timeout = 0;
+ /* Check the parameters */
+ /* MAC --------------------------*/
+ assert_param(IS_ETH_AUTONEGOTIATION(ETH_InitStruct->ETH_AutoNegotiation));
+ assert_param(IS_ETH_WATCHDOG(ETH_InitStruct->ETH_Watchdog));
+ assert_param(IS_ETH_JABBER(ETH_InitStruct->ETH_Jabber));
+ assert_param(IS_ETH_INTER_FRAME_GAP(ETH_InitStruct->ETH_InterFrameGap));
+ assert_param(IS_ETH_CARRIER_SENSE(ETH_InitStruct->ETH_CarrierSense));
+ assert_param(IS_ETH_SPEED(ETH_InitStruct->ETH_Speed));
+ assert_param(IS_ETH_RECEIVE_OWN(ETH_InitStruct->ETH_ReceiveOwn));
+ assert_param(IS_ETH_LOOPBACK_MODE(ETH_InitStruct->ETH_LoopbackMode));
+ assert_param(IS_ETH_DUPLEX_MODE(ETH_InitStruct->ETH_Mode));
+ assert_param(IS_ETH_CHECKSUM_OFFLOAD(ETH_InitStruct->ETH_ChecksumOffload));
+ assert_param(IS_ETH_RETRY_TRANSMISSION(ETH_InitStruct->ETH_RetryTransmission));
+ assert_param(IS_ETH_AUTOMATIC_PADCRC_STRIP(ETH_InitStruct->ETH_AutomaticPadCRCStrip));
+ assert_param(IS_ETH_BACKOFF_LIMIT(ETH_InitStruct->ETH_BackOffLimit));
+ assert_param(IS_ETH_DEFERRAL_CHECK(ETH_InitStruct->ETH_DeferralCheck));
+ assert_param(IS_ETH_RECEIVE_ALL(ETH_InitStruct->ETH_ReceiveAll));
+ assert_param(IS_ETH_SOURCE_ADDR_FILTER(ETH_InitStruct->ETH_SourceAddrFilter));
+ assert_param(IS_ETH_CONTROL_FRAMES(ETH_InitStruct->ETH_PassControlFrames));
+ assert_param(IS_ETH_BROADCAST_FRAMES_RECEPTION(ETH_InitStruct->ETH_BroadcastFramesReception));
+ assert_param(IS_ETH_DESTINATION_ADDR_FILTER(ETH_InitStruct->ETH_DestinationAddrFilter));
+// assert_param(IS_ETH_PROMISCIOUS_MODE(ETH_InitStruct->ETH_PromiscuousMode));
+ assert_param(IS_ETH_MULTICAST_FRAMES_FILTER(ETH_InitStruct->ETH_MulticastFramesFilter));
+ assert_param(IS_ETH_UNICAST_FRAMES_FILTER(ETH_InitStruct->ETH_UnicastFramesFilter));
+ assert_param(IS_ETH_PAUSE_TIME(ETH_InitStruct->ETH_PauseTime));
+ assert_param(IS_ETH_ZEROQUANTA_PAUSE(ETH_InitStruct->ETH_ZeroQuantaPause));
+ assert_param(IS_ETH_PAUSE_LOW_THRESHOLD(ETH_InitStruct->ETH_PauseLowThreshold));
+ assert_param(IS_ETH_UNICAST_PAUSE_FRAME_DETECT(ETH_InitStruct->ETH_UnicastPauseFrameDetect));
+ assert_param(IS_ETH_RECEIVE_FLOWCONTROL(ETH_InitStruct->ETH_ReceiveFlowControl));
+ assert_param(IS_ETH_TRANSMIT_FLOWCONTROL(ETH_InitStruct->ETH_TransmitFlowControl));
+ assert_param(IS_ETH_VLAN_TAG_COMPARISON(ETH_InitStruct->ETH_VLANTagComparison));
+ assert_param(IS_ETH_VLAN_TAG_IDENTIFIER(ETH_InitStruct->ETH_VLANTagIdentifier));
+ /* DMA --------------------------*/
+ assert_param(IS_ETH_DROP_TCPIP_CHECKSUM_FRAME(ETH_InitStruct->ETH_DropTCPIPChecksumErrorFrame));
+ assert_param(IS_ETH_RECEIVE_STORE_FORWARD(ETH_InitStruct->ETH_ReceiveStoreForward));
+ assert_param(IS_ETH_FLUSH_RECEIVE_FRAME(ETH_InitStruct->ETH_FlushReceivedFrame));
+ assert_param(IS_ETH_TRANSMIT_STORE_FORWARD(ETH_InitStruct->ETH_TransmitStoreForward));
+ assert_param(IS_ETH_TRANSMIT_THRESHOLD_CONTROL(ETH_InitStruct->ETH_TransmitThresholdControl));
+ assert_param(IS_ETH_FORWARD_ERROR_FRAMES(ETH_InitStruct->ETH_ForwardErrorFrames));
+ assert_param(IS_ETH_FORWARD_UNDERSIZED_GOOD_FRAMES(ETH_InitStruct->ETH_ForwardUndersizedGoodFrames));
+ assert_param(IS_ETH_RECEIVE_THRESHOLD_CONTROL(ETH_InitStruct->ETH_ReceiveThresholdControl));
+ assert_param(IS_ETH_SECOND_FRAME_OPERATE(ETH_InitStruct->ETH_SecondFrameOperate));
+ assert_param(IS_ETH_ADDRESS_ALIGNED_BEATS(ETH_InitStruct->ETH_AddressAlignedBeats));
+ assert_param(IS_ETH_FIXED_BURST(ETH_InitStruct->ETH_FixedBurst));
+ assert_param(IS_ETH_RXDMA_BURST_LENGTH(ETH_InitStruct->ETH_RxDMABurstLength));
+ assert_param(IS_ETH_TXDMA_BURST_LENGTH(ETH_InitStruct->ETH_TxDMABurstLength));
+ assert_param(IS_ETH_DMA_DESC_SKIP_LENGTH(ETH_InitStruct->ETH_DescriptorSkipLength));
+ assert_param(IS_ETH_DMA_ARBITRATION_ROUNDROBIN_RXTX(ETH_InitStruct->ETH_DMAArbitration));
+ /*-------------------------------- MAC Config ------------------------------*/
+ /*---------------------- ETHERNET MACMIIAR Configuration -------------------*/
+ /* Get the ETHERNET MACMIIAR value */
+ tmpreg = ETH->MACMIIAR;
+ /* Clear CSR Clock Range CR[2:0] bits */
+ tmpreg &= MACMIIAR_CR_MASK;
+ /* Get hclk frequency value */
+ RCC_GetClocksFreq(&rcc_clocks);
+ hclk = rcc_clocks.HCLK_Frequency;
+
+ /* Set CR bits depending on hclk value */
+ if((hclk >= 20000000)&&(hclk < 35000000))
+ {
+ /* CSR Clock Range between 20-35 MHz */
+ tmpreg |= (uint32_t)ETH_MACMIIAR_CR_Div16;
+ }
+ else if((hclk >= 35000000)&&(hclk < 60000000))
+ {
+ /* CSR Clock Range between 35-60 MHz */
+ tmpreg |= (uint32_t)ETH_MACMIIAR_CR_Div26;
+ }
+ else if((hclk >= 60000000)&&(hclk < 100000000))
+ {
+ /* CSR Clock Range between 60-100 MHz */
+ tmpreg |= (uint32_t)ETH_MACMIIAR_CR_Div42;
+ }
+ else if((hclk >= 100000000)&&(hclk < 150000000))
+ {
+ /* CSR Clock Range between 100-150 MHz */
+ tmpreg |= (uint32_t)ETH_MACMIIAR_CR_Div62;
+ }
+ else /* ((hclk >= 150000000)&&(hclk <= 168000000)) */
+ {
+ /* CSR Clock Range between 150-168 MHz */
+ tmpreg |= (uint32_t)ETH_MACMIIAR_CR_Div102;
+ }
+
+ /* Write to ETHERNET MAC MIIAR: configure the ETHERNET CSR Clock Range */
+ ETH->MACMIIAR = (uint32_t)tmpreg;
+
+ /*------------------------ ETHERNET MACCR Configuration --------------------*/
+ /* Get the ETHERNET MACCR value */
+ tmpreg = ETH->MACCR;
+ /* Clear WD, PCE, PS, TE and RE bits */
+ tmpreg &= MACCR_CLEAR_MASK;
+ /* Set the WD bit according to ETH_Watchdog value */
+ /* Set the JD: bit according to ETH_Jabber value */
+ /* Set the IFG bit according to ETH_InterFrameGap value */
+ /* Set the DCRS bit according to ETH_CarrierSense value */
+ /* Set the FES bit according to ETH_Speed value */
+ /* Set the DO bit according to ETH_ReceiveOwn value */
+ /* Set the LM bit according to ETH_LoopbackMode value */
+ /* Set the DM bit according to ETH_Mode value */
+ /* Set the IPCO bit according to ETH_ChecksumOffload value */
+ /* Set the DR bit according to ETH_RetryTransmission value */
+ /* Set the ACS bit according to ETH_AutomaticPadCRCStrip value */
+ /* Set the BL bit according to ETH_BackOffLimit value */
+ /* Set the DC bit according to ETH_DeferralCheck value */
+ 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);
+ /* Write to ETHERNET MACCR */
+ ETH->MACCR = (uint32_t)tmpreg;
+
+ /*----------------------- ETHERNET MACFFR Configuration --------------------*/
+ /* Set the RA bit according to ETH_ReceiveAll value */
+ /* Set the SAF and SAIF bits according to ETH_SourceAddrFilter value */
+ /* Set the PCF bit according to ETH_PassControlFrames value */
+ /* Set the DBF bit according to ETH_BroadcastFramesReception value */
+ /* Set the DAIF bit according to ETH_DestinationAddrFilter value */
+ /* Set the PR bit according to ETH_PromiscuousMode value */
+ /* Set the PM, HMC and HPF bits according to ETH_MulticastFramesFilter value */
+ /* Set the HUC and HPF bits according to ETH_UnicastFramesFilter value */
+ /* Write to ETHERNET MACFFR */
+ 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);
+ /*--------------- ETHERNET MACHTHR and MACHTLR Configuration ---------------*/
+ /* Write to ETHERNET MACHTHR */
+ ETH->MACHTHR = (uint32_t)ETH_InitStruct->ETH_HashTableHigh;
+ /* Write to ETHERNET MACHTLR */
+ ETH->MACHTLR = (uint32_t)ETH_InitStruct->ETH_HashTableLow;
+ /*----------------------- ETHERNET MACFCR Configuration --------------------*/
+ /* Get the ETHERNET MACFCR value */
+ tmpreg = ETH->MACFCR;
+ /* Clear xx bits */
+ tmpreg &= MACFCR_CLEAR_MASK;
+
+ /* Set the PT bit according to ETH_PauseTime value */
+ /* Set the DZPQ bit according to ETH_ZeroQuantaPause value */
+ /* Set the PLT bit according to ETH_PauseLowThreshold value */
+ /* Set the UP bit according to ETH_UnicastPauseFrameDetect value */
+ /* Set the RFE bit according to ETH_ReceiveFlowControl value */
+ /* Set the TFE bit according to ETH_TransmitFlowControl value */
+ 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);
+ /* Write to ETHERNET MACFCR */
+ ETH->MACFCR = (uint32_t)tmpreg;
+ /*----------------------- ETHERNET MACVLANTR Configuration -----------------*/
+ /* Set the ETV bit according to ETH_VLANTagComparison value */
+ /* Set the VL bit according to ETH_VLANTagIdentifier value */
+ ETH->MACVLANTR = (uint32_t)(ETH_InitStruct->ETH_VLANTagComparison |
+ ETH_InitStruct->ETH_VLANTagIdentifier);
+
+ /*-------------------------------- DMA Config ------------------------------*/
+ /*----------------------- ETHERNET DMAOMR Configuration --------------------*/
+ /* Get the ETHERNET DMAOMR value */
+ tmpreg = ETH->DMAOMR;
+ /* Clear xx bits */
+ tmpreg &= DMAOMR_CLEAR_MASK;
+
+ /* Set the DT bit according to ETH_DropTCPIPChecksumErrorFrame value */
+ /* Set the RSF bit according to ETH_ReceiveStoreForward value */
+ /* Set the DFF bit according to ETH_FlushReceivedFrame value */
+ /* Set the TSF bit according to ETH_TransmitStoreForward value */
+ /* Set the TTC bit according to ETH_TransmitThresholdControl value */
+ /* Set the FEF bit according to ETH_ForwardErrorFrames value */
+ /* Set the FUF bit according to ETH_ForwardUndersizedGoodFrames value */
+ /* Set the RTC bit according to ETH_ReceiveThresholdControl value */
+ /* Set the OSF bit according to ETH_SecondFrameOperate value */
+ 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);
+ /* Write to ETHERNET DMAOMR */
+ ETH->DMAOMR = (uint32_t)tmpreg;
+
+ /*----------------------- ETHERNET DMABMR Configuration --------------------*/
+ /* Set the AAL bit according to ETH_AddressAlignedBeats value */
+ /* Set the FB bit according to ETH_FixedBurst value */
+ /* Set the RPBL and 4*PBL bits according to ETH_RxDMABurstLength value */
+ /* Set the PBL and 4*PBL bits according to ETH_TxDMABurstLength value */
+ /* Set the DSL bit according to ETH_DesciptorSkipLength value */
+ /* Set the PR and DA bits according to ETH_DMAArbitration value */
+ 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); /* Enable use of separate PBL for Rx and Tx */
+
+ #ifdef USE_ENHANCED_DMA_DESCRIPTORS
+ /* Enable the Enhanced DMA descriptors */
+ ETH->DMABMR |= ETH_DMABMR_EDE;
+ #endif /* USE_ENHANCED_DMA_DESCRIPTORS */
+
+ /* Return Ethernet configuration success */
+ return ETH_SUCCESS;
+}
+
+void ETH_StructInit(ETH_InitTypeDef* ETH_InitStruct)
+{
+ /* ETH_InitStruct members default value */
+ /*------------------------ MAC Configuration ---------------------------*/
+
+ /* PHY Auto-negotiation enabled */
+ ETH_InitStruct->ETH_AutoNegotiation = ETH_AutoNegotiation_Enable;
+ /* MAC watchdog enabled: cuts-off long frame */
+ ETH_InitStruct->ETH_Watchdog = ETH_Watchdog_Enable;
+ /* MAC Jabber enabled in Half-duplex mode */
+ ETH_InitStruct->ETH_Jabber = ETH_Jabber_Enable;
+ /* Ethernet interframe gap set to 96 bits */
+ ETH_InitStruct->ETH_InterFrameGap = ETH_InterFrameGap_96Bit;
+ /* Carrier Sense Enabled in Half-Duplex mode */
+ ETH_InitStruct->ETH_CarrierSense = ETH_CarrierSense_Enable;
+ /* PHY speed configured to 100Mbit/s */
+ ETH_InitStruct->ETH_Speed = ETH_Speed_100M;
+ /* Receive own Frames in Half-Duplex mode enabled */
+ ETH_InitStruct->ETH_ReceiveOwn = ETH_ReceiveOwn_Enable;
+ /* MAC MII loopback disabled */
+ ETH_InitStruct->ETH_LoopbackMode = ETH_LoopbackMode_Disable;
+ /* Full-Duplex mode selected */
+ ETH_InitStruct->ETH_Mode = ETH_Mode_FullDuplex;
+ /* IPv4 and TCP/UDP/ICMP frame Checksum Offload disabled */
+ ETH_InitStruct->ETH_ChecksumOffload = ETH_ChecksumOffload_Disable;
+ /* Retry Transmission enabled for half-duplex mode */
+ ETH_InitStruct->ETH_RetryTransmission = ETH_RetryTransmission_Enable;
+ /* Automatic PAD/CRC strip disabled*/
+ ETH_InitStruct->ETH_AutomaticPadCRCStrip = ETH_AutomaticPadCRCStrip_Disable;
+ /* half-duplex mode retransmission Backoff time_limit = 10 slot times*/
+ ETH_InitStruct->ETH_BackOffLimit = ETH_BackOffLimit_10;
+ /* half-duplex mode Deferral check disabled */
+ ETH_InitStruct->ETH_DeferralCheck = ETH_DeferralCheck_Disable;
+ /* Receive all frames disabled */
+ ETH_InitStruct->ETH_ReceiveAll = ETH_ReceiveAll_Disable;
+ /* Source address filtering (on the optional MAC addresses) disabled */
+ ETH_InitStruct->ETH_SourceAddrFilter = ETH_SourceAddrFilter_Disable;
+ /* Do not forward control frames that do not pass the address filtering */
+ ETH_InitStruct->ETH_PassControlFrames = ETH_PassControlFrames_BlockAll;
+ /* Disable reception of Broadcast frames */
+ ETH_InitStruct->ETH_BroadcastFramesReception = ETH_BroadcastFramesReception_Disable;
+ /* Normal Destination address filtering (not reverse addressing) */
+ ETH_InitStruct->ETH_DestinationAddrFilter = ETH_DestinationAddrFilter_Normal;
+ /* Promiscuous address filtering mode disabled */
+ ETH_InitStruct->ETH_PromiscuousMode = ETH_PromiscuousMode_Disable;
+ /* Perfect address filtering for multicast addresses */
+ ETH_InitStruct->ETH_MulticastFramesFilter = ETH_MulticastFramesFilter_Perfect;
+ /* Perfect address filtering for unicast addresses */
+ ETH_InitStruct->ETH_UnicastFramesFilter = ETH_UnicastFramesFilter_Perfect;
+ /* Initialize hash table high and low regs */
+ ETH_InitStruct->ETH_HashTableHigh = 0x0;
+ ETH_InitStruct->ETH_HashTableLow = 0x0;
+ /* Flow control config (flow control disabled)*/
+ ETH_InitStruct->ETH_PauseTime = 0x0;
+ ETH_InitStruct->ETH_ZeroQuantaPause = ETH_ZeroQuantaPause_Disable;
+ ETH_InitStruct->ETH_PauseLowThreshold = ETH_PauseLowThreshold_Minus4;
+ ETH_InitStruct->ETH_UnicastPauseFrameDetect = ETH_UnicastPauseFrameDetect_Disable;
+ ETH_InitStruct->ETH_ReceiveFlowControl = ETH_ReceiveFlowControl_Disable;
+ ETH_InitStruct->ETH_TransmitFlowControl = ETH_TransmitFlowControl_Disable;
+ /* VLANtag config (VLAN field not checked) */
+ ETH_InitStruct->ETH_VLANTagComparison = ETH_VLANTagComparison_16Bit;
+ ETH_InitStruct->ETH_VLANTagIdentifier = 0x0;
+
+ /*---------------------- DMA Configuration -------------------------------*/
+
+ /* Drops frames with with TCP/IP checksum errors */
+ ETH_InitStruct->ETH_DropTCPIPChecksumErrorFrame = ETH_DropTCPIPChecksumErrorFrame_Disable;
+ /* Store and forward mode enabled for receive */
+ ETH_InitStruct->ETH_ReceiveStoreForward = ETH_ReceiveStoreForward_Enable;
+ /* Flush received frame that created FIFO overflow */
+ ETH_InitStruct->ETH_FlushReceivedFrame = ETH_FlushReceivedFrame_Enable;
+ /* Store and forward mode enabled for transmit */
+ ETH_InitStruct->ETH_TransmitStoreForward = ETH_TransmitStoreForward_Enable;
+ /* Threshold TXFIFO level set to 64 bytes (used when threshold mode is enabled) */
+ ETH_InitStruct->ETH_TransmitThresholdControl = ETH_TransmitThresholdControl_64Bytes;
+ /* Disable forwarding frames with errors (short frames, CRC,...)*/
+ ETH_InitStruct->ETH_ForwardErrorFrames = ETH_ForwardErrorFrames_Disable;
+ /* Disable undersized good frames */
+ ETH_InitStruct->ETH_ForwardUndersizedGoodFrames = ETH_ForwardUndersizedGoodFrames_Disable;
+ /* Threshold RXFIFO level set to 64 bytes (used when Cut-through mode is enabled) */
+ ETH_InitStruct->ETH_ReceiveThresholdControl = ETH_ReceiveThresholdControl_64Bytes;
+ /* Disable Operate on second frame (transmit a second frame to FIFO without
+ waiting status of previous frame*/
+ ETH_InitStruct->ETH_SecondFrameOperate = ETH_SecondFrameOperate_Disable;
+ /* DMA works on 32-bit aligned start source and destinations addresses */
+ ETH_InitStruct->ETH_AddressAlignedBeats = ETH_AddressAlignedBeats_Enable;
+ /* Enabled Fixed Burst Mode (mix of INC4, INC8, INC16 and SINGLE DMA transactions */
+ ETH_InitStruct->ETH_FixedBurst = ETH_FixedBurst_Enable;
+ /* DMA transfer max burst length = 32 beats = 32 x 32bits */
+ ETH_InitStruct->ETH_RxDMABurstLength = ETH_RxDMABurstLength_32Beat;
+ ETH_InitStruct->ETH_TxDMABurstLength = ETH_TxDMABurstLength_32Beat;
+ /* DMA Ring mode skip length = 0 */
+ ETH_InitStruct->ETH_DescriptorSkipLength = 0x0;
+ /* Equal priority (round-robin) between transmit and receive DMA engines */
+ ETH_InitStruct->ETH_DMAArbitration = ETH_DMAArbitration_RoundRobin_RxTx_1_1;
+}
+
+/**
+ * @brief Enables ENET MAC and DMA reception/transmission
+ * @param None
+ * @retval None
+ */
+void ETH_Start(void)
+{
+ /* Enable transmit state machine of the MAC for transmission on the MII */
+ ETH_MACTransmissionCmd(ENABLE);
+ /* Flush Transmit FIFO */
+ ETH_FlushTransmitFIFO();
+ /* Enable receive state machine of the MAC for reception from the MII */
+ ETH_MACReceptionCmd(ENABLE);
+
+ /* Start DMA transmission */
+ ETH_DMATransmissionCmd(ENABLE);
+ /* Start DMA reception */
+ ETH_DMAReceptionCmd(ENABLE);
+}
+
+/**
+ * @brief Transmits a packet, from application buffer, pointed by ppkt.
+ * @param ppkt: pointer to the application's packet buffer to transmit.
+ * @param FrameLength: Tx Packet size.
+ * @retval ETH_ERROR: in case of Tx desc owned by DMA
+ * ETH_SUCCESS: for correct transmission
+ */
+uint32_t ETH_HandleTxPkt(uint8_t *ppkt, uint16_t FrameLength)
+{
+ uint32_t offset = 0;
+
+ /* Check if the descriptor is owned by the ETHERNET DMA (when set) or CPU (when reset) */
+ if((DMATxDescToSet->Status & ETH_DMATxDesc_OWN) != (uint32_t)RESET)
+ {
+ /* Return ERROR: OWN bit set */
+ return ETH_ERROR;
+ }
+
+ /* Copy the frame to be sent into memory pointed by the current ETHERNET DMA Tx descriptor */
+ for(offset=0; offset<FrameLength; offset++)
+ {
+ (*(__IO uint8_t *)((DMATxDescToSet->Buffer1Addr) + offset)) = (*(ppkt + offset));
+ }
+
+ /* Setting the Frame Length: bits[12:0] */
+ DMATxDescToSet->ControlBufferSize = (FrameLength & ETH_DMATxDesc_TBS1);
+ /* Setting the last segment and first segment bits (in this case a frame is transmitted in one descriptor) */
+ DMATxDescToSet->Status |= ETH_DMATxDesc_LS | ETH_DMATxDesc_FS;
+ /* Set Own bit of the Tx descriptor Status: gives the buffer back to ETHERNET DMA */
+ DMATxDescToSet->Status |= ETH_DMATxDesc_OWN;
+ /* When Tx Buffer unavailable flag is set: clear it and resume transmission */
+ if ((ETH->DMASR & ETH_DMASR_TBUS) != (uint32_t)RESET)
+ {
+ /* Clear TBUS ETHERNET DMA flag */
+ ETH->DMASR = ETH_DMASR_TBUS;
+ /* Resume DMA transmission*/
+ ETH->DMATPDR = 0;
+ }
+
+ /* Update the ETHERNET DMA global Tx descriptor with next Tx decriptor */
+ /* Chained Mode */
+ if((DMATxDescToSet->Status & ETH_DMATxDesc_TCH) != (uint32_t)RESET)
+ {
+ /* Selects the next DMA Tx descriptor list for next buffer to send */
+ DMATxDescToSet = (ETH_DMADESCTypeDef*) (DMATxDescToSet->Buffer2NextDescAddr);
+ }
+ else /* Ring Mode */
+ {
+ if((DMATxDescToSet->Status & ETH_DMATxDesc_TER) != (uint32_t)RESET)
+ {
+ /* Selects the first DMA Tx descriptor for next buffer to send: last Tx descriptor was used */
+ DMATxDescToSet = (ETH_DMADESCTypeDef*) (ETH->DMATDLAR);
+ }
+ else
+ {
+ /* Selects the next DMA Tx descriptor list for next buffer to send */
+ DMATxDescToSet = (ETH_DMADESCTypeDef*) ((uint32_t)DMATxDescToSet + 0x10 + ((ETH->DMABMR & ETH_DMABMR_DSL) >> 2));
+ }
+ }
+ /* Return SUCCESS */
+ return ETH_SUCCESS;
+}
+
+/**
+ * @brief Receives a packet and copies it to memory pointed by ppkt.
+ * @param ppkt: pointer to the application packet receive buffer.
+ * @retval ETH_ERROR: if there is error in reception
+ * framelength: received packet size if packet reception is correct
+ */
+uint32_t ETH_HandleRxPkt(uint8_t *ppkt)
+{
+ uint32_t offset = 0, framelength = 0;
+ /* Check if the descriptor is owned by the ETHERNET DMA (when set) or CPU (when reset) */
+ if((DMARxDescToGet->Status & ETH_DMARxDesc_OWN) != (uint32_t)RESET)
+ {
+ /* Return error: OWN bit set */
+ return ETH_ERROR;
+ }
+
+ if(((DMARxDescToGet->Status & ETH_DMARxDesc_ES) == (uint32_t)RESET) &&
+ ((DMARxDescToGet->Status & ETH_DMARxDesc_LS) != (uint32_t)RESET) &&
+ ((DMARxDescToGet->Status & ETH_DMARxDesc_FS) != (uint32_t)RESET))
+ {
+ /* Get the Frame Length of the received packet: substruct 4 bytes of the CRC */
+ framelength = ((DMARxDescToGet->Status & ETH_DMARxDesc_FL) >> ETH_DMARXDESC_FRAME_LENGTHSHIFT) - 4;
+ /* Copy the received frame into buffer from memory pointed by the current ETHERNET DMA Rx descriptor */
+ for(offset=0; offset<framelength; offset++)
+ {
+ (*(ppkt + offset)) = (*(__IO uint8_t *)((DMARxDescToGet->Buffer1Addr) + offset));
+ }
+ }
+ else
+ {
+ /* Return ERROR */
+ framelength = ETH_ERROR;
+ }
+ /* Set Own bit of the Rx descriptor Status: gives the buffer back to ETHERNET DMA */
+ DMARxDescToGet->Status = ETH_DMARxDesc_OWN;
+
+ /* When Rx Buffer unavailable flag is set: clear it and resume reception */
+ if ((ETH->DMASR & ETH_DMASR_RBUS) != (uint32_t)RESET)
+ {
+ /* Clear RBUS ETHERNET DMA flag */
+ ETH->DMASR = ETH_DMASR_RBUS;
+ /* Resume DMA reception */
+ ETH->DMARPDR = 0;
+ }
+
+ /* Update the ETHERNET DMA global Rx descriptor with next Rx decriptor */
+ /* Chained Mode */
+ if((DMARxDescToGet->ControlBufferSize & ETH_DMARxDesc_RCH) != (uint32_t)RESET)
+ {
+ /* Selects the next DMA Rx descriptor list for next buffer to read */
+ DMARxDescToGet = (ETH_DMADESCTypeDef*) (DMARxDescToGet->Buffer2NextDescAddr);
+ }
+ else /* Ring Mode */
+ {
+ if((DMARxDescToGet->ControlBufferSize & ETH_DMARxDesc_RER) != (uint32_t)RESET)
+ {
+ /* Selects the first DMA Rx descriptor for next buffer to read: last Rx descriptor was used */
+ DMARxDescToGet = (ETH_DMADESCTypeDef*) (ETH->DMARDLAR);
+ }
+ else
+ {
+ /* Selects the next DMA Rx descriptor list for next buffer to read */
+ DMARxDescToGet = (ETH_DMADESCTypeDef*) ((uint32_t)DMARxDescToGet + 0x10 + ((ETH->DMABMR & ETH_DMABMR_DSL) >> 2));
+ }
+ }
+
+ /* Return Frame Length/ERROR */
+ return (framelength);
+}
+
+/**
+ * @brief Get the size of received the received packet.
+ * @param None
+ * @retval framelength: received packet size
+ */
+uint32_t ETH_GetRxPktSize(void)
+{
+ uint32_t frameLength = 0;
+ if(((DMARxDescToGet->Status & ETH_DMARxDesc_OWN) == (uint32_t)RESET) &&
+ ((DMARxDescToGet->Status & ETH_DMARxDesc_ES) == (uint32_t)RESET) &&
+ ((DMARxDescToGet->Status & ETH_DMARxDesc_LS) != (uint32_t)RESET) &&
+ ((DMARxDescToGet->Status & ETH_DMARxDesc_FS) != (uint32_t)RESET))
+ {
+ /* Get the size of the packet: including 4 bytes of the CRC */
+ frameLength = ETH_GetDMARxDescFrameLength(DMARxDescToGet);
+ }
+
+ /* Return Frame Length */
+ return frameLength;
+}
+
+/**
+ * @brief Drop a Received packet (too small packet, etc...)
+ * @param None
+ * @retval None
+ */
+void ETH_DropRxPkt(void)
+{
+ /* Set Own bit of the Rx descriptor Status: gives the buffer back to ETHERNET DMA */
+ DMARxDescToGet->Status = ETH_DMARxDesc_OWN;
+ /* Chained Mode */
+ if((DMARxDescToGet->ControlBufferSize & ETH_DMARxDesc_RCH) != (uint32_t)RESET)
+ {
+ /* Selects the next DMA Rx descriptor list for next buffer read */
+ DMARxDescToGet = (ETH_DMADESCTypeDef*) (DMARxDescToGet->Buffer2NextDescAddr);
+ }
+ else /* Ring Mode */
+ {
+ if((DMARxDescToGet->ControlBufferSize & ETH_DMARxDesc_RER) != (uint32_t)RESET)
+ {
+ /* Selects the next DMA Rx descriptor list for next buffer read: this will
+ be the first Rx descriptor in this case */
+ DMARxDescToGet = (ETH_DMADESCTypeDef*) (ETH->DMARDLAR);
+ }
+ else
+ {
+ /* Selects the next DMA Rx descriptor list for next buffer read */
+ DMARxDescToGet = (ETH_DMADESCTypeDef*) ((uint32_t)DMARxDescToGet + 0x10 + ((ETH->DMABMR & ETH_DMABMR_DSL) >> 2));
+ }
+ }
+}
+
+#ifdef USE_ENHANCED_DMA_DESCRIPTORS
+/**
+ * @brief Enables or disables the Enhanced descriptor structure.
+ * @param NewState: new state of the Enhanced descriptor structure.
+ * This parameter can be: ENABLE or DISABLE.
+ * @retval None
+ */
+void ETH_EnhancedDescriptorCmd(FunctionalState NewState)
+{
+ /* Check the parameters */
+ assert_param(IS_FUNCTIONAL_STATE(NewState));
+
+ if (NewState != DISABLE)
+ {
+ /* Enable enhanced descriptor structure */
+ ETH->DMABMR |= ETH_DMABMR_EDE;
+ }
+ else
+ {
+ /* Disable enhanced descriptor structure */
+ ETH->DMABMR &= ~ETH_DMABMR_EDE;
+ }
+}
+#endif /* USE_ENHANCED_DMA_DESCRIPTORS */
+/*--------------------------------- PHY ------------------------------------*/
+/**
+ * @brief Read a PHY register
+ * @param PHYAddress: PHY device address, is the index of one of supported 32 PHY devices.
+ * This parameter can be one of the following values: 0,..,31
+ * @param PHYReg: PHY register address, is the index of one of the 32 PHY register.
+ * This parameter can be one of the following values:
+ * @arg PHY_BCR: Tranceiver Basic Control Register
+ * @arg PHY_BSR: Tranceiver Basic Status Register
+ * @arg PHY_SR : Tranceiver Status Register
+ * @arg More PHY register could be read depending on the used PHY
+ * @retval ETH_ERROR: in case of timeout
+ * MAC MIIDR register value: Data read from the selected PHY register (correct read )
+ */
+uint16_t ETH_ReadPHYRegister(uint16_t PHYAddress, uint16_t PHYReg)
+{
+ uint32_t tmpreg = 0;
+__IO uint32_t timeout = 0;
+ /* Check the parameters */
+ assert_param(IS_ETH_PHY_ADDRESS(PHYAddress));
+ assert_param(IS_ETH_PHY_REG(PHYReg));
+
+ /* Get the ETHERNET MACMIIAR value */
+ tmpreg = ETH->MACMIIAR;
+ /* Keep only the CSR Clock Range CR[2:0] bits value */
+ tmpreg &= ~MACMIIAR_CR_MASK;
+ /* Prepare the MII address register value */
+ tmpreg |=(((uint32_t)PHYAddress<<11) & ETH_MACMIIAR_PA); /* Set the PHY device address */
+ tmpreg |=(((uint32_t)PHYReg<<6) & ETH_MACMIIAR_MR); /* Set the PHY register address */
+ tmpreg &= ~ETH_MACMIIAR_MW; /* Set the read mode */
+ tmpreg |= ETH_MACMIIAR_MB; /* Set the MII Busy bit */
+ /* Write the result value into the MII Address register */
+ ETH->MACMIIAR = tmpreg;
+ /* Check for the Busy flag */
+ do
+ {
+ timeout++;
+ tmpreg = ETH->MACMIIAR;
+ } while ((tmpreg & ETH_MACMIIAR_MB) && (timeout < (uint32_t)PHY_READ_TO));
+ /* Return ERROR in case of timeout */
+ if(timeout == PHY_READ_TO)
+ {
+ return (uint16_t)ETH_ERROR;
+ }
+
+ /* Return data register value */
+ return (uint16_t)(ETH->MACMIIDR);
+}
+
+/**
+ * @brief Write to a PHY register
+ * @param PHYAddress: PHY device address, is the index of one of supported 32 PHY devices.
+ * This parameter can be one of the following values: 0,..,31
+ * @param PHYReg: PHY register address, is the index of one of the 32 PHY register.
+ * This parameter can be one of the following values:
+ * @arg PHY_BCR : Tranceiver Control Register
+ * @arg More PHY register could be written depending on the used PHY
+ * @param PHYValue: the value to write
+ * @retval ETH_ERROR: in case of timeout
+ * ETH_SUCCESS: for correct write
+ */
+uint32_t ETH_WritePHYRegister(uint16_t PHYAddress, uint16_t PHYReg, uint16_t PHYValue)
+{
+ uint32_t tmpreg = 0;
+ __IO uint32_t timeout = 0;
+ /* Check the parameters */
+ assert_param(IS_ETH_PHY_ADDRESS(PHYAddress));
+ assert_param(IS_ETH_PHY_REG(PHYReg));
+
+ /* Get the ETHERNET MACMIIAR value */
+ tmpreg = ETH->MACMIIAR;
+ /* Keep only the CSR Clock Range CR[2:0] bits value */
+ tmpreg &= ~MACMIIAR_CR_MASK;
+ /* Prepare the MII register address value */
+ tmpreg |=(((uint32_t)PHYAddress<<11) & ETH_MACMIIAR_PA); /* Set the PHY device address */
+ tmpreg |=(((uint32_t)PHYReg<<6) & ETH_MACMIIAR_MR); /* Set the PHY register address */
+ tmpreg |= ETH_MACMIIAR_MW; /* Set the write mode */
+ tmpreg |= ETH_MACMIIAR_MB; /* Set the MII Busy bit */
+ /* Give the value to the MII data register */
+ ETH->MACMIIDR = PHYValue;
+ /* Write the result value into the MII Address register */
+ ETH->MACMIIAR = tmpreg;
+ /* Check for the Busy flag */
+ do
+ {
+ timeout++;
+ tmpreg = ETH->MACMIIAR;
+ } while ((tmpreg & ETH_MACMIIAR_MB) && (timeout < (uint32_t)PHY_WRITE_TO));
+ /* Return ERROR in case of timeout */
+ if(timeout == PHY_WRITE_TO)
+ {
+ return ETH_ERROR;
+ }
+
+ /* Return SUCCESS */
+ return ETH_SUCCESS;
+}
+
+/**
+ * @brief Enables or disables the PHY loopBack mode.
+ * @Note: Don't be confused with ETH_MACLoopBackCmd function which enables internal
+ * loopback at MII level
+ * @param PHYAddress: PHY device address, is the index of one of supported 32 PHY devices.
+ * This parameter can be one of the following values:
+ * @param NewState: new state of the PHY loopBack mode.
+ * This parameter can be: ENABLE or DISABLE.
+ * @retval ETH_ERROR: in case of bad PHY configuration
+ * ETH_SUCCESS: for correct PHY configuration
+ */
+uint32_t ETH_PHYLoopBackCmd(uint16_t PHYAddress, FunctionalState NewState)
+{
+ uint16_t tmpreg = 0;
+ /* Check the parameters */
+ assert_param(IS_ETH_PHY_ADDRESS(PHYAddress));
+ assert_param(IS_FUNCTIONAL_STATE(NewState));
+
+ /* Get the PHY configuration to update it */
+ tmpreg = ETH_ReadPHYRegister(PHYAddress, PHY_BCR);
+
+ if (NewState != DISABLE)
+ {
+ /* Enable the PHY loopback mode */
+ tmpreg |= PHY_Loopback;
+ }
+ else
+ {
+ /* Disable the PHY loopback mode: normal mode */
+ tmpreg &= (uint16_t)(~(uint16_t)PHY_Loopback);
+ }
+ /* Update the PHY control register with the new configuration */
+ if(ETH_WritePHYRegister(PHYAddress, PHY_BCR, tmpreg) != (uint32_t)RESET)
+ {
+ return ETH_SUCCESS;
+ }
+ else
+ {
+ /* Return SUCCESS */
+ return ETH_ERROR;
+ }
+}
+
+/*--------------------------------- MAC ------------------------------------*/
+/**
+ * @brief Enables or disables the MAC transmission.
+ * @param NewState: new state of the MAC transmission.
+ * This parameter can be: ENABLE or DISABLE.
+ * @retval None
+ */
+void ETH_MACTransmissionCmd(FunctionalState NewState)
+{
+ /* Check the parameters */
+ assert_param(IS_FUNCTIONAL_STATE(NewState));
+
+ if (NewState != DISABLE)
+ {
+ /* Enable the MAC transmission */
+ ETH->MACCR |= ETH_MACCR_TE;
+ }
+ else
+ {
+ /* Disable the MAC transmission */
+ ETH->MACCR &= ~ETH_MACCR_TE;
+ }
+}
+
+/**
+ * @brief Enables or disables the MAC reception.
+ * @param NewState: new state of the MAC reception.
+ * This parameter can be: ENABLE or DISABLE.
+ * @retval None
+ */
+void ETH_MACReceptionCmd(FunctionalState NewState)
+{
+ /* Check the parameters */
+ assert_param(IS_FUNCTIONAL_STATE(NewState));
+
+ if (NewState != DISABLE)
+ {
+ /* Enable the MAC reception */
+ ETH->MACCR |= ETH_MACCR_RE;
+ }
+ else
+ {
+ /* Disable the MAC reception */
+ ETH->MACCR &= ~ETH_MACCR_RE;
+ }
+}
+
+/**
+ * @brief Checks whether the ETHERNET flow control busy bit is set or not.
+ * @param None
+ * @retval The new state of flow control busy status bit (SET or RESET).
+ */
+FlagStatus ETH_GetFlowControlBusyStatus(void)
+{
+ FlagStatus bitstatus = RESET;
+ /* The Flow Control register should not be written to until this bit is cleared */
+ if ((ETH->MACFCR & ETH_MACFCR_FCBBPA) != (uint32_t)RESET)
+ {
+ bitstatus = SET;
+ }
+ else
+ {
+ bitstatus = RESET;
+ }
+ return bitstatus;
+}
+
+/**
+ * @brief Initiate a Pause Control Frame (Full-duplex only).
+ * @param None
+ * @retval None
+ */
+void ETH_InitiatePauseControlFrame(void)
+{
+ /* When Set In full duplex MAC initiates pause control frame */
+ ETH->MACFCR |= ETH_MACFCR_FCBBPA;
+}
+
+/**
+ * @brief Enables or disables the MAC BackPressure operation activation (Half-duplex only).
+ * @param NewState: new state of the MAC BackPressure operation activation.
+ * This parameter can be: ENABLE or DISABLE.
+ * @retval None
+ */
+void ETH_BackPressureActivationCmd(FunctionalState NewState)
+{
+ /* Check the parameters */
+ assert_param(IS_FUNCTIONAL_STATE(NewState));
+
+ if (NewState != DISABLE)
+ {
+ /* Activate the MAC BackPressure operation */
+ /* In Half duplex: during backpressure, when the MAC receives a new frame,
+ the transmitter starts sending a JAM pattern resulting in a collision */
+ ETH->MACFCR |= ETH_MACFCR_FCBBPA;
+ }
+ else
+ {
+ /* Desactivate the MAC BackPressure operation */
+ ETH->MACFCR &= ~ETH_MACFCR_FCBBPA;
+ }
+}
+
+/**
+ * @brief Checks whether the specified ETHERNET MAC flag is set or not.
+ * @param ETH_MAC_FLAG: specifies the flag to check.
+ * This parameter can be one of the following values:
+ * @arg ETH_MAC_FLAG_TST : Time stamp trigger flag
+ * @arg ETH_MAC_FLAG_MMCT : MMC transmit flag
+ * @arg ETH_MAC_FLAG_MMCR : MMC receive flag
+ * @arg ETH_MAC_FLAG_MMC : MMC flag
+ * @arg ETH_MAC_FLAG_PMT : PMT flag
+ * @retval The new state of ETHERNET MAC flag (SET or RESET).
+ */
+FlagStatus ETH_GetMACFlagStatus(uint32_t ETH_MAC_FLAG)
+{
+ FlagStatus bitstatus = RESET;
+ /* Check the parameters */
+ assert_param(IS_ETH_MAC_GET_FLAG(ETH_MAC_FLAG));
+ if ((ETH->MACSR & ETH_MAC_FLAG) != (uint32_t)RESET)
+ {
+ bitstatus = SET;
+ }
+ else
+ {
+ bitstatus = RESET;
+ }
+ return bitstatus;
+}
+
+/**
+ * @brief Checks whether the specified ETHERNET MAC interrupt has occurred or not.
+ * @param ETH_MAC_IT: specifies the interrupt source to check.
+ * This parameter can be one of the following values:
+ * @arg ETH_MAC_IT_TST : Time stamp trigger interrupt
+ * @arg ETH_MAC_IT_MMCT : MMC transmit interrupt
+ * @arg ETH_MAC_IT_MMCR : MMC receive interrupt
+ * @arg ETH_MAC_IT_MMC : MMC interrupt
+ * @arg ETH_MAC_IT_PMT : PMT interrupt
+ * @retval The new state of ETHERNET MAC interrupt (SET or RESET).
+ */
+ITStatus ETH_GetMACITStatus(uint32_t ETH_MAC_IT)
+{
+ ITStatus bitstatus = RESET;
+ /* Check the parameters */
+ assert_param(IS_ETH_MAC_GET_IT(ETH_MAC_IT));
+ if ((ETH->MACSR & ETH_MAC_IT) != (uint32_t)RESET)
+ {
+ bitstatus = SET;
+ }
+ else
+ {
+ bitstatus = RESET;
+ }
+ return bitstatus;
+}
+
+/**
+ * @brief Enables or disables the specified ETHERNET MAC interrupts.
+ * @param ETH_MAC_IT: specifies the ETHERNET MAC interrupt sources to be
+ * enabled or disabled.
+ * This parameter can be any combination of the following values:
+ * @arg ETH_MAC_IT_TST : Time stamp trigger interrupt
+ * @arg ETH_MAC_IT_PMT : PMT interrupt
+ * @param NewState: new state of the specified ETHERNET MAC interrupts.
+ * This parameter can be: ENABLE or DISABLE.
+ * @retval None
+ */
+void ETH_MACITConfig(uint32_t ETH_MAC_IT, FunctionalState NewState)
+{
+ /* Check the parameters */
+ assert_param(IS_ETH_MAC_IT(ETH_MAC_IT));
+ assert_param(IS_FUNCTIONAL_STATE(NewState));
+
+ if (NewState != DISABLE)
+ {
+ /* Enable the selected ETHERNET MAC interrupts */
+ ETH->MACIMR &= (~(uint32_t)ETH_MAC_IT);
+ }
+ else
+ {
+ /* Disable the selected ETHERNET MAC interrupts */
+ ETH->MACIMR |= ETH_MAC_IT;
+ }
+}
+
+/**
+ * @brief configures the selected MAC address.
+ * @param MacAddr: The MAC addres to configure.
+ * This parameter can be one of the following values:
+ * @arg ETH_MAC_Address0 : MAC Address0
+ * @arg ETH_MAC_Address1 : MAC Address1
+ * @arg ETH_MAC_Address2 : MAC Address2
+ * @arg ETH_MAC_Address3 : MAC Address3
+ * @param Addr: Pointer on MAC address buffer data (6 bytes).
+ * @retval None
+ */
+void ETH_MACAddressConfig(uint32_t MacAddr, uint8_t *Addr)
+{
+ uint32_t tmpreg;
+ /* Check the parameters */
+ assert_param(IS_ETH_MAC_ADDRESS0123(MacAddr));
+
+ /* Calculate the selectecd MAC address high register */
+ tmpreg = ((uint32_t)Addr[5] << 8) | (uint32_t)Addr[4];
+ /* Load the selectecd MAC address high register */
+ (*(__IO uint32_t *) (ETH_MAC_ADDR_HBASE + MacAddr)) = tmpreg;
+ /* Calculate the selectecd MAC address low register */
+ tmpreg = ((uint32_t)Addr[3] << 24) | ((uint32_t)Addr[2] << 16) | ((uint32_t)Addr[1] << 8) | Addr[0];
+
+ /* Load the selectecd MAC address low register */
+ (*(__IO uint32_t *) (ETH_MAC_ADDR_LBASE + MacAddr)) = tmpreg;
+}
+
+/**
+ * @brief Get the selected MAC address.
+ * @param MacAddr: The MAC addres to return.
+ * This parameter can be one of the following values:
+ * @arg ETH_MAC_Address0 : MAC Address0
+ * @arg ETH_MAC_Address1 : MAC Address1
+ * @arg ETH_MAC_Address2 : MAC Address2
+ * @arg ETH_MAC_Address3 : MAC Address3
+ * @param Addr: Pointer on MAC address buffer data (6 bytes).
+ * @retval None
+ */
+void ETH_GetMACAddress(uint32_t MacAddr, uint8_t *Addr)
+{
+ uint32_t tmpreg;
+ /* Check the parameters */
+ assert_param(IS_ETH_MAC_ADDRESS0123(MacAddr));
+
+ /* Get the selectecd MAC address high register */
+ tmpreg =(*(__IO uint32_t *) (ETH_MAC_ADDR_HBASE + MacAddr));
+
+ /* Calculate the selectecd MAC address buffer */
+ Addr[5] = ((tmpreg >> 8) & (uint8_t)0xFF);
+ Addr[4] = (tmpreg & (uint8_t)0xFF);
+ /* Load the selectecd MAC address low register */
+ tmpreg =(*(__IO uint32_t *) (ETH_MAC_ADDR_LBASE + MacAddr));
+ /* Calculate the selectecd MAC address buffer */
+ Addr[3] = ((tmpreg >> 24) & (uint8_t)0xFF);
+ Addr[2] = ((tmpreg >> 16) & (uint8_t)0xFF);
+ Addr[1] = ((tmpreg >> 8 ) & (uint8_t)0xFF);
+ Addr[0] = (tmpreg & (uint8_t)0xFF);
+}
+
+/**
+ * @brief Enables or disables the Address filter module uses the specified
+ * ETHERNET MAC address for perfect filtering
+ * @param MacAddr: specifies the ETHERNET MAC address to be used for prfect filtering.
+ * This parameter can be one of the following values:
+ * @arg ETH_MAC_Address1 : MAC Address1
+ * @arg ETH_MAC_Address2 : MAC Address2
+ * @arg ETH_MAC_Address3 : MAC Address3
+ * @param NewState: new state of the specified ETHERNET MAC address use.
+ * This parameter can be: ENABLE or DISABLE.
+ * @retval None
+ */
+void ETH_MACAddressPerfectFilterCmd(uint32_t MacAddr, FunctionalState NewState)
+{
+ /* Check the parameters */
+ assert_param(IS_ETH_MAC_ADDRESS123(MacAddr));
+ assert_param(IS_FUNCTIONAL_STATE(NewState));
+
+ if (NewState != DISABLE)
+ {
+ /* Enable the selected ETHERNET MAC address for perfect filtering */
+ (*(__IO uint32_t *) (ETH_MAC_ADDR_HBASE + MacAddr)) |= ETH_MACA1HR_AE;
+ }
+ else
+ {
+ /* Disable the selected ETHERNET MAC address for perfect filtering */
+ (*(__IO uint32_t *) (ETH_MAC_ADDR_HBASE + MacAddr)) &=(~(uint32_t)ETH_MACA1HR_AE);
+ }
+}
+
+/**
+ * @brief Set the filter type for the specified ETHERNET MAC address
+ * @param MacAddr: specifies the ETHERNET MAC address
+ * This parameter can be one of the following values:
+ * @arg ETH_MAC_Address1 : MAC Address1
+ * @arg ETH_MAC_Address2 : MAC Address2
+ * @arg ETH_MAC_Address3 : MAC Address3
+ * @param Filter: specifies the used frame received field for comparaison
+ * This parameter can be one of the following values:
+ * @arg ETH_MAC_AddressFilter_SA : MAC Address is used to compare with the
+ * SA fields of the received frame.
+ * @arg ETH_MAC_AddressFilter_DA : MAC Address is used to compare with the
+ * DA fields of the received frame.
+ * @retval None
+ */
+void ETH_MACAddressFilterConfig(uint32_t MacAddr, uint32_t Filter)
+{
+ /* Check the parameters */
+ assert_param(IS_ETH_MAC_ADDRESS123(MacAddr));
+ assert_param(IS_ETH_MAC_ADDRESS_FILTER(Filter));
+
+ if (Filter != ETH_MAC_AddressFilter_DA)
+ {
+ /* The selected ETHERNET MAC address is used to compare with the SA fields of the
+ received frame. */
+ (*(__IO uint32_t *) (ETH_MAC_ADDR_HBASE + MacAddr)) |= ETH_MACA1HR_SA;
+ }
+ else
+ {
+ /* The selected ETHERNET MAC address is used to compare with the DA fields of the
+ received frame. */
+ (*(__IO uint32_t *) (ETH_MAC_ADDR_HBASE + MacAddr)) &=(~(uint32_t)ETH_MACA1HR_SA);
+ }
+}
+
+/**
+ * @brief Set the filter type for the specified ETHERNET MAC address
+ * @param MacAddr: specifies the ETHERNET MAC address
+ * This parameter can be one of the following values:
+ * @arg ETH_MAC_Address1 : MAC Address1
+ * @arg ETH_MAC_Address2 : MAC Address2
+ * @arg ETH_MAC_Address3 : MAC Address3
+ * @param MaskByte: specifies the used address bytes for comparaison
+ * This parameter can be any combination of the following values:
+ * @arg ETH_MAC_AddressMask_Byte6 : Mask MAC Address high reg bits [15:8].
+ * @arg ETH_MAC_AddressMask_Byte5 : Mask MAC Address high reg bits [7:0].
+ * @arg ETH_MAC_AddressMask_Byte4 : Mask MAC Address low reg bits [31:24].
+ * @arg ETH_MAC_AddressMask_Byte3 : Mask MAC Address low reg bits [23:16].
+ * @arg ETH_MAC_AddressMask_Byte2 : Mask MAC Address low reg bits [15:8].
+ * @arg ETH_MAC_AddressMask_Byte1 : Mask MAC Address low reg bits [7:0].
+ * @retval None
+ */
+void ETH_MACAddressMaskBytesFilterConfig(uint32_t MacAddr, uint32_t MaskByte)
+{
+ /* Check the parameters */
+ assert_param(IS_ETH_MAC_ADDRESS123(MacAddr));
+ assert_param(IS_ETH_MAC_ADDRESS_MASK(MaskByte));
+
+ /* Clear MBC bits in the selected MAC address high register */
+ (*(__IO uint32_t *) (ETH_MAC_ADDR_HBASE + MacAddr)) &=(~(uint32_t)ETH_MACA1HR_MBC);
+ /* Set the selected Filetr mask bytes */
+ (*(__IO uint32_t *) (ETH_MAC_ADDR_HBASE + MacAddr)) |= MaskByte;
+}
+/*------------------------ DMA Tx/Rx Desciptors -----------------------------*/
+
+/**
+ * @brief Initializes the DMA Tx descriptors in chain mode.
+ * @param DMATxDescTab: Pointer on the first Tx desc list
+ * @param TxBuff: Pointer on the first TxBuffer list
+ * @param TxBuffCount: Number of the used Tx desc in the list
+ * @retval None
+ */
+void ETH_DMATxDescChainInit(ETH_DMADESCTypeDef *DMATxDescTab, uint8_t* TxBuff, uint32_t TxBuffCount)
+{
+ uint32_t i = 0;
+ ETH_DMADESCTypeDef *DMATxDesc;
+
+ /* Set the DMATxDescToSet pointer with the first one of the DMATxDescTab list */
+ DMATxDescToSet = DMATxDescTab;
+ /* Fill each DMATxDesc descriptor with the right values */
+ for(i=0; i < TxBuffCount; i++)
+ {
+ /* Get the pointer on the ith member of the Tx Desc list */
+ DMATxDesc = DMATxDescTab + i;
+ /* Set Second Address Chained bit */
+ DMATxDesc->Status = ETH_DMATxDesc_TCH;
+
+ /* Set Buffer1 address pointer */
+ DMATxDesc->Buffer1Addr = (uint32_t)(&TxBuff[i*ETH_MAX_PACKET_SIZE]);
+
+ /* Initialize the next descriptor with the Next Desciptor Polling Enable */
+ if(i < (TxBuffCount-1))
+ {
+ /* Set next descriptor address register with next descriptor base address */
+ DMATxDesc->Buffer2NextDescAddr = (uint32_t)(DMATxDescTab+i+1);
+ }
+ else
+ {
+ /* For last descriptor, set next descriptor address register equal to the first descriptor base address */
+ DMATxDesc->Buffer2NextDescAddr = (uint32_t) DMATxDescTab;
+ }
+ }
+
+ /* Set Transmit Desciptor List Address Register */
+ ETH->DMATDLAR = (uint32_t) DMATxDescTab;
+}
+
+/**
+ * @brief Initializes the DMA Tx descriptors in ring mode.
+ * @param DMATxDescTab: Pointer on the first Tx desc list
+ * @param TxBuff1: Pointer on the first TxBuffer1 list
+ * @param TxBuff2: Pointer on the first TxBuffer2 list
+ * @param TxBuffCount: Number of the used Tx desc in the list
+ * Note: see decriptor skip length defined in ETH_DMA_InitStruct
+ * for the number of Words to skip between two unchained descriptors.
+ * @retval None
+ */
+void ETH_DMATxDescRingInit(ETH_DMADESCTypeDef *DMATxDescTab, uint8_t *TxBuff1, uint8_t *TxBuff2, uint32_t TxBuffCount)
+{
+ uint32_t i = 0;
+ ETH_DMADESCTypeDef *DMATxDesc;
+
+ /* Set the DMATxDescToSet pointer with the first one of the DMATxDescTab list */
+ DMATxDescToSet = DMATxDescTab;
+ /* Fill each DMATxDesc descriptor with the right values */
+ for(i=0; i < TxBuffCount; i++)
+ {
+ /* Get the pointer on the ith member of the Tx Desc list */
+ DMATxDesc = DMATxDescTab + i;
+ /* Set Buffer1 address pointer */
+ DMATxDesc->Buffer1Addr = (uint32_t)(&TxBuff1[i*ETH_MAX_PACKET_SIZE]);
+
+ /* Set Buffer2 address pointer */
+ DMATxDesc->Buffer2NextDescAddr = (uint32_t)(&TxBuff2[i*ETH_MAX_PACKET_SIZE]);
+
+ /* Set Transmit End of Ring bit for last descriptor: The DMA returns to the base
+ address of the list, creating a Desciptor Ring */
+ if(i == (TxBuffCount-1))
+ {
+ /* Set Transmit End of Ring bit */
+ DMATxDesc->Status = ETH_DMATxDesc_TER;
+ }
+ }
+
+ /* Set Transmit Desciptor List Address Register */
+ ETH->DMATDLAR = (uint32_t) DMATxDescTab;
+}
+
+/**
+ * @brief Checks whether the specified ETHERNET DMA Tx Desc flag is set or not.
+ * @param DMATxDesc: pointer on a DMA Tx descriptor
+ * @param ETH_DMATxDescFlag: specifies the flag to check.
+ * This parameter can be one of the following values:
+ * @arg ETH_DMATxDesc_OWN : OWN bit: descriptor is owned by DMA engine
+ * @arg ETH_DMATxDesc_IC : Interrupt on completetion
+ * @arg ETH_DMATxDesc_LS : Last Segment
+ * @arg ETH_DMATxDesc_FS : First Segment
+ * @arg ETH_DMATxDesc_DC : Disable CRC
+ * @arg ETH_DMATxDesc_DP : Disable Pad
+ * @arg ETH_DMATxDesc_TTSE: Transmit Time Stamp Enable
+ * @arg ETH_DMATxDesc_CIC : Checksum insertion control
+ * @arg ETH_DMATxDesc_TER : Transmit End of Ring
+ * @arg ETH_DMATxDesc_TCH : Second Address Chained
+ * @arg ETH_DMATxDesc_TTSS: Tx Time Stamp Status
+ * @arg ETH_DMATxDesc_IHE : IP Header Error
+ * @arg ETH_DMATxDesc_ES : Error summary
+ * @arg ETH_DMATxDesc_JT : Jabber Timeout
+ * @arg ETH_DMATxDesc_FF : Frame Flushed: DMA/MTL flushed the frame due to SW flush
+ * @arg ETH_DMATxDesc_PCE : Payload Checksum Error
+ * @arg ETH_DMATxDesc_LCA : Loss of Carrier: carrier lost during tramsmission
+ * @arg ETH_DMATxDesc_NC : No Carrier: no carrier signal from the tranceiver
+ * @arg ETH_DMATxDesc_LCO : Late Collision: transmission aborted due to collision
+ * @arg ETH_DMATxDesc_EC : Excessive Collision: transmission aborted after 16 collisions
+ * @arg ETH_DMATxDesc_VF : VLAN Frame
+ * @arg ETH_DMATxDesc_CC : Collision Count
+ * @arg ETH_DMATxDesc_ED : Excessive Deferral
+ * @arg ETH_DMATxDesc_UF : Underflow Error: late data arrival from the memory
+ * @arg ETH_DMATxDesc_DB : Deferred Bit
+ * @retval The new state of ETH_DMATxDescFlag (SET or RESET).
+ */
+FlagStatus ETH_GetDMATxDescFlagStatus(ETH_DMADESCTypeDef *DMATxDesc, uint32_t ETH_DMATxDescFlag)
+{
+ FlagStatus bitstatus = RESET;
+ /* Check the parameters */
+ assert_param(IS_ETH_DMATxDESC_GET_FLAG(ETH_DMATxDescFlag));
+
+ if ((DMATxDesc->Status & ETH_DMATxDescFlag) != (uint32_t)RESET)
+ {
+ bitstatus = SET;
+ }
+ else
+ {
+ bitstatus = RESET;
+ }
+ return bitstatus;
+}
+
+/**
+ * @brief Returns the specified ETHERNET DMA Tx Desc collision count.
+ * @param DMATxDesc: pointer on a DMA Tx descriptor
+ * @retval The Transmit descriptor collision counter value.
+ */
+uint32_t ETH_GetDMATxDescCollisionCount(ETH_DMADESCTypeDef *DMATxDesc)
+{
+ /* Return the Receive descriptor frame length */
+ return ((DMATxDesc->Status & ETH_DMATxDesc_CC) >> ETH_DMATXDESC_COLLISION_COUNTSHIFT);
+}
+
+/**
+ * @brief Set the specified DMA Tx Desc Own bit.
+ * @param DMATxDesc: Pointer on a Tx desc
+ * @retval None
+ */
+void ETH_SetDMATxDescOwnBit(ETH_DMADESCTypeDef *DMATxDesc)
+{
+ /* Set the DMA Tx Desc Own bit */
+ DMATxDesc->Status |= ETH_DMATxDesc_OWN;
+}
+
+/**
+ * @brief Enables or disables the specified DMA Tx Desc Transmit interrupt.
+ * @param DMATxDesc: Pointer on a Tx desc
+ * @param NewState: new state of the DMA Tx Desc transmit interrupt.
+ * This parameter can be: ENABLE or DISABLE.
+ * @retval None
+ */
+void ETH_DMATxDescTransmitITConfig(ETH_DMADESCTypeDef *DMATxDesc, FunctionalState NewState)
+{
+ /* Check the parameters */
+ assert_param(IS_FUNCTIONAL_STATE(NewState));
+
+ if (NewState != DISABLE)
+ {
+ /* Enable the DMA Tx Desc Transmit interrupt */
+ DMATxDesc->Status |= ETH_DMATxDesc_IC;
+ }
+ else
+ {
+ /* Disable the DMA Tx Desc Transmit interrupt */
+ DMATxDesc->Status &=(~(uint32_t)ETH_DMATxDesc_IC);
+ }
+}
+
+/**
+ * @brief Enables or disables the specified DMA Tx Desc Transmit interrupt.
+ * @param DMATxDesc: Pointer on a Tx desc
+ * @param DMATxDesc_FrameSegment: specifies is the actual Tx desc contain last or first segment.
+ * This parameter can be one of the following values:
+ * @arg ETH_DMATxDesc_LastSegment : actual Tx desc contain last segment
+ * @arg ETH_DMATxDesc_FirstSegment : actual Tx desc contain first segment
+ * @retval None
+ */
+void ETH_DMATxDescFrameSegmentConfig(ETH_DMADESCTypeDef *DMATxDesc, uint32_t DMATxDesc_FrameSegment)
+{
+ /* Check the parameters */
+ assert_param(IS_ETH_DMA_TXDESC_SEGMENT(DMATxDesc_FrameSegment));
+
+ /* Selects the DMA Tx Desc Frame segment */
+ DMATxDesc->Status |= DMATxDesc_FrameSegment;
+}
+
+/**
+ * @brief Selects the specified ETHERNET DMA Tx Desc Checksum Insertion.
+ * @param DMATxDesc: pointer on a DMA Tx descriptor
+ * @param DMATxDesc_Checksum: specifies is the DMA Tx desc checksum insertion.
+ * This parameter can be one of the following values:
+ * @arg ETH_DMATxDesc_ChecksumByPass : Checksum bypass
+ * @arg ETH_DMATxDesc_ChecksumIPV4Header : IPv4 header checksum
+ * @arg ETH_DMATxDesc_ChecksumTCPUDPICMPSegment : TCP/UDP/ICMP checksum. Pseudo header checksum is assumed to be present
+ * @arg ETH_DMATxDesc_ChecksumTCPUDPICMPFull : TCP/UDP/ICMP checksum fully in hardware including pseudo header
+ * @retval None
+ */
+void ETH_DMATxDescChecksumInsertionConfig(ETH_DMADESCTypeDef *DMATxDesc, uint32_t DMATxDesc_Checksum)
+{
+ /* Check the parameters */
+ assert_param(IS_ETH_DMA_TXDESC_CHECKSUM(DMATxDesc_Checksum));
+
+ /* Set the selected DMA Tx desc checksum insertion control */
+ DMATxDesc->Status |= DMATxDesc_Checksum;
+}
+
+/**
+ * @brief Enables or disables the DMA Tx Desc CRC.
+ * @param DMATxDesc: pointer on a DMA Tx descriptor
+ * @param NewState: new state of the specified DMA Tx Desc CRC.
+ * This parameter can be: ENABLE or DISABLE.
+ * @retval None
+ */
+void ETH_DMATxDescCRCCmd(ETH_DMADESCTypeDef *DMATxDesc, FunctionalState NewState)
+{
+ /* Check the parameters */
+ assert_param(IS_FUNCTIONAL_STATE(NewState));
+
+ if (NewState != DISABLE)
+ {
+ /* Enable the selected DMA Tx Desc CRC */
+ DMATxDesc->Status &= (~(uint32_t)ETH_DMATxDesc_DC);
+ }
+ else
+ {
+ /* Disable the selected DMA Tx Desc CRC */
+ DMATxDesc->Status |= ETH_DMATxDesc_DC;
+ }
+}
+
+/**
+ * @brief Enables or disables the DMA Tx Desc end of ring.
+ * @param DMATxDesc: pointer on a DMA Tx descriptor
+ * @param NewState: new state of the specified DMA Tx Desc end of ring.
+ * This parameter can be: ENABLE or DISABLE.
+ * @retval None
+ */
+void ETH_DMATxDescEndOfRingCmd(ETH_DMADESCTypeDef *DMATxDesc, FunctionalState NewState)
+{
+ /* Check the parameters */
+ assert_param(IS_FUNCTIONAL_STATE(NewState));
+
+ if (NewState != DISABLE)
+ {
+ /* Enable the selected DMA Tx Desc end of ring */
+ DMATxDesc->Status |= ETH_DMATxDesc_TER;
+ }
+ else
+ {
+ /* Disable the selected DMA Tx Desc end of ring */
+ DMATxDesc->Status &= (~(uint32_t)ETH_DMATxDesc_TER);
+ }
+}
+
+/**
+ * @brief Enables or disables the DMA Tx Desc second address chained.
+ * @param DMATxDesc: pointer on a DMA Tx descriptor
+ * @param NewState: new state of the specified DMA Tx Desc second address chained.
+ * This parameter can be: ENABLE or DISABLE.
+ * @retval None
+ */
+void ETH_DMATxDescSecondAddressChainedCmd(ETH_DMADESCTypeDef *DMATxDesc, FunctionalState NewState)
+{
+ /* Check the parameters */
+ assert_param(IS_FUNCTIONAL_STATE(NewState));
+
+ if (NewState != DISABLE)
+ {
+ /* Enable the selected DMA Tx Desc second address chained */
+ DMATxDesc->Status |= ETH_DMATxDesc_TCH;
+ }
+ else
+ {
+ /* Disable the selected DMA Tx Desc second address chained */
+ DMATxDesc->Status &=(~(uint32_t)ETH_DMATxDesc_TCH);
+ }
+}
+
+/**
+ * @brief Enables or disables the DMA Tx Desc padding for frame shorter than 64 bytes.
+ * @param DMATxDesc: pointer on a DMA Tx descriptor
+ * @param NewState: new state of the specified DMA Tx Desc padding for frame shorter than 64 bytes.
+ * This parameter can be: ENABLE or DISABLE.
+ * @retval None
+ */
+void ETH_DMATxDescShortFramePaddingCmd(ETH_DMADESCTypeDef *DMATxDesc, FunctionalState NewState)
+{
+ /* Check the parameters */
+ assert_param(IS_FUNCTIONAL_STATE(NewState));
+
+ if (NewState != DISABLE)
+ {
+ /* Enable the selected DMA Tx Desc padding for frame shorter than 64 bytes */
+ DMATxDesc->Status &= (~(uint32_t)ETH_DMATxDesc_DP);
+ }
+ else
+ {
+ /* Disable the selected DMA Tx Desc padding for frame shorter than 64 bytes*/
+ DMATxDesc->Status |= ETH_DMATxDesc_DP;
+ }
+}
+
+/**
+ * @brief Enables or disables the DMA Tx Desc time stamp.
+ * @param DMATxDesc: pointer on a DMA Tx descriptor
+ * @param NewState: new state of the specified DMA Tx Desc time stamp.
+ * This parameter can be: ENABLE or DISABLE.
+ * @retval None
+ */
+void ETH_DMATxDescTimeStampCmd(ETH_DMADESCTypeDef *DMATxDesc, FunctionalState NewState)
+{
+ /* Check the parameters */
+ assert_param(IS_FUNCTIONAL_STATE(NewState));
+
+ if (NewState != DISABLE)
+ {
+ /* Enable the selected DMA Tx Desc time stamp */
+ DMATxDesc->Status |= ETH_DMATxDesc_TTSE;
+ }
+ else
+ {
+ /* Disable the selected DMA Tx Desc time stamp */
+ DMATxDesc->Status &=(~(uint32_t)ETH_DMATxDesc_TTSE);
+ }
+}
+
+/**
+ * @brief configures the specified DMA Tx Desc buffer1 and buffer2 sizes.
+ * @param DMATxDesc: Pointer on a Tx desc
+ * @param BufferSize1: specifies the Tx desc buffer1 size.
+ * @param BufferSize2: specifies the Tx desc buffer2 size (put "0" if not used).
+ * @retval None
+ */
+void ETH_DMATxDescBufferSizeConfig(ETH_DMADESCTypeDef *DMATxDesc, uint32_t BufferSize1, uint32_t BufferSize2)
+{
+ /* Check the parameters */
+ assert_param(IS_ETH_DMATxDESC_BUFFER_SIZE(BufferSize1));
+ assert_param(IS_ETH_DMATxDESC_BUFFER_SIZE(BufferSize2));
+
+ /* Set the DMA Tx Desc buffer1 and buffer2 sizes values */
+ DMATxDesc->ControlBufferSize |= (BufferSize1 | (BufferSize2 << ETH_DMATXDESC_BUFFER2_SIZESHIFT));
+}
+
+/**
+ * @brief Initializes the DMA Rx descriptors in chain mode.
+ * @param DMARxDescTab: Pointer on the first Rx desc list
+ * @param RxBuff: Pointer on the first RxBuffer list
+ * @param RxBuffCount: Number of the used Rx desc in the list
+ * @retval None
+ */
+void ETH_DMARxDescChainInit(ETH_DMADESCTypeDef *DMARxDescTab, uint8_t *RxBuff, uint32_t RxBuffCount)
+{
+ uint32_t i = 0;
+ ETH_DMADESCTypeDef *DMARxDesc;
+
+ /* Set the DMARxDescToGet pointer with the first one of the DMARxDescTab list */
+ DMARxDescToGet = DMARxDescTab;
+ /* Fill each DMARxDesc descriptor with the right values */
+ for(i=0; i < RxBuffCount; i++)
+ {
+ /* Get the pointer on the ith member of the Rx Desc list */
+ DMARxDesc = DMARxDescTab+i;
+ /* Set Own bit of the Rx descriptor Status */
+ DMARxDesc->Status = ETH_DMARxDesc_OWN;
+
+ /* Set Buffer1 size and Second Address Chained bit */
+ DMARxDesc->ControlBufferSize = ETH_DMARxDesc_RCH | (uint32_t)ETH_MAX_PACKET_SIZE;
+ /* Set Buffer1 address pointer */
+ DMARxDesc->Buffer1Addr = (uint32_t)(&RxBuff[i*ETH_MAX_PACKET_SIZE]);
+
+ /* Initialize the next descriptor with the Next Desciptor Polling Enable */
+ if(i < (RxBuffCount-1))
+ {
+ /* Set next descriptor address register with next descriptor base address */
+ DMARxDesc->Buffer2NextDescAddr = (uint32_t)(DMARxDescTab+i+1);
+ }
+ else
+ {
+ /* For last descriptor, set next descriptor address register equal to the first descriptor base address */
+ DMARxDesc->Buffer2NextDescAddr = (uint32_t)(DMARxDescTab);
+ }
+ }
+
+ /* Set Receive Desciptor List Address Register */
+ ETH->DMARDLAR = (uint32_t) DMARxDescTab;
+}
+
+/**
+ * @brief Initializes the DMA Rx descriptors in ring mode.
+ * @param DMARxDescTab: Pointer on the first Rx desc list
+ * @param RxBuff1: Pointer on the first RxBuffer1 list
+ * @param RxBuff2: Pointer on the first RxBuffer2 list
+ * @param RxBuffCount: Number of the used Rx desc in the list
+ * Note: see decriptor skip length defined in ETH_DMA_InitStruct
+ * for the number of Words to skip between two unchained descriptors.
+ * @retval None
+ */
+void ETH_DMARxDescRingInit(ETH_DMADESCTypeDef *DMARxDescTab, uint8_t *RxBuff1, uint8_t *RxBuff2, uint32_t RxBuffCount)
+{
+ uint32_t i = 0;
+ ETH_DMADESCTypeDef *DMARxDesc;
+ /* Set the DMARxDescToGet pointer with the first one of the DMARxDescTab list */
+ DMARxDescToGet = DMARxDescTab;
+ /* Fill each DMARxDesc descriptor with the right values */
+ for(i=0; i < RxBuffCount; i++)
+ {
+ /* Get the pointer on the ith member of the Rx Desc list */
+ DMARxDesc = DMARxDescTab+i;
+ /* Set Own bit of the Rx descriptor Status */
+ DMARxDesc->Status = ETH_DMARxDesc_OWN;
+ /* Set Buffer1 size */
+ DMARxDesc->ControlBufferSize = ETH_MAX_PACKET_SIZE;
+ /* Set Buffer1 address pointer */
+ DMARxDesc->Buffer1Addr = (uint32_t)(&RxBuff1[i*ETH_MAX_PACKET_SIZE]);
+
+ /* Set Buffer2 address pointer */
+ DMARxDesc->Buffer2NextDescAddr = (uint32_t)(&RxBuff2[i*ETH_MAX_PACKET_SIZE]);
+
+ /* Set Receive End of Ring bit for last descriptor: The DMA returns to the base
+ address of the list, creating a Desciptor Ring */
+ if(i == (RxBuffCount-1))
+ {
+ /* Set Receive End of Ring bit */
+ DMARxDesc->ControlBufferSize |= ETH_DMARxDesc_RER;
+ }
+ }
+
+ /* Set Receive Desciptor List Address Register */
+ ETH->DMARDLAR = (uint32_t) DMARxDescTab;
+}
+
+/**
+ * @brief Checks whether the specified ETHERNET Rx Desc flag is set or not.
+ * @param DMARxDesc: pointer on a DMA Rx descriptor
+ * @param ETH_DMARxDescFlag: specifies the flag to check.
+ * This parameter can be one of the following values:
+ * @arg ETH_DMARxDesc_OWN: OWN bit: descriptor is owned by DMA engine
+ * @arg ETH_DMARxDesc_AFM: DA Filter Fail for the rx frame
+ * @arg ETH_DMARxDesc_ES: Error summary
+ * @arg ETH_DMARxDesc_DE: Desciptor error: no more descriptors for receive frame
+ * @arg ETH_DMARxDesc_SAF: SA Filter Fail for the received frame
+ * @arg ETH_DMARxDesc_LE: Frame size not matching with length field
+ * @arg ETH_DMARxDesc_OE: Overflow Error: Frame was damaged due to buffer overflow
+ * @arg ETH_DMARxDesc_VLAN: VLAN Tag: received frame is a VLAN frame
+ * @arg ETH_DMARxDesc_FS: First descriptor of the frame
+ * @arg ETH_DMARxDesc_LS: Last descriptor of the frame
+ * @arg ETH_DMARxDesc_IPV4HCE: IPC Checksum Error/Giant Frame: Rx Ipv4 header checksum error
+ * @arg ETH_DMARxDesc_LC: Late collision occurred during reception
+ * @arg ETH_DMARxDesc_FT: Frame type - Ethernet, otherwise 802.3
+ * @arg ETH_DMARxDesc_RWT: Receive Watchdog Timeout: watchdog timer expired during reception
+ * @arg ETH_DMARxDesc_RE: Receive error: error reported by MII interface
+ * @arg ETH_DMARxDesc_DE: Dribble bit error: frame contains non int multiple of 8 bits
+ * @arg ETH_DMARxDesc_CE: CRC error
+ * @arg ETH_DMARxDesc_MAMPCE: Rx MAC Address/Payload Checksum Error: Rx MAC address matched/ Rx Payload Checksum Error
+ * @retval The new state of ETH_DMARxDescFlag (SET or RESET).
+ */
+FlagStatus ETH_GetDMARxDescFlagStatus(ETH_DMADESCTypeDef *DMARxDesc, uint32_t ETH_DMARxDescFlag)
+{
+ FlagStatus bitstatus = RESET;
+ /* Check the parameters */
+ assert_param(IS_ETH_DMARxDESC_GET_FLAG(ETH_DMARxDescFlag));
+ if ((DMARxDesc->Status & ETH_DMARxDescFlag) != (uint32_t)RESET)
+ {
+ bitstatus = SET;
+ }
+ else
+ {
+ bitstatus = RESET;
+ }
+ return bitstatus;
+}
+
+#ifdef USE_ENHANCED_DMA_DESCRIPTORS
+/**
+ * @brief Checks whether the specified ETHERNET PTP Rx Desc extended flag is set or not.
+ * @param DMAPTPRxDesc: pointer on a DMA PTP Rx descriptor
+ * @param ETH_DMAPTPRxDescFlag: specifies the extended flag to check.
+ * This parameter can be one of the following values:
+ * @arg ETH_DMAPTPRxDesc_PTPV: PTP version
+ * @arg ETH_DMAPTPRxDesc_PTPFT: PTP frame type
+ * @arg ETH_DMAPTPRxDesc_PTPMT: PTP message type
+ * @arg ETH_DMAPTPRxDesc_IPV6PR: IPv6 packet received
+ * @arg ETH_DMAPTPRxDesc_IPV4PR: IPv4 packet received
+ * @arg ETH_DMAPTPRxDesc_IPCB: IP checksum bypassed
+ * @arg ETH_DMAPTPRxDesc_IPPE: IP payload error
+ * @arg ETH_DMAPTPRxDesc_IPHE: IP header error
+ * @arg ETH_DMAPTPRxDesc_IPPT: IP payload type
+ * @retval The new state of ETH_DMAPTPRxDescExtendedFlag (SET or RESET).
+ */
+FlagStatus ETH_GetDMAPTPRxDescExtendedFlagStatus(ETH_DMADESCTypeDef *DMAPTPRxDesc, uint32_t ETH_DMAPTPRxDescExtendedFlag)
+{
+ FlagStatus bitstatus = RESET;
+
+ /* Check the parameters */
+ assert_param(IS_ETH_DMAPTPRxDESC_GET_EXTENDED_FLAG(ETH_DMAPTPRxDescExtendedFlag));
+
+ if ((DMAPTPRxDesc->ExtendedStatus & ETH_DMAPTPRxDescExtendedFlag) != (uint32_t)RESET)
+ {
+ bitstatus = SET;
+ }
+ else
+ {
+ bitstatus = RESET;
+ }
+ return bitstatus;
+}
+#endif /* USE_ENHANCED_DMA_DESCRIPTORS */
+
+/**
+ * @brief Set the specified DMA Rx Desc Own bit.
+ * @param DMARxDesc: Pointer on a Rx desc
+ * @retval None
+ */
+void ETH_SetDMARxDescOwnBit(ETH_DMADESCTypeDef *DMARxDesc)
+{
+ /* Set the DMA Rx Desc Own bit */
+ DMARxDesc->Status |= ETH_DMARxDesc_OWN;
+}
+
+/**
+ * @brief Returns the specified DMA Rx Desc frame length.
+ * @param DMARxDesc: pointer on a DMA Rx descriptor
+ * @retval The Rx descriptor received frame length.
+ */
+uint32_t ETH_GetDMARxDescFrameLength(ETH_DMADESCTypeDef *DMARxDesc)
+{
+ /* Return the Receive descriptor frame length */
+ return ((DMARxDesc->Status & ETH_DMARxDesc_FL) >> ETH_DMARXDESC_FRAME_LENGTHSHIFT);
+}
+
+/**
+ * @brief Enables or disables the specified DMA Rx Desc receive interrupt.
+ * @param DMARxDesc: Pointer on a Rx desc
+ * @param NewState: new state of the specified DMA Rx Desc interrupt.
+ * This parameter can be: ENABLE or DISABLE.
+ * @retval None
+ */
+void ETH_DMARxDescReceiveITConfig(ETH_DMADESCTypeDef *DMARxDesc, FunctionalState NewState)
+{
+ /* Check the parameters */
+ assert_param(IS_FUNCTIONAL_STATE(NewState));
+
+ if (NewState != DISABLE)
+ {
+ /* Enable the DMA Rx Desc receive interrupt */
+ DMARxDesc->ControlBufferSize &=(~(uint32_t)ETH_DMARxDesc_DIC);
+ }
+ else
+ {
+ /* Disable the DMA Rx Desc receive interrupt */
+ DMARxDesc->ControlBufferSize |= ETH_DMARxDesc_DIC;
+ }
+}
+
+/**
+ * @brief Enables or disables the DMA Rx Desc end of ring.
+ * @param DMARxDesc: pointer on a DMA Rx descriptor
+ * @param NewState: new state of the specified DMA Rx Desc end of ring.
+ * This parameter can be: ENABLE or DISABLE.
+ * @retval None
+ */
+void ETH_DMARxDescEndOfRingCmd(ETH_DMADESCTypeDef *DMARxDesc, FunctionalState NewState)
+{
+ /* Check the parameters */
+ assert_param(IS_FUNCTIONAL_STATE(NewState));
+
+ if (NewState != DISABLE)
+ {
+ /* Enable the selected DMA Rx Desc end of ring */
+ DMARxDesc->ControlBufferSize |= ETH_DMARxDesc_RER;
+ }
+ else
+ {
+ /* Disable the selected DMA Rx Desc end of ring */
+ DMARxDesc->ControlBufferSize &=(~(uint32_t)ETH_DMARxDesc_RER);
+ }
+}
+
+/**
+ * @brief Enables or disables the DMA Rx Desc second address chained.
+ * @param DMARxDesc: pointer on a DMA Rx descriptor
+ * @param NewState: new state of the specified DMA Rx Desc second address chained.
+ * This parameter can be: ENABLE or DISABLE.
+ * @retval None
+ */
+void ETH_DMARxDescSecondAddressChainedCmd(ETH_DMADESCTypeDef *DMARxDesc, FunctionalState NewState)
+{
+ /* Check the parameters */
+ assert_param(IS_FUNCTIONAL_STATE(NewState));
+
+ if (NewState != DISABLE)
+ {
+ /* Enable the selected DMA Rx Desc second address chained */
+ DMARxDesc->ControlBufferSize |= ETH_DMARxDesc_RCH;
+ }
+ else
+ {
+ /* Disable the selected DMA Rx Desc second address chained */
+ DMARxDesc->ControlBufferSize &=(~(uint32_t)ETH_DMARxDesc_RCH);
+ }
+}
+
+/**
+ * @brief Returns the specified ETHERNET DMA Rx Desc buffer size.
+ * @param DMARxDesc: pointer on a DMA Rx descriptor
+ * @param DMARxDesc_Buffer: specifies the DMA Rx Desc buffer.
+ * This parameter can be any one of the following values:
+ * @arg ETH_DMARxDesc_Buffer1 : DMA Rx Desc Buffer1
+ * @arg ETH_DMARxDesc_Buffer2 : DMA Rx Desc Buffer2
+ * @retval The Receive descriptor frame length.
+ */
+uint32_t ETH_GetDMARxDescBufferSize(ETH_DMADESCTypeDef *DMARxDesc, uint32_t DMARxDesc_Buffer)
+{
+ /* Check the parameters */
+ assert_param(IS_ETH_DMA_RXDESC_BUFFER(DMARxDesc_Buffer));
+
+ if(DMARxDesc_Buffer != ETH_DMARxDesc_Buffer1)
+ {
+ /* Return the DMA Rx Desc buffer2 size */
+ return ((DMARxDesc->ControlBufferSize & ETH_DMARxDesc_RBS2) >> ETH_DMARXDESC_BUFFER2_SIZESHIFT);
+ }
+ else
+ {
+ /* Return the DMA Rx Desc buffer1 size */
+ return (DMARxDesc->ControlBufferSize & ETH_DMARxDesc_RBS1);
+ }
+}
+
+/*--------------------------------- DMA ------------------------------------*/
+/**
+ * @brief Resets all MAC subsystem internal registers and logic.
+ * @param None
+ * @retval None
+ */
+void ETH_SoftwareReset(void)
+{
+ /* Set the SWR bit: resets all MAC subsystem internal registers and logic */
+ /* After reset all the registers holds their respective reset values */
+ ETH->DMABMR |= ETH_DMABMR_SR;
+}
+
+/**
+ * @brief Checks whether the ETHERNET software reset bit is set or not.
+ * @param None
+ * @retval The new state of DMA Bus Mode register SR bit (SET or RESET).
+ */
+FlagStatus ETH_GetSoftwareResetStatus(void)
+{
+ FlagStatus bitstatus = RESET;
+ if((ETH->DMABMR & ETH_DMABMR_SR) != (uint32_t)RESET)
+ {
+ bitstatus = SET;
+ }
+ else
+ {
+ bitstatus = RESET;
+ }
+ return bitstatus;
+}
+
+/**
+ * @brief Checks whether the specified ETHERNET DMA flag is set or not.
+ * @param ETH_DMA_FLAG: specifies the flag to check.
+ * This parameter can be one of the following values:
+ * @arg ETH_DMA_FLAG_TST : Time-stamp trigger flag
+ * @arg ETH_DMA_FLAG_PMT : PMT flag
+ * @arg ETH_DMA_FLAG_MMC : MMC flag
+ * @arg ETH_DMA_FLAG_DataTransferError : Error bits 0-data buffer, 1-desc. access
+ * @arg ETH_DMA_FLAG_ReadWriteError : Error bits 0-write trnsf, 1-read transfr
+ * @arg ETH_DMA_FLAG_AccessError : Error bits 0-Rx DMA, 1-Tx DMA
+ * @arg ETH_DMA_FLAG_NIS : Normal interrupt summary flag
+ * @arg ETH_DMA_FLAG_AIS : Abnormal interrupt summary flag
+ * @arg ETH_DMA_FLAG_ER : Early receive flag
+ * @arg ETH_DMA_FLAG_FBE : Fatal bus error flag
+ * @arg ETH_DMA_FLAG_ET : Early transmit flag
+ * @arg ETH_DMA_FLAG_RWT : Receive watchdog timeout flag
+ * @arg ETH_DMA_FLAG_RPS : Receive process stopped flag
+ * @arg ETH_DMA_FLAG_RBU : Receive buffer unavailable flag
+ * @arg ETH_DMA_FLAG_R : Receive flag
+ * @arg ETH_DMA_FLAG_TU : Underflow flag
+ * @arg ETH_DMA_FLAG_RO : Overflow flag
+ * @arg ETH_DMA_FLAG_TJT : Transmit jabber timeout flag
+ * @arg ETH_DMA_FLAG_TBU : Transmit buffer unavailable flag
+ * @arg ETH_DMA_FLAG_TPS : Transmit process stopped flag
+ * @arg ETH_DMA_FLAG_T : Transmit flag
+ * @retval The new state of ETH_DMA_FLAG (SET or RESET).
+ */
+FlagStatus ETH_GetDMAFlagStatus(uint32_t ETH_DMA_FLAG)
+{
+ FlagStatus bitstatus = RESET;
+ /* Check the parameters */
+ assert_param(IS_ETH_DMA_GET_IT(ETH_DMA_FLAG));
+ if ((ETH->DMASR & ETH_DMA_FLAG) != (uint32_t)RESET)
+ {
+ bitstatus = SET;
+ }
+ else
+ {
+ bitstatus = RESET;
+ }
+ return bitstatus;
+}
+
+/**
+ * @brief Clears the ETHERNET¡¯s DMA pending flag.
+ * @param ETH_DMA_FLAG: specifies the flag to clear.
+ * This parameter can be any combination of the following values:
+ * @arg ETH_DMA_FLAG_NIS : Normal interrupt summary flag
+ * @arg ETH_DMA_FLAG_AIS : Abnormal interrupt summary flag
+ * @arg ETH_DMA_FLAG_ER : Early receive flag
+ * @arg ETH_DMA_FLAG_FBE : Fatal bus error flag
+ * @arg ETH_DMA_FLAG_ETI : Early transmit flag
+ * @arg ETH_DMA_FLAG_RWT : Receive watchdog timeout flag
+ * @arg ETH_DMA_FLAG_RPS : Receive process stopped flag
+ * @arg ETH_DMA_FLAG_RBU : Receive buffer unavailable flag
+ * @arg ETH_DMA_FLAG_R : Receive flag
+ * @arg ETH_DMA_FLAG_TU : Transmit Underflow flag
+ * @arg ETH_DMA_FLAG_RO : Receive Overflow flag
+ * @arg ETH_DMA_FLAG_TJT : Transmit jabber timeout flag
+ * @arg ETH_DMA_FLAG_TBU : Transmit buffer unavailable flag
+ * @arg ETH_DMA_FLAG_TPS : Transmit process stopped flag
+ * @arg ETH_DMA_FLAG_T : Transmit flag
+ * @retval None
+ */
+void ETH_DMAClearFlag(uint32_t ETH_DMA_FLAG)
+{
+ /* Check the parameters */
+ assert_param(IS_ETH_DMA_FLAG(ETH_DMA_FLAG));
+
+ /* Clear the selected ETHERNET DMA FLAG */
+ ETH->DMASR = (uint32_t) ETH_DMA_FLAG;
+}
+
+/**
+ * @brief Checks whether the specified ETHERNET DMA interrupt has occured or not.
+ * @param ETH_DMA_IT: specifies the interrupt source to check.
+ * This parameter can be one of the following values:
+ * @arg ETH_DMA_IT_TST : Time-stamp trigger interrupt
+ * @arg ETH_DMA_IT_PMT : PMT interrupt
+ * @arg ETH_DMA_IT_MMC : MMC interrupt
+ * @arg ETH_DMA_IT_NIS : Normal interrupt summary
+ * @arg ETH_DMA_IT_AIS : Abnormal interrupt summary
+ * @arg ETH_DMA_IT_ER : Early receive interrupt
+ * @arg ETH_DMA_IT_FBE : Fatal bus error interrupt
+ * @arg ETH_DMA_IT_ET : Early transmit interrupt
+ * @arg ETH_DMA_IT_RWT : Receive watchdog timeout interrupt
+ * @arg ETH_DMA_IT_RPS : Receive process stopped interrupt
+ * @arg ETH_DMA_IT_RBU : Receive buffer unavailable interrupt
+ * @arg ETH_DMA_IT_R : Receive interrupt
+ * @arg ETH_DMA_IT_TU : Underflow interrupt
+ * @arg ETH_DMA_IT_RO : Overflow interrupt
+ * @arg ETH_DMA_IT_TJT : Transmit jabber timeout interrupt
+ * @arg ETH_DMA_IT_TBU : Transmit buffer unavailable interrupt
+ * @arg ETH_DMA_IT_TPS : Transmit process stopped interrupt
+ * @arg ETH_DMA_IT_T : Transmit interrupt
+ * @retval The new state of ETH_DMA_IT (SET or RESET).
+ */
+ITStatus ETH_GetDMAITStatus(uint32_t ETH_DMA_IT)
+{
+ ITStatus bitstatus = RESET;
+ /* Check the parameters */
+ assert_param(IS_ETH_DMA_GET_IT(ETH_DMA_IT));
+ if ((ETH->DMASR & ETH_DMA_IT) != (uint32_t)RESET)
+ {
+ bitstatus = SET;
+ }
+ else
+ {
+ bitstatus = RESET;
+ }
+ return bitstatus;
+}
+
+/**
+ * @brief Clears the ETHERNET¡¯s DMA IT pending bit.
+ * @param ETH_DMA_IT: specifies the interrupt pending bit to clear.
+ * This parameter can be any combination of the following values:
+ * @arg ETH_DMA_IT_NIS : Normal interrupt summary
+ * @arg ETH_DMA_IT_AIS : Abnormal interrupt summary
+ * @arg ETH_DMA_IT_ER : Early receive interrupt
+ * @arg ETH_DMA_IT_FBE : Fatal bus error interrupt
+ * @arg ETH_DMA_IT_ETI : Early transmit interrupt
+ * @arg ETH_DMA_IT_RWT : Receive watchdog timeout interrupt
+ * @arg ETH_DMA_IT_RPS : Receive process stopped interrupt
+ * @arg ETH_DMA_IT_RBU : Receive buffer unavailable interrupt
+ * @arg ETH_DMA_IT_R : Receive interrupt
+ * @arg ETH_DMA_IT_TU : Transmit Underflow interrupt
+ * @arg ETH_DMA_IT_RO : Receive Overflow interrupt
+ * @arg ETH_DMA_IT_TJT : Transmit jabber timeout interrupt
+ * @arg ETH_DMA_IT_TBU : Transmit buffer unavailable interrupt
+ * @arg ETH_DMA_IT_TPS : Transmit process stopped interrupt
+ * @arg ETH_DMA_IT_T : Transmit interrupt
+ * @retval None
+ */
+void ETH_DMAClearITPendingBit(uint32_t ETH_DMA_IT)
+{
+ /* Check the parameters */
+ assert_param(IS_ETH_DMA_IT(ETH_DMA_IT));
+
+ /* Clear the selected ETHERNET DMA IT */
+ ETH->DMASR = (uint32_t) ETH_DMA_IT;
+}
+
+/**
+ * @brief Returns the ETHERNET DMA Transmit Process State.
+ * @param None
+ * @retval The new ETHERNET DMA Transmit Process State:
+ * This can be one of the following values:
+ * - ETH_DMA_TransmitProcess_Stopped : Stopped - Reset or Stop Tx Command issued
+ * - ETH_DMA_TransmitProcess_Fetching : Running - fetching the Tx descriptor
+ * - ETH_DMA_TransmitProcess_Waiting : Running - waiting for status
+ * - ETH_DMA_TransmitProcess_Reading : unning - reading the data from host memory
+ * - ETH_DMA_TransmitProcess_Suspended : Suspended - Tx Desciptor unavailabe
+ * - ETH_DMA_TransmitProcess_Closing : Running - closing Rx descriptor
+ */
+uint32_t ETH_GetTransmitProcessState(void)
+{
+ return ((uint32_t)(ETH->DMASR & ETH_DMASR_TS));
+}
+
+/**
+ * @brief Returns the ETHERNET DMA Receive Process State.
+ * @param None
+ * @retval The new ETHERNET DMA Receive Process State:
+ * This can be one of the following values:
+ * - ETH_DMA_ReceiveProcess_Stopped : Stopped - Reset or Stop Rx Command issued
+ * - ETH_DMA_ReceiveProcess_Fetching : Running - fetching the Rx descriptor
+ * - ETH_DMA_ReceiveProcess_Waiting : Running - waiting for packet
+ * - ETH_DMA_ReceiveProcess_Suspended : Suspended - Rx Desciptor unavailable
+ * - ETH_DMA_ReceiveProcess_Closing : Running - closing descriptor
+ * - ETH_DMA_ReceiveProcess_Queuing : Running - queuing the recieve frame into host memory
+ */
+uint32_t ETH_GetReceiveProcessState(void)
+{
+ return ((uint32_t)(ETH->DMASR & ETH_DMASR_RS));
+}
+
+/**
+ * @brief Clears the ETHERNET transmit FIFO.
+ * @param None
+ * @retval None
+ */
+void ETH_FlushTransmitFIFO(void)
+{
+ /* Set the Flush Transmit FIFO bit */
+ ETH->DMAOMR |= ETH_DMAOMR_FTF;
+}
+
+/**
+ * @brief Checks whether the ETHERNET transmit FIFO bit is cleared or not.
+ * @param None
+ * @retval The new state of ETHERNET flush transmit FIFO bit (SET or RESET).
+ */
+FlagStatus ETH_GetFlushTransmitFIFOStatus(void)
+{
+ FlagStatus bitstatus = RESET;
+ if ((ETH->DMAOMR & ETH_DMAOMR_FTF) != (uint32_t)RESET)
+ {
+ bitstatus = SET;
+ }
+ else
+ {
+ bitstatus = RESET;
+ }
+ return bitstatus;
+}
+
+/**
+ * @brief Enables or disables the DMA transmission.
+ * @param NewState: new state of the DMA transmission.
+ * This parameter can be: ENABLE or DISABLE.
+ * @retval None
+ */
+void ETH_DMATransmissionCmd(FunctionalState NewState)
+{
+ /* Check the parameters */
+ assert_param(IS_FUNCTIONAL_STATE(NewState));
+
+ if (NewState != DISABLE)
+ {
+ /* Enable the DMA transmission */
+ ETH->DMAOMR |= ETH_DMAOMR_ST;
+ }
+ else
+ {
+ /* Disable the DMA transmission */
+ ETH->DMAOMR &= ~ETH_DMAOMR_ST;
+ }
+}
+
+/**
+ * @brief Enables or disables the DMA reception.
+ * @param NewState: new state of the DMA reception.
+ * This parameter can be: ENABLE or DISABLE.
+ * @retval None
+ */
+void ETH_DMAReceptionCmd(FunctionalState NewState)
+{
+ /* Check the parameters */
+ assert_param(IS_FUNCTIONAL_STATE(NewState));
+
+ if (NewState != DISABLE)
+ {
+ /* Enable the DMA reception */
+ ETH->DMAOMR |= ETH_DMAOMR_SR;
+ }
+ else
+ {
+ /* Disable the DMA reception */
+ ETH->DMAOMR &= ~ETH_DMAOMR_SR;
+ }
+}
+
+/**
+ * @brief Enables or disables the specified ETHERNET DMA interrupts.
+ * @param ETH_DMA_IT: specifies the ETHERNET DMA interrupt sources to be
+ * enabled or disabled.
+ * This parameter can be any combination of the following values:
+ * @arg ETH_DMA_IT_NIS : Normal interrupt summary
+ * @arg ETH_DMA_IT_AIS : Abnormal interrupt summary
+ * @arg ETH_DMA_IT_ER : Early receive interrupt
+ * @arg ETH_DMA_IT_FBE : Fatal bus error interrupt
+ * @arg ETH_DMA_IT_ET : Early transmit interrupt
+ * @arg ETH_DMA_IT_RWT : Receive watchdog timeout interrupt
+ * @arg ETH_DMA_IT_RPS : Receive process stopped interrupt
+ * @arg ETH_DMA_IT_RBU : Receive buffer unavailable interrupt
+ * @arg ETH_DMA_IT_R : Receive interrupt
+ * @arg ETH_DMA_IT_TU : Underflow interrupt
+ * @arg ETH_DMA_IT_RO : Overflow interrupt
+ * @arg ETH_DMA_IT_TJT : Transmit jabber timeout interrupt
+ * @arg ETH_DMA_IT_TBU : Transmit buffer unavailable interrupt
+ * @arg ETH_DMA_IT_TPS : Transmit process stopped interrupt
+ * @arg ETH_DMA_IT_T : Transmit interrupt
+ * @param NewState: new state of the specified ETHERNET DMA interrupts.
+ * This parameter can be: ENABLE or DISABLE.
+ * @retval None
+ */
+void ETH_DMAITConfig(uint32_t ETH_DMA_IT, FunctionalState NewState)
+{
+ /* Check the parameters */
+ assert_param(IS_ETH_DMA_IT(ETH_DMA_IT));
+ assert_param(IS_FUNCTIONAL_STATE(NewState));
+
+ if (NewState != DISABLE)
+ {
+ /* Enable the selected ETHERNET DMA interrupts */
+ ETH->DMAIER |= ETH_DMA_IT;
+ }
+ else
+ {
+ /* Disable the selected ETHERNET DMA interrupts */
+ ETH->DMAIER &=(~(uint32_t)ETH_DMA_IT);
+ }
+}
+
+/**
+ * @brief Checks whether the specified ETHERNET DMA overflow flag is set or not.
+ * @param ETH_DMA_Overflow: specifies the DMA overflow flag to check.
+ * This parameter can be one of the following values:
+ * @arg ETH_DMA_Overflow_RxFIFOCounter : Overflow for FIFO Overflow Counter
+ * @arg ETH_DMA_Overflow_MissedFrameCounter : Overflow for Missed Frame Counter
+ * @retval The new state of ETHERNET DMA overflow Flag (SET or RESET).
+ */
+FlagStatus ETH_GetDMAOverflowStatus(uint32_t ETH_DMA_Overflow)
+{
+ FlagStatus bitstatus = RESET;
+ /* Check the parameters */
+ assert_param(IS_ETH_DMA_GET_OVERFLOW(ETH_DMA_Overflow));
+
+ if ((ETH->DMAMFBOCR & ETH_DMA_Overflow) != (uint32_t)RESET)
+ {
+ bitstatus = SET;
+ }
+ else
+ {
+ bitstatus = RESET;
+ }
+ return bitstatus;
+}
+
+/**
+ * @brief Get the ETHERNET DMA Rx Overflow Missed Frame Counter value.
+ * @param None
+ * @retval The value of Rx overflow Missed Frame Counter.
+ */
+uint32_t ETH_GetRxOverflowMissedFrameCounter(void)
+{
+ return ((uint32_t)((ETH->DMAMFBOCR & ETH_DMAMFBOCR_MFA)>>ETH_DMA_RX_OVERFLOW_MISSEDFRAMES_COUNTERSHIFT));
+}
+
+/**
+ * @brief Get the ETHERNET DMA Buffer Unavailable Missed Frame Counter value.
+ * @param None
+ * @retval The value of Buffer unavailable Missed Frame Counter.
+ */
+uint32_t ETH_GetBufferUnavailableMissedFrameCounter(void)
+{
+ return ((uint32_t)(ETH->DMAMFBOCR) & ETH_DMAMFBOCR_MFC);
+}
+
+/**
+ * @brief Get the ETHERNET DMA DMACHTDR register value.
+ * @param None
+ * @retval The value of the current Tx desc start address.
+ */
+uint32_t ETH_GetCurrentTxDescStartAddress(void)
+{
+ return ((uint32_t)(ETH->DMACHTDR));
+}
+
+/**
+ * @brief Get the ETHERNET DMA DMACHRDR register value.
+ * @param None
+ * @retval The value of the current Rx desc start address.
+ */
+uint32_t ETH_GetCurrentRxDescStartAddress(void)
+{
+ return ((uint32_t)(ETH->DMACHRDR));
+}
+
+/**
+ * @brief Get the ETHERNET DMA DMACHTBAR register value.
+ * @param None
+ * @retval The value of the current Tx buffer address.
+ */
+uint32_t ETH_GetCurrentTxBufferAddress(void)
+{
+ return ((uint32_t)(ETH->DMACHTBAR));
+}
+
+/**
+ * @brief Get the ETHERNET DMA DMACHRBAR register value.
+ * @param None
+ * @retval The value of the current Rx buffer address.
+ */
+uint32_t ETH_GetCurrentRxBufferAddress(void)
+{
+ return ((uint32_t)(ETH->DMACHRBAR));
+}
+
+/**
+ * @brief Resumes the DMA Transmission by writing to the DmaTxPollDemand register
+ * (the data written could be anything). This forces the DMA to resume transmission.
+ * @param None
+ * @retval None.
+ */
+void ETH_ResumeDMATransmission(void)
+{
+ ETH->DMATPDR = 0;
+}
+
+/**
+ * @brief Resumes the DMA Transmission by writing to the DmaRxPollDemand register
+ * (the data written could be anything). This forces the DMA to resume reception.
+ * @param None
+ * @retval None.
+ */
+void ETH_ResumeDMAReception(void)
+{
+ ETH->DMARPDR = 0;
+}
+
+/**
+ * @brief Set the DMA Receive status watchdog timer register value
+ * @param Value: DMA Receive status watchdog timer register value
+ * @retval None
+ */
+void ETH_SetReceiveWatchdogTimer(uint8_t Value)
+{
+ /* Set the DMA Receive status watchdog timer register */
+ ETH->DMARSWTR = Value;
+}
+
+/*--------------------------------- PMT ------------------------------------*/
+/**
+ * @brief Reset Wakeup frame filter register pointer.
+ * @param None
+ * @retval None
+ */
+void ETH_ResetWakeUpFrameFilterRegisterPointer(void)
+{
+ /* Resets the Remote Wake-up Frame Filter register pointer to 0x0000 */
+ ETH->MACPMTCSR |= ETH_MACPMTCSR_WFFRPR;
+}
+
+/**
+ * @brief Populates the remote wakeup frame registers.
+ * @param Buffer: Pointer on remote WakeUp Frame Filter Register buffer data (8 words).
+ * @retval None
+ */
+void ETH_SetWakeUpFrameFilterRegister(uint32_t *Buffer)
+{
+ uint32_t i = 0;
+
+ /* Fill Remote Wake-up Frame Filter register with Buffer data */
+ for(i =0; i<ETH_WAKEUP_REGISTER_LENGTH; i++)
+ {
+ /* Write each time to the same register */
+ ETH->MACRWUFFR = Buffer[i];
+ }
+}
+
+/**
+ * @brief Enables or disables any unicast packet filtered by the MAC address
+ * recognition to be a wake-up frame.
+ * @param NewState: new state of the MAC Global Unicast Wake-Up.
+ * This parameter can be: ENABLE or DISABLE.
+ * @retval None
+ */
+void ETH_GlobalUnicastWakeUpCmd(FunctionalState NewState)
+{
+ /* Check the parameters */
+ assert_param(IS_FUNCTIONAL_STATE(NewState));
+
+ if (NewState != DISABLE)
+ {
+ /* Enable the MAC Global Unicast Wake-Up */
+ ETH->MACPMTCSR |= ETH_MACPMTCSR_GU;
+ }
+ else
+ {
+ /* Disable the MAC Global Unicast Wake-Up */
+ ETH->MACPMTCSR &= ~ETH_MACPMTCSR_GU;
+ }
+}
+
+/**
+ * @brief Checks whether the specified ETHERNET PMT flag is set or not.
+ * @param ETH_PMT_FLAG: specifies the flag to check.
+ * This parameter can be one of the following values:
+ * @arg ETH_PMT_FLAG_WUFFRPR : Wake-Up Frame Filter Register Poniter Reset
+ * @arg ETH_PMT_FLAG_WUFR : Wake-Up Frame Received
+ * @arg ETH_PMT_FLAG_MPR : Magic Packet Received
+ * @retval The new state of ETHERNET PMT Flag (SET or RESET).
+ */
+FlagStatus ETH_GetPMTFlagStatus(uint32_t ETH_PMT_FLAG)
+{
+ FlagStatus bitstatus = RESET;
+ /* Check the parameters */
+ assert_param(IS_ETH_PMT_GET_FLAG(ETH_PMT_FLAG));
+
+ if ((ETH->MACPMTCSR & ETH_PMT_FLAG) != (uint32_t)RESET)
+ {
+ bitstatus = SET;
+ }
+ else
+ {
+ bitstatus = RESET;
+ }
+ return bitstatus;
+}
+
+/**
+ * @brief Enables or disables the MAC Wake-Up Frame Detection.
+ * @param NewState: new state of the MAC Wake-Up Frame Detection.
+ * This parameter can be: ENABLE or DISABLE.
+ * @retval None
+ */
+void ETH_WakeUpFrameDetectionCmd(FunctionalState NewState)
+{
+ /* Check the parameters */
+ assert_param(IS_FUNCTIONAL_STATE(NewState));
+
+ if (NewState != DISABLE)
+ {
+ /* Enable the MAC Wake-Up Frame Detection */
+ ETH->MACPMTCSR |= ETH_MACPMTCSR_WFE;
+ }
+ else
+ {
+ /* Disable the MAC Wake-Up Frame Detection */
+ ETH->MACPMTCSR &= ~ETH_MACPMTCSR_WFE;
+ }
+}
+
+/**
+ * @brief Enables or disables the MAC Magic Packet Detection.
+ * @param NewState: new state of the MAC Magic Packet Detection.
+ * This parameter can be: ENABLE or DISABLE.
+ * @retval None
+ */
+void ETH_MagicPacketDetectionCmd(FunctionalState NewState)
+{
+ /* Check the parameters */
+ assert_param(IS_FUNCTIONAL_STATE(NewState));
+
+ if (NewState != DISABLE)
+ {
+ /* Enable the MAC Magic Packet Detection */
+ ETH->MACPMTCSR |= ETH_MACPMTCSR_MPE;
+ }
+ else
+ {
+ /* Disable the MAC Magic Packet Detection */
+ ETH->MACPMTCSR &= ~ETH_MACPMTCSR_MPE;
+ }
+}
+
+/**
+ * @brief Enables or disables the MAC Power Down.
+ * @param NewState: new state of the MAC Power Down.
+ * This parameter can be: ENABLE or DISABLE.
+ * @retval None
+ */
+void ETH_PowerDownCmd(FunctionalState NewState)
+{
+ /* Check the parameters */
+ assert_param(IS_FUNCTIONAL_STATE(NewState));
+
+ if (NewState != DISABLE)
+ {
+ /* Enable the MAC Power Down */
+ /* This puts the MAC in power down mode */
+ ETH->MACPMTCSR |= ETH_MACPMTCSR_PD;
+ }
+ else
+ {
+ /* Disable the MAC Power Down */
+ ETH->MACPMTCSR &= ~ETH_MACPMTCSR_PD;
+ }
+}
+
+/*--------------------------------- MMC ------------------------------------*/
+/**
+ * @brief Preset and Initialize the MMC counters to almost-full value: 0xFFFF_FFF0 (full - 16)
+ * @param None
+ * @retval None
+ */
+void ETH_MMCCounterFullPreset(void)
+{
+ /* Preset and Initialize the MMC counters to almost-full value */
+ ETH->MMCCR |= ETH_MMCCR_MCFHP | ETH_MMCCR_MCP;
+}
+
+/**
+ * @brief Preset and Initialize the MMC counters to almost-hal value: 0x7FFF_FFF0 (half - 16).
+ * @param None
+ * @retval None
+ */
+void ETH_MMCCounterHalfPreset(void)
+{
+ /* Preset the MMC counters to almost-full value */
+ ETH->MMCCR &= ~ETH_MMCCR_MCFHP;
+ /* Initialize the MMC counters to almost-half value */
+ ETH->MMCCR |= ETH_MMCCR_MCP;
+}
+
+/**
+ * @brief Enables or disables the MMC Counter Freeze.
+ * @param NewState: new state of the MMC Counter Freeze.
+ * This parameter can be: ENABLE or DISABLE.
+ * @retval None
+ */
+void ETH_MMCCounterFreezeCmd(FunctionalState NewState)
+{
+ /* Check the parameters */
+ assert_param(IS_FUNCTIONAL_STATE(NewState));
+
+ if (NewState != DISABLE)
+ {
+ /* Enable the MMC Counter Freeze */
+ ETH->MMCCR |= ETH_MMCCR_MCF;
+ }
+ else
+ {
+ /* Disable the MMC Counter Freeze */
+ ETH->MMCCR &= ~ETH_MMCCR_MCF;
+ }
+}
+
+/**
+ * @brief Enables or disables the MMC Reset On Read.
+ * @param NewState: new state of the MMC Reset On Read.
+ * This parameter can be: ENABLE or DISABLE.
+ * @retval None
+ */
+void ETH_MMCResetOnReadCmd(FunctionalState NewState)
+{
+ /* Check the parameters */
+ assert_param(IS_FUNCTIONAL_STATE(NewState));
+
+ if (NewState != DISABLE)
+ {
+ /* Enable the MMC Counter reset on read */
+ ETH->MMCCR |= ETH_MMCCR_ROR;
+ }
+ else
+ {
+ /* Disable the MMC Counter reset on read */
+ ETH->MMCCR &= ~ETH_MMCCR_ROR;
+ }
+}
+
+/**
+ * @brief Enables or disables the MMC Counter Stop Rollover.
+ * @param NewState: new state of the MMC Counter Stop Rollover.
+ * This parameter can be: ENABLE or DISABLE.
+ * @retval None
+ */
+void ETH_MMCCounterRolloverCmd(FunctionalState NewState)
+{
+ /* Check the parameters */
+ assert_param(IS_FUNCTIONAL_STATE(NewState));
+
+ if (NewState != DISABLE)
+ {
+ /* Disable the MMC Counter Stop Rollover */
+ ETH->MMCCR &= ~ETH_MMCCR_CSR;
+ }
+ else
+ {
+ /* Enable the MMC Counter Stop Rollover */
+ ETH->MMCCR |= ETH_MMCCR_CSR;
+ }
+}
+
+/**
+ * @brief Resets the MMC Counters.
+ * @param None
+ * @retval None
+ */
+void ETH_MMCCountersReset(void)
+{
+ /* Resets the MMC Counters */
+ ETH->MMCCR |= ETH_MMCCR_CR;
+}
+
+/**
+ * @brief Enables or disables the specified ETHERNET MMC interrupts.
+ * @param ETH_MMC_IT: specifies the ETHERNET MMC interrupt sources to be enabled or disabled.
+ * This parameter can be any combination of Tx interrupt or
+ * any combination of Rx interrupt (but not both)of the following values:
+ * @arg ETH_MMC_IT_TGF : When Tx good frame counter reaches half the maximum value
+ * @arg ETH_MMC_IT_TGFMSC: When Tx good multi col counter reaches half the maximum value
+ * @arg ETH_MMC_IT_TGFSC : When Tx good single col counter reaches half the maximum value
+ * @arg ETH_MMC_IT_RGUF : When Rx good unicast frames counter reaches half the maximum value
+ * @arg ETH_MMC_IT_RFAE : When Rx alignment error counter reaches half the maximum value
+ * @arg ETH_MMC_IT_RFCE : When Rx crc error counter reaches half the maximum value
+ * @param NewState: new state of the specified ETHERNET MMC interrupts.
+ * This parameter can be: ENABLE or DISABLE.
+ * @retval None
+ */
+void ETH_MMCITConfig(uint32_t ETH_MMC_IT, FunctionalState NewState)
+{
+ /* Check the parameters */
+ assert_param(IS_ETH_MMC_IT(ETH_MMC_IT));
+ assert_param(IS_FUNCTIONAL_STATE(NewState));
+
+ if ((ETH_MMC_IT & (uint32_t)0x10000000) != (uint32_t)RESET)
+ {
+ /* Remove register mak from IT */
+ ETH_MMC_IT &= 0xEFFFFFFF;
+
+ /* ETHERNET MMC Rx interrupts selected */
+ if (NewState != DISABLE)
+ {
+ /* Enable the selected ETHERNET MMC interrupts */
+ ETH->MMCRIMR &=(~(uint32_t)ETH_MMC_IT);
+ }
+ else
+ {
+ /* Disable the selected ETHERNET MMC interrupts */
+ ETH->MMCRIMR |= ETH_MMC_IT;
+ }
+ }
+ else
+ {
+ /* ETHERNET MMC Tx interrupts selected */
+ if (NewState != DISABLE)
+ {
+ /* Enable the selected ETHERNET MMC interrupts */
+ ETH->MMCTIMR &=(~(uint32_t)ETH_MMC_IT);
+ }
+ else
+ {
+ /* Disable the selected ETHERNET MMC interrupts */
+ ETH->MMCTIMR |= ETH_MMC_IT;
+ }
+ }
+}
+
+/**
+ * @brief Checks whether the specified ETHERNET MMC IT is set or not.
+ * @param ETH_MMC_IT: specifies the ETHERNET MMC interrupt.
+ * This parameter can be one of the following values:
+ * @arg ETH_MMC_IT_TxFCGC: When Tx good frame counter reaches half the maximum value
+ * @arg ETH_MMC_IT_TxMCGC: When Tx good multi col counter reaches half the maximum value
+ * @arg ETH_MMC_IT_TxSCGC: When Tx good single col counter reaches half the maximum value
+ * @arg ETH_MMC_IT_RxUGFC: When Rx good unicast frames counter reaches half the maximum value
+ * @arg ETH_MMC_IT_RxAEC : When Rx alignment error counter reaches half the maximum value
+ * @arg ETH_MMC_IT_RxCEC : When Rx crc error counter reaches half the maximum value
+ * @retval The value of ETHERNET MMC IT (SET or RESET).
+ */
+ITStatus ETH_GetMMCITStatus(uint32_t ETH_MMC_IT)
+{
+ ITStatus bitstatus = RESET;
+ /* Check the parameters */
+ assert_param(IS_ETH_MMC_GET_IT(ETH_MMC_IT));
+
+ if ((ETH_MMC_IT & (uint32_t)0x10000000) != (uint32_t)RESET)
+ {
+ /* ETHERNET MMC Rx interrupts selected */
+ /* Check if the ETHERNET MMC Rx selected interrupt is enabled and occured */
+ if ((((ETH->MMCRIR & ETH_MMC_IT) != (uint32_t)RESET)) && ((ETH->MMCRIMR & ETH_MMC_IT) == (uint32_t)RESET))
+ {
+ bitstatus = SET;
+ }
+ else
+ {
+ bitstatus = RESET;
+ }
+ }
+ else
+ {
+ /* ETHERNET MMC Tx interrupts selected */
+ /* Check if the ETHERNET MMC Tx selected interrupt is enabled and occured */
+ if ((((ETH->MMCTIR & ETH_MMC_IT) != (uint32_t)RESET)) && ((ETH->MMCTIMR & ETH_MMC_IT) == (uint32_t)RESET))
+ {
+ bitstatus = SET;
+ }
+ else
+ {
+ bitstatus = RESET;
+ }
+ }
+
+ return bitstatus;
+}
+
+/**
+ * @brief Get the specified ETHERNET MMC register value.
+ * @param ETH_MMCReg: specifies the ETHERNET MMC register.
+ * This parameter can be one of the following values:
+ * @arg ETH_MMCCR : MMC CR register
+ * @arg ETH_MMCRIR : MMC RIR register
+ * @arg ETH_MMCTIR : MMC TIR register
+ * @arg ETH_MMCRIMR : MMC RIMR register
+ * @arg ETH_MMCTIMR : MMC TIMR register
+ * @arg ETH_MMCTGFSCCR : MMC TGFSCCR register
+ * @arg ETH_MMCTGFMSCCR: MMC TGFMSCCR register
+ * @arg ETH_MMCTGFCR : MMC TGFCR register
+ * @arg ETH_MMCRFCECR : MMC RFCECR register
+ * @arg ETH_MMCRFAECR : MMC RFAECR register
+ * @arg ETH_MMCRGUFCR : MMC RGUFCRregister
+ * @retval The value of ETHERNET MMC Register value.
+ */
+uint32_t ETH_GetMMCRegister(uint32_t ETH_MMCReg)
+{
+ /* Check the parameters */
+ assert_param(IS_ETH_MMC_REGISTER(ETH_MMCReg));
+
+ /* Return the selected register value */
+ return (*(__IO uint32_t *)(ETH_MAC_BASE + ETH_MMCReg));
+}
+/*--------------------------------- PTP ------------------------------------*/
+/**
+ * @brief Sets the PTP node clock type.
+ * @param ClockType: specifies the PTP node clock type.
+ * This parameter can be one of the following values:
+ * @arg ETH_PTP_OrdinaryClock : Ordinary Clock.
+ * @arg ETH_PTP_BoundaryClock : Boundary Clock.
+ * @arg ETH_PTP_EndToEndTransparentClock : End To End Transparent Clock.
+ * @arg ETH_PTP_PeerToPeerTransparentClock : Peer To Peer Transparent Clock.
+ * @retval None
+ */
+void ETH_PTPNodeClockTypeConfig(uint32_t ClockType)
+{
+ /* Check the parameters */
+ assert_param(IS_ETH_PTP_TYPE_CLOCK(ClockType));
+
+ /* Clear the PTP node clock type */
+ ETH->PTPTSCR &= (~(uint32_t)ETH_PTPTSCR_TSCNT);
+
+ /* Set the new PTP node clock type */
+ ETH->PTPTSCR |= ClockType;
+}
+
+/**
+ * @brief Enables or disables the selected PTP snapshot method.
+ * @param SnapshotMethod: specifies the PTP snapshot method.
+ * This parameter can be one of the following values:
+ * @arg ETH_PTP_SnapshotMasterMessage : snapshot for message relevant to master.
+ * @arg ETH_PTP_SnapshotEventMessage : snapshot for event message.
+ * @arg ETH_PTP_SnapshotIPV4Frames : snapshot for IPv4 frames.
+ * @arg ETH_PTP_SnapshotIPV6Frames : snapshot for IPv6 frames.
+ * @arg ETH_PTP_SnapshotPTPOverEthernetFrames : snapshot for PTP over ethernet frames.
+ * @arg ETH_PTP_SnapshotAllReceivedFrames : snapshot for all received frames.
+ * @param NewState: new state of the PTP snapshot method
+ * This parameter can be: ENABLE or DISABLE.
+ * @retval None
+ */
+void ETH_PTPSnapshotCmd(uint32_t SnapshotMethod, FunctionalState NewState)
+{
+ /* Check the parameters */
+ assert_param(IS_ETH_PTP_SNAPSHOT(SnapshotMethod));
+ assert_param(IS_FUNCTIONAL_STATE(NewState));
+
+ if (NewState != DISABLE)
+ {
+ /* Enable the selected PTP snapshot method */
+ ETH->PTPTSCR |= SnapshotMethod;
+ }
+ else
+ {
+ /* Disable the selected PTP snapshot method */
+ ETH->PTPTSCR &= (~(uint32_t)SnapshotMethod);
+ }
+}
+
+/**
+ * @brief Enables or disables the PTP packet snooping version 2 format.
+ * @param NewState: new state of the PTP packet snooping version 2 format
+ * This parameter can be: ENABLE or DISABLE.
+ * @retval None
+ */
+void ETH_PTPPacketSnoopingV2FormatCmd(FunctionalState NewState)
+{
+ /* Check the parameters */
+ assert_param(IS_FUNCTIONAL_STATE(NewState));
+
+ if (NewState != DISABLE)
+ {
+ /* Enable the PTP packet snooping version 2 format */
+ ETH->PTPTSCR |= ETH_PTPTSSR_TSPTPPSV2E;
+ }
+ else
+ {
+ /* Disable the PTP packet snooping version 2 format */
+ ETH->PTPTSCR &= (~(uint32_t)ETH_PTPTSSR_TSPTPPSV2E);
+ }
+}
+
+/**
+ * @brief Enables or disables the PTP Subsecond rollover.
+ * @param NewState: new state of the PTP Subsecond rollover
+ * This parameter can be: ENABLE or DISABLE.
+ * @retval None
+ */
+void ETH_PTPSubSecondRolloverCmd(FunctionalState NewState)
+{
+ /* Check the parameters */
+ assert_param(IS_FUNCTIONAL_STATE(NewState));
+
+ if (NewState != DISABLE)
+ {
+ /* Enable the PTP Subsecond rollover */
+ ETH->PTPTSCR |= ETH_PTPTSSR_TSSSR;
+ }
+ else
+ {
+ /* Disable the PTP Subsecond rollover */
+ ETH->PTPTSCR &= (~(uint32_t)ETH_PTPTSSR_TSSSR);
+ }
+}
+
+/**
+ * @brief Updated the PTP block for fine correction with the Time Stamp Addend register value.
+ * @param None
+ * @retval None
+ */
+void ETH_EnablePTPTimeStampAddend(void)
+{
+ /* Enable the PTP block update with the Time Stamp Addend register value */
+ ETH->PTPTSCR |= ETH_PTPTSCR_TSARU;
+}
+
+/**
+ * @brief Enable the PTP Time Stamp interrupt trigger
+ * @param None
+ * @retval None
+ */
+void ETH_EnablePTPTimeStampInterruptTrigger(void)
+{
+ /* Enable the PTP target time interrupt */
+ ETH->PTPTSCR |= ETH_PTPTSCR_TSITE;
+}
+
+/**
+ * @brief Updated the PTP system time with the Time Stamp Update register value.
+ * @param None
+ * @retval None
+ */
+void ETH_EnablePTPTimeStampUpdate(void)
+{
+ /* Enable the PTP system time update with the Time Stamp Update register value */
+ ETH->PTPTSCR |= ETH_PTPTSCR_TSSTU;
+}
+
+/**
+ * @brief Initialize the PTP Time Stamp
+ * @param None
+ * @retval None
+ */
+void ETH_InitializePTPTimeStamp(void)
+{
+ /* Initialize the PTP Time Stamp */
+ ETH->PTPTSCR |= ETH_PTPTSCR_TSSTI;
+}
+
+/**
+ * @brief Selects the PTP Update method
+ * @param UpdateMethod: the PTP Update method
+ * This parameter can be one of the following values:
+ * @arg ETH_PTP_FineUpdate : Fine Update method
+ * @arg ETH_PTP_CoarseUpdate : Coarse Update method
+ * @retval None
+ */
+void ETH_PTPUpdateMethodConfig(uint32_t UpdateMethod)
+{
+ /* Check the parameters */
+ assert_param(IS_ETH_PTP_UPDATE(UpdateMethod));
+
+ if (UpdateMethod != ETH_PTP_CoarseUpdate)
+ {
+ /* Enable the PTP Fine Update method */
+ ETH->PTPTSCR |= ETH_PTPTSCR_TSFCU;
+ }
+ else
+ {
+ /* Disable the PTP Coarse Update method */
+ ETH->PTPTSCR &= (~(uint32_t)ETH_PTPTSCR_TSFCU);
+ }
+}
+
+/**
+ * @brief Enables or disables the PTP time stamp for transmit and receive frames.
+ * @param NewState: new state of the PTP time stamp for transmit and receive frames
+ * This parameter can be: ENABLE or DISABLE.
+ * @retval None
+ */
+void ETH_PTPTimeStampCmd(FunctionalState NewState)
+{
+ /* Check the parameters */
+ assert_param(IS_FUNCTIONAL_STATE(NewState));
+
+ if (NewState != DISABLE)
+ {
+ /* Enable the PTP time stamp for transmit and receive frames */
+ ETH->PTPTSCR |= ETH_PTPTSCR_TSE;
+ }
+ else
+ {
+ /* Disable the PTP time stamp for transmit and receive frames */
+ ETH->PTPTSCR &= (~(uint32_t)ETH_PTPTSCR_TSE);
+ }
+}
+
+/**
+ * @brief Checks whether the specified ETHERNET PTP flag is set or not.
+ * @param ETH_PTP_FLAG: specifies the flag to check.
+ * This parameter can be one of the following values:
+ * @arg ETH_PTP_FLAG_TSARU : Addend Register Update
+ * @arg ETH_PTP_FLAG_TSITE : Time Stamp Interrupt Trigger Enable
+ * @arg ETH_PTP_FLAG_TSSTU : Time Stamp Update
+ * @arg ETH_PTP_FLAG_TSSTI : Time Stamp Initialize
+ * @retval The new state of ETHERNET PTP Flag (SET or RESET).
+ */
+FlagStatus ETH_GetPTPFlagStatus(uint32_t ETH_PTP_FLAG)
+{
+ uint32_t flagpos = 0x0;
+ FlagStatus bitstatus = RESET;
+ uint32_t ethernetreg = 0x0;
+
+ /* Check the parameters */
+ assert_param(IS_ETH_PTP_GET_FLAG(ETH_PTP_FLAG));
+
+ /* Get the Flag position */
+ flagpos &= 0xEFFFFFFF;
+
+ /* Get the Ethernet register index */
+ ethernetreg = (((uint32_t)ETH_PTP_FLAG) & 0x10000000);
+
+ if (ethernetreg != (uint32_t)RESET) /* The flag is in PTPTSCR register */
+ {
+ flagpos &= ETH->PTPTSCR;
+ }
+ else /* The IT is in PTPTSSR register */
+ {
+ flagpos &= ETH->PTPTSSR;
+ }
+
+ if (flagpos != (uint32_t)RESET)
+ {
+ bitstatus = SET;
+ }
+ else
+ {
+ bitstatus = RESET;
+ }
+
+ return bitstatus;
+}
+
+/**
+ * @brief Sets the system time Sub-Second Increment value.
+ * @param SubSecondValue: specifies the PTP Sub-Second Increment Register value.
+ * @retval None
+ */
+void ETH_SetPTPSubSecondIncrement(uint32_t SubSecondValue)
+{
+ /* Check the parameters */
+ assert_param(IS_ETH_PTP_SUBSECOND_INCREMENT(SubSecondValue));
+ /* Set the PTP Sub-Second Increment Register */
+ ETH->PTPSSIR = SubSecondValue;
+}
+
+/**
+ * @brief Sets the Time Stamp update sign and values.
+ * @param Sign: specifies the PTP Time update value sign.
+ * This parameter can be one of the following values:
+ * @arg ETH_PTP_PositiveTime : positive time value.
+ * @arg ETH_PTP_NegativeTime : negative time value.
+ * @param SecondValue: specifies the PTP Time update second value.
+ * @param SubSecondValue: specifies the PTP Time update sub-second value.
+ * This parameter is a 31 bit value, bit32 correspond to the sign.
+ * @retval None
+ */
+void ETH_SetPTPTimeStampUpdate(uint32_t Sign, uint32_t SecondValue, uint32_t SubSecondValue)
+{
+ /* Check the parameters */
+ assert_param(IS_ETH_PTP_TIME_SIGN(Sign));
+ assert_param(IS_ETH_PTP_TIME_STAMP_UPDATE_SUBSECOND(SubSecondValue));
+ /* Set the PTP Time Update High Register */
+ ETH->PTPTSHUR = SecondValue;
+
+ /* Set the PTP Time Update Low Register with sign */
+ ETH->PTPTSLUR = Sign | SubSecondValue;
+}
+
+/**
+ * @brief Sets the Time Stamp Addend value.
+ * @param Value: specifies the PTP Time Stamp Addend Register value.
+ * @retval None
+ */
+void ETH_SetPTPTimeStampAddend(uint32_t Value)
+{
+ /* Set the PTP Time Stamp Addend Register */
+ ETH->PTPTSAR = Value;
+}
+
+/**
+ * @brief Sets the Target Time registers values.
+ * @param HighValue: specifies the PTP Target Time High Register value.
+ * @param LowValue: specifies the PTP Target Time Low Register value.
+ * @retval None
+ */
+void ETH_SetPTPTargetTime(uint32_t HighValue, uint32_t LowValue)
+{
+ /* Set the PTP Target Time High Register */
+ ETH->PTPTTHR = HighValue;
+ /* Set the PTP Target Time Low Register */
+ ETH->PTPTTLR = LowValue;
+}
+
+/**
+ * @brief Get the specified ETHERNET PTP register value.
+ * @param ETH_PTPReg: specifies the ETHERNET PTP register.
+ * This parameter can be one of the following values:
+ * @arg ETH_PTPTSCR : Sub-Second Increment Register
+ * @arg ETH_PTPSSIR : Sub-Second Increment Register
+ * @arg ETH_PTPTSHR : Time Stamp High Register
+ * @arg ETH_PTPTSLR : Time Stamp Low Register
+ * @arg ETH_PTPTSHUR : Time Stamp High Update Register
+ * @arg ETH_PTPTSLUR : Time Stamp Low Update Register
+ * @arg ETH_PTPTSAR : Time Stamp Addend Register
+ * @arg ETH_PTPTTHR : Target Time High Register
+ * @arg ETH_PTPTTLR : Target Time Low Register
+ * @retval The value of ETHERNET PTP Register value.
+ */
+uint32_t ETH_GetPTPRegister(uint32_t ETH_PTPReg)
+{
+ /* Check the parameters */
+ assert_param(IS_ETH_PTP_REGISTER(ETH_PTPReg));
+
+ /* Return the selected register value */
+ return (*(__IO uint32_t *)(ETH_MAC_BASE + ETH_PTPReg));
+}
+
+#ifdef USE_ENHANCED_DMA_DESCRIPTORS
+/**
+ * @brief Initializes the DMA Tx descriptors in chain mode with PTP.
+ * @param DMAPTPTxDescTab: Pointer on the first Tx desc list
+ * @param TxBuff: Pointer on the first TxBuffer list
+ * @param TxBuffCount: Number of the used Tx desc in the list
+ * @retval None
+ */
+void ETH_DMAPTPTxDescChainInit(ETH_DMADESCTypeDef *DMAPTPTxDescTab, uint8_t* TxBuff, uint32_t TxBuffCount)
+{
+ uint32_t i = 0;
+ ETH_DMADESCTypeDef *DMAPTPTxDesc;
+
+ /* Set the DMAPTPTxDescToSet pointer with the first one of the DMAPTPTxDescTab list */
+ DMAPTPTxDescToSet = DMAPTPTxDescTab;
+
+ /* Fill each DMAPTPTxDesc descriptor with the right values */
+ for(i=0; i < TxBuffCount; i++)
+ {
+ /* Get the pointer on the ith member of the Tx Desc list */
+ DMAPTPTxDesc = DMAPTPTxDescTab + i;
+
+ /* Set Second Address Chained bit */
+ DMAPTPTxDesc->Status = ETH_DMATxDesc_TCH | ETH_DMATxDesc_TTSE;
+
+ /* Set Buffer1 address pointer */
+ DMAPTPTxDesc->Buffer1Addr = (uint32_t)(&TxBuff[i*ETH_MAX_PACKET_SIZE]);
+
+ /* Initialize the next descriptor with the Next Desciptor Polling Enable */
+ if(i < (TxBuffCount-1))
+ {
+ /* Set next descriptor address register with next descriptor base address */
+ DMAPTPTxDesc->Buffer2NextDescAddr = (uint32_t)(DMAPTPTxDescTab+i+1);
+ }
+ else
+ {
+ /* For last descriptor, set next descriptor address register equal to the first descriptor base address */
+ DMAPTPTxDesc->Buffer2NextDescAddr = (uint32_t) DMAPTPTxDescTab;
+ }
+ }
+
+ /* Set Transmit Desciptor List Address Register */
+ ETH->DMATDLAR = (uint32_t) DMAPTPTxDescTab;
+}
+
+/**
+ * @brief Initializes the DMA Rx descriptors in chain mode.
+ * @param DMAPTPRxDescTab: Pointer on the first Rx desc list
+ * @param RxBuff: Pointer on the first RxBuffer list
+ * @param RxBuffCount: Number of the used Rx desc in the list
+ * @retval None
+ */
+void ETH_DMAPTPRxDescChainInit(ETH_DMADESCTypeDef *DMAPTPRxDescTab, uint8_t *RxBuff, uint32_t RxBuffCount)
+{
+ uint32_t i = 0;
+ ETH_DMADESCTypeDef *DMAPTPRxDesc;
+
+ /* Set the DMAPTPRxDescToGet pointer with the first one of the DMAPTPRxDescTab list */
+ DMAPTPRxDescToGet = DMAPTPRxDescTab;
+
+ /* Fill each DMAPTPRxDesc descriptor with the right values */
+ for(i=0; i < RxBuffCount; i++)
+ {
+ /* Get the pointer on the ith member of the Rx Desc list */
+ DMAPTPRxDesc = DMAPTPRxDescTab+i;
+
+ /* Set Own bit of the Rx descriptor Status */
+ DMAPTPRxDesc->Status = ETH_DMARxDesc_OWN;
+
+ /* Set Buffer1 size and Second Address Chained bit */
+ DMAPTPRxDesc->ControlBufferSize = ETH_DMARxDesc_RCH | (uint32_t)ETH_MAX_PACKET_SIZE;
+
+ /* Set Buffer1 address pointer */
+ DMAPTPRxDesc->Buffer1Addr = (uint32_t)(&RxBuff[i*ETH_MAX_PACKET_SIZE]);
+
+ /* Initialize the next descriptor with the Next Desciptor Polling Enable */
+ if(i < (RxBuffCount-1))
+ {
+ /* Set next descriptor address register with next descriptor base address */
+ DMAPTPRxDesc->Buffer2NextDescAddr = (uint32_t)(DMAPTPRxDescTab+i+1);
+ }
+ else
+ {
+ /* For last descriptor, set next descriptor address register equal to the first descriptor base address */
+ DMAPTPRxDesc->Buffer2NextDescAddr = (uint32_t)(DMAPTPRxDescTab);
+ }
+ }
+
+ /* Set Receive Desciptor List Address Register */
+ ETH->DMARDLAR = (uint32_t) DMAPTPRxDescTab;
+}
+#endif /* USE_ENHANCED_DMA_DESCRIPTORS */
+
+/**
+ * @brief Transmits a packet, from application buffer, pointed by ppkt with Time Stamp values.
+ * @param ppkt: pointer to application packet buffer to transmit.
+ * @param FrameLength: Tx Packet size.
+ * @param PTPTxTab: Pointer on the first PTP Tx table to store Time stamp values.
+ * @retval ETH_ERROR: in case of Tx desc owned by DMA
+ * ETH_SUCCESS: for correct transmission
+ */
+uint32_t ETH_HandlePTPTxPkt(uint8_t *ppkt, uint16_t FrameLength, uint32_t *PTPTxTab)
+{
+ uint32_t offset = 0, timeout = 0;
+
+ /* Check if the descriptor is owned by the ETHERNET DMA (when set) or CPU (when reset) */
+ if((DMAPTPTxDescToSet->Status & ETH_DMATxDesc_OWN) != (uint32_t)RESET)
+ {
+ /* Return ERROR: OWN bit set */
+ return ETH_ERROR;
+ }
+
+ /* Copy the frame to be sent into memory pointed by the current ETHERNET DMA Tx descriptor */
+ for(offset=0; offset<FrameLength; offset++)
+ {
+ (*(__IO uint8_t *)((DMAPTPTxDescToSet->Buffer1Addr) + offset)) = (*(ppkt + offset));
+ }
+
+ /* Setting the Frame Length: bits[12:0] */
+ DMAPTPTxDescToSet->ControlBufferSize = (FrameLength & ETH_DMATxDesc_TBS1);
+
+ /* Setting the last segment and first segment bits (in this case a frame is transmitted in one descriptor) */
+ DMAPTPTxDescToSet->Status |= ETH_DMATxDesc_LS | ETH_DMATxDesc_FS;
+
+ /* Set Own bit of the Tx descriptor Status: gives the buffer back to ETHERNET DMA */
+ DMAPTPTxDescToSet->Status |= ETH_DMATxDesc_OWN;
+
+ /* When Tx Buffer unavailable flag is set: clear it and resume transmission */
+ if ((ETH->DMASR & ETH_DMASR_TBUS) != (uint32_t)RESET)
+ {
+ /* Clear TBUS ETHERNET DMA flag */
+ ETH->DMASR = ETH_DMASR_TBUS;
+ /* Resume DMA transmission*/
+ ETH->DMATPDR = 0;
+ }
+
+ /* Wait for ETH_DMATxDesc_TTSS flag to be set */
+ do
+ {
+ timeout++;
+ } while (!(DMAPTPTxDescToSet->Status & ETH_DMATxDesc_TTSS) && (timeout < 0xFFFF));
+
+ /* Return ERROR in case of timeout */
+ if(timeout == PHY_READ_TO)
+ {
+ return ETH_ERROR;
+ }
+
+ /* Clear the DMATxDescToSet status register TTSS flag */
+ DMATxDescToSet->Status &= ~ETH_DMATxDesc_TTSS;
+
+ *PTPTxTab++ = DMAPTPTxDescToSet->TimeStampLow;
+ *PTPTxTab = DMAPTPTxDescToSet->TimeStampHigh;
+
+ /* Update the ETHERNET DMA global Tx descriptor with next Tx decriptor */
+ /* Chained Mode */
+ if((DMAPTPTxDescToSet->Status & ETH_DMATxDesc_TCH) != (uint32_t)RESET)
+ {
+ /* Selects the next DMA Tx descriptor list for next buffer to send */
+ DMAPTPTxDescToSet = (ETH_DMADESCTypeDef*) (DMAPTPTxDescToSet->Buffer2NextDescAddr);
+ }
+ else /* Ring Mode */
+ {
+ if((DMAPTPTxDescToSet->Status & ETH_DMATxDesc_TER) != (uint32_t)RESET)
+ {
+ /* Selects the first DMA Tx descriptor for next buffer to send: last Tx descriptor was used */
+ DMAPTPTxDescToSet = (ETH_DMADESCTypeDef*) (ETH->DMATDLAR);
+ }
+ else
+ {
+ /* Selects the next DMA Tx descriptor list for next buffer to send */
+ DMAPTPTxDescToSet = (ETH_DMADESCTypeDef*) ((uint32_t)DMAPTPTxDescToSet + 0x10 + ((ETH->DMABMR & ETH_DMABMR_DSL) >> 2));
+ }
+ }
+
+ /* Return SUCCESS */
+ return ETH_SUCCESS;
+}
+
+/**
+ * @brief Receives a packet and copies it to memory pointed by ppkt with Time Stamp values.
+ * @param ppkt: pointer to application packet receive buffer.
+ * @param PTPRxTab: Pointer on the first PTP Rx table to store Time stamp values.
+ * @retval ETH_ERROR: if there is error in reception
+ * framelength: received packet size if packet reception is correct
+ */
+uint32_t ETH_HandlePTPRxPkt(uint8_t *ppkt, uint32_t *PTPRxTab)
+{
+ uint32_t offset = 0, framelength = 0;
+
+ /* Check if the descriptor is owned by the ETHERNET DMA (when set) or CPU (when reset) */
+ if((DMAPTPRxDescToGet->Status & ETH_DMARxDesc_OWN) != (uint32_t)RESET)
+ {
+ /* Return error: OWN bit set */
+ return ETH_ERROR;
+ }
+
+ if(((DMAPTPRxDescToGet->Status & ETH_DMARxDesc_ES) == (uint32_t)RESET) &&
+ ((DMAPTPRxDescToGet->Status & ETH_DMARxDesc_LS) != (uint32_t)RESET) &&
+ ((DMAPTPRxDescToGet->Status & ETH_DMARxDesc_FS) != (uint32_t)RESET))
+ {
+ /* Get the Frame Length of the received packet: substruct 4 bytes of the CRC */
+ framelength = ((DMAPTPRxDescToGet->Status & ETH_DMARxDesc_FL) >> ETH_DMARXDESC_FRAME_LENGTHSHIFT) - 4;
+
+ /* Copy the received frame into buffer from memory pointed by the current ETHERNET DMA Rx descriptor */
+ for(offset=0; offset<framelength; offset++)
+ {
+ (*(ppkt + offset)) = (*(__IO uint8_t *)((DMAPTPRxDescToGet->Buffer1Addr) + offset));
+ }
+ }
+ else
+ {
+ /* Return ERROR */
+ framelength = ETH_ERROR;
+ }
+
+ *PTPRxTab++ = DMAPTPRxDescToGet->TimeStampLow;
+ *PTPRxTab = DMAPTPRxDescToGet->TimeStampHigh;
+
+ /* Set Own bit of the Rx descriptor Status: gives the buffer back to ETHERNET DMA */
+ DMAPTPRxDescToGet->Status = ETH_DMARxDesc_OWN;
+
+ /* When Rx Buffer unavailable flag is set: clear it and resume reception */
+ if ((ETH->DMASR & ETH_DMASR_RBUS) != (uint32_t)RESET)
+ {
+ /* Clear RBUS ETHERNET DMA flag */
+ ETH->DMASR = ETH_DMASR_RBUS;
+ /* Resume DMA reception */
+ ETH->DMARPDR = 0;
+ }
+
+ /* Update the ETHERNET DMA global Rx descriptor with next Rx decriptor */
+ /* Chained Mode */
+ if((DMAPTPRxDescToGet->ControlBufferSize & ETH_DMARxDesc_RCH) != (uint32_t)RESET)
+ {
+ /* Selects the next DMA Rx descriptor list for next buffer to read */
+ DMAPTPRxDescToGet = (ETH_DMADESCTypeDef*) (DMAPTPRxDescToGet->Buffer2NextDescAddr);
+ }
+ else /* Ring Mode */
+ {
+ if((DMAPTPRxDescToGet->ControlBufferSize & ETH_DMARxDesc_RER) != (uint32_t)RESET)
+ {
+ /* Selects the first DMA Rx descriptor for next buffer to read: last Rx descriptor was used */
+ DMAPTPRxDescToGet = (ETH_DMADESCTypeDef*) (ETH->DMARDLAR);
+ }
+ else
+ {
+ /* Selects the next DMA Rx descriptor list for next buffer to read */
+ DMAPTPRxDescToGet = (ETH_DMADESCTypeDef*) ((uint32_t)DMAPTPRxDescToGet + 0x10 + ((ETH->DMABMR & ETH_DMABMR_DSL) >> 2));
+ }
+ }
+
+ /* Return Frame Length/ERROR */
+ return (framelength);
+}
+
+/**
+ * @}
+ */
+
+/**
+ * @}
+ */
+
+/******************* (C) COPYRIGHT 2010 STMicroelectronics *****END OF FILE****/
+/*
+ * STM32 Eth Driver for RT-Thread
+ * Change Logs:
+ * Date Author Notes
+ * 2009-10-05 Bernard eth interface driver for STM32F107 CL
+ */
+#include <rtthread.h>
+#include <netif/ethernetif.h>
+#include "lwipopts.h"
+
+/* debug option */
+//#define ETH_DEBUG
+//#define ETH_RX_DUMP
+//#define ETH_TX_DUMP
+
+#ifdef ETH_DEBUG
+#define STM32_ETH_PRINTF rt_kprintf
+#else
+#define STM32_ETH_PRINTF(...)
+#endif
+
+#define ETH_RXBUFNB 4
+#define ETH_TXBUFNB 2
+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];
+
+#define MAX_ADDR_LEN 6
+struct rt_stm32_eth
+{
+ /* inherit from ethernet device */
+ struct eth_device parent;
+
+ /* interface address info. */
+ rt_uint8_t dev_addr[MAX_ADDR_LEN]; /* hw address */
+
+ uint32_t ETH_Speed; /*!< @ref ETH_Speed */
+ uint32_t ETH_Mode; /*!< @ref ETH_Duplex_Mode */
+};
+static struct rt_stm32_eth stm32_eth_device;
+static struct rt_semaphore tx_wait;
+static rt_bool_t tx_is_waiting = RT_FALSE;
+
+/* interrupt service routine */
+void ETH_IRQHandler(void)
+{
+ rt_uint32_t status, ier;
+
+ /* enter interrupt */
+ rt_interrupt_enter();
+
+ status = ETH->DMASR;
+ ier = ETH->DMAIER;
+
+ if(status & ETH_DMA_IT_MMC)
+ {
+ STM32_ETH_PRINTF("ETH_DMA_IT_MMC\r\n");
+ ETH_DMAClearITPendingBit(ETH_DMA_IT_MMC);
+ }
+
+ if(status & ETH_DMA_IT_NIS)
+ {
+ rt_uint32_t nis_clear = ETH_DMA_IT_NIS;
+
+ /* [0]:Transmit Interrupt. */
+ if((status & ier) & ETH_DMA_IT_T) /* packet transmission */
+ {
+ STM32_ETH_PRINTF("ETH_DMA_IT_T\r\n");
+
+ if (tx_is_waiting == RT_TRUE)
+ {
+ tx_is_waiting = RT_FALSE;
+ rt_sem_release(&tx_wait);
+ }
+
+ nis_clear |= ETH_DMA_IT_T;
+ }
+
+ /* [2]:Transmit Buffer Unavailable. */
+
+ /* [6]:Receive Interrupt. */
+ if((status & ier) & ETH_DMA_IT_R) /* packet reception */
+ {
+ STM32_ETH_PRINTF("ETH_DMA_IT_R\r\n");
+ /* a frame has been received */
+ eth_device_ready(&(stm32_eth_device.parent));
+
+ nis_clear |= ETH_DMA_IT_R;
+ }
+
+ /* [14]:Early Receive Interrupt. */
+
+ ETH_DMAClearITPendingBit(nis_clear);
+ }
+
+ if(status & ETH_DMA_IT_AIS)
+ {
+ rt_uint32_t ais_clear = ETH_DMA_IT_AIS;
+ STM32_ETH_PRINTF("ETH_DMA_IT_AIS\r\n");
+
+ /* [1]:Transmit Process Stopped. */
+ if(status & ETH_DMA_IT_TPS)
+ {
+ STM32_ETH_PRINTF("AIS ETH_DMA_IT_TPS\r\n");
+ ais_clear |= ETH_DMA_IT_TPS;
+ }
+
+ /* [3]:Transmit Jabber Timeout. */
+ if(status & ETH_DMA_IT_TJT)
+ {
+ STM32_ETH_PRINTF("AIS ETH_DMA_IT_TJT\r\n");
+ ais_clear |= ETH_DMA_IT_TJT;
+ }
+
+ /* [4]: Receive FIFO Overflow. */
+ if(status & ETH_DMA_IT_RO)
+ {
+ STM32_ETH_PRINTF("AIS ETH_DMA_IT_RO\r\n");
+ ais_clear |= ETH_DMA_IT_RO;
+ }
+
+ /* [5]: Transmit Underflow. */
+ if(status & ETH_DMA_IT_TU)
+ {
+ STM32_ETH_PRINTF("AIS ETH_DMA_IT_TU\r\n");
+ ais_clear |= ETH_DMA_IT_TU;
+ }
+
+ /* [7]: Receive Buffer Unavailable. */
+ if(status & ETH_DMA_IT_RBU)
+ {
+ STM32_ETH_PRINTF("AIS ETH_DMA_IT_RBU\r\n");
+ ais_clear |= ETH_DMA_IT_RBU;
+ }
+
+ /* [8]: Receive Process Stopped. */
+ if(status & ETH_DMA_IT_RPS)
+ {
+ STM32_ETH_PRINTF("AIS ETH_DMA_IT_RPS\r\n");
+ ais_clear |= ETH_DMA_IT_RPS;
+ }
+
+ /* [9]: Receive Watchdog Timeout. */
+ if(status & ETH_DMA_IT_RWT)
+ {
+ STM32_ETH_PRINTF("AIS ETH_DMA_IT_RWT\r\n");
+ ais_clear |= ETH_DMA_IT_RWT;
+ }
+
+ /* [10]: Early Transmit Interrupt. */
+
+ /* [13]: Fatal Bus Error. */
+ if(status & ETH_DMA_IT_FBE)
+ {
+ STM32_ETH_PRINTF("AIS ETH_DMA_IT_FBE\r\n");
+ ais_clear |= ETH_DMA_IT_FBE;
+ }
+
+ ETH_DMAClearITPendingBit(ais_clear);
+ }
+
+ /* leave interrupt */
+ rt_interrupt_leave();
+}
+
+/* RT-Thread Device Interface */
+#include <rtthread.h>
+#include <netif/ethernetif.h>
+#include <netif/etharp.h>
+#include <lwip/icmp.h>
+#include "lwipopts.h"
+
+/* initialize the interface */
+static rt_err_t rt_stm32_eth_init(rt_device_t dev)
+{
+ struct rt_stm32_eth * stm32_eth = (struct rt_stm32_eth *)dev;
+ ETH_InitTypeDef ETH_InitStructure;
+
+ /* Enable ETHERNET clock */
+ RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_ETH_MAC | RCC_AHB1Periph_ETH_MAC_Tx |
+ RCC_AHB1Periph_ETH_MAC_Rx, ENABLE);
+
+ SYSCFG_ETH_MediaInterfaceConfig(SYSCFG_ETH_MediaInterface_RMII);
+
+ /* Reset ETHERNET on AHB Bus */
+ ETH_DeInit();
+
+ /* Software reset */
+ ETH_SoftwareReset();
+
+ /* Wait for software reset */
+ while (ETH_GetSoftwareResetStatus() == SET);
+
+ /* ETHERNET Configuration --------------------------------------------------*/
+ /* Call ETH_StructInit if you don't like to configure all ETH_InitStructure parameter */
+ ETH_StructInit(&ETH_InitStructure);
+
+ /* Fill ETH_InitStructure parametrs */
+ /*------------------------ MAC -----------------------------------*/
+ ETH_InitStructure.ETH_AutoNegotiation = ETH_AutoNegotiation_Enable;
+ ETH_InitStructure.ETH_Speed = stm32_eth->ETH_Speed;
+ ETH_InitStructure.ETH_Mode = stm32_eth->ETH_Mode;
+
+ 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_Disable;
+ ETH_InitStructure.ETH_BroadcastFramesReception = ETH_BroadcastFramesReception_Enable;
+ ETH_InitStructure.ETH_PromiscuousMode = ETH_PromiscuousMode_Disable;
+ 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_Disable;
+ ETH_InitStructure.ETH_ForwardUndersizedGoodFrames = ETH_ForwardUndersizedGoodFrames_Disable;
+ ETH_InitStructure.ETH_SecondFrameOperate = ETH_SecondFrameOperate_Enable;
+ 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(&ETH_InitStructure);
+
+ /* Enable DMA Receive interrupt (need to enable in this case Normal interrupt) */
+ ETH_DMAITConfig(ETH_DMA_IT_NIS | ETH_DMA_IT_R | ETH_DMA_IT_T, ENABLE);
+
+ /* Initialize Tx Descriptors list: Chain Mode */
+ ETH_DMATxDescChainInit(DMATxDscrTab, &Tx_Buff[0][0], ETH_TXBUFNB);
+ /* Initialize Rx Descriptors list: Chain Mode */
+ ETH_DMARxDescChainInit(DMARxDscrTab, &Rx_Buff[0][0], ETH_RXBUFNB);
+
+ /* MAC address configuration */
+ ETH_MACAddressConfig(ETH_MAC_Address0, (u8*)&stm32_eth_device.dev_addr[0]);
+
+ /* Enable MAC and DMA transmission and reception */
+ ETH_Start();
+
+ return RT_EOK;
+}
+
+static rt_err_t rt_stm32_eth_open(rt_device_t dev, rt_uint16_t oflag)
+{
+ return RT_EOK;
+}
+
+static rt_err_t rt_stm32_eth_close(rt_device_t dev)
+{
+ return RT_EOK;
+}
+
+static rt_size_t rt_stm32_eth_read(rt_device_t dev, rt_off_t pos, void* buffer, rt_size_t size)
+{
+ rt_set_errno(-RT_ENOSYS);
+ return 0;
+}
+
+static rt_size_t rt_stm32_eth_write (rt_device_t dev, rt_off_t pos, const void* buffer, rt_size_t size)
+{
+ rt_set_errno(-RT_ENOSYS);
+ return 0;
+}
+
+static rt_err_t rt_stm32_eth_control(rt_device_t dev, rt_uint8_t cmd, void *args)
+{
+ switch(cmd)
+ {
+ case NIOCTL_GADDR:
+ /* get mac address */
+ if(args) rt_memcpy(args, stm32_eth_device.dev_addr, 6);
+ else return -RT_ERROR;
+ break;
+
+ default :
+ break;
+ }
+
+ return RT_EOK;
+}
+
+/* ethernet device interface */
+/* transmit packet. */
+rt_err_t rt_stm32_eth_tx( rt_device_t dev, struct pbuf* p)
+{
+ struct pbuf* q;
+ rt_uint32_t offset;
+
+ /* Check if the descriptor is owned by the ETHERNET DMA (when set) or CPU (when reset) */
+ while ((DMATxDescToSet->Status & ETH_DMATxDesc_OWN) != (uint32_t)RESET)
+ {
+ rt_err_t result;
+ rt_uint32_t level;
+
+ level = rt_hw_interrupt_disable();
+ tx_is_waiting = RT_TRUE;
+ rt_hw_interrupt_enable(level);
+
+ /* it's own bit set, wait it */
+ result = rt_sem_take(&tx_wait, RT_WAITING_FOREVER);
+ if (result == RT_EOK) break;
+ if (result == -RT_ERROR) return -RT_ERROR;
+ }
+
+ offset = 0;
+ for (q = p; q != NULL; q = q->next)
+ {
+ uint8_t *to;
+
+ /* Copy the frame to be sent into memory pointed by the current ETHERNET DMA Tx descriptor */
+ to = (uint8_t*)((DMATxDescToSet->Buffer1Addr) + offset);
+ memcpy(to, q->payload, q->len);
+ offset += q->len;
+ }
+#ifdef ETH_TX_DUMP
+ {
+ rt_uint32_t i;
+ rt_uint8_t *ptr = (rt_uint8_t*)(DMATxDescToSet->Buffer1Addr);
+
+ STM32_ETH_PRINTF("tx_dump, len:%d\r\n", p->tot_len);
+ for(i=0; i<p->tot_len; i++)
+ {
+ STM32_ETH_PRINTF("%02x ",*ptr);
+ ptr++;
+
+ if(((i+1)%8) == 0)
+ {
+ STM32_ETH_PRINTF(" ");
+ }
+ if(((i+1)%16) == 0)
+ {
+ STM32_ETH_PRINTF("\r\n");
+ }
+ }
+ STM32_ETH_PRINTF("\r\ndump done!\r\n");
+ }
+#endif
+
+ /* Setting the Frame Length: bits[12:0] */
+ DMATxDescToSet->ControlBufferSize = (p->tot_len & ETH_DMATxDesc_TBS1);
+ /* Setting the last segment and first segment bits (in this case a frame is transmitted in one descriptor) */
+ DMATxDescToSet->Status |= ETH_DMATxDesc_LS | ETH_DMATxDesc_FS;
+ /* Enable TX Completion Interrupt */
+ DMATxDescToSet->Status |= ETH_DMATxDesc_IC;
+#ifdef CHECKSUM_BY_HARDWARE
+ DMATxDescToSet->Status |= ETH_DMATxDesc_ChecksumTCPUDPICMPFull;
+ /* clean ICMP checksum STM32F need */
+ {
+ struct eth_hdr *ethhdr = (struct eth_hdr *)(DMATxDescToSet->Buffer1Addr);
+ /* is IP ? */
+ if( ethhdr->type == htons(ETHTYPE_IP) )
+ {
+ struct ip_hdr *iphdr = (struct ip_hdr *)(DMATxDescToSet->Buffer1Addr + SIZEOF_ETH_HDR);
+ /* is ICMP ? */
+ if( IPH_PROTO(iphdr) == IP_PROTO_ICMP )
+ {
+ struct icmp_echo_hdr *iecho = (struct icmp_echo_hdr *)(DMATxDescToSet->Buffer1Addr + SIZEOF_ETH_HDR + sizeof(struct ip_hdr) );
+ iecho->chksum = 0;
+ }
+ }
+ }
+#endif
+ /* Set Own bit of the Tx descriptor Status: gives the buffer back to ETHERNET DMA */
+ DMATxDescToSet->Status |= ETH_DMATxDesc_OWN;
+ /* When Tx Buffer unavailable flag is set: clear it and resume transmission */
+ if ((ETH->DMASR & ETH_DMASR_TBUS) != (uint32_t)RESET)
+ {
+ /* Clear TBUS ETHERNET DMA flag */
+ ETH->DMASR = ETH_DMASR_TBUS;
+ /* Transmit Poll Demand to resume DMA transmission*/
+ ETH->DMATPDR = 0;
+ }
+
+ /* Update the ETHERNET DMA global Tx descriptor with next Tx decriptor */
+ /* Chained Mode */
+ /* Selects the next DMA Tx descriptor list for next buffer to send */
+ DMATxDescToSet = (ETH_DMADESCTypeDef*) (DMATxDescToSet->Buffer2NextDescAddr);
+
+ /* Return SUCCESS */
+ return RT_EOK;
+}
+
+/* reception packet. */
+struct pbuf *rt_stm32_eth_rx(rt_device_t dev)
+{
+ struct pbuf* p;
+ rt_uint32_t offset = 0, framelength = 0;
+
+ /* init p pointer */
+ p = RT_NULL;
+
+ /* Check if the descriptor is owned by the ETHERNET DMA (when set) or CPU (when reset) */
+ if(((DMARxDescToGet->Status & ETH_DMARxDesc_OWN) != (uint32_t)RESET))
+ return p;
+
+ if (((DMARxDescToGet->Status & ETH_DMARxDesc_ES) == (uint32_t)RESET) &&
+ ((DMARxDescToGet->Status & ETH_DMARxDesc_LS) != (uint32_t)RESET) &&
+ ((DMARxDescToGet->Status & ETH_DMARxDesc_FS) != (uint32_t)RESET))
+ {
+ /* Get the Frame Length of the received packet: substruct 4 bytes of the CRC */
+ framelength = ((DMARxDescToGet->Status & ETH_DMARxDesc_FL) >> ETH_DMARXDESC_FRAME_LENGTHSHIFT) - 4;
+
+ /* allocate buffer */
+ p = pbuf_alloc(PBUF_LINK, framelength, PBUF_RAM);
+ if (p != RT_NULL)
+ {
+ struct pbuf* q;
+
+ for (q = p; q != RT_NULL; q= q->next)
+ {
+ /* Copy the received frame into buffer from memory pointed by the current ETHERNET DMA Rx descriptor */
+ memcpy(q->payload, (uint8_t *)((DMARxDescToGet->Buffer1Addr) + offset), q->len);
+ offset += q->len;
+ }
+#ifdef ETH_RX_DUMP
+ {
+ rt_uint32_t i;
+ rt_uint8_t *ptr = (rt_uint8_t*)(DMARxDescToGet->Buffer1Addr);
+
+ STM32_ETH_PRINTF("rx_dump, len:%d\r\n", p->tot_len);
+ for(i=0; i<p->tot_len; i++)
+ {
+ STM32_ETH_PRINTF("%02x ", *ptr);
+ ptr++;
+
+ if(((i+1)%8) == 0)
+ {
+ STM32_ETH_PRINTF(" ");
+ }
+ if(((i+1)%16) == 0)
+ {
+ STM32_ETH_PRINTF("\r\n");
+ }
+ }
+ STM32_ETH_PRINTF("\r\ndump done!\r\n");
+ }
+#endif
+ }
+ }
+
+ /* Set Own bit of the Rx descriptor Status: gives the buffer back to ETHERNET DMA */
+ DMARxDescToGet->Status = ETH_DMARxDesc_OWN;
+
+ /* When Rx Buffer unavailable flag is set: clear it and resume reception */
+ if ((ETH->DMASR & ETH_DMASR_RBUS) != (uint32_t)RESET)
+ {
+ /* Clear RBUS ETHERNET DMA flag */
+ ETH->DMASR = ETH_DMASR_RBUS;
+ /* Resume DMA reception */
+ ETH->DMARPDR = 0;
+ }
+
+ /* Update the ETHERNET DMA global Rx descriptor with next Rx decriptor */
+ /* Chained Mode */
+ if((DMARxDescToGet->ControlBufferSize & ETH_DMARxDesc_RCH) != (uint32_t)RESET)
+ {
+ /* Selects the next DMA Rx descriptor list for next buffer to read */
+ DMARxDescToGet = (ETH_DMADESCTypeDef*) (DMARxDescToGet->Buffer2NextDescAddr);
+ }
+ else /* Ring Mode */
+ {
+ if((DMARxDescToGet->ControlBufferSize & ETH_DMARxDesc_RER) != (uint32_t)RESET)
+ {
+ /* Selects the first DMA Rx descriptor for next buffer to read: last Rx descriptor was used */
+ DMARxDescToGet = (ETH_DMADESCTypeDef*) (ETH->DMARDLAR);
+ }
+ else
+ {
+ /* Selects the next DMA Rx descriptor list for next buffer to read */
+ DMARxDescToGet = (ETH_DMADESCTypeDef*) ((uint32_t)DMARxDescToGet + 0x10 + ((ETH->DMABMR & ETH_DMABMR_DSL) >> 2));
+ }
+ }
+
+ return p;
+}
+
+static void NVIC_Configuration(void)
+{
+ NVIC_InitTypeDef NVIC_InitStructure;
+
+ /* Enable the Ethernet global Interrupt */
+ NVIC_InitStructure.NVIC_IRQChannel = ETH_IRQn;
+ NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 2;
+ NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
+ NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
+ NVIC_Init(&NVIC_InitStructure);
+}
+
+/*
+ * GPIO Configuration for ETH
+ */
+static void GPIO_Configuration(void)
+{
+ GPIO_InitTypeDef GPIO_InitStructure;
+
+ /* Enable SYSCFG clock */
+ RCC_APB2PeriphClockCmd(RCC_APB2Periph_SYSCFG, ENABLE);
+ RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA | RCC_AHB1Periph_GPIOC, ENABLE);
+
+ GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;
+ GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
+ GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
+ GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;
+
+ /* config MDIO and MDC. */
+ GPIO_PinAFConfig(GPIOA, GPIO_PinSource2, GPIO_AF_ETH); /* config ETH_MDIO */
+ GPIO_PinAFConfig(GPIOC, GPIO_PinSource1, GPIO_AF_ETH); /* config ETH_MDC */
+ /* config PA2: MDIO */
+ GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2;
+ GPIO_Init(GPIOA, &GPIO_InitStructure);
+ /* config PC1: MDC */
+ GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1;
+ GPIO_Init(GPIOC, &GPIO_InitStructure);
+
+ /* Ethernet pins configuration ************************************************/
+#if defined(MII_MODE)
+/*
+ ETH_MDIO ------------> PA2
+ ETH_MDC -------------> PC1
+
+ ETH_MII_CRS ---------> PA0
+ ETH_MII_COL ---------> PA3
+
+ ETH_MII_RX_CLK ------> PA1
+ ETH_MII_RX_ER -------> PB10
+ ETH_MII_RX_ER -------> PI10
+ ETH_MII_RX_DV -------> PA7
+ ETH_MII_RXD0 --------> PC4
+ ETH_MII_RXD1 --------> PC5
+ ETH_MII_RXD2 --------> PB0
+ ETH_MII_RXD3 --------> PB1
+
+ ETH_MII_TX_EN -------> PB11
+ ETH_MII_TX_EN -------> PG11
+ ETH_MII_TX_CLK ------> PC3
+ ETH_MII_TXD0 --------> PB12
+ ETH_MII_TXD0 --------> PG13
+ ETH_MII_TXD1 --------> PB13
+ ETH_MII_TXD1 --------> PG14
+ ETH_MII_TXD2 --------> PC2
+ ETH_MII_TXD3 --------> PB8
+ ETH_MII_TXD3 -------> PE2
+*/
+
+#error insert MII GPIO initial.
+#elif defined(RMII_MODE)
+/*
+ ETH_MDIO ------------> PA2
+ ETH_MDC -------------> PC1
+
+ ETH_RMII_REF_CLK ----> PA1
+
+ ETH_RMII_CRS_DV -----> PA7
+ ETH_RMII_RXD0 -------> PC4
+ ETH_RMII_RXD1 -------> PC5
+
+ ETH_RMII_TX_EN ------> PG11
+ ETH_RMII_TXD0 -------> PG13
+ ETH_RMII_TXD1 -------> PG14
+
+ ETH_RMII_TX_EN ------> PB11
+ ETH_RMII_TXD0 -------> PB12
+ ETH_RMII_TXD1 -------> PB13
+*/
+ GPIO_PinAFConfig(GPIOA, GPIO_PinSource1, GPIO_AF_ETH); /* RMII_REF_CLK */
+ GPIO_PinAFConfig(GPIOA, GPIO_PinSource7, GPIO_AF_ETH); /* RMII_CRS_DV */
+
+ /* configure PA1:RMII_REF_CLK, PA7:RMII_CRS_DV. */
+ GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1 | GPIO_Pin_7;
+ GPIO_Init(GPIOA, &GPIO_InitStructure);
+
+ GPIO_PinAFConfig(GPIOC, GPIO_PinSource4, GPIO_AF_ETH); /* RMII_RXD0 */
+ GPIO_PinAFConfig(GPIOC, GPIO_PinSource5, GPIO_AF_ETH); /* RMII_RXD1 */
+
+ /* configure PC4:RMII_RXD0, PC5:RMII_RXD1. */
+ GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4 | GPIO_Pin_5;
+ GPIO_Init(GPIOC, &GPIO_InitStructure);
+
+# if RMII_TX_GPIO_GROUP == 1
+ RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOB, ENABLE);
+
+ GPIO_PinAFConfig(GPIOB, GPIO_PinSource11, GPIO_AF_ETH); /* RMII_TX_EN */
+ GPIO_PinAFConfig(GPIOB, GPIO_PinSource12, GPIO_AF_ETH); /* RMII_TXD0 */
+ GPIO_PinAFConfig(GPIOB, GPIO_PinSource13, GPIO_AF_ETH); /* RMII_TXD1 */
+
+ /* configure PB11:RMII_TX_EN, PB12:RMII_TXD0, PB13:RMII_TXD1 */
+ GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11 | GPIO_Pin_12 | GPIO_Pin_13;
+ GPIO_Init(GPIOB, &GPIO_InitStructure);
+# elif RMII_TX_GPIO_GROUP == 2
+ RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOG, ENABLE);
+
+ GPIO_PinAFConfig(GPIOG, GPIO_PinSource11, GPIO_AF_ETH); /* RMII_TX_EN */
+ GPIO_PinAFConfig(GPIOG, GPIO_PinSource13, GPIO_AF_ETH); /* RMII_TXD0 */
+ GPIO_PinAFConfig(GPIOG, GPIO_PinSource14, GPIO_AF_ETH); /* RMII_TXD1 */
+
+ /* configure PG11:RMII_TX_EN, PG13:RMII_TXD0, PG14:RMII_TXD1 */
+ GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11 | GPIO_Pin_13 | GPIO_Pin_14;
+ GPIO_Init(GPIOG, &GPIO_InitStructure);
+# else
+# error RMII_TX_GPIO_GROUP setting error!
+# endif /*RMII_TX_GPIO_GROUP */
+#endif /* RMII_MODE */
+}
+
+/* PHY: LAN8720 */
+static uint8_t phy_speed = 0;
+#define PHY_LINK_MASK (1<<0)
+#define PHY_100M_MASK (1<<1)
+#define PHY_DUPLEX_MASK (1<<2)
+static void phy_monitor_thread_entry(void *parameter)
+{
+ uint8_t phy_addr = 0xFF;
+ uint8_t phy_speed_new = 0;
+
+ /* phy search */
+ {
+ rt_uint32_t i;
+ rt_uint16_t temp;
+
+ for(i=0; i<=0x1F; i++)
+ {
+ temp = ETH_ReadPHYRegister(i, 0x02);
+
+ if( temp != 0xFFFF )
+ {
+ phy_addr = i;
+ break;
+ }
+ }
+ } /* phy search */
+
+ if(phy_addr == 0xFF)
+ {
+ STM32_ETH_PRINTF("phy not probe!\r\n");
+ return;
+ }
+ else
+ {
+ STM32_ETH_PRINTF("found a phy, address:0x%02X\r\n", phy_addr);
+ }
+
+ /* RESET PHY */
+ STM32_ETH_PRINTF("RESET PHY!\r\n");
+ ETH_WritePHYRegister(phy_addr, PHY_BCR, PHY_Reset);
+ rt_thread_delay(RT_TICK_PER_SECOND * 2);
+ ETH_WritePHYRegister(phy_addr, PHY_BCR, PHY_AutoNegotiation);
+
+ while(1)
+ {
+ uint16_t status = ETH_ReadPHYRegister(phy_addr, PHY_BSR);
+ STM32_ETH_PRINTF("LAN8720 status:0x%04X\r\n", status);
+
+ phy_speed_new = 0;
+
+ if(status & (PHY_AutoNego_Complete | PHY_Linked_Status))
+ {
+ uint16_t SR;
+
+ SR = ETH_ReadPHYRegister(phy_addr, 31);
+ STM32_ETH_PRINTF("LAN8720 REG 31:0x%04X\r\n", SR);
+
+ SR = (SR >> 2) & 0x07; /* LAN8720, REG31[4:2], Speed Indication. */
+ phy_speed_new = PHY_LINK_MASK;
+
+ if((SR & 0x03) == 2)
+ {
+ phy_speed_new |= PHY_100M_MASK;
+ }
+
+ if(SR & 0x04)
+ {
+ phy_speed_new |= PHY_DUPLEX_MASK;
+ }
+ }
+
+ /* linkchange */
+ if(phy_speed_new != phy_speed)
+ {
+ if(phy_speed_new & PHY_LINK_MASK)
+ {
+ STM32_ETH_PRINTF("link up ");
+
+ if(phy_speed_new & PHY_100M_MASK)
+ {
+ STM32_ETH_PRINTF("100Mbps");
+ stm32_eth_device.ETH_Speed = ETH_Speed_100M;
+ }
+ else
+ {
+ stm32_eth_device.ETH_Speed = ETH_Speed_10M;
+ STM32_ETH_PRINTF("10Mbps");
+ }
+
+ if(phy_speed_new & PHY_DUPLEX_MASK)
+ {
+ STM32_ETH_PRINTF(" full-duplex\r\n");
+ stm32_eth_device.ETH_Mode = ETH_Mode_FullDuplex;
+ }
+ else
+ {
+ STM32_ETH_PRINTF(" half-duplex\r\n");
+ stm32_eth_device.ETH_Mode = ETH_Mode_HalfDuplex;
+ }
+ rt_stm32_eth_init((rt_device_t)&stm32_eth_device);
+
+ /* send link up. */
+ eth_device_linkchange(&stm32_eth_device.parent, RT_TRUE);
+ } /* link up. */
+ else
+ {
+ STM32_ETH_PRINTF("link down\r\n");
+ /* send link down. */
+ eth_device_linkchange(&stm32_eth_device.parent, RT_FALSE);
+ } /* link down. */
+
+ phy_speed = phy_speed_new;
+ } /* linkchange */
+
+ rt_thread_delay(RT_TICK_PER_SECOND);
+ } /* while(1) */
+}
+
+void rt_hw_stm32_eth_init(void)
+{
+ /* PHY RESET: PC0 */
+ {
+ GPIO_InitTypeDef GPIO_InitStructure;
+
+ GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;
+ GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;
+ GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
+ GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;
+
+ RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOC, ENABLE);
+
+ GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;
+ GPIO_Init(GPIOC, &GPIO_InitStructure);
+
+ GPIO_ResetBits(GPIOC, GPIO_Pin_0);
+ rt_thread_delay(2);
+ GPIO_SetBits(GPIOC, GPIO_Pin_0);
+ rt_thread_delay(2);
+ }
+
+ GPIO_Configuration();
+ NVIC_Configuration();
+
+ stm32_eth_device.ETH_Speed = ETH_Speed_100M;
+ stm32_eth_device.ETH_Mode = ETH_Mode_FullDuplex;
+
+ /* OUI 00-80-E1 STMICROELECTRONICS. */
+ stm32_eth_device.dev_addr[0] = 0x00;
+ stm32_eth_device.dev_addr[1] = 0x80;
+ stm32_eth_device.dev_addr[2] = 0xE1;
+ /* generate MAC addr from 96bit unique ID (only for test). */
+ stm32_eth_device.dev_addr[3] = *(rt_uint8_t*)(0x1FFF7A10+4);
+ stm32_eth_device.dev_addr[4] = *(rt_uint8_t*)(0x1FFF7A10+2);
+ stm32_eth_device.dev_addr[5] = *(rt_uint8_t*)(0x1FFF7A10+0);
+
+ stm32_eth_device.parent.parent.init = rt_stm32_eth_init;
+ stm32_eth_device.parent.parent.open = rt_stm32_eth_open;
+ stm32_eth_device.parent.parent.close = rt_stm32_eth_close;
+ stm32_eth_device.parent.parent.read = rt_stm32_eth_read;
+ stm32_eth_device.parent.parent.write = rt_stm32_eth_write;
+ stm32_eth_device.parent.parent.control = rt_stm32_eth_control;
+ stm32_eth_device.parent.parent.user_data = RT_NULL;
+
+ stm32_eth_device.parent.eth_rx = rt_stm32_eth_rx;
+ stm32_eth_device.parent.eth_tx = rt_stm32_eth_tx;
+
+ /* init tx semaphore */
+ rt_sem_init(&tx_wait, "tx_wait", 0, RT_IPC_FLAG_FIFO);
+
+ /* register eth device */
+ eth_device_init(&(stm32_eth_device.parent), "e0");
+
+ /* start phy monitor */
+ {
+ rt_thread_t tid;
+ tid = rt_thread_create("phy",
+ phy_monitor_thread_entry,
+ RT_NULL,
+ 512,
+ RT_THREAD_PRIORITY_MAX - 2,
+ 2);
+ if (tid != RT_NULL)
+ rt_thread_startup(tid);
+ }
+}
diff --git a/bsp/stm32f40x/drivers/stm32f4xx_eth.h b/bsp/stm32f40x/drivers/stm32f4xx_eth.h
new file mode 100644
index 0000000000..96f06b7dd2
--- /dev/null
+++ b/bsp/stm32f40x/drivers/stm32f4xx_eth.h
@@ -0,0 +1,1874 @@
+/**
+ ******************************************************************************
+ * @file stm32f2xx_eth.h
+ * @author MCD Application Team
+ * @version V0.0.1
+ * @date 10/21/2010
+ * @brief This file contains all the functions prototypes for the Ethernet
+ * firmware library.
+ ******************************************************************************
+ * @copy
+ *
+ * THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS
+ * WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE
+ * TIME. AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY
+ * DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING
+ * FROM THE CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE
+ * CODING INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.
+ *
+ * <h2><center>&copy; COPYRIGHT 2010 STMicroelectronics</center></h2>
+ */
+
+/* Define to prevent recursive inclusion -------------------------------------*/
+#ifndef __STM32F2XX_ETH_H
+#define __STM32F2XX_ETH_H
+
+#ifdef __cplusplus
+ extern "C" {
+#endif
+
+/* Includes ------------------------------------------------------------------*/
+#include "stm32f4xx.h"
+
+/* Uncomment this line when using time stamping and/or IPv4 checksum offload */
+#define USE_ENHANCED_DMA_DESCRIPTORS
+
+/**
+ * @brief Uncomment the line below if you want to use user defined Delay function
+ * (for precise timing), otherwise default _eth_delay_ function defined within
+ * this driver is used (less precise timing).
+ */
+/* #define USE_Delay */
+
+#ifdef USE_Delay
+#include "main.h"
+ #define _eth_delay_ Delay /*!< User can provide more timing precise _eth_delay_ function */
+#else
+ #define _eth_delay_ ETH_Delay /*!< Default _eth_delay_ function with less precise timing */
+#endif
+
+/** @addtogroup STM32F2XX_ETH_Driver
+ * @{
+ */
+
+/** @defgroup ETH_Exported_Types
+ * @{
+ */
+
+/**
+ * @brief ETH MAC Init structure definition
+ * @note The user should not configure all the ETH_InitTypeDef structure's fields.
+ * By calling the ETH_StructInit function the structure�s fields are set to their default values.
+ * Only the parameters that will be set to a non-default value should be configured.
+ */
+typedef struct {
+/**
+ * @brief / * MAC
+ */
+ uint32_t ETH_AutoNegotiation; /*!< Selects or not the AutoNegotiation mode for the external PHY
+ The AutoNegotiation allows an automatic setting of the Speed (10/100Mbps)
+ and the mode (half/full-duplex).
+ This parameter can be a value of @ref ETH_AutoNegotiation */
+
+ uint32_t ETH_Watchdog; /*!< Selects or not the Watchdog timer
+ When enabled, the MAC allows no more then 2048 bytes to be received.
+ When disabled, the MAC can receive up to 16384 bytes.
+ This parameter can be a value of @ref ETH_watchdog */
+
+ uint32_t ETH_Jabber; /*!< Selects or not Jabber timer
+ When enabled, the MAC allows no more then 2048 bytes to be sent.
+ When disabled, the MAC can send up to 16384 bytes.
+ This parameter can be a value of @ref ETH_Jabber */
+
+ uint32_t ETH_InterFrameGap; /*!< Selects the minimum IFG between frames during transmission
+ This parameter can be a value of @ref ETH_Inter_Frame_Gap */
+
+ uint32_t ETH_CarrierSense; /*!< Selects or not the Carrier Sense
+ This parameter can be a value of @ref ETH_Carrier_Sense */
+
+ uint32_t ETH_Speed; /*!< Sets the Ethernet speed: 10/100 Mbps
+ This parameter can be a value of @ref ETH_Speed */
+
+ uint32_t ETH_ReceiveOwn; /*!< Selects or not the ReceiveOwn
+ ReceiveOwn allows the reception of frames when the TX_EN signal is asserted
+ in Half-Duplex mode
+ This parameter can be a value of @ref ETH_Receive_Own */
+
+ uint32_t ETH_LoopbackMode; /*!< Selects or not the internal MAC MII Loopback mode
+ This parameter can be a value of @ref ETH_Loop_Back_Mode */
+
+ uint32_t ETH_Mode; /*!< Selects the MAC duplex mode: Half-Duplex or Full-Duplex mode
+ This parameter can be a value of @ref ETH_Duplex_Mode */
+
+ uint32_t ETH_ChecksumOffload; /*!< Selects or not the IPv4 checksum checking for received frame payloads' TCP/UDP/ICMP headers.
+ This parameter can be a value of @ref ETH_Checksum_Offload */
+
+ uint32_t ETH_RetryTransmission; /*!< Selects or not the MAC attempt retries transmission, based on the settings of BL,
+ when a colision occurs (Half-Duplex mode)
+ This parameter can be a value of @ref ETH_Retry_Transmission */
+
+ uint32_t ETH_AutomaticPadCRCStrip; /*!< Selects or not the Automatic MAC Pad/CRC Stripping
+ This parameter can be a value of @ref ETH_Automatic_Pad_CRC_Strip */
+
+ uint32_t ETH_BackOffLimit; /*!< Selects the BackOff limit value
+ This parameter can be a value of @ref ETH_Back_Off_Limit */
+
+ uint32_t ETH_DeferralCheck; /*!< Selects or not the deferral check function (Half-Duplex mode)
+ This parameter can be a value of @ref ETH_Deferral_Check */
+
+ uint32_t ETH_ReceiveAll; /*!< Selects or not all frames reception by the MAC (No fitering)
+ This parameter can be a value of @ref ETH_Receive_All */
+
+ uint32_t ETH_SourceAddrFilter; /*!< Selects the Source Address Filter mode
+ This parameter can be a value of @ref ETH_Source_Addr_Filter */
+
+ uint32_t ETH_PassControlFrames; /*!< Sets the forwarding mode of the control frames (including unicast and multicast PAUSE frames)
+ This parameter can be a value of @ref ETH_Pass_Control_Frames */
+
+ uint32_t ETH_BroadcastFramesReception; /*!< Selects or not the reception of Broadcast Frames
+ This parameter can be a value of @ref ETH_Broadcast_Frames_Reception */
+
+ uint32_t ETH_DestinationAddrFilter; /*!< Sets the destination filter mode for both unicast and multicast frames
+ This parameter can be a value of @ref ETH_Destination_Addr_Filter */
+
+ uint32_t ETH_PromiscuousMode; /*!< Selects or not the Promiscuous Mode
+ This parameter can be a value of @ref ETH_Promiscuous_Mode */
+
+ uint32_t ETH_MulticastFramesFilter; /*!< Selects the Multicast Frames filter mode: None/HashTableFilter/PerfectFilter/PerfectHashTableFilter
+ This parameter can be a value of @ref ETH_Multicast_Frames_Filter */
+
+ uint32_t ETH_UnicastFramesFilter; /*!< Selects the Unicast Frames filter mode: HashTableFilter/PerfectFilter/PerfectHashTableFilter
+ This parameter can be a value of @ref ETH_Unicast_Frames_Filter */
+
+ uint32_t ETH_HashTableHigh; /*!< This field holds the higher 32 bits of Hash table. */
+
+ uint32_t ETH_HashTableLow; /*!< This field holds the lower 32 bits of Hash table. */
+
+ uint32_t ETH_PauseTime; /*!< This field holds the value to be used in the Pause Time field in the
+ transmit control frame */
+
+ uint32_t ETH_ZeroQuantaPause; /*!< Selects or not the automatic generation of Zero-Quanta Pause Control frames
+ This parameter can be a value of @ref ETH_Zero_Quanta_Pause */
+
+ uint32_t ETH_PauseLowThreshold; /*!< This field configures the threshold of the PAUSE to be checked for
+ automatic retransmission of PAUSE Frame
+ This parameter can be a value of @ref ETH_Pause_Low_Threshold */
+
+ uint32_t ETH_UnicastPauseFrameDetect; /*!< Selects or not the MAC detection of the Pause frames (with MAC Address0
+ unicast address and unique multicast address)
+ This parameter can be a value of @ref ETH_Unicast_Pause_Frame_Detect */
+
+ uint32_t ETH_ReceiveFlowControl; /*!< Enables or disables the MAC to decode the received Pause frame and
+ disable its transmitter for a specified time (Pause Time)
+ This parameter can be a value of @ref ETH_Receive_Flow_Control */
+
+ uint32_t ETH_TransmitFlowControl; /*!< Enables or disables the MAC to transmit Pause frames (Full-Duplex mode)
+ or the MAC back-pressure operation (Half-Duplex mode)
+ This parameter can be a value of @ref ETH_Transmit_Flow_Control */
+
+ uint32_t ETH_VLANTagComparison; /*!< Selects the 12-bit VLAN identifier or the complete 16-bit VLAN tag for
+ comparison and filtering
+ This parameter can be a value of @ref ETH_VLAN_Tag_Comparison */
+
+ uint32_t ETH_VLANTagIdentifier; /*!< Holds the VLAN tag identifier for receive frames */
+
+/**
+ * @brief / * DMA
+ */
+
+ uint32_t ETH_DropTCPIPChecksumErrorFrame; /*!< Selects or not the Dropping of TCP/IP Checksum Error Frames
+ This parameter can be a value of @ref ETH_Drop_TCP_IP_Checksum_Error_Frame */
+
+ uint32_t ETH_ReceiveStoreForward; /*!< Enables or disables the Receive store and forward mode
+ This parameter can be a value of @ref ETH_Receive_Store_Forward */
+
+ uint32_t ETH_FlushReceivedFrame; /*!< Enables or disables the flushing of received frames
+ This parameter can be a value of @ref ETH_Flush_Received_Frame */
+
+ uint32_t ETH_TransmitStoreForward; /*!< Enables or disables Transmit store and forward mode
+ This parameter can be a value of @ref ETH_Transmit_Store_Forward */
+
+ uint32_t ETH_TransmitThresholdControl; /*!< Selects or not the Transmit Threshold Control
+ This parameter can be a value of @ref ETH_Transmit_Threshold_Control */
+
+ uint32_t ETH_ForwardErrorFrames; /*!< Selects or not the forward to the DMA of erroneous frames
+ This parameter can be a value of @ref ETH_Forward_Error_Frames */
+
+ uint32_t ETH_ForwardUndersizedGoodFrames; /*!< Enables or disables the Rx FIFO to forward Undersized frames (frames with no Error
+ and length less than 64 bytes) including pad-bytes and CRC)
+ This parameter can be a value of @ref ETH_Forward_Undersized_Good_Frames */
+
+ uint32_t ETH_ReceiveThresholdControl; /*!< Selects the threshold level of the Receive FIFO
+ This parameter can be a value of @ref ETH_Receive_Threshold_Control */
+
+ uint32_t ETH_SecondFrameOperate; /*!< Selects or not the Operate on second frame mode, which allows the DMA to process a second
+ frame of Transmit data even before obtaining the status for the first frame.
+ This parameter can be a value of @ref ETH_Second_Frame_Operate */
+
+ uint32_t ETH_AddressAlignedBeats; /*!< Enables or disables the Address Aligned Beats
+ This parameter can be a value of @ref ETH_Address_Aligned_Beats */
+
+ uint32_t ETH_FixedBurst; /*!< Enables or disables the AHB Master interface fixed burst transfers
+ This parameter can be a value of @ref ETH_Fixed_Burst */
+
+ uint32_t ETH_RxDMABurstLength; /*!< Indicates the maximum number of beats to be transferred in one Rx DMA transaction
+ This parameter can be a value of @ref ETH_Rx_DMA_Burst_Length */
+
+ uint32_t ETH_TxDMABurstLength; /*!< Indicates sthe maximum number of beats to be transferred in one Tx DMA transaction
+ This parameter can be a value of @ref ETH_Tx_DMA_Burst_Length */
+
+ uint32_t ETH_DescriptorSkipLength; /*!< Specifies the number of word to skip between two unchained descriptors (Ring mode) */
+
+ uint32_t ETH_DMAArbitration; /*!< Selects the DMA Tx/Rx arbitration
+ This parameter can be a value of @ref ETH_DMA_Arbitration */
+}ETH_InitTypeDef;
+
+/**--------------------------------------------------------------------------**/
+/**
+ * @brief DMA descriptors types
+ */
+/**--------------------------------------------------------------------------**/
+
+/**
+ * @brief ETH DMA Desciptors data structure definition
+ */
+typedef struct {
+ uint32_t Status; /*!< Status */
+ uint32_t ControlBufferSize; /*!< Control and Buffer1, Buffer2 lengths */
+ uint32_t Buffer1Addr; /*!< Buffer1 address pointer */
+ uint32_t Buffer2NextDescAddr; /*!< Buffer2 or next descriptor address pointer */
+/* Enhanced ETHERNET DMA PTP Desciptors */
+#ifdef USE_ENHANCED_DMA_DESCRIPTORS
+ uint32_t ExtendedStatus; /* Extended status for PTP receive descriptor */
+ uint32_t Reserved1; /* Reserved */
+ uint32_t TimeStampLow; /* Time Stamp Low value for transmit and receive */
+ uint32_t TimeStampHigh; /* Time Stamp High value for transmit and receive */
+#endif /* USE_ENHANCED_DMA_DESCRIPTORS */
+} ETH_DMADESCTypeDef;
+
+
+/**
+ * @}
+ */
+
+/** @defgroup ETH_Exported_Constants
+ * @{
+ */
+
+/**--------------------------------------------------------------------------**/
+/**
+ * @brief ETH Frames defines
+ */
+/**--------------------------------------------------------------------------**/
+
+/** @defgroup ENET_Buffers_setting
+ * @{
+ */
+#define ETH_MAX_PACKET_SIZE 1520 /*!< ETH_HEADER + ETH_EXTRA + MAX_ETH_PAYLOAD + ETH_CRC */
+#define ETH_HEADER 14 /*!< 6 byte Dest addr, 6 byte Src addr, 2 byte length/type */
+#define ETH_CRC 4 /*!< Ethernet CRC */
+#define ETH_EXTRA 2 /*!< Extra bytes in some cases */
+#define VLAN_TAG 4 /*!< optional 802.1q VLAN Tag */
+#define MIN_ETH_PAYLOAD 46 /*!< Minimum Ethernet payload size */
+#define MAX_ETH_PAYLOAD 1500 /*!< Maximum Ethernet payload size */
+#define JUMBO_FRAME_PAYLOAD 9000 /*!< Jumbo frame payload size */
+
+/**--------------------------------------------------------------------------**/
+/**
+ * @brief Ethernet DMA descriptors registers bits definition
+ */
+/**--------------------------------------------------------------------------**/
+
+/**
+@code
+ DMA Tx Desciptor
+ -----------------------------------------------------------------------------------------------
+ TDES0 | OWN(31) | CTRL[30:26] | Reserved[25:24] | CTRL[23:20] | Reserved[19:17] | Status[16:0] |
+ -----------------------------------------------------------------------------------------------
+ TDES1 | Reserved[31:29] | Buffer2 ByteCount[28:16] | Reserved[15:13] | Buffer1 ByteCount[12:0] |
+ -----------------------------------------------------------------------------------------------
+ TDES2 | Buffer1 Address [31:0] |
+ -----------------------------------------------------------------------------------------------
+ TDES3 | Buffer2 Address [31:0] / Next Desciptor Address [31:0] |
+ -----------------------------------------------------------------------------------------------
+@endcode
+*/
+
+/**
+ * @brief Bit definition of TDES0 register: DMA Tx descriptor status register
+ */
+#define ETH_DMATxDesc_OWN ((uint32_t)0x80000000) /*!< OWN bit: descriptor is owned by DMA engine */
+#define ETH_DMATxDesc_IC ((uint32_t)0x40000000) /*!< Interrupt on Completion */
+#define ETH_DMATxDesc_LS ((uint32_t)0x20000000) /*!< Last Segment */
+#define ETH_DMATxDesc_FS ((uint32_t)0x10000000) /*!< First Segment */
+#define ETH_DMATxDesc_DC ((uint32_t)0x08000000) /*!< Disable CRC */
+#define ETH_DMATxDesc_DP ((uint32_t)0x04000000) /*!< Disable Padding */
+#define ETH_DMATxDesc_TTSE ((uint32_t)0x02000000) /*!< Transmit Time Stamp Enable */
+#define ETH_DMATxDesc_CIC ((uint32_t)0x00C00000) /*!< Checksum Insertion Control: 4 cases */
+#define ETH_DMATxDesc_CIC_ByPass ((uint32_t)0x00000000) /*!< Do Nothing: Checksum Engine is bypassed */
+#define ETH_DMATxDesc_CIC_IPV4Header ((uint32_t)0x00400000) /*!< IPV4 header Checksum Insertion */
+#define ETH_DMATxDesc_CIC_TCPUDPICMP_Segment ((uint32_t)0x00800000) /*!< TCP/UDP/ICMP Checksum Insertion calculated over segment only */
+#define ETH_DMATxDesc_CIC_TCPUDPICMP_Full ((uint32_t)0x00C00000) /*!< TCP/UDP/ICMP Checksum Insertion fully calculated */
+#define ETH_DMATxDesc_TER ((uint32_t)0x00200000) /*!< Transmit End of Ring */
+#define ETH_DMATxDesc_TCH ((uint32_t)0x00100000) /*!< Second Address Chained */
+#define ETH_DMATxDesc_TTSS ((uint32_t)0x00020000) /*!< Tx Time Stamp Status */
+#define ETH_DMATxDesc_IHE ((uint32_t)0x00010000) /*!< IP Header Error */
+#define ETH_DMATxDesc_ES ((uint32_t)0x00008000) /*!< Error summary: OR of the following bits: UE || ED || EC || LCO || NC || LCA || FF || JT */
+#define ETH_DMATxDesc_JT ((uint32_t)0x00004000) /*!< Jabber Timeout */
+#define ETH_DMATxDesc_FF ((uint32_t)0x00002000) /*!< Frame Flushed: DMA/MTL flushed the frame due to SW flush */
+#define ETH_DMATxDesc_PCE ((uint32_t)0x00001000) /*!< Payload Checksum Error */
+#define ETH_DMATxDesc_LCA ((uint32_t)0x00000800) /*!< Loss of Carrier: carrier lost during tramsmission */
+#define ETH_DMATxDesc_NC ((uint32_t)0x00000400) /*!< No Carrier: no carrier signal from the tranceiver */
+#define ETH_DMATxDesc_LCO ((uint32_t)0x00000200) /*!< Late Collision: transmission aborted due to collision */
+#define ETH_DMATxDesc_EC ((uint32_t)0x00000100) /*!< Excessive Collision: transmission aborted after 16 collisions */
+#define ETH_DMATxDesc_VF ((uint32_t)0x00000080) /*!< VLAN Frame */
+#define ETH_DMATxDesc_CC ((uint32_t)0x00000078) /*!< Collision Count */
+#define ETH_DMATxDesc_ED ((uint32_t)0x00000004) /*!< Excessive Deferral */
+#define ETH_DMATxDesc_UF ((uint32_t)0x00000002) /*!< Underflow Error: late data arrival from the memory */
+#define ETH_DMATxDesc_DB ((uint32_t)0x00000001) /*!< Deferred Bit */
+
+/**
+ * @brief Bit definition of TDES1 register
+ */
+#define ETH_DMATxDesc_TBS2 ((uint32_t)0x1FFF0000) /*!< Transmit Buffer2 Size */
+#define ETH_DMATxDesc_TBS1 ((uint32_t)0x00001FFF) /*!< Transmit Buffer1 Size */
+
+/**
+ * @brief Bit definition of TDES2 register
+ */
+#define ETH_DMATxDesc_B1AP ((uint32_t)0xFFFFFFFF) /*!< Buffer1 Address Pointer */
+
+/**
+ * @brief Bit definition of TDES3 register
+ */
+#define ETH_DMATxDesc_B2AP ((uint32_t)0xFFFFFFFF) /*!< Buffer2 Address Pointer */
+
+ /*---------------------------------------------------------------------------------------------
+ TDES6 | Transmit Time Stmap Low [31:0] |
+ -----------------------------------------------------------------------------------------------
+ TDES7 | Transmit Time Stmap High [31:0] |
+ ----------------------------------------------------------------------------------------------*/
+
+/* Bit definition of TDES6 register */
+ #define ETH_DMAPTPTxDesc_TTSL ((uint32_t)0xFFFFFFFF) /* Transmit Time Stmap Low */
+
+/* Bit definition of TDES7 register */
+ #define ETH_DMAPTPTxDesc_TTSH ((uint32_t)0xFFFFFFFF) /* Transmit Time Stmap High */
+
+/**
+ * @}
+ */
+
+
+/** @defgroup DMA_Rx_descriptor
+ * @{
+ */
+
+/**
+@code
+ DMA Rx Desciptor
+ --------------------------------------------------------------------------------------------------------------------
+ RDES0 | OWN(31) | Status [30:0] |
+ ---------------------------------------------------------------------------------------------------------------------
+ RDES1 | CTRL(31) | Reserved[30:29] | Buffer2 ByteCount[28:16] | CTRL[15:14] | Reserved(13) | Buffer1 ByteCount[12:0] |
+ ---------------------------------------------------------------------------------------------------------------------
+ RDES2 | Buffer1 Address [31:0] |
+ ---------------------------------------------------------------------------------------------------------------------
+ RDES3 | Buffer2 Address [31:0] / Next Desciptor Address [31:0] |
+ ---------------------------------------------------------------------------------------------------------------------
+@endcode
+*/
+
+/**
+ * @brief Bit definition of RDES0 register: DMA Rx descriptor status register
+ */
+#define ETH_DMARxDesc_OWN ((uint32_t)0x80000000) /*!< OWN bit: descriptor is owned by DMA engine */
+#define ETH_DMARxDesc_AFM ((uint32_t)0x40000000) /*!< DA Filter Fail for the rx frame */
+#define ETH_DMARxDesc_FL ((uint32_t)0x3FFF0000) /*!< Receive descriptor frame length */
+#define ETH_DMARxDesc_ES ((uint32_t)0x00008000) /*!< Error summary: OR of the following bits: DE || OE || IPC || LC || RWT || RE || CE */
+#define ETH_DMARxDesc_DE ((uint32_t)0x00004000) /*!< Desciptor error: no more descriptors for receive frame */
+#define ETH_DMARxDesc_SAF ((uint32_t)0x00002000) /*!< SA Filter Fail for the received frame */
+#define ETH_DMARxDesc_LE ((uint32_t)0x00001000) /*!< Frame size not matching with length field */
+#define ETH_DMARxDesc_OE ((uint32_t)0x00000800) /*!< Overflow Error: Frame was damaged due to buffer overflow */
+#define ETH_DMARxDesc_VLAN ((uint32_t)0x00000400) /*!< VLAN Tag: received frame is a VLAN frame */
+#define ETH_DMARxDesc_FS ((uint32_t)0x00000200) /*!< First descriptor of the frame */
+#define ETH_DMARxDesc_LS ((uint32_t)0x00000100) /*!< Last descriptor of the frame */
+#define ETH_DMARxDesc_IPV4HCE ((uint32_t)0x00000080) /*!< IPC Checksum Error: Rx Ipv4 header checksum error */
+#define ETH_DMARxDesc_LC ((uint32_t)0x00000040) /*!< Late collision occurred during reception */
+#define ETH_DMARxDesc_FT ((uint32_t)0x00000020) /*!< Frame type - Ethernet, otherwise 802.3 */
+#define ETH_DMARxDesc_RWT ((uint32_t)0x00000010) /*!< Receive Watchdog Timeout: watchdog timer expired during reception */
+#define ETH_DMARxDesc_RE ((uint32_t)0x00000008) /*!< Receive error: error reported by MII interface */
+#define ETH_DMARxDesc_DBE ((uint32_t)0x00000004) /*!< Dribble bit error: frame contains non int multiple of 8 bits */
+#define ETH_DMARxDesc_CE ((uint32_t)0x00000002) /*!< CRC error */
+#define ETH_DMARxDesc_MAMPCE ((uint32_t)0x00000001) /*!< Rx MAC Address/Payload Checksum Error: Rx MAC address matched/ Rx Payload Checksum Error */
+
+/**
+ * @brief Bit definition of RDES1 register
+ */
+#define ETH_DMARxDesc_DIC ((uint32_t)0x80000000) /*!< Disable Interrupt on Completion */
+#define ETH_DMARxDesc_RBS2 ((uint32_t)0x1FFF0000) /*!< Receive Buffer2 Size */
+#define ETH_DMARxDesc_RER ((uint32_t)0x00008000) /*!< Receive End of Ring */
+#define ETH_DMARxDesc_RCH ((uint32_t)0x00004000) /*!< Second Address Chained */
+#define ETH_DMARxDesc_RBS1 ((uint32_t)0x00001FFF) /*!< Receive Buffer1 Size */
+
+/**
+ * @brief Bit definition of RDES2 register
+ */
+#define ETH_DMARxDesc_B1AP ((uint32_t)0xFFFFFFFF) /*!< Buffer1 Address Pointer */
+
+/**
+ * @brief Bit definition of RDES3 register
+ */
+#define ETH_DMARxDesc_B2AP ((uint32_t)0xFFFFFFFF) /*!< Buffer2 Address Pointer */
+
+/*---------------------------------------------------------------------------------------------------------------------
+ RDES4 | Reserved[31:15] | Extended Status [14:0] |
+ ---------------------------------------------------------------------------------------------------------------------
+ RDES5 | Reserved[31:0] |
+ ---------------------------------------------------------------------------------------------------------------------
+ RDES6 | Receive Time Stmap Low [31:0] |
+ ---------------------------------------------------------------------------------------------------------------------
+ RDES7 | Receive Time Stmap High [31:0] |
+ --------------------------------------------------------------------------------------------------------------------*/
+
+/* Bit definition of RDES4 register */
+#define ETH_DMAPTPRxDesc_PTPV ((uint32_t)0x00002000) /* PTP Version */
+#define ETH_DMAPTPRxDesc_PTPFT ((uint32_t)0x00001000) /* PTP Frame Type */
+#define ETH_DMAPTPRxDesc_PTPMT ((uint32_t)0x00000F00) /* PTP Message Type */
+ #define ETH_DMAPTPRxDesc_PTPMT_Sync ((uint32_t)0x00000100) /* SYNC message (all clock types) */
+ #define ETH_DMAPTPRxDesc_PTPMT_FollowUp ((uint32_t)0x00000200) /* FollowUp message (all clock types) */
+ #define ETH_DMAPTPRxDesc_PTPMT_DelayReq ((uint32_t)0x00000300) /* DelayReq message (all clock types) */
+ #define ETH_DMAPTPRxDesc_PTPMT_DelayResp ((uint32_t)0x00000400) /* DelayResp message (all clock types) */
+ #define ETH_DMAPTPRxDesc_PTPMT_PdelayReq_Announce ((uint32_t)0x00000500) /* PdelayReq message (peer-to-peer transparent clock) or Announce message (Ordinary or Boundary clock) */
+ #define ETH_DMAPTPRxDesc_PTPMT_PdelayResp_Manag ((uint32_t)0x00000600) /* PdelayResp message (peer-to-peer transparent clock) or Management message (Ordinary or Boundary clock) */
+ #define ETH_DMAPTPRxDesc_PTPMT_PdelayRespFollowUp_Signal ((uint32_t)0x00000700) /* PdelayRespFollowUp message (peer-to-peer transparent clock) or Signaling message (Ordinary or Boundary clock) */
+#define ETH_DMAPTPRxDesc_IPV6PR ((uint32_t)0x00000080) /* IPv6 Packet Received */
+#define ETH_DMAPTPRxDesc_IPV4PR ((uint32_t)0x00000040) /* IPv4 Packet Received */
+#define ETH_DMAPTPRxDesc_IPCB ((uint32_t)0x00000020) /* IP Checksum Bypassed */
+#define ETH_DMAPTPRxDesc_IPPE ((uint32_t)0x00000010) /* IP Payload Error */
+#define ETH_DMAPTPRxDesc_IPHE ((uint32_t)0x00000008) /* IP Header Error */
+#define ETH_DMAPTPRxDesc_IPPT ((uint32_t)0x00000007) /* IP Payload Type */
+ #define ETH_DMAPTPRxDesc_IPPT_UDP ((uint32_t)0x00000001) /* UDP payload encapsulated in the IP datagram */
+ #define ETH_DMAPTPRxDesc_IPPT_TCP ((uint32_t)0x00000002) /* TCP payload encapsulated in the IP datagram */
+ #define ETH_DMAPTPRxDesc_IPPT_ICMP ((uint32_t)0x00000003) /* ICMP payload encapsulated in the IP datagram */
+
+/* Bit definition of RDES6 register */
+#define ETH_DMAPTPRxDesc_RTSL ((uint32_t)0xFFFFFFFF) /* Receive Time Stmap Low */
+
+/* Bit definition of RDES7 register */
+#define ETH_DMAPTPRxDesc_RTSH ((uint32_t)0xFFFFFFFF) /* Receive Time Stmap High */
+
+
+/**--------------------------------------------------------------------------**/
+/**
+ * @brief Desciption of common PHY registers
+ */
+/**--------------------------------------------------------------------------**/
+
+/**
+ * @}
+ */
+
+/** @defgroup PHY_Read_write_Timeouts
+ * @{
+ */
+#define PHY_READ_TO ((uint32_t)0x0004FFFF)
+#define PHY_WRITE_TO ((uint32_t)0x0004FFFF)
+
+/**
+ * @}
+ */
+
+/** @defgroup PHY_Reset_Delay
+ * @{
+ */
+#define PHY_ResetDelay ((uint32_t)0x000FFFFF)
+
+/**
+ * @}
+ */
+
+/** @defgroup PHY_Config_Delay
+ * @{
+ */
+#define PHY_ConfigDelay ((uint32_t)0x00FFFFFF)
+
+/**
+ * @}
+ */
+
+/** @defgroup PHY_Register_address
+ * @{
+ */
+#define PHY_BCR 0 /*!< Tranceiver Basic Control Register */
+#define PHY_BSR 1 /*!< Tranceiver Basic Status Register */
+
+/**
+ * @}
+ */
+
+/** @defgroup PHY_basic_Control_register
+ * @{
+ */
+#define PHY_Reset ((uint16_t)0x8000) /*!< PHY Reset */
+#define PHY_Loopback ((uint16_t)0x4000) /*!< Select loop-back mode */
+#define PHY_FULLDUPLEX_100M ((uint16_t)0x2100) /*!< Set the full-duplex mode at 100 Mb/s */
+#define PHY_HALFDUPLEX_100M ((uint16_t)0x2000) /*!< Set the half-duplex mode at 100 Mb/s */
+#define PHY_FULLDUPLEX_10M ((uint16_t)0x0100) /*!< Set the full-duplex mode at 10 Mb/s */
+#define PHY_HALFDUPLEX_10M ((uint16_t)0x0000) /*!< Set the half-duplex mode at 10 Mb/s */
+#define PHY_AutoNegotiation ((uint16_t)0x1000) /*!< Enable auto-negotiation function */
+#define PHY_Restart_AutoNegotiation ((uint16_t)0x0200) /*!< Restart auto-negotiation function */
+#define PHY_Powerdown ((uint16_t)0x0800) /*!< Select the power down mode */
+#define PHY_Isolate ((uint16_t)0x0400) /*!< Isolate PHY from MII */
+
+/**
+ * @}
+ */
+
+/** @defgroup PHY_basic_status_register
+ * @{
+ */
+#define PHY_AutoNego_Complete ((uint16_t)0x0020) /*!< Auto-Negotioation process completed */
+#define PHY_Linked_Status ((uint16_t)0x0004) /*!< Valid link established */
+#define PHY_Jabber_detection ((uint16_t)0x0002) /*!< Jabber condition detected */
+
+/**
+ * @}
+ */
+
+/** @defgroup PHY_status_register
+ * @{
+ */
+/* The PHY status register value change from a PHY to another so the user have
+ to update this value depending on the used external PHY */
+/**
+ * @brief For LAN8700
+ */
+/*#define PHY_SR 31 */ /*!< Tranceiver Status Register */
+
+/**
+ * @brief For DP83848
+ */
+#define PHY_SR 16 /*!< Tranceiver Status Register */
+
+/* The Speed and Duplex mask values change from a PHY to another so the user have to update
+ this value depending on the used external PHY */
+/**
+ * @brief For LAN8700
+ */
+/*#define PHY_Speed_Status ((uint16_t)0x0004)*/ /*!< Configured information of Speed: 10Mbps */
+/*#define PHY_Duplex_Status ((uint16_t)0x0010)*/ /*!< Configured information of Duplex: Full-duplex */
+
+/**
+ * @brief For DP83848
+ */
+#define PHY_Speed_Status ((uint16_t)0x0002) /*!< Configured information of Speed: 10Mbps */
+#define PHY_Duplex_Status ((uint16_t)0x0004) /*!< Configured information of Duplex: Full-duplex */
+#define IS_ETH_PHY_ADDRESS(ADDRESS) ((ADDRESS) <= 0x20)
+#define IS_ETH_PHY_REG(REG) ((REG) <= 0x1F)
+
+/**--------------------------------------------------------------------------**/
+/**
+ * @brief MAC defines
+ */
+/**--------------------------------------------------------------------------**/
+
+/**
+ * @}
+ */
+
+/** @defgroup ETH_AutoNegotiation
+ * @{
+ */
+#define ETH_AutoNegotiation_Enable ((uint32_t)0x00000001)
+#define ETH_AutoNegotiation_Disable ((uint32_t)0x00000000)
+#define IS_ETH_AUTONEGOTIATION(CMD) (((CMD) == ETH_AutoNegotiation_Enable) || \
+ ((CMD) == ETH_AutoNegotiation_Disable))
+
+/**
+ * @}
+ */
+
+/** @defgroup ETH_watchdog
+ * @{
+ */
+#define ETH_Watchdog_Enable ((uint32_t)0x00000000)
+#define ETH_Watchdog_Disable ((uint32_t)0x00800000)
+#define IS_ETH_WATCHDOG(CMD) (((CMD) == ETH_Watchdog_Enable) || \
+ ((CMD) == ETH_Watchdog_Disable))
+
+/**
+ * @}
+ */
+
+/** @defgroup ETH_Jabber
+ * @{
+ */
+#define ETH_Jabber_Enable ((uint32_t)0x00000000)
+#define ETH_Jabber_Disable ((uint32_t)0x00400000)
+#define IS_ETH_JABBER(CMD) (((CMD) == ETH_Jabber_Enable) || \
+ ((CMD) == ETH_Jabber_Disable))
+
+/**
+ * @}
+ */
+
+/** @defgroup ETH_Inter_Frame_Gap
+ * @{
+ */
+#define ETH_InterFrameGap_96Bit ((uint32_t)0x00000000) /*!< minimum IFG between frames during transmission is 96Bit */
+#define ETH_InterFrameGap_88Bit ((uint32_t)0x00020000) /*!< minimum IFG between frames during transmission is 88Bit */
+#define ETH_InterFrameGap_80Bit ((uint32_t)0x00040000) /*!< minimum IFG between frames during transmission is 80Bit */
+#define ETH_InterFrameGap_72Bit ((uint32_t)0x00060000) /*!< minimum IFG between frames during transmission is 72Bit */
+#define ETH_InterFrameGap_64Bit ((uint32_t)0x00080000) /*!< minimum IFG between frames during transmission is 64Bit */
+#define ETH_InterFrameGap_56Bit ((uint32_t)0x000A0000) /*!< minimum IFG between frames during transmission is 56Bit */
+#define ETH_InterFrameGap_48Bit ((uint32_t)0x000C0000) /*!< minimum IFG between frames during transmission is 48Bit */
+#define ETH_InterFrameGap_40Bit ((uint32_t)0x000E0000) /*!< minimum IFG between frames during transmission is 40Bit */
+#define IS_ETH_INTER_FRAME_GAP(GAP) (((GAP) == ETH_InterFrameGap_96Bit) || \
+ ((GAP) == ETH_InterFrameGap_88Bit) || \
+ ((GAP) == ETH_InterFrameGap_80Bit) || \
+ ((GAP) == ETH_InterFrameGap_72Bit) || \
+ ((GAP) == ETH_InterFrameGap_64Bit) || \
+ ((GAP) == ETH_InterFrameGap_56Bit) || \
+ ((GAP) == ETH_InterFrameGap_48Bit) || \
+ ((GAP) == ETH_InterFrameGap_40Bit))
+
+/**
+ * @}
+ */
+
+/** @defgroup ETH_Carrier_Sense
+ * @{
+ */
+#define ETH_CarrierSense_Enable ((uint32_t)0x00000000)
+#define ETH_CarrierSense_Disable ((uint32_t)0x00010000)
+#define IS_ETH_CARRIER_SENSE(CMD) (((CMD) == ETH_CarrierSense_Enable) || \
+ ((CMD) == ETH_CarrierSense_Disable))
+
+/**
+ * @}
+ */
+
+/** @defgroup ETH_Speed
+ * @{
+ */
+#define ETH_Speed_10M ((uint32_t)0x00000000)
+#define ETH_Speed_100M ((uint32_t)0x00004000)
+#define IS_ETH_SPEED(SPEED) (((SPEED) == ETH_Speed_10M) || \
+ ((SPEED) == ETH_Speed_100M))
+
+/**
+ * @}
+ */
+
+/** @defgroup ETH_Receive_Own
+ * @{
+ */
+#define ETH_ReceiveOwn_Enable ((uint32_t)0x00000000)
+#define ETH_ReceiveOwn_Disable ((uint32_t)0x00002000)
+#define IS_ETH_RECEIVE_OWN(CMD) (((CMD) == ETH_ReceiveOwn_Enable) || \
+ ((CMD) == ETH_ReceiveOwn_Disable))
+
+/**
+ * @}
+ */
+
+/** @defgroup ETH_Loop_Back_Mode
+ * @{
+ */
+#define ETH_LoopbackMode_Enable ((uint32_t)0x00001000)
+#define ETH_LoopbackMode_Disable ((uint32_t)0x00000000)
+#define IS_ETH_LOOPBACK_MODE(CMD) (((CMD) == ETH_LoopbackMode_Enable) || \
+ ((CMD) == ETH_LoopbackMode_Disable))
+
+/**
+ * @}
+ */
+
+/** @defgroup ETH_Duplex_Mode
+ * @{
+ */
+#define ETH_Mode_FullDuplex ((uint32_t)0x00000800)
+#define ETH_Mode_HalfDuplex ((uint32_t)0x00000000)
+#define IS_ETH_DUPLEX_MODE(MODE) (((MODE) == ETH_Mode_FullDuplex) || \
+ ((MODE) == ETH_Mode_HalfDuplex))
+
+/**
+ * @}
+ */
+
+/** @defgroup ETH_Checksum_Offload
+ * @{
+ */
+#define ETH_ChecksumOffload_Enable ((uint32_t)0x00000400)
+#define ETH_ChecksumOffload_Disable ((uint32_t)0x00000000)
+#define IS_ETH_CHECKSUM_OFFLOAD(CMD) (((CMD) == ETH_ChecksumOffload_Enable) || \
+ ((CMD) == ETH_ChecksumOffload_Disable))
+
+/**
+ * @}
+ */
+
+/** @defgroup ETH_Retry_Transmission
+ * @{
+ */
+#define ETH_RetryTransmission_Enable ((uint32_t)0x00000000)
+#define ETH_RetryTransmission_Disable ((uint32_t)0x00000200)
+#define IS_ETH_RETRY_TRANSMISSION(CMD) (((CMD) == ETH_RetryTransmission_Enable) || \
+ ((CMD) == ETH_RetryTransmission_Disable))
+
+/**
+ * @}
+ */
+
+/** @defgroup ETH_Automatic_Pad_CRC_Strip
+ * @{
+ */
+#define ETH_AutomaticPadCRCStrip_Enable ((uint32_t)0x00000080)
+#define ETH_AutomaticPadCRCStrip_Disable ((uint32_t)0x00000000)
+#define IS_ETH_AUTOMATIC_PADCRC_STRIP(CMD) (((CMD) == ETH_AutomaticPadCRCStrip_Enable) || \
+ ((CMD) == ETH_AutomaticPadCRCStrip_Disable))
+
+/**
+ * @}
+ */
+
+/** @defgroup ETH_Back_Off_Limit
+ * @{
+ */
+#define ETH_BackOffLimit_10 ((uint32_t)0x00000000)
+#define ETH_BackOffLimit_8 ((uint32_t)0x00000020)
+#define ETH_BackOffLimit_4 ((uint32_t)0x00000040)
+#define ETH_BackOffLimit_1 ((uint32_t)0x00000060)
+#define IS_ETH_BACKOFF_LIMIT(LIMIT) (((LIMIT) == ETH_BackOffLimit_10) || \
+ ((LIMIT) == ETH_BackOffLimit_8) || \
+ ((LIMIT) == ETH_BackOffLimit_4) || \
+ ((LIMIT) == ETH_BackOffLimit_1))
+
+/**
+ * @}
+ */
+
+/** @defgroup ETH_Deferral_Check
+ * @{
+ */
+#define ETH_DeferralCheck_Enable ((uint32_t)0x00000010)
+#define ETH_DeferralCheck_Disable ((uint32_t)0x00000000)
+#define IS_ETH_DEFERRAL_CHECK(CMD) (((CMD) == ETH_DeferralCheck_Enable) || \
+ ((CMD) == ETH_DeferralCheck_Disable))
+
+/**
+ * @}
+ */
+
+/** @defgroup ETH_Receive_All
+ * @{
+ */
+#define ETH_ReceiveAll_Enable ((uint32_t)0x80000000)
+#define ETH_ReceiveAll_Disable ((uint32_t)0x00000000)
+#define IS_ETH_RECEIVE_ALL(CMD) (((CMD) == ETH_ReceiveAll_Enable) || \
+ ((CMD) == ETH_ReceiveAll_Disable))
+
+/**
+ * @}
+ */
+
+/** @defgroup ETH_Source_Addr_Filter
+ * @{
+ */
+#define ETH_SourceAddrFilter_Normal_Enable ((uint32_t)0x00000200)
+#define ETH_SourceAddrFilter_Inverse_Enable ((uint32_t)0x00000300)
+#define ETH_SourceAddrFilter_Disable ((uint32_t)0x00000000)
+#define IS_ETH_SOURCE_ADDR_FILTER(CMD) (((CMD) == ETH_SourceAddrFilter_Normal_Enable) || \
+ ((CMD) == ETH_SourceAddrFilter_Inverse_Enable) || \
+ ((CMD) == ETH_SourceAddrFilter_Disable))
+
+/**
+ * @}
+ */
+
+/** @defgroup ETH_Pass_Control_Frames
+ * @{
+ */
+#define ETH_PassControlFrames_BlockAll ((uint32_t)0x00000040) /*!< MAC filters all control frames from reaching the application */
+#define ETH_PassControlFrames_ForwardAll ((uint32_t)0x00000080) /*!< MAC forwards all control frames to application even if they fail the Address Filter */
+#define ETH_PassControlFrames_ForwardPassedAddrFilter ((uint32_t)0x000000C0) /*!< MAC forwards control frames that pass the Address Filter. */
+#define IS_ETH_CONTROL_FRAMES(PASS) (((PASS) == ETH_PassControlFrames_BlockAll) || \
+ ((PASS) == ETH_PassControlFrames_ForwardAll) || \
+ ((PASS) == ETH_PassControlFrames_ForwardPassedAddrFilter))
+
+/**
+ * @}
+ */
+
+/** @defgroup ETH_Broadcast_Frames_Reception
+ * @{
+ */
+#define ETH_BroadcastFramesReception_Enable ((uint32_t)0x00000000)
+#define ETH_BroadcastFramesReception_Disable ((uint32_t)0x00000020)
+#define IS_ETH_BROADCAST_FRAMES_RECEPTION(CMD) (((CMD) == ETH_BroadcastFramesReception_Enable) || \
+ ((CMD) == ETH_BroadcastFramesReception_Disable))
+
+/**
+ * @}
+ */
+
+/** @defgroup ETH_Destination_Addr_Filter
+ * @{
+ */
+#define ETH_DestinationAddrFilter_Normal ((uint32_t)0x00000000)
+#define ETH_DestinationAddrFilter_Inverse ((uint32_t)0x00000008)
+#define IS_ETH_DESTINATION_ADDR_FILTER(FILTER) (((FILTER) == ETH_DestinationAddrFilter_Normal) || \
+ ((FILTER) == ETH_DestinationAddrFilter_Inverse))
+
+/**
+ * @}
+ */
+
+/** @defgroup ETH_Promiscuous_Mode
+ * @{
+ */
+#define ETH_PromiscuousMode_Enable ((uint32_t)0x00000001)
+#define ETH_PromiscuousMode_Disable ((uint32_t)0x00000000)
+#define IS_ETH_PROMISCUOUS_MODE(CMD) (((CMD) == ETH_PromiscuousMode_Enable) || \
+ ((CMD) == ETH_PromiscuousMode_Disable))
+
+/**
+ * @}
+ */
+
+/** @defgroup ETH_Multicast_Frames_Filter
+ * @{
+ */
+#define ETH_MulticastFramesFilter_PerfectHashTable ((uint32_t)0x00000404)
+#define ETH_MulticastFramesFilter_HashTable ((uint32_t)0x00000004)
+#define ETH_MulticastFramesFilter_Perfect ((uint32_t)0x00000000)
+#define ETH_MulticastFramesFilter_None ((uint32_t)0x00000010)
+#define IS_ETH_MULTICAST_FRAMES_FILTER(FILTER) (((FILTER) == ETH_MulticastFramesFilter_PerfectHashTable) || \
+ ((FILTER) == ETH_MulticastFramesFilter_HashTable) || \
+ ((FILTER) == ETH_MulticastFramesFilter_Perfect) || \
+ ((FILTER) == ETH_MulticastFramesFilter_None))
+
+
+/**
+ * @}
+ */
+
+/** @defgroup ETH_Unicast_Frames_Filter
+ * @{
+ */
+#define ETH_UnicastFramesFilter_PerfectHashTable ((uint32_t)0x00000402)
+#define ETH_UnicastFramesFilter_HashTable ((uint32_t)0x00000002)
+#define ETH_UnicastFramesFilter_Perfect ((uint32_t)0x00000000)
+#define IS_ETH_UNICAST_FRAMES_FILTER(FILTER) (((FILTER) == ETH_UnicastFramesFilter_PerfectHashTable) || \
+ ((FILTER) == ETH_UnicastFramesFilter_HashTable) || \
+ ((FILTER) == ETH_UnicastFramesFilter_Perfect))
+
+/**
+ * @}
+ */
+
+/** @defgroup ETH_Pause_Time
+ * @{
+ */
+#define IS_ETH_PAUSE_TIME(TIME) ((TIME) <= 0xFFFF)
+
+/**
+ * @}
+ */
+
+/** @defgroup ETH_Zero_Quanta_Pause
+ * @{
+ */
+#define ETH_ZeroQuantaPause_Enable ((uint32_t)0x00000000)
+#define ETH_ZeroQuantaPause_Disable ((uint32_t)0x00000080)
+#define IS_ETH_ZEROQUANTA_PAUSE(CMD) (((CMD) == ETH_ZeroQuantaPause_Enable) || \
+ ((CMD) == ETH_ZeroQuantaPause_Disable))
+/**
+ * @}
+ */
+
+/** @defgroup ETH_Pause_Low_Threshold
+ * @{
+ */
+#define ETH_PauseLowThreshold_Minus4 ((uint32_t)0x00000000) /*!< Pause time minus 4 slot times */
+#define ETH_PauseLowThreshold_Minus28 ((uint32_t)0x00000010) /*!< Pause time minus 28 slot times */
+#define ETH_PauseLowThreshold_Minus144 ((uint32_t)0x00000020) /*!< Pause time minus 144 slot times */
+#define ETH_PauseLowThreshold_Minus256 ((uint32_t)0x00000030) /*!< Pause time minus 256 slot times */
+#define IS_ETH_PAUSE_LOW_THRESHOLD(THRESHOLD) (((THRESHOLD) == ETH_PauseLowThreshold_Minus4) || \
+ ((THRESHOLD) == ETH_PauseLowThreshold_Minus28) || \
+ ((THRESHOLD) == ETH_PauseLowThreshold_Minus144) || \
+ ((THRESHOLD) == ETH_PauseLowThreshold_Minus256))
+
+/**
+ * @}
+ */
+
+/** @defgroup ETH_Unicast_Pause_Frame_Detect
+ * @{
+ */
+#define ETH_UnicastPauseFrameDetect_Enable ((uint32_t)0x00000008)
+#define ETH_UnicastPauseFrameDetect_Disable ((uint32_t)0x00000000)
+#define IS_ETH_UNICAST_PAUSE_FRAME_DETECT(CMD) (((CMD) == ETH_UnicastPauseFrameDetect_Enable) || \
+ ((CMD) == ETH_UnicastPauseFrameDetect_Disable))
+
+/**
+ * @}
+ */
+
+/** @defgroup ETH_Receive_Flow_Control
+ * @{
+ */
+#define ETH_ReceiveFlowControl_Enable ((uint32_t)0x00000004)
+#define ETH_ReceiveFlowControl_Disable ((uint32_t)0x00000000)
+#define IS_ETH_RECEIVE_FLOWCONTROL(CMD) (((CMD) == ETH_ReceiveFlowControl_Enable) || \
+ ((CMD) == ETH_ReceiveFlowControl_Disable))
+
+/**
+ * @}
+ */
+
+/** @defgroup ETH_Transmit_Flow_Control
+ * @{
+ */
+#define ETH_TransmitFlowControl_Enable ((uint32_t)0x00000002)
+#define ETH_TransmitFlowControl_Disable ((uint32_t)0x00000000)
+#define IS_ETH_TRANSMIT_FLOWCONTROL(CMD) (((CMD) == ETH_TransmitFlowControl_Enable) || \
+ ((CMD) == ETH_TransmitFlowControl_Disable))
+
+/**
+ * @}
+ */
+
+/** @defgroup ETH_VLAN_Tag_Comparison
+ * @{
+ */
+#define ETH_VLANTagComparison_12Bit ((uint32_t)0x00010000)
+#define ETH_VLANTagComparison_16Bit ((uint32_t)0x00000000)
+#define IS_ETH_VLAN_TAG_COMPARISON(COMPARISON) (((COMPARISON) == ETH_VLANTagComparison_12Bit) || \
+ ((COMPARISON) == ETH_VLANTagComparison_16Bit))
+#define IS_ETH_VLAN_TAG_IDENTIFIER(IDENTIFIER) ((IDENTIFIER) <= 0xFFFF)
+
+/**
+ * @}
+ */
+
+/** @defgroup ETH_MAC_Flags
+ * @{
+ */
+#define ETH_MAC_FLAG_TST ((uint32_t)0x00000200) /*!< Time stamp trigger flag (on MAC) */
+#define ETH_MAC_FLAG_MMCT ((uint32_t)0x00000040) /*!< MMC transmit flag */
+#define ETH_MAC_FLAG_MMCR ((uint32_t)0x00000020) /*!< MMC receive flag */
+#define ETH_MAC_FLAG_MMC ((uint32_t)0x00000010) /*!< MMC flag (on MAC) */
+#define ETH_MAC_FLAG_PMT ((uint32_t)0x00000008) /*!< PMT flag (on MAC) */
+#define IS_ETH_MAC_GET_FLAG(FLAG) (((FLAG) == ETH_MAC_FLAG_TST) || ((FLAG) == ETH_MAC_FLAG_MMCT) || \
+ ((FLAG) == ETH_MAC_FLAG_MMCR) || ((FLAG) == ETH_MAC_FLAG_MMC) || \
+ ((FLAG) == ETH_MAC_FLAG_PMT))
+/**
+ * @}
+ */
+
+/** @defgroup ETH_MAC_Interrupts
+ * @{
+ */
+#define ETH_MAC_IT_TST ((uint32_t)0x00000200) /*!< Time stamp trigger interrupt (on MAC) */
+#define ETH_MAC_IT_MMCT ((uint32_t)0x00000040) /*!< MMC transmit interrupt */
+#define ETH_MAC_IT_MMCR ((uint32_t)0x00000020) /*!< MMC receive interrupt */
+#define ETH_MAC_IT_MMC ((uint32_t)0x00000010) /*!< MMC interrupt (on MAC) */
+#define ETH_MAC_IT_PMT ((uint32_t)0x00000008) /*!< PMT interrupt (on MAC) */
+#define IS_ETH_MAC_IT(IT) ((((IT) & (uint32_t)0xFFFFFDF7) == 0x00) && ((IT) != 0x00))
+#define IS_ETH_MAC_GET_IT(IT) (((IT) == ETH_MAC_IT_TST) || ((IT) == ETH_MAC_IT_MMCT) || \
+ ((IT) == ETH_MAC_IT_MMCR) || ((IT) == ETH_MAC_IT_MMC) || \
+ ((IT) == ETH_MAC_IT_PMT))
+/**
+ * @}
+ */
+
+/** @defgroup ETH_MAC_addresses
+ * @{
+ */
+#define ETH_MAC_Address0 ((uint32_t)0x00000000)
+#define ETH_MAC_Address1 ((uint32_t)0x00000008)
+#define ETH_MAC_Address2 ((uint32_t)0x00000010)
+#define ETH_MAC_Address3 ((uint32_t)0x00000018)
+#define IS_ETH_MAC_ADDRESS0123(ADDRESS) (((ADDRESS) == ETH_MAC_Address0) || \
+ ((ADDRESS) == ETH_MAC_Address1) || \
+ ((ADDRESS) == ETH_MAC_Address2) || \
+ ((ADDRESS) == ETH_MAC_Address3))
+#define IS_ETH_MAC_ADDRESS123(ADDRESS) (((ADDRESS) == ETH_MAC_Address1) || \
+ ((ADDRESS) == ETH_MAC_Address2) || \
+ ((ADDRESS) == ETH_MAC_Address3))
+/**
+ * @}
+ */
+
+/** @defgroup ETH_MAC_addresses_filter_SA_DA_filed_of_received_frames
+ * @{
+ */
+#define ETH_MAC_AddressFilter_SA ((uint32_t)0x00000000)
+#define ETH_MAC_AddressFilter_DA ((uint32_t)0x00000008)
+#define IS_ETH_MAC_ADDRESS_FILTER(FILTER) (((FILTER) == ETH_MAC_AddressFilter_SA) || \
+ ((FILTER) == ETH_MAC_AddressFilter_DA))
+/**
+ * @}
+ */
+
+/** @defgroup ETH_MAC_addresses_filter_Mask_bytes
+ * @{
+ */
+#define ETH_MAC_AddressMask_Byte6 ((uint32_t)0x20000000) /*!< Mask MAC Address high reg bits [15:8] */
+#define ETH_MAC_AddressMask_Byte5 ((uint32_t)0x10000000) /*!< Mask MAC Address high reg bits [7:0] */
+#define ETH_MAC_AddressMask_Byte4 ((uint32_t)0x08000000) /*!< Mask MAC Address low reg bits [31:24] */
+#define ETH_MAC_AddressMask_Byte3 ((uint32_t)0x04000000) /*!< Mask MAC Address low reg bits [23:16] */
+#define ETH_MAC_AddressMask_Byte2 ((uint32_t)0x02000000) /*!< Mask MAC Address low reg bits [15:8] */
+#define ETH_MAC_AddressMask_Byte1 ((uint32_t)0x01000000) /*!< Mask MAC Address low reg bits [70] */
+#define IS_ETH_MAC_ADDRESS_MASK(MASK) (((MASK) == ETH_MAC_AddressMask_Byte6) || \
+ ((MASK) == ETH_MAC_AddressMask_Byte5) || \
+ ((MASK) == ETH_MAC_AddressMask_Byte4) || \
+ ((MASK) == ETH_MAC_AddressMask_Byte3) || \
+ ((MASK) == ETH_MAC_AddressMask_Byte2) || \
+ ((MASK) == ETH_MAC_AddressMask_Byte1))
+
+/**--------------------------------------------------------------------------**/
+/**
+ * @brief Ethernet DMA Desciptors defines
+ */
+/**--------------------------------------------------------------------------**/
+/**
+ * @}
+ */
+
+/** @defgroup ETH_DMA_Tx_descriptor_flags
+ * @{
+ */
+#define IS_ETH_DMATxDESC_GET_FLAG(FLAG) (((FLAG) == ETH_DMATxDesc_OWN) || \
+ ((FLAG) == ETH_DMATxDesc_IC) || \
+ ((FLAG) == ETH_DMATxDesc_LS) || \
+ ((FLAG) == ETH_DMATxDesc_FS) || \
+ ((FLAG) == ETH_DMATxDesc_DC) || \
+ ((FLAG) == ETH_DMATxDesc_DP) || \
+ ((FLAG) == ETH_DMATxDesc_TTSE) || \
+ ((FLAG) == ETH_DMATxDesc_TER) || \
+ ((FLAG) == ETH_DMATxDesc_TCH) || \
+ ((FLAG) == ETH_DMATxDesc_TTSS) || \
+ ((FLAG) == ETH_DMATxDesc_IHE) || \
+ ((FLAG) == ETH_DMATxDesc_ES) || \
+ ((FLAG) == ETH_DMATxDesc_JT) || \
+ ((FLAG) == ETH_DMATxDesc_FF) || \
+ ((FLAG) == ETH_DMATxDesc_PCE) || \
+ ((FLAG) == ETH_DMATxDesc_LCA) || \
+ ((FLAG) == ETH_DMATxDesc_NC) || \
+ ((FLAG) == ETH_DMATxDesc_LCO) || \
+ ((FLAG) == ETH_DMATxDesc_EC) || \
+ ((FLAG) == ETH_DMATxDesc_VF) || \
+ ((FLAG) == ETH_DMATxDesc_CC) || \
+ ((FLAG) == ETH_DMATxDesc_ED) || \
+ ((FLAG) == ETH_DMATxDesc_UF) || \
+ ((FLAG) == ETH_DMATxDesc_DB))
+
+/**
+ * @}
+ */
+
+/** @defgroup ETH_DMA_Tx_descriptor_segment
+ * @{
+ */
+#define ETH_DMATxDesc_LastSegment ((uint32_t)0x40000000) /*!< Last Segment */
+#define ETH_DMATxDesc_FirstSegment ((uint32_t)0x20000000) /*!< First Segment */
+#define IS_ETH_DMA_TXDESC_SEGMENT(SEGMENT) (((SEGMENT) == ETH_DMATxDesc_LastSegment) || \
+ ((SEGMENT) == ETH_DMATxDesc_FirstSegment))
+
+/**
+ * @}
+ */
+
+/** @defgroup ETH_DMA_Tx_descriptor_Checksum_Insertion_Control
+ * @{
+ */
+#define ETH_DMATxDesc_ChecksumByPass ((uint32_t)0x00000000) /*!< Checksum engine bypass */
+#define ETH_DMATxDesc_ChecksumIPV4Header ((uint32_t)0x00400000) /*!< IPv4 header checksum insertion */
+#define ETH_DMATxDesc_ChecksumTCPUDPICMPSegment ((uint32_t)0x00800000) /*!< TCP/UDP/ICMP checksum insertion. Pseudo header checksum is assumed to be present */
+#define ETH_DMATxDesc_ChecksumTCPUDPICMPFull ((uint32_t)0x00C00000) /*!< TCP/UDP/ICMP checksum fully in hardware including pseudo header */
+#define IS_ETH_DMA_TXDESC_CHECKSUM(CHECKSUM) (((CHECKSUM) == ETH_DMATxDesc_ChecksumByPass) || \
+ ((CHECKSUM) == ETH_DMATxDesc_ChecksumIPV4Header) || \
+ ((CHECKSUM) == ETH_DMATxDesc_ChecksumTCPUDPICMPSegment) || \
+ ((CHECKSUM) == ETH_DMATxDesc_ChecksumTCPUDPICMPFull))
+/**
+ * @brief ETH DMA Tx Desciptor buffer size
+ */
+#define IS_ETH_DMATxDESC_BUFFER_SIZE(SIZE) ((SIZE) <= 0x1FFF)
+
+/**
+ * @}
+ */
+
+/** @defgroup ETH_DMA_Rx_descriptor_flags
+ * @{
+ */
+#define IS_ETH_DMARxDESC_GET_FLAG(FLAG) (((FLAG) == ETH_DMARxDesc_OWN) || \
+ ((FLAG) == ETH_DMARxDesc_AFM) || \
+ ((FLAG) == ETH_DMARxDesc_ES) || \
+ ((FLAG) == ETH_DMARxDesc_DE) || \
+ ((FLAG) == ETH_DMARxDesc_SAF) || \
+ ((FLAG) == ETH_DMARxDesc_LE) || \
+ ((FLAG) == ETH_DMARxDesc_OE) || \
+ ((FLAG) == ETH_DMARxDesc_VLAN) || \
+ ((FLAG) == ETH_DMARxDesc_FS) || \
+ ((FLAG) == ETH_DMARxDesc_LS) || \
+ ((FLAG) == ETH_DMARxDesc_IPV4HCE) || \
+ ((FLAG) == ETH_DMARxDesc_LC) || \
+ ((FLAG) == ETH_DMARxDesc_FT) || \
+ ((FLAG) == ETH_DMARxDesc_RWT) || \
+ ((FLAG) == ETH_DMARxDesc_RE) || \
+ ((FLAG) == ETH_DMARxDesc_DBE) || \
+ ((FLAG) == ETH_DMARxDesc_CE) || \
+ ((FLAG) == ETH_DMARxDesc_MAMPCE))
+
+/* ETHERNET DMA PTP Rx descriptor extended flags --------------------------------*/
+#define IS_ETH_DMAPTPRxDESC_GET_EXTENDED_FLAG(FLAG) (((FLAG) == ETH_DMAPTPRxDesc_PTPV) || \
+ ((FLAG) == ETH_DMAPTPRxDesc_PTPFT) || \
+ ((FLAG) == ETH_DMAPTPRxDesc_PTPMT) || \
+ ((FLAG) == ETH_DMAPTPRxDesc_IPV6PR) || \
+ ((FLAG) == ETH_DMAPTPRxDesc_IPV4PR) || \
+ ((FLAG) == ETH_DMAPTPRxDesc_IPCB) || \
+ ((FLAG) == ETH_DMAPTPRxDesc_IPPE) || \
+ ((FLAG) == ETH_DMAPTPRxDesc_IPHE) || \
+ ((FLAG) == ETH_DMAPTPRxDesc_IPPT))
+
+/**
+ * @}
+ */
+
+/** @defgroup ETH_DMA_Rx_descriptor_buffers_
+ * @{
+ */
+#define ETH_DMARxDesc_Buffer1 ((uint32_t)0x00000000) /*!< DMA Rx Desc Buffer1 */
+#define ETH_DMARxDesc_Buffer2 ((uint32_t)0x00000001) /*!< DMA Rx Desc Buffer2 */
+#define IS_ETH_DMA_RXDESC_BUFFER(BUFFER) (((BUFFER) == ETH_DMARxDesc_Buffer1) || \
+ ((BUFFER) == ETH_DMARxDesc_Buffer2))
+
+/**--------------------------------------------------------------------------**/
+/**
+ * @brief Ethernet DMA defines
+ */
+/**--------------------------------------------------------------------------**/
+/**
+ * @}
+ */
+
+/** @defgroup ETH_Drop_TCP_IP_Checksum_Error_Frame
+ * @{
+ */
+#define ETH_DropTCPIPChecksumErrorFrame_Enable ((uint32_t)0x00000000)
+#define ETH_DropTCPIPChecksumErrorFrame_Disable ((uint32_t)0x04000000)
+#define IS_ETH_DROP_TCPIP_CHECKSUM_FRAME(CMD) (((CMD) == ETH_DropTCPIPChecksumErrorFrame_Enable) || \
+ ((CMD) == ETH_DropTCPIPChecksumErrorFrame_Disable))
+/**
+ * @}
+ */
+
+/** @defgroup ETH_Receive_Store_Forward
+ * @{
+ */
+#define ETH_ReceiveStoreForward_Enable ((uint32_t)0x02000000)
+#define ETH_ReceiveStoreForward_Disable ((uint32_t)0x00000000)
+#define IS_ETH_RECEIVE_STORE_FORWARD(CMD) (((CMD) == ETH_ReceiveStoreForward_Enable) || \
+ ((CMD) == ETH_ReceiveStoreForward_Disable))
+/**
+ * @}
+ */
+
+/** @defgroup ETH_Flush_Received_Frame
+ * @{
+ */
+#define ETH_FlushReceivedFrame_Enable ((uint32_t)0x00000000)
+#define ETH_FlushReceivedFrame_Disable ((uint32_t)0x01000000)
+#define IS_ETH_FLUSH_RECEIVE_FRAME(CMD) (((CMD) == ETH_FlushReceivedFrame_Enable) || \
+ ((CMD) == ETH_FlushReceivedFrame_Disable))
+/**
+ * @}
+ */
+
+/** @defgroup ETH_Transmit_Store_Forward
+ * @{
+ */
+#define ETH_TransmitStoreForward_Enable ((uint32_t)0x00200000)
+#define ETH_TransmitStoreForward_Disable ((uint32_t)0x00000000)
+#define IS_ETH_TRANSMIT_STORE_FORWARD(CMD) (((CMD) == ETH_TransmitStoreForward_Enable) || \
+ ((CMD) == ETH_TransmitStoreForward_Disable))
+/**
+ * @}
+ */
+
+/** @defgroup ETH_Transmit_Threshold_Control
+ * @{
+ */
+#define ETH_TransmitThresholdControl_64Bytes ((uint32_t)0x00000000) /*!< threshold level of the MTL Transmit FIFO is 64 Bytes */
+#define ETH_TransmitThresholdControl_128Bytes ((uint32_t)0x00004000) /*!< threshold level of the MTL Transmit FIFO is 128 Bytes */
+#define ETH_TransmitThresholdControl_192Bytes ((uint32_t)0x00008000) /*!< threshold level of the MTL Transmit FIFO is 192 Bytes */
+#define ETH_TransmitThresholdControl_256Bytes ((uint32_t)0x0000C000) /*!< threshold level of the MTL Transmit FIFO is 256 Bytes */
+#define ETH_TransmitThresholdControl_40Bytes ((uint32_t)0x00010000) /*!< threshold level of the MTL Transmit FIFO is 40 Bytes */
+#define ETH_TransmitThresholdControl_32Bytes ((uint32_t)0x00014000) /*!< threshold level of the MTL Transmit FIFO is 32 Bytes */
+#define ETH_TransmitThresholdControl_24Bytes ((uint32_t)0x00018000) /*!< threshold level of the MTL Transmit FIFO is 24 Bytes */
+#define ETH_TransmitThresholdControl_16Bytes ((uint32_t)0x0001C000) /*!< threshold level of the MTL Transmit FIFO is 16 Bytes */
+#define IS_ETH_TRANSMIT_THRESHOLD_CONTROL(THRESHOLD) (((THRESHOLD) == ETH_TransmitThresholdControl_64Bytes) || \
+ ((THRESHOLD) == ETH_TransmitThresholdControl_128Bytes) || \
+ ((THRESHOLD) == ETH_TransmitThresholdControl_192Bytes) || \
+ ((THRESHOLD) == ETH_TransmitThresholdControl_256Bytes) || \
+ ((THRESHOLD) == ETH_TransmitThresholdControl_40Bytes) || \
+ ((THRESHOLD) == ETH_TransmitThresholdControl_32Bytes) || \
+ ((THRESHOLD) == ETH_TransmitThresholdControl_24Bytes) || \
+ ((THRESHOLD) == ETH_TransmitThresholdControl_16Bytes))
+/**
+ * @}
+ */
+
+/** @defgroup ETH_Forward_Error_Frames
+ * @{
+ */
+#define ETH_ForwardErrorFrames_Enable ((uint32_t)0x00000080)
+#define ETH_ForwardErrorFrames_Disable ((uint32_t)0x00000000)
+#define IS_ETH_FORWARD_ERROR_FRAMES(CMD) (((CMD) == ETH_ForwardErrorFrames_Enable) || \
+ ((CMD) == ETH_ForwardErrorFrames_Disable))
+/**
+ * @}
+ */
+
+/** @defgroup ETH_Forward_Undersized_Good_Frames
+ * @{
+ */
+#define ETH_ForwardUndersizedGoodFrames_Enable ((uint32_t)0x00000040)
+#define ETH_ForwardUndersizedGoodFrames_Disable ((uint32_t)0x00000000)
+#define IS_ETH_FORWARD_UNDERSIZED_GOOD_FRAMES(CMD) (((CMD) == ETH_ForwardUndersizedGoodFrames_Enable) || \
+ ((CMD) == ETH_ForwardUndersizedGoodFrames_Disable))
+
+/**
+ * @}
+ */
+
+/** @defgroup ETH_Receive_Threshold_Control
+ * @{
+ */
+#define ETH_ReceiveThresholdControl_64Bytes ((uint32_t)0x00000000) /*!< threshold level of the MTL Receive FIFO is 64 Bytes */
+#define ETH_ReceiveThresholdControl_32Bytes ((uint32_t)0x00000008) /*!< threshold level of the MTL Receive FIFO is 32 Bytes */
+#define ETH_ReceiveThresholdControl_96Bytes ((uint32_t)0x00000010) /*!< threshold level of the MTL Receive FIFO is 96 Bytes */
+#define ETH_ReceiveThresholdControl_128Bytes ((uint32_t)0x00000018) /*!< threshold level of the MTL Receive FIFO is 128 Bytes */
+#define IS_ETH_RECEIVE_THRESHOLD_CONTROL(THRESHOLD) (((THRESHOLD) == ETH_ReceiveThresholdControl_64Bytes) || \
+ ((THRESHOLD) == ETH_ReceiveThresholdControl_32Bytes) || \
+ ((THRESHOLD) == ETH_ReceiveThresholdControl_96Bytes) || \
+ ((THRESHOLD) == ETH_ReceiveThresholdControl_128Bytes))
+/**
+ * @}
+ */
+
+/** @defgroup ETH_Second_Frame_Operate
+ * @{
+ */
+#define ETH_SecondFrameOperate_Enable ((uint32_t)0x00000004)
+#define ETH_SecondFrameOperate_Disable ((uint32_t)0x00000000)
+#define IS_ETH_SECOND_FRAME_OPERATE(CMD) (((CMD) == ETH_SecondFrameOperate_Enable) || \
+ ((CMD) == ETH_SecondFrameOperate_Disable))
+
+/**
+ * @}
+ */
+
+/** @defgroup ETH_Address_Aligned_Beats
+ * @{
+ */
+#define ETH_AddressAlignedBeats_Enable ((uint32_t)0x02000000)
+#define ETH_AddressAlignedBeats_Disable ((uint32_t)0x00000000)
+#define IS_ETH_ADDRESS_ALIGNED_BEATS(CMD) (((CMD) == ETH_AddressAlignedBeats_Enable) || \
+ ((CMD) == ETH_AddressAlignedBeats_Disable))
+
+/**
+ * @}
+ */
+
+/** @defgroup ETH_Fixed_Burst
+ * @{
+ */
+#define ETH_FixedBurst_Enable ((uint32_t)0x00010000)
+#define ETH_FixedBurst_Disable ((uint32_t)0x00000000)
+#define IS_ETH_FIXED_BURST(CMD) (((CMD) == ETH_FixedBurst_Enable) || \
+ ((CMD) == ETH_FixedBurst_Disable))
+
+/**
+ * @}
+ */
+
+/** @defgroup ETH_Rx_DMA_Burst_Length
+ * @{
+ */
+#define ETH_RxDMABurstLength_1Beat ((uint32_t)0x00020000) /*!< maximum number of beats to be transferred in one RxDMA transaction is 1 */
+#define ETH_RxDMABurstLength_2Beat ((uint32_t)0x00040000) /*!< maximum number of beats to be transferred in one RxDMA transaction is 2 */
+#define ETH_RxDMABurstLength_4Beat ((uint32_t)0x00080000) /*!< maximum number of beats to be transferred in one RxDMA transaction is 4 */
+#define ETH_RxDMABurstLength_8Beat ((uint32_t)0x00100000) /*!< maximum number of beats to be transferred in one RxDMA transaction is 8 */
+#define ETH_RxDMABurstLength_16Beat ((uint32_t)0x00200000) /*!< maximum number of beats to be transferred in one RxDMA transaction is 16 */
+#define ETH_RxDMABurstLength_32Beat ((uint32_t)0x00400000) /*!< maximum number of beats to be transferred in one RxDMA transaction is 32 */
+#define ETH_RxDMABurstLength_4xPBL_4Beat ((uint32_t)0x01020000) /*!< maximum number of beats to be transferred in one RxDMA transaction is 4 */
+#define ETH_RxDMABurstLength_4xPBL_8Beat ((uint32_t)0x01040000) /*!< maximum number of beats to be transferred in one RxDMA transaction is 8 */
+#define ETH_RxDMABurstLength_4xPBL_16Beat ((uint32_t)0x01080000) /*!< maximum number of beats to be transferred in one RxDMA transaction is 16 */
+#define ETH_RxDMABurstLength_4xPBL_32Beat ((uint32_t)0x01100000) /*!< maximum number of beats to be transferred in one RxDMA transaction is 32 */
+#define ETH_RxDMABurstLength_4xPBL_64Beat ((uint32_t)0x01200000) /*!< maximum number of beats to be transferred in one RxDMA transaction is 64 */
+#define ETH_RxDMABurstLength_4xPBL_128Beat ((uint32_t)0x01400000) /*!< maximum number of beats to be transferred in one RxDMA transaction is 128 */
+
+#define IS_ETH_RXDMA_BURST_LENGTH(LENGTH) (((LENGTH) == ETH_RxDMABurstLength_1Beat) || \
+ ((LENGTH) == ETH_RxDMABurstLength_2Beat) || \
+ ((LENGTH) == ETH_RxDMABurstLength_4Beat) || \
+ ((LENGTH) == ETH_RxDMABurstLength_8Beat) || \
+ ((LENGTH) == ETH_RxDMABurstLength_16Beat) || \
+ ((LENGTH) == ETH_RxDMABurstLength_32Beat) || \
+ ((LENGTH) == ETH_RxDMABurstLength_4xPBL_4Beat) || \
+ ((LENGTH) == ETH_RxDMABurstLength_4xPBL_8Beat) || \
+ ((LENGTH) == ETH_RxDMABurstLength_4xPBL_16Beat) || \
+ ((LENGTH) == ETH_RxDMABurstLength_4xPBL_32Beat) || \
+ ((LENGTH) == ETH_RxDMABurstLength_4xPBL_64Beat) || \
+ ((LENGTH) == ETH_RxDMABurstLength_4xPBL_128Beat))
+
+/**
+ * @}
+ */
+
+/** @defgroup ETH_Tx_DMA_Burst_Length
+ * @{
+ */
+#define ETH_TxDMABurstLength_1Beat ((uint32_t)0x00000100) /*!< maximum number of beats to be transferred in one TxDMA (or both) transaction is 1 */
+#define ETH_TxDMABurstLength_2Beat ((uint32_t)0x00000200) /*!< maximum number of beats to be transferred in one TxDMA (or both) transaction is 2 */
+#define ETH_TxDMABurstLength_4Beat ((uint32_t)0x00000400) /*!< maximum number of beats to be transferred in one TxDMA (or both) transaction is 4 */
+#define ETH_TxDMABurstLength_8Beat ((uint32_t)0x00000800) /*!< maximum number of beats to be transferred in one TxDMA (or both) transaction is 8 */
+#define ETH_TxDMABurstLength_16Beat ((uint32_t)0x00001000) /*!< maximum number of beats to be transferred in one TxDMA (or both) transaction is 16 */
+#define ETH_TxDMABurstLength_32Beat ((uint32_t)0x00002000) /*!< maximum number of beats to be transferred in one TxDMA (or both) transaction is 32 */
+#define ETH_TxDMABurstLength_4xPBL_4Beat ((uint32_t)0x01000100) /*!< maximum number of beats to be transferred in one TxDMA (or both) transaction is 4 */
+#define ETH_TxDMABurstLength_4xPBL_8Beat ((uint32_t)0x01000200) /*!< maximum number of beats to be transferred in one TxDMA (or both) transaction is 8 */
+#define ETH_TxDMABurstLength_4xPBL_16Beat ((uint32_t)0x01000400) /*!< maximum number of beats to be transferred in one TxDMA (or both) transaction is 16 */
+#define ETH_TxDMABurstLength_4xPBL_32Beat ((uint32_t)0x01000800) /*!< maximum number of beats to be transferred in one TxDMA (or both) transaction is 32 */
+#define ETH_TxDMABurstLength_4xPBL_64Beat ((uint32_t)0x01001000) /*!< maximum number of beats to be transferred in one TxDMA (or both) transaction is 64 */
+#define ETH_TxDMABurstLength_4xPBL_128Beat ((uint32_t)0x01002000) /*!< maximum number of beats to be transferred in one TxDMA (or both) transaction is 128 */
+
+#define IS_ETH_TXDMA_BURST_LENGTH(LENGTH) (((LENGTH) == ETH_TxDMABurstLength_1Beat) || \
+ ((LENGTH) == ETH_TxDMABurstLength_2Beat) || \
+ ((LENGTH) == ETH_TxDMABurstLength_4Beat) || \
+ ((LENGTH) == ETH_TxDMABurstLength_8Beat) || \
+ ((LENGTH) == ETH_TxDMABurstLength_16Beat) || \
+ ((LENGTH) == ETH_TxDMABurstLength_32Beat) || \
+ ((LENGTH) == ETH_TxDMABurstLength_4xPBL_4Beat) || \
+ ((LENGTH) == ETH_TxDMABurstLength_4xPBL_8Beat) || \
+ ((LENGTH) == ETH_TxDMABurstLength_4xPBL_16Beat) || \
+ ((LENGTH) == ETH_TxDMABurstLength_4xPBL_32Beat) || \
+ ((LENGTH) == ETH_TxDMABurstLength_4xPBL_64Beat) || \
+ ((LENGTH) == ETH_TxDMABurstLength_4xPBL_128Beat))
+/**
+ * @brief ETH DMA Desciptor SkipLength
+ */
+#define IS_ETH_DMA_DESC_SKIP_LENGTH(LENGTH) ((LENGTH) <= 0x1F)
+
+/**
+ * @}
+ */
+
+/** @defgroup ETH_DMA_Arbitration
+ * @{
+ */
+#define ETH_DMAArbitration_RoundRobin_RxTx_1_1 ((uint32_t)0x00000000)
+#define ETH_DMAArbitration_RoundRobin_RxTx_2_1 ((uint32_t)0x00004000)
+#define ETH_DMAArbitration_RoundRobin_RxTx_3_1 ((uint32_t)0x00008000)
+#define ETH_DMAArbitration_RoundRobin_RxTx_4_1 ((uint32_t)0x0000C000)
+#define ETH_DMAArbitration_RxPriorTx ((uint32_t)0x00000002)
+#define IS_ETH_DMA_ARBITRATION_ROUNDROBIN_RXTX(RATIO) (((RATIO) == ETH_DMAArbitration_RoundRobin_RxTx_1_1) || \
+ ((RATIO) == ETH_DMAArbitration_RoundRobin_RxTx_2_1) || \
+ ((RATIO) == ETH_DMAArbitration_RoundRobin_RxTx_3_1) || \
+ ((RATIO) == ETH_DMAArbitration_RoundRobin_RxTx_4_1) || \
+ ((RATIO) == ETH_DMAArbitration_RxPriorTx))
+/**
+ * @}
+ */
+
+/** @defgroup ETH_DMA_Flags
+ * @{
+ */
+#define ETH_DMA_FLAG_TST ((uint32_t)0x20000000) /*!< Time-stamp trigger interrupt (on DMA) */
+#define ETH_DMA_FLAG_PMT ((uint32_t)0x10000000) /*!< PMT interrupt (on DMA) */
+#define ETH_DMA_FLAG_MMC ((uint32_t)0x08000000) /*!< MMC interrupt (on DMA) */
+#define ETH_DMA_FLAG_DataTransferError ((uint32_t)0x00800000) /*!< Error bits 0-Rx DMA, 1-Tx DMA */
+#define ETH_DMA_FLAG_ReadWriteError ((uint32_t)0x01000000) /*!< Error bits 0-write trnsf, 1-read transfr */
+#define ETH_DMA_FLAG_AccessError ((uint32_t)0x02000000) /*!< Error bits 0-data buffer, 1-desc. access */
+#define ETH_DMA_FLAG_NIS ((uint32_t)0x00010000) /*!< Normal interrupt summary flag */
+#define ETH_DMA_FLAG_AIS ((uint32_t)0x00008000) /*!< Abnormal interrupt summary flag */
+#define ETH_DMA_FLAG_ER ((uint32_t)0x00004000) /*!< Early receive flag */
+#define ETH_DMA_FLAG_FBE ((uint32_t)0x00002000) /*!< Fatal bus error flag */
+#define ETH_DMA_FLAG_ET ((uint32_t)0x00000400) /*!< Early transmit flag */
+#define ETH_DMA_FLAG_RWT ((uint32_t)0x00000200) /*!< Receive watchdog timeout flag */
+#define ETH_DMA_FLAG_RPS ((uint32_t)0x00000100) /*!< Receive process stopped flag */
+#define ETH_DMA_FLAG_RBU ((uint32_t)0x00000080) /*!< Receive buffer unavailable flag */
+#define ETH_DMA_FLAG_R ((uint32_t)0x00000040) /*!< Receive flag */
+#define ETH_DMA_FLAG_TU ((uint32_t)0x00000020) /*!< Underflow flag */
+#define ETH_DMA_FLAG_RO ((uint32_t)0x00000010) /*!< Overflow flag */
+#define ETH_DMA_FLAG_TJT ((uint32_t)0x00000008) /*!< Transmit jabber timeout flag */
+#define ETH_DMA_FLAG_TBU ((uint32_t)0x00000004) /*!< Transmit buffer unavailable flag */
+#define ETH_DMA_FLAG_TPS ((uint32_t)0x00000002) /*!< Transmit process stopped flag */
+#define ETH_DMA_FLAG_T ((uint32_t)0x00000001) /*!< Transmit flag */
+
+#define IS_ETH_DMA_FLAG(FLAG) ((((FLAG) & (uint32_t)0xFFFE1800) == 0x00) && ((FLAG) != 0x00))
+#define IS_ETH_DMA_GET_FLAG(FLAG) (((FLAG) == ETH_DMA_FLAG_TST) || ((FLAG) == ETH_DMA_FLAG_PMT) || \
+ ((FLAG) == ETH_DMA_FLAG_MMC) || ((FLAG) == ETH_DMA_FLAG_DataTransferError) || \
+ ((FLAG) == ETH_DMA_FLAG_ReadWriteError) || ((FLAG) == ETH_DMA_FLAG_AccessError) || \
+ ((FLAG) == ETH_DMA_FLAG_NIS) || ((FLAG) == ETH_DMA_FLAG_AIS) || \
+ ((FLAG) == ETH_DMA_FLAG_ER) || ((FLAG) == ETH_DMA_FLAG_FBE) || \
+ ((FLAG) == ETH_DMA_FLAG_ET) || ((FLAG) == ETH_DMA_FLAG_RWT) || \
+ ((FLAG) == ETH_DMA_FLAG_RPS) || ((FLAG) == ETH_DMA_FLAG_RBU) || \
+ ((FLAG) == ETH_DMA_FLAG_R) || ((FLAG) == ETH_DMA_FLAG_TU) || \
+ ((FLAG) == ETH_DMA_FLAG_RO) || ((FLAG) == ETH_DMA_FLAG_TJT) || \
+ ((FLAG) == ETH_DMA_FLAG_TBU) || ((FLAG) == ETH_DMA_FLAG_TPS) || \
+ ((FLAG) == ETH_DMA_FLAG_T))
+/**
+ * @}
+ */
+
+/** @defgroup ETH_DMA_Interrupts
+ * @{
+ */
+#define ETH_DMA_IT_TST ((uint32_t)0x20000000) /*!< Time-stamp trigger interrupt (on DMA) */
+#define ETH_DMA_IT_PMT ((uint32_t)0x10000000) /*!< PMT interrupt (on DMA) */
+#define ETH_DMA_IT_MMC ((uint32_t)0x08000000) /*!< MMC interrupt (on DMA) */
+#define ETH_DMA_IT_NIS ((uint32_t)0x00010000) /*!< Normal interrupt summary */
+#define ETH_DMA_IT_AIS ((uint32_t)0x00008000) /*!< Abnormal interrupt summary */
+#define ETH_DMA_IT_ER ((uint32_t)0x00004000) /*!< Early receive interrupt */
+#define ETH_DMA_IT_FBE ((uint32_t)0x00002000) /*!< Fatal bus error interrupt */
+#define ETH_DMA_IT_ET ((uint32_t)0x00000400) /*!< Early transmit interrupt */
+#define ETH_DMA_IT_RWT ((uint32_t)0x00000200) /*!< Receive watchdog timeout interrupt */
+#define ETH_DMA_IT_RPS ((uint32_t)0x00000100) /*!< Receive process stopped interrupt */
+#define ETH_DMA_IT_RBU ((uint32_t)0x00000080) /*!< Receive buffer unavailable interrupt */
+#define ETH_DMA_IT_R ((uint32_t)0x00000040) /*!< Receive interrupt */
+#define ETH_DMA_IT_TU ((uint32_t)0x00000020) /*!< Underflow interrupt */
+#define ETH_DMA_IT_RO ((uint32_t)0x00000010) /*!< Overflow interrupt */
+#define ETH_DMA_IT_TJT ((uint32_t)0x00000008) /*!< Transmit jabber timeout interrupt */
+#define ETH_DMA_IT_TBU ((uint32_t)0x00000004) /*!< Transmit buffer unavailable interrupt */
+#define ETH_DMA_IT_TPS ((uint32_t)0x00000002) /*!< Transmit process stopped interrupt */
+#define ETH_DMA_IT_T ((uint32_t)0x00000001) /*!< Transmit interrupt */
+
+#define IS_ETH_DMA_IT(IT) ((((IT) & (uint32_t)0xFFFE1800) == 0x00) && ((IT) != 0x00))
+#define IS_ETH_DMA_GET_IT(IT) (((IT) == ETH_DMA_IT_TST) || ((IT) == ETH_DMA_IT_PMT) || \
+ ((IT) == ETH_DMA_IT_MMC) || ((IT) == ETH_DMA_IT_NIS) || \
+ ((IT) == ETH_DMA_IT_AIS) || ((IT) == ETH_DMA_IT_ER) || \
+ ((IT) == ETH_DMA_IT_FBE) || ((IT) == ETH_DMA_IT_ET) || \
+ ((IT) == ETH_DMA_IT_RWT) || ((IT) == ETH_DMA_IT_RPS) || \
+ ((IT) == ETH_DMA_IT_RBU) || ((IT) == ETH_DMA_IT_R) || \
+ ((IT) == ETH_DMA_IT_TU) || ((IT) == ETH_DMA_IT_RO) || \
+ ((IT) == ETH_DMA_IT_TJT) || ((IT) == ETH_DMA_IT_TBU) || \
+ ((IT) == ETH_DMA_IT_TPS) || ((IT) == ETH_DMA_IT_T))
+
+/**
+ * @}
+ */
+
+/** @defgroup ETH_DMA_transmit_process_state_
+ * @{
+ */
+#define ETH_DMA_TransmitProcess_Stopped ((uint32_t)0x00000000) /*!< Stopped - Reset or Stop Tx Command issued */
+#define ETH_DMA_TransmitProcess_Fetching ((uint32_t)0x00100000) /*!< Running - fetching the Tx descriptor */
+#define ETH_DMA_TransmitProcess_Waiting ((uint32_t)0x00200000) /*!< Running - waiting for status */
+#define ETH_DMA_TransmitProcess_Reading ((uint32_t)0x00300000) /*!< Running - reading the data from host memory */
+#define ETH_DMA_TransmitProcess_Suspended ((uint32_t)0x00600000) /*!< Suspended - Tx Desciptor unavailabe */
+#define ETH_DMA_TransmitProcess_Closing ((uint32_t)0x00700000) /*!< Running - closing Rx descriptor */
+
+/**
+ * @}
+ */
+
+
+/** @defgroup ETH_DMA_receive_process_state_
+ * @{
+ */
+#define ETH_DMA_ReceiveProcess_Stopped ((uint32_t)0x00000000) /*!< Stopped - Reset or Stop Rx Command issued */
+#define ETH_DMA_ReceiveProcess_Fetching ((uint32_t)0x00020000) /*!< Running - fetching the Rx descriptor */
+#define ETH_DMA_ReceiveProcess_Waiting ((uint32_t)0x00060000) /*!< Running - waiting for packet */
+#define ETH_DMA_ReceiveProcess_Suspended ((uint32_t)0x00080000) /*!< Suspended - Rx Desciptor unavailable */
+#define ETH_DMA_ReceiveProcess_Closing ((uint32_t)0x000A0000) /*!< Running - closing descriptor */
+#define ETH_DMA_ReceiveProcess_Queuing ((uint32_t)0x000E0000) /*!< Running - queuing the recieve frame into host memory */
+
+/**
+ * @}
+ */
+
+/** @defgroup ETH_DMA_overflow_
+ * @{
+ */
+#define ETH_DMA_Overflow_RxFIFOCounter ((uint32_t)0x10000000) /*!< Overflow bit for FIFO overflow counter */
+#define ETH_DMA_Overflow_MissedFrameCounter ((uint32_t)0x00010000) /*!< Overflow bit for missed frame counter */
+#define IS_ETH_DMA_GET_OVERFLOW(OVERFLOW) (((OVERFLOW) == ETH_DMA_Overflow_RxFIFOCounter) || \
+ ((OVERFLOW) == ETH_DMA_Overflow_MissedFrameCounter))
+
+/**--------------------------------------------------------------------------**/
+/**
+ * @brief Ethernet PMT defines
+ */
+/**--------------------------------------------------------------------------**/
+/**
+ * @}
+ */
+
+/** @defgroup ETH_PMT_Flags
+ * @{
+ */
+#define ETH_PMT_FLAG_WUFFRPR ((uint32_t)0x80000000) /*!< Wake-Up Frame Filter Register Poniter Reset */
+#define ETH_PMT_FLAG_WUFR ((uint32_t)0x00000040) /*!< Wake-Up Frame Received */
+#define ETH_PMT_FLAG_MPR ((uint32_t)0x00000020) /*!< Magic Packet Received */
+#define IS_ETH_PMT_GET_FLAG(FLAG) (((FLAG) == ETH_PMT_FLAG_WUFR) || \
+ ((FLAG) == ETH_PMT_FLAG_MPR))
+
+/**--------------------------------------------------------------------------**/
+/**
+ * @brief Ethernet MMC defines
+ */
+/**--------------------------------------------------------------------------**/
+/**
+ * @}
+ */
+
+/** @defgroup ETH_MMC_Tx_Interrupts
+ * @{
+ */
+#define ETH_MMC_IT_TGF ((uint32_t)0x00200000) /*!< When Tx good frame counter reaches half the maximum value */
+#define ETH_MMC_IT_TGFMSC ((uint32_t)0x00008000) /*!< When Tx good multi col counter reaches half the maximum value */
+#define ETH_MMC_IT_TGFSC ((uint32_t)0x00004000) /*!< When Tx good single col counter reaches half the maximum value */
+
+/**
+ * @}
+ */
+
+/** @defgroup ETH_MMC_Rx_Interrupts
+ * @{
+ */
+#define ETH_MMC_IT_RGUF ((uint32_t)0x10020000) /*!< When Rx good unicast frames counter reaches half the maximum value */
+#define ETH_MMC_IT_RFAE ((uint32_t)0x10000040) /*!< When Rx alignment error counter reaches half the maximum value */
+#define ETH_MMC_IT_RFCE ((uint32_t)0x10000020) /*!< When Rx crc error counter reaches half the maximum value */
+#define IS_ETH_MMC_IT(IT) (((((IT) & (uint32_t)0xFFDF3FFF) == 0x00) || (((IT) & (uint32_t)0xEFFDFF9F) == 0x00)) && \
+ ((IT) != 0x00))
+#define IS_ETH_MMC_GET_IT(IT) (((IT) == ETH_MMC_IT_TGF) || ((IT) == ETH_MMC_IT_TGFMSC) || \
+ ((IT) == ETH_MMC_IT_TGFSC) || ((IT) == ETH_MMC_IT_RGUF) || \
+ ((IT) == ETH_MMC_IT_RFAE) || ((IT) == ETH_MMC_IT_RFCE))
+/**
+ * @}
+ */
+
+/** @defgroup ETH_MMC_Registers
+ * @{
+ */
+#define ETH_MMCCR ((uint32_t)0x00000100) /*!< MMC CR register */
+#define ETH_MMCRIR ((uint32_t)0x00000104) /*!< MMC RIR register */
+#define ETH_MMCTIR ((uint32_t)0x00000108) /*!< MMC TIR register */
+#define ETH_MMCRIMR ((uint32_t)0x0000010C) /*!< MMC RIMR register */
+#define ETH_MMCTIMR ((uint32_t)0x00000110) /*!< MMC TIMR register */
+#define ETH_MMCTGFSCCR ((uint32_t)0x0000014C) /*!< MMC TGFSCCR register */
+#define ETH_MMCTGFMSCCR ((uint32_t)0x00000150) /*!< MMC TGFMSCCR register */
+#define ETH_MMCTGFCR ((uint32_t)0x00000168) /*!< MMC TGFCR register */
+#define ETH_MMCRFCECR ((uint32_t)0x00000194) /*!< MMC RFCECR register */
+#define ETH_MMCRFAECR ((uint32_t)0x00000198) /*!< MMC RFAECR register */
+#define ETH_MMCRGUFCR ((uint32_t)0x000001C4) /*!< MMC RGUFCR register */
+
+/**
+ * @brief ETH MMC registers
+ */
+#define IS_ETH_MMC_REGISTER(REG) (((REG) == ETH_MMCCR) || ((REG) == ETH_MMCRIR) || \
+ ((REG) == ETH_MMCTIR) || ((REG) == ETH_MMCRIMR) || \
+ ((REG) == ETH_MMCTIMR) || ((REG) == ETH_MMCTGFSCCR) || \
+ ((REG) == ETH_MMCTGFMSCCR) || ((REG) == ETH_MMCTGFCR) || \
+ ((REG) == ETH_MMCRFCECR) || ((REG) == ETH_MMCRFAECR) || \
+ ((REG) == ETH_MMCRGUFCR))
+
+/**--------------------------------------------------------------------------**/
+/**
+ * @brief Ethernet PTP defines
+ */
+/**--------------------------------------------------------------------------**/
+/**
+ * @}
+ */
+
+/** @defgroup ETH_PTP_time_update_method
+ * @{
+ */
+#define ETH_PTP_FineUpdate ((uint32_t)0x00000001) /*!< Fine Update method */
+#define ETH_PTP_CoarseUpdate ((uint32_t)0x00000000) /*!< Coarse Update method */
+#define IS_ETH_PTP_UPDATE(UPDATE) (((UPDATE) == ETH_PTP_FineUpdate) || \
+ ((UPDATE) == ETH_PTP_CoarseUpdate))
+
+/**
+ * @}
+ */
+
+
+/** @defgroup ETH_PTP_Flags
+ * @{
+ */
+#define ETH_PTP_FLAG_TSARU ((uint32_t)0x00000020) /*!< Addend Register Update */
+#define ETH_PTP_FLAG_TSITE ((uint32_t)0x00000010) /*!< Time Stamp Interrupt Trigger */
+#define ETH_PTP_FLAG_TSSTU ((uint32_t)0x00000008) /*!< Time Stamp Update */
+#define ETH_PTP_FLAG_TSSTI ((uint32_t)0x00000004) /*!< Time Stamp Initialize */
+
+#define ETH_PTP_FLAG_TSTTR ((uint32_t)0x10000002) /* Time stamp target time reached */
+#define ETH_PTP_FLAG_TSSO ((uint32_t)0x10000001) /* Time stamp seconds overflow */
+
+#define IS_ETH_PTP_GET_FLAG(FLAG) (((FLAG) == ETH_PTP_FLAG_TSARU) || \
+ ((FLAG) == ETH_PTP_FLAG_TSITE) || \
+ ((FLAG) == ETH_PTP_FLAG_TSSTU) || \
+ ((FLAG) == ETH_PTP_FLAG_TSSTI) || \
+ ((FLAG) == ETH_PTP_FLAG_TSTTR) || \
+ ((FLAG) == ETH_PTP_FLAG_TSSO))
+
+/**
+ * @brief ETH PTP subsecond increment
+ */
+#define IS_ETH_PTP_SUBSECOND_INCREMENT(SUBSECOND) ((SUBSECOND) <= 0xFF)
+
+/**
+ * @}
+ */
+
+
+/** @defgroup ETH_PTP_time_sign
+ * @{
+ */
+#define ETH_PTP_PositiveTime ((uint32_t)0x00000000) /*!< Positive time value */
+#define ETH_PTP_NegativeTime ((uint32_t)0x80000000) /*!< Negative time value */
+#define IS_ETH_PTP_TIME_SIGN(SIGN) (((SIGN) == ETH_PTP_PositiveTime) || \
+ ((SIGN) == ETH_PTP_NegativeTime))
+
+/**
+ * @brief ETH PTP time stamp low update
+ */
+#define IS_ETH_PTP_TIME_STAMP_UPDATE_SUBSECOND(SUBSECOND) ((SUBSECOND) <= 0x7FFFFFFF)
+
+/**
+ * @brief ETH PTP registers
+ */
+#define ETH_PTPTSCR ((uint32_t)0x00000700) /*!< PTP TSCR register */
+#define ETH_PTPSSIR ((uint32_t)0x00000704) /*!< PTP SSIR register */
+#define ETH_PTPTSHR ((uint32_t)0x00000708) /*!< PTP TSHR register */
+#define ETH_PTPTSLR ((uint32_t)0x0000070C) /*!< PTP TSLR register */
+#define ETH_PTPTSHUR ((uint32_t)0x00000710) /*!< PTP TSHUR register */
+#define ETH_PTPTSLUR ((uint32_t)0x00000714) /*!< PTP TSLUR register */
+#define ETH_PTPTSAR ((uint32_t)0x00000718) /*!< PTP TSAR register */
+#define ETH_PTPTTHR ((uint32_t)0x0000071C) /*!< PTP TTHR register */
+#define ETH_PTPTTLR ((uint32_t)0x00000720) /* PTP TTLR register */
+
+#define ETH_PTPTSSR ((uint32_t)0x00000728) /* PTP TSSR register */
+
+#define IS_ETH_PTP_REGISTER(REG) (((REG) == ETH_PTPTSCR) || ((REG) == ETH_PTPSSIR) || \
+ ((REG) == ETH_PTPTSHR) || ((REG) == ETH_PTPTSLR) || \
+ ((REG) == ETH_PTPTSHUR) || ((REG) == ETH_PTPTSLUR) || \
+ ((REG) == ETH_PTPTSAR) || ((REG) == ETH_PTPTTHR) || \
+ ((REG) == ETH_PTPTTLR) || ((REG) == ETH_PTPTSSR))
+
+/**
+ * @brief ETHERNET PTP clock
+ */
+#define ETH_PTP_OrdinaryClock ((uint32_t)0x00000000) /* Ordinary Clock */
+#define ETH_PTP_BoundaryClock ((uint32_t)0x00010000) /* Boundary Clock */
+#define ETH_PTP_EndToEndTransparentClock ((uint32_t)0x00020000) /* End To End Transparent Clock */
+#define ETH_PTP_PeerToPeerTransparentClock ((uint32_t)0x00030000) /* Peer To Peer Transparent Clock */
+
+#define IS_ETH_PTP_TYPE_CLOCK(CLOCK) (((CLOCK) == ETH_PTP_OrdinaryClock) || \
+ ((CLOCK) == ETH_PTP_BoundaryClock) || \
+ ((CLOCK) == ETH_PTP_EndToEndTransparentClock) || \
+ ((CLOCK) == ETH_PTP_PeerToPeerTransparentClock))
+/**
+ * @brief ETHERNET snapshot
+ */
+#define ETH_PTP_SnapshotMasterMessage ((uint32_t)0x00008000) /* Time stamp snapshot for message relevant to master enable */
+#define ETH_PTP_SnapshotEventMessage ((uint32_t)0x00004000) /* Time stamp snapshot for event message enable */
+#define ETH_PTP_SnapshotIPV4Frames ((uint32_t)0x00002000) /* Time stamp snapshot for IPv4 frames enable */
+#define ETH_PTP_SnapshotIPV6Frames ((uint32_t)0x00001000) /* Time stamp snapshot for IPv6 frames enable */
+#define ETH_PTP_SnapshotPTPOverEthernetFrames ((uint32_t)0x00000800) /* Time stamp snapshot for PTP over ethernet frames enable */
+#define ETH_PTP_SnapshotAllReceivedFrames ((uint32_t)0x00000100) /* Time stamp snapshot for all received frames enable */
+
+#define IS_ETH_PTP_SNAPSHOT(SNAPSHOT) (((SNAPSHOT) == ETH_PTP_SnapshotMasterMessage) || \
+ ((SNAPSHOT) == ETH_PTP_SnapshotEventMessage) || \
+ ((SNAPSHOT) == ETH_PTP_SnapshotIPV4Frames) || \
+ ((SNAPSHOT) == ETH_PTP_SnapshotIPV6Frames) || \
+ ((SNAPSHOT) == ETH_PTP_SnapshotPTPOverEthernetFrames) || \
+ ((SNAPSHOT) == ETH_PTP_SnapshotAllReceivedFrames))
+
+/**
+ * @}
+ */
+
+
+/**
+ * @}
+ */
+
+/** @defgroup ETH_Exported_Macros
+ * @{
+ */
+/**
+ * @}
+ */
+
+/** @defgroup ETH_Exported_Functions
+ * @{
+ */
+void ETH_DeInit(void);
+uint32_t ETH_Init(ETH_InitTypeDef* ETH_InitStruct);
+void ETH_StructInit(ETH_InitTypeDef* ETH_InitStruct);
+void ETH_SoftwareReset(void);
+FlagStatus ETH_GetSoftwareResetStatus(void);
+void ETH_Start(void);
+uint32_t ETH_HandleTxPkt(uint8_t *ppkt, uint16_t FrameLength);
+uint32_t ETH_HandleRxPkt(uint8_t *ppkt);
+uint32_t ETH_GetRxPktSize(void);
+void ETH_DropRxPkt(void);
+
+#ifdef USE_ENHANCED_DMA_DESCRIPTORS
+ void ETH_EnhancedDescriptorCmd(FunctionalState NewState);
+#endif /* USE_ENHANCED_DMA_DESCRIPTORS */
+
+/**
+ * @brief PHY
+ */
+uint16_t ETH_ReadPHYRegister(uint16_t PHYAddress, uint16_t PHYReg);
+uint32_t ETH_WritePHYRegister(uint16_t PHYAddress, uint16_t PHYReg, uint16_t PHYValue);
+uint32_t ETH_PHYLoopBackCmd(uint16_t PHYAddress, FunctionalState NewState);
+
+/**
+ * @brief MAC
+ */
+void ETH_MACTransmissionCmd(FunctionalState NewState);
+void ETH_MACReceptionCmd(FunctionalState NewState);
+FlagStatus ETH_GetFlowControlBusyStatus(void);
+void ETH_InitiatePauseControlFrame(void);
+void ETH_BackPressureActivationCmd(FunctionalState NewState);
+FlagStatus ETH_GetMACFlagStatus(uint32_t ETH_MAC_FLAG);
+ITStatus ETH_GetMACITStatus(uint32_t ETH_MAC_IT);
+void ETH_MACITConfig(uint32_t ETH_MAC_IT, FunctionalState NewState);
+void ETH_MACAddressConfig(uint32_t MacAddr, uint8_t *Addr);
+void ETH_GetMACAddress(uint32_t MacAddr, uint8_t *Addr);
+void ETH_MACAddressPerfectFilterCmd(uint32_t MacAddr, FunctionalState NewState);
+void ETH_MACAddressFilterConfig(uint32_t MacAddr, uint32_t Filter);
+void ETH_MACAddressMaskBytesFilterConfig(uint32_t MacAddr, uint32_t MaskByte);
+
+/**
+ * @brief DMA Tx/Rx descriptors
+ */
+void ETH_DMATxDescChainInit(ETH_DMADESCTypeDef *DMATxDescTab, uint8_t *TxBuff, uint32_t TxBuffCount);
+void ETH_DMATxDescRingInit(ETH_DMADESCTypeDef *DMATxDescTab, uint8_t *TxBuff1, uint8_t *TxBuff2, uint32_t TxBuffCount);
+FlagStatus ETH_GetDMATxDescFlagStatus(ETH_DMADESCTypeDef *DMATxDesc, uint32_t ETH_DMATxDescFlag);
+uint32_t ETH_GetDMATxDescCollisionCount(ETH_DMADESCTypeDef *DMATxDesc);
+void ETH_SetDMATxDescOwnBit(ETH_DMADESCTypeDef *DMATxDesc);
+void ETH_DMATxDescTransmitITConfig(ETH_DMADESCTypeDef *DMATxDesc, FunctionalState NewState);
+void ETH_DMATxDescFrameSegmentConfig(ETH_DMADESCTypeDef *DMATxDesc, uint32_t DMATxDesc_FrameSegment);
+void ETH_DMATxDescChecksumInsertionConfig(ETH_DMADESCTypeDef *DMATxDesc, uint32_t DMATxDesc_Checksum);
+void ETH_DMATxDescCRCCmd(ETH_DMADESCTypeDef *DMATxDesc, FunctionalState NewState);
+void ETH_DMATxDescEndOfRingCmd(ETH_DMADESCTypeDef *DMATxDesc, FunctionalState NewState);
+void ETH_DMATxDescSecondAddressChainedCmd(ETH_DMADESCTypeDef *DMATxDesc, FunctionalState NewState);
+void ETH_DMATxDescShortFramePaddingCmd(ETH_DMADESCTypeDef *DMATxDesc, FunctionalState NewState);
+void ETH_DMATxDescTimeStampCmd(ETH_DMADESCTypeDef *DMATxDesc, FunctionalState NewState);
+void ETH_DMATxDescBufferSizeConfig(ETH_DMADESCTypeDef *DMATxDesc, uint32_t BufferSize1, uint32_t BufferSize2);
+void ETH_DMARxDescChainInit(ETH_DMADESCTypeDef *DMARxDescTab, uint8_t *RxBuff, uint32_t RxBuffCount);
+void ETH_DMARxDescRingInit(ETH_DMADESCTypeDef *DMARxDescTab, uint8_t *RxBuff1, uint8_t *RxBuff2, uint32_t RxBuffCount);
+FlagStatus ETH_GetDMARxDescFlagStatus(ETH_DMADESCTypeDef *DMARxDesc, uint32_t ETH_DMARxDescFlag);
+#ifdef USE_ENHANCED_DMA_DESCRIPTORS
+ FlagStatus ETH_GetDMAPTPRxDescExtendedFlagStatus(ETH_DMADESCTypeDef *DMAPTPRxDesc, uint32_t ETH_DMAPTPRxDescExtendedFlag);
+#endif /* USE_ENHANCED_DMA_DESCRIPTORS */
+void ETH_SetDMARxDescOwnBit(ETH_DMADESCTypeDef *DMARxDesc);
+uint32_t ETH_GetDMARxDescFrameLength(ETH_DMADESCTypeDef *DMARxDesc);
+void ETH_DMARxDescReceiveITConfig(ETH_DMADESCTypeDef *DMARxDesc, FunctionalState NewState);
+void ETH_DMARxDescEndOfRingCmd(ETH_DMADESCTypeDef *DMARxDesc, FunctionalState NewState);
+void ETH_DMARxDescSecondAddressChainedCmd(ETH_DMADESCTypeDef *DMARxDesc, FunctionalState NewState);
+uint32_t ETH_GetDMARxDescBufferSize(ETH_DMADESCTypeDef *DMARxDesc, uint32_t DMARxDesc_Buffer);
+
+/**
+ * @brief DMA
+ */
+FlagStatus ETH_GetDMAFlagStatus(uint32_t ETH_DMA_FLAG);
+void ETH_DMAClearFlag(uint32_t ETH_DMA_FLAG);
+ITStatus ETH_GetDMAITStatus(uint32_t ETH_DMA_IT);
+void ETH_DMAClearITPendingBit(uint32_t ETH_DMA_IT);
+uint32_t ETH_GetTransmitProcessState(void);
+uint32_t ETH_GetReceiveProcessState(void);
+void ETH_FlushTransmitFIFO(void);
+FlagStatus ETH_GetFlushTransmitFIFOStatus(void);
+void ETH_DMATransmissionCmd(FunctionalState NewState);
+void ETH_DMAReceptionCmd(FunctionalState NewState);
+void ETH_DMAITConfig(uint32_t ETH_DMA_IT, FunctionalState NewState);
+FlagStatus ETH_GetDMAOverflowStatus(uint32_t ETH_DMA_Overflow);
+uint32_t ETH_GetRxOverflowMissedFrameCounter(void);
+uint32_t ETH_GetBufferUnavailableMissedFrameCounter(void);
+uint32_t ETH_GetCurrentTxDescStartAddress(void);
+uint32_t ETH_GetCurrentRxDescStartAddress(void);
+uint32_t ETH_GetCurrentTxBufferAddress(void);
+uint32_t ETH_GetCurrentRxBufferAddress(void);
+void ETH_ResumeDMATransmission(void);
+void ETH_ResumeDMAReception(void);
+void ETH_SetReceiveWatchdogTimer(uint8_t Value);
+
+
+/**
+ * @brief PMT
+ */
+void ETH_ResetWakeUpFrameFilterRegisterPointer(void);
+void ETH_SetWakeUpFrameFilterRegister(uint32_t *Buffer);
+void ETH_GlobalUnicastWakeUpCmd(FunctionalState NewState);
+FlagStatus ETH_GetPMTFlagStatus(uint32_t ETH_PMT_FLAG);
+void ETH_WakeUpFrameDetectionCmd(FunctionalState NewState);
+void ETH_MagicPacketDetectionCmd(FunctionalState NewState);
+void ETH_PowerDownCmd(FunctionalState NewState);
+
+/**
+ * @brief MMC
+ */
+void ETH_MMCCounterFullPreset(void);
+void ETH_MMCCounterHalfPreset(void);
+void ETH_MMCCounterFreezeCmd(FunctionalState NewState);
+void ETH_MMCResetOnReadCmd(FunctionalState NewState);
+void ETH_MMCCounterRolloverCmd(FunctionalState NewState);
+void ETH_MMCCountersReset(void);
+void ETH_MMCITConfig(uint32_t ETH_MMC_IT, FunctionalState NewState);
+ITStatus ETH_GetMMCITStatus(uint32_t ETH_MMC_IT);
+uint32_t ETH_GetMMCRegister(uint32_t ETH_MMCReg);
+
+/**
+ * @brief PTP
+ */
+void ETH_PTPNodeClockTypeConfig(uint32_t ClockType);
+void ETH_PTPSnapshotCmd(uint32_t SnapshotMethod, FunctionalState NewState);
+void ETH_PTPPacketSnoopingV2FormatCmd(FunctionalState NewState);
+void ETH_PTPSubSecondRolloverCmd(FunctionalState NewState);
+uint32_t ETH_HandlePTPTxPkt(uint8_t *ppkt, uint16_t FrameLength, uint32_t *PTPTxTab);
+uint32_t ETH_HandlePTPRxPkt(uint8_t *ppkt, uint32_t *PTPRxTab);
+#ifdef USE_ENHANCED_DMA_DESCRIPTORS
+ void ETH_DMAPTPTxDescChainInit(ETH_DMADESCTypeDef *DMAPTPTxDescTab, uint8_t *TxBuff, uint32_t TxBuffCount);
+ void ETH_DMAPTPRxDescChainInit(ETH_DMADESCTypeDef *DMAPTPRxDescTab, uint8_t *RxBuff, uint32_t RxBuffCount);
+#endif /* USE_ENHANCED_DMA_DESCRIPTORS */
+void ETH_EnablePTPTimeStampAddend(void);
+void ETH_EnablePTPTimeStampInterruptTrigger(void);
+void ETH_EnablePTPTimeStampUpdate(void);
+void ETH_InitializePTPTimeStamp(void);
+void ETH_PTPUpdateMethodConfig(uint32_t UpdateMethod);
+void ETH_PTPTimeStampCmd(FunctionalState NewState);
+FlagStatus ETH_GetPTPFlagStatus(uint32_t ETH_PTP_FLAG);
+void ETH_SetPTPSubSecondIncrement(uint32_t SubSecondValue);
+void ETH_SetPTPTimeStampUpdate(uint32_t Sign, uint32_t SecondValue, uint32_t SubSecondValue);
+void ETH_SetPTPTimeStampAddend(uint32_t Value);
+void ETH_SetPTPTargetTime(uint32_t HighValue, uint32_t LowValue);
+uint32_t ETH_GetPTPRegister(uint32_t ETH_PTPReg);
+
+/* STM32 ETH HW initialization */
+void rt_hw_stm32_eth_init(void);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __STM32F2XX_ETH_H */
+/**
+ * @}
+ */
+
+
+/**
+ * @}
+ */
+
+/******************* (C) COPYRIGHT 2010 STMicroelectronics *****END OF FILE****/
diff --git a/bsp/stm32f40x/project.uvproj b/bsp/stm32f40x/project.uvproj
index da6c71a151..679e04d729 100644
--- a/bsp/stm32f40x/project.uvproj
+++ b/bsp/stm32f40x/project.uvproj
@@ -343,7 +343,7 @@
<MiscControls />
<Define>USE_STDPERIPH_DRIVER</Define>
<Undefine />
- <IncludePath>applications;.;Libraries/STM32F4xx_StdPeriph_Driver/inc;Libraries/CMSIS/ST/STM32F4xx/Include;Libraries/CMSIS/Include;drivers;../../include;../../libcpu/arm/cortex-m4;../../libcpu/arm/common;../../components/finsh;../../components/drivers/include;../../components/drivers/include;../../components/drivers/include</IncludePath>
+ <IncludePath>Libraries/STM32F4xx_StdPeriph_Driver/inc;Libraries/CMSIS/ST/STM32F4xx/Include;Libraries/CMSIS/Include;applications;.;drivers;../../include;../../libcpu/arm/cortex-m4;../../libcpu/arm/common;../../components/drivers/include;../../components/drivers/include;../../components/drivers/include;../../components/finsh</IncludePath>
</VariousControls>
</Cads>
<Aads>
@@ -373,7 +373,7 @@
<ScatterFile />
<IncludeLibs />
<IncludeLibsPath />
- <Misc> --keep __fsym_* --keep __vsym_* </Misc>
+ <Misc> --keep *.o(FSymTab) --keep *.o(VSymTab) </Misc>
<LinkerInputFile />
<DisabledWarnings />
</LDads>
@@ -381,23 +381,6 @@
</TargetOption>
<Groups>
<Group>
- <GroupName>Applications</GroupName>
- <Files>
- <File>
- <FileName>application.c</FileName>
- <FileType>1</FileType>
- <FilePath>applications/application.c</FilePath>
- </File>
- </Files>
- <Files>
- <File>
- <FileName>startup.c</FileName>
- <FileType>1</FileType>
- <FilePath>applications/startup.c</FilePath>
- </File>
- </Files>
- </Group>
- <Group>
<GroupName>STM32_StdPeriph</GroupName>
<Files>
<File>
@@ -632,19 +615,29 @@
</Files>
</Group>
<Group>
- <GroupName>Drivers</GroupName>
+ <GroupName>Applications</GroupName>
<Files>
<File>
- <FileName>board.c</FileName>
+ <FileName>application.c</FileName>
<FileType>1</FileType>
- <FilePath>drivers/board.c</FilePath>
+ <FilePath>applications/application.c</FilePath>
</File>
</Files>
<Files>
<File>
- <FileName>gpio.c</FileName>
+ <FileName>startup.c</FileName>
<FileType>1</FileType>
- <FilePath>drivers/gpio.c</FilePath>
+ <FilePath>applications/startup.c</FilePath>
+ </File>
+ </Files>
+ </Group>
+ <Group>
+ <GroupName>Drivers</GroupName>
+ <Files>
+ <File>
+ <FileName>board.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>drivers/board.c</FilePath>
</File>
</Files>
<Files>
@@ -661,6 +654,13 @@
<FilePath>drivers/usart.c</FilePath>
</File>
</Files>
+ <Files>
+ <File>
+ <FileName>gpio.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>drivers/gpio.c</FilePath>
+ </File>
+ </Files>
</Group>
<Group>
<GroupName>Kernel</GroupName>
@@ -673,6 +673,13 @@
</Files>
<Files>
<File>
+ <FileName>components.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../../src/components.c</FilePath>
+ </File>
+ </Files>
+ <Files>
+ <File>
<FileName>device.c</FileName>
<FileType>1</FileType>
<FilePath>../../src/device.c</FilePath>
@@ -788,155 +795,155 @@
</Files>
</Group>
<Group>
- <GroupName>finsh</GroupName>
+ <GroupName>DeviceDrivers</GroupName>
<Files>
<File>
- <FileName>shell.c</FileName>
+ <FileName>pin.c</FileName>
<FileType>1</FileType>
- <FilePath>../../components/finsh/shell.c</FilePath>
+ <FilePath>../../components/drivers/misc/pin.c</FilePath>
</File>
</Files>
<Files>
<File>
- <FileName>symbol.c</FileName>
+ <FileName>serial.c</FileName>
<FileType>1</FileType>
- <FilePath>../../components/finsh/symbol.c</FilePath>
+ <FilePath>../../components/drivers/serial/serial.c</FilePath>
</File>
</Files>
<Files>
<File>
- <FileName>cmd.c</FileName>
+ <FileName>completion.c</FileName>
<FileType>1</FileType>
- <FilePath>../../components/finsh/cmd.c</FilePath>
+ <FilePath>../../components/drivers/src/completion.c</FilePath>
</File>
</Files>
<Files>
<File>
- <FileName>finsh_compiler.c</FileName>
+ <FileName>dataqueue.c</FileName>
<FileType>1</FileType>
- <FilePath>../../components/finsh/finsh_compiler.c</FilePath>
+ <FilePath>../../components/drivers/src/dataqueue.c</FilePath>
</File>
</Files>
<Files>
<File>
- <FileName>finsh_error.c</FileName>
+ <FileName>pipe.c</FileName>
<FileType>1</FileType>
- <FilePath>../../components/finsh/finsh_error.c</FilePath>
+ <FilePath>../../components/drivers/src/pipe.c</FilePath>
</File>
</Files>
<Files>
<File>
- <FileName>finsh_heap.c</FileName>
+ <FileName>portal.c</FileName>
<FileType>1</FileType>
- <FilePath>../../components/finsh/finsh_heap.c</FilePath>
+ <FilePath>../../components/drivers/src/portal.c</FilePath>
</File>
</Files>
<Files>
<File>
- <FileName>finsh_init.c</FileName>
+ <FileName>ringbuffer.c</FileName>
<FileType>1</FileType>
- <FilePath>../../components/finsh/finsh_init.c</FilePath>
+ <FilePath>../../components/drivers/src/ringbuffer.c</FilePath>
</File>
</Files>
<Files>
<File>
- <FileName>finsh_node.c</FileName>
+ <FileName>workqueue.c</FileName>
<FileType>1</FileType>
- <FilePath>../../components/finsh/finsh_node.c</FilePath>
+ <FilePath>../../components/drivers/src/workqueue.c</FilePath>
</File>
</Files>
+ </Group>
+ <Group>
+ <GroupName>finsh</GroupName>
<Files>
<File>
- <FileName>finsh_ops.c</FileName>
+ <FileName>shell.c</FileName>
<FileType>1</FileType>
- <FilePath>../../components/finsh/finsh_ops.c</FilePath>
+ <FilePath>../../components/finsh/shell.c</FilePath>
</File>
</Files>
<Files>
<File>
- <FileName>finsh_parser.c</FileName>
+ <FileName>symbol.c</FileName>
<FileType>1</FileType>
- <FilePath>../../components/finsh/finsh_parser.c</FilePath>
+ <FilePath>../../components/finsh/symbol.c</FilePath>
</File>
</Files>
<Files>
<File>
- <FileName>finsh_var.c</FileName>
+ <FileName>cmd.c</FileName>
<FileType>1</FileType>
- <FilePath>../../components/finsh/finsh_var.c</FilePath>
+ <FilePath>../../components/finsh/cmd.c</FilePath>
</File>
</Files>
<Files>
<File>
- <FileName>finsh_vm.c</FileName>
+ <FileName>finsh_compiler.c</FileName>
<FileType>1</FileType>
- <FilePath>../../components/finsh/finsh_vm.c</FilePath>
+ <FilePath>../../components/finsh/finsh_compiler.c</FilePath>
</File>
</Files>
<Files>
<File>
- <FileName>finsh_token.c</FileName>
+ <FileName>finsh_error.c</FileName>
<FileType>1</FileType>
- <FilePath>../../components/finsh/finsh_token.c</FilePath>
+ <FilePath>../../components/finsh/finsh_error.c</FilePath>
</File>
</Files>
- </Group>
- <Group>
- <GroupName>DeviceDrivers</GroupName>
<Files>
<File>
- <FileName>serial.c</FileName>
+ <FileName>finsh_heap.c</FileName>
<FileType>1</FileType>
- <FilePath>../../components/drivers/serial/serial.c</FilePath>
+ <FilePath>../../components/finsh/finsh_heap.c</FilePath>
</File>
</Files>
<Files>
<File>
- <FileName>pin.c</FileName>
+ <FileName>finsh_init.c</FileName>
<FileType>1</FileType>
- <FilePath>../../components/drivers/misc/pin.c</FilePath>
+ <FilePath>../../components/finsh/finsh_init.c</FilePath>
</File>
</Files>
<Files>
<File>
- <FileName>completion.c</FileName>
+ <FileName>finsh_node.c</FileName>
<FileType>1</FileType>
- <FilePath>../../components/drivers/src/completion.c</FilePath>
+ <FilePath>../../components/finsh/finsh_node.c</FilePath>
</File>
</Files>
<Files>
<File>
- <FileName>dataqueue.c</FileName>
+ <FileName>finsh_ops.c</FileName>
<FileType>1</FileType>
- <FilePath>../../components/drivers/src/dataqueue.c</FilePath>
+ <FilePath>../../components/finsh/finsh_ops.c</FilePath>
</File>
</Files>
<Files>
<File>
- <FileName>pipe.c</FileName>
+ <FileName>finsh_parser.c</FileName>
<FileType>1</FileType>
- <FilePath>../../components/drivers/src/pipe.c</FilePath>
+ <FilePath>../../components/finsh/finsh_parser.c</FilePath>
</File>
</Files>
<Files>
<File>
- <FileName>portal.c</FileName>
+ <FileName>finsh_var.c</FileName>
<FileType>1</FileType>
- <FilePath>../../components/drivers/src/portal.c</FilePath>
+ <FilePath>../../components/finsh/finsh_var.c</FilePath>
</File>
</Files>
<Files>
<File>
- <FileName>ringbuffer.c</FileName>
+ <FileName>finsh_vm.c</FileName>
<FileType>1</FileType>
- <FilePath>../../components/drivers/src/ringbuffer.c</FilePath>
+ <FilePath>../../components/finsh/finsh_vm.c</FilePath>
</File>
</Files>
<Files>
<File>
- <FileName>workqueue.c</FileName>
+ <FileName>finsh_token.c</FileName>
<FileType>1</FileType>
- <FilePath>../../components/drivers/src/workqueue.c</FilePath>
+ <FilePath>../../components/finsh/finsh_token.c</FilePath>
</File>
</Files>
</Group>
diff --git a/bsp/stm32f40x/project.uvprojx b/bsp/stm32f40x/project.uvprojx
index 50bd41f02b..9061692cce 100644
--- a/bsp/stm32f40x/project.uvprojx
+++ b/bsp/stm32f40x/project.uvprojx
@@ -365,7 +365,7 @@
<MiscControls></MiscControls>
<Define>USE_STDPERIPH_DRIVER</Define>
<Undefine></Undefine>
- <IncludePath>.;..\..\components\finsh;..\..\include;..\..\libcpu\arm\common;..\..\libcpu\arm\cortex-m4;Libraries\CMSIS\Include;Libraries\CMSIS\ST\STM32F4xx\Include;Libraries\STM32F4xx_StdPeriph_Driver\inc;applications;drivers</IncludePath>
+ <IncludePath>.;..\..\components\drivers\include;..\..\components\finsh;..\..\include;..\..\libcpu\arm\common;..\..\libcpu\arm\cortex-m4;Libraries\CMSIS\Include;Libraries\CMSIS\ST\STM32F4xx\Include;Libraries\STM32F4xx_StdPeriph_Driver\inc;applications;drivers</IncludePath>
</VariousControls>
</Cads>
<Aads>
@@ -398,7 +398,7 @@
<ScatterFile></ScatterFile>
<IncludeLibs></IncludeLibs>
<IncludeLibsPath></IncludeLibsPath>
- <Misc> --keep __fsym_* --keep __vsym_* </Misc>
+ <Misc> --keep *.o(FSymTab) --keep *.o(VSymTab) </Misc>
<LinkerInputFile></LinkerInputFile>
<DisabledWarnings></DisabledWarnings>
</LDads>
@@ -429,11 +429,6 @@
<FilePath>drivers\board.c</FilePath>
</File>
<File>
- <FileName>serial.c</FileName>
- <FileType>1</FileType>
- <FilePath>drivers\serial.c</FilePath>
- </File>
- <File>
<FileName>stm32f4xx_it.c</FileName>
<FileType>1</FileType>
<FilePath>drivers\stm32f4xx_it.c</FilePath>
@@ -443,6 +438,11 @@
<FileType>1</FileType>
<FilePath>drivers\usart.c</FilePath>
</File>
+ <File>
+ <FileName>gpio.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>drivers\gpio.c</FilePath>
+ </File>
</Files>
</Group>
<Group>
@@ -624,6 +624,11 @@
<FilePath>..\..\src\clock.c</FilePath>
</File>
<File>
+ <FileName>components.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>..\..\src\components.c</FilePath>
+ </File>
+ <File>
<FileName>device.c</FileName>
<FileType>1</FileType>
<FilePath>..\..\src\device.c</FilePath>
@@ -711,6 +716,51 @@
</Files>
</Group>
<Group>
+ <GroupName>DeviceDrivers</GroupName>
+ <Files>
+ <File>
+ <FileName>pin.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>..\..\components\drivers\misc\pin.c</FilePath>
+ </File>
+ <File>
+ <FileName>serial.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>..\..\components\drivers\serial\serial.c</FilePath>
+ </File>
+ <File>
+ <FileName>completion.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>..\..\components\drivers\src\completion.c</FilePath>
+ </File>
+ <File>
+ <FileName>dataqueue.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>..\..\components\drivers\src\dataqueue.c</FilePath>
+ </File>
+ <File>
+ <FileName>pipe.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>..\..\components\drivers\src\pipe.c</FilePath>
+ </File>
+ <File>
+ <FileName>portal.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>..\..\components\drivers\src\portal.c</FilePath>
+ </File>
+ <File>
+ <FileName>ringbuffer.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>..\..\components\drivers\src\ringbuffer.c</FilePath>
+ </File>
+ <File>
+ <FileName>workqueue.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>..\..\components\drivers\src\workqueue.c</FilePath>
+ </File>
+ </Files>
+ </Group>
+ <Group>
<GroupName>finsh</GroupName>
<Files>
<File>
diff --git a/bsp/tm4c129x/project.uvproj b/bsp/tm4c129x/project.uvproj
new file mode 100644
index 0000000000..5a9d572475
--- /dev/null
+++ b/bsp/tm4c129x/project.uvproj
@@ -0,0 +1,1210 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
+<Project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="project_proj.xsd">
+ <SchemaVersion>1.1</SchemaVersion>
+ <Header>### uVision Project, (C) Keil Software</Header>
+ <Targets>
+ <Target>
+ <TargetName>RT-Thread TM4C129X</TargetName>
+ <ToolsetNumber>0x4</ToolsetNumber>
+ <ToolsetName>ARM-ADS</ToolsetName>
+ <TargetOption>
+ <TargetCommonOption>
+ <Device>TM4C1294NCPDT</Device>
+ <Vendor>Texas Instruments</Vendor>
+ <PackID>Keil.TM4C_DFP.1.0.0</PackID>
+ <PackURL>http://www.keil.com/pack/</PackURL>
+ <Cpu>IROM(0x00000000,0x100000) IRAM(0x20000000,0x040000) CPUTYPE("Cortex-M4") FPU2 CLOCK(120000000) ELITTLE</Cpu>
+ <FlashUtilSpec />
+ <StartupFile />
+ <FlashDriverDll>UL2CM3(-S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0TM4C129_1024 -FS00 -FL0100000 -FP0($$Device:TM4C1294NCPDT$Flash\TM4C129_1024.FLM))</FlashDriverDll>
+ <DeviceId>7088</DeviceId>
+ <RegisterFile>$$Device:TM4C1294NCPDT$Device\Include\TM4C129\TM4C129.h</RegisterFile>
+ <MemoryEnv />
+ <Cmp />
+ <Asm />
+ <Linker />
+ <OHString />
+ <InfinionOptionDll />
+ <SLE66CMisc>-DTM4C1294NCPDT</SLE66CMisc>
+ <SLE66AMisc />
+ <SLE66LinkerMisc />
+ <SFDFile>$$Device:TM4C1294NCPDT$SVD\TM4C129\TM4C1294NCPDT.svd</SFDFile>
+ <bCustSvd>0</bCustSvd>
+ <UseEnv>0</UseEnv>
+ <BinPath />
+ <IncludePath />
+ <LibPath />
+ <RegisterFilePath />
+ <DBRegisterFilePath />
+ <TargetStatus>
+ <Error>0</Error>
+ <ExitCodeStop>0</ExitCodeStop>
+ <ButtonStop>0</ButtonStop>
+ <NotGenerated>0</NotGenerated>
+ <InvalidFlash>1</InvalidFlash>
+ </TargetStatus>
+ <OutputDirectory>.\build\</OutputDirectory>
+ <OutputName>rtthread-tm4c</OutputName>
+ <CreateExecutable>1</CreateExecutable>
+ <CreateLib>0</CreateLib>
+ <CreateHexFile>0</CreateHexFile>
+ <DebugInformation>1</DebugInformation>
+ <BrowseInformation>1</BrowseInformation>
+ <ListingPath>.\</ListingPath>
+ <HexFormatSelection>1</HexFormatSelection>
+ <Merge32K>0</Merge32K>
+ <CreateBatchFile>0</CreateBatchFile>
+ <BeforeCompile>
+ <RunUserProg1>0</RunUserProg1>
+ <RunUserProg2>0</RunUserProg2>
+ <UserProg1Name />
+ <UserProg2Name />
+ <UserProg1Dos16Mode>0</UserProg1Dos16Mode>
+ <UserProg2Dos16Mode>0</UserProg2Dos16Mode>
+ <nStopU1X>0</nStopU1X>
+ <nStopU2X>0</nStopU2X>
+ </BeforeCompile>
+ <BeforeMake>
+ <RunUserProg1>0</RunUserProg1>
+ <RunUserProg2>0</RunUserProg2>
+ <UserProg1Name />
+ <UserProg2Name />
+ <UserProg1Dos16Mode>0</UserProg1Dos16Mode>
+ <UserProg2Dos16Mode>0</UserProg2Dos16Mode>
+ <nStopB1X>0</nStopB1X>
+ <nStopB2X>0</nStopB2X>
+ </BeforeMake>
+ <AfterMake>
+ <RunUserProg1>0</RunUserProg1>
+ <RunUserProg2>0</RunUserProg2>
+ <UserProg1Name />
+ <UserProg2Name />
+ <UserProg1Dos16Mode>0</UserProg1Dos16Mode>
+ <UserProg2Dos16Mode>0</UserProg2Dos16Mode>
+ </AfterMake>
+ <SelectedForBatchBuild>0</SelectedForBatchBuild>
+ <SVCSIdString />
+ </TargetCommonOption>
+ <CommonProperty>
+ <UseCPPCompiler>0</UseCPPCompiler>
+ <RVCTCodeConst>0</RVCTCodeConst>
+ <RVCTZI>0</RVCTZI>
+ <RVCTOtherData>0</RVCTOtherData>
+ <ModuleSelection>0</ModuleSelection>
+ <IncludeInBuild>1</IncludeInBuild>
+ <AlwaysBuild>0</AlwaysBuild>
+ <GenerateAssemblyFile>0</GenerateAssemblyFile>
+ <AssembleAssemblyFile>0</AssembleAssemblyFile>
+ <PublicsOnly>0</PublicsOnly>
+ <StopOnExitCode>3</StopOnExitCode>
+ <CustomArgument />
+ <IncludeLibraryModules />
+ <ComprImg>1</ComprImg>
+ </CommonProperty>
+ <DllOption>
+ <SimDllName>SARMCM3.DLL</SimDllName>
+ <SimDllArguments>-MPU</SimDllArguments>
+ <SimDlgDll>DCM.DLL</SimDlgDll>
+ <SimDlgDllArguments>-pCM4</SimDlgDllArguments>
+ <TargetDllName>SARMCM3.DLL</TargetDllName>
+ <TargetDllArguments>-MPU</TargetDllArguments>
+ <TargetDlgDll>TCM.DLL</TargetDlgDll>
+ <TargetDlgDllArguments>-pCM4</TargetDlgDllArguments>
+ </DllOption>
+ <DebugOption>
+ <OPTHX>
+ <HexSelection>1</HexSelection>
+ <HexRangeLowAddress>0</HexRangeLowAddress>
+ <HexRangeHighAddress>0</HexRangeHighAddress>
+ <HexOffset>0</HexOffset>
+ <Oh166RecLen>16</Oh166RecLen>
+ </OPTHX>
+ <Simulator>
+ <UseSimulator>0</UseSimulator>
+ <LoadApplicationAtStartup>1</LoadApplicationAtStartup>
+ <RunToMain>1</RunToMain>
+ <RestoreBreakpoints>1</RestoreBreakpoints>
+ <RestoreWatchpoints>1</RestoreWatchpoints>
+ <RestoreMemoryDisplay>1</RestoreMemoryDisplay>
+ <RestoreFunctions>1</RestoreFunctions>
+ <RestoreToolbox>1</RestoreToolbox>
+ <LimitSpeedToRealTime>0</LimitSpeedToRealTime>
+ <RestoreSysVw>1</RestoreSysVw>
+ </Simulator>
+ <Target>
+ <UseTarget>1</UseTarget>
+ <LoadApplicationAtStartup>1</LoadApplicationAtStartup>
+ <RunToMain>1</RunToMain>
+ <RestoreBreakpoints>1</RestoreBreakpoints>
+ <RestoreWatchpoints>1</RestoreWatchpoints>
+ <RestoreMemoryDisplay>1</RestoreMemoryDisplay>
+ <RestoreFunctions>0</RestoreFunctions>
+ <RestoreToolbox>1</RestoreToolbox>
+ <RestoreTracepoints>1</RestoreTracepoints>
+ <RestoreSysVw>1</RestoreSysVw>
+ <UsePdscDebugDescription>1</UsePdscDebugDescription>
+ </Target>
+ <RunDebugAfterBuild>0</RunDebugAfterBuild>
+ <TargetSelection>6</TargetSelection>
+ <SimDlls>
+ <CpuDll />
+ <CpuDllArguments />
+ <PeripheralDll />
+ <PeripheralDllArguments />
+ <InitializationFile />
+ </SimDlls>
+ <TargetDlls>
+ <CpuDll />
+ <CpuDllArguments />
+ <PeripheralDll />
+ <PeripheralDllArguments />
+ <InitializationFile />
+ <Driver>Segger\JL2CM3.dll</Driver>
+ </TargetDlls>
+ </DebugOption>
+ <Utilities>
+ <Flash1>
+ <UseTargetDll>1</UseTargetDll>
+ <UseExternalTool>0</UseExternalTool>
+ <RunIndependent>0</RunIndependent>
+ <UpdateFlashBeforeDebugging>1</UpdateFlashBeforeDebugging>
+ <Capability>1</Capability>
+ <DriverSelection>4096</DriverSelection>
+ </Flash1>
+ <bUseTDR>1</bUseTDR>
+ <Flash2>BIN\UL2CM3.DLL</Flash2>
+ <Flash3>"" ()</Flash3>
+ <Flash4 />
+ <pFcarmOut />
+ <pFcarmGrp />
+ <pFcArmRoot />
+ <FcArmLst>0</FcArmLst>
+ </Utilities>
+ <TargetArmAds>
+ <ArmAdsMisc>
+ <GenerateListings>0</GenerateListings>
+ <asHll>1</asHll>
+ <asAsm>1</asAsm>
+ <asMacX>1</asMacX>
+ <asSyms>1</asSyms>
+ <asFals>1</asFals>
+ <asDbgD>1</asDbgD>
+ <asForm>1</asForm>
+ <ldLst>0</ldLst>
+ <ldmm>1</ldmm>
+ <ldXref>1</ldXref>
+ <BigEnd>0</BigEnd>
+ <AdsALst>1</AdsALst>
+ <AdsACrf>1</AdsACrf>
+ <AdsANop>0</AdsANop>
+ <AdsANot>0</AdsANot>
+ <AdsLLst>1</AdsLLst>
+ <AdsLmap>1</AdsLmap>
+ <AdsLcgr>1</AdsLcgr>
+ <AdsLsym>1</AdsLsym>
+ <AdsLszi>1</AdsLszi>
+ <AdsLtoi>1</AdsLtoi>
+ <AdsLsun>1</AdsLsun>
+ <AdsLven>1</AdsLven>
+ <AdsLsxf>1</AdsLsxf>
+ <RvctClst>0</RvctClst>
+ <GenPPlst>0</GenPPlst>
+ <AdsCpuType>"Cortex-M4"</AdsCpuType>
+ <RvctDeviceName />
+ <mOS>0</mOS>
+ <uocRom>0</uocRom>
+ <uocRam>0</uocRam>
+ <hadIROM>1</hadIROM>
+ <hadIRAM>1</hadIRAM>
+ <hadXRAM>0</hadXRAM>
+ <uocXRam>0</uocXRam>
+ <RvdsVP>2</RvdsVP>
+ <hadIRAM2>0</hadIRAM2>
+ <hadIROM2>0</hadIROM2>
+ <StupSel>8</StupSel>
+ <useUlib>0</useUlib>
+ <EndSel>0</EndSel>
+ <uLtcg>0</uLtcg>
+ <RoSelD>3</RoSelD>
+ <RwSelD>3</RwSelD>
+ <CodeSel>0</CodeSel>
+ <OptFeed>0</OptFeed>
+ <NoZi1>0</NoZi1>
+ <NoZi2>0</NoZi2>
+ <NoZi3>0</NoZi3>
+ <NoZi4>0</NoZi4>
+ <NoZi5>0</NoZi5>
+ <Ro1Chk>0</Ro1Chk>
+ <Ro2Chk>0</Ro2Chk>
+ <Ro3Chk>0</Ro3Chk>
+ <Ir1Chk>1</Ir1Chk>
+ <Ir2Chk>0</Ir2Chk>
+ <Ra1Chk>0</Ra1Chk>
+ <Ra2Chk>0</Ra2Chk>
+ <Ra3Chk>0</Ra3Chk>
+ <Im1Chk>1</Im1Chk>
+ <Im2Chk>0</Im2Chk>
+ <OnChipMemories>
+ <Ocm1>
+ <Type>0</Type>
+ <StartAddress>0x0</StartAddress>
+ <Size>0x0</Size>
+ </Ocm1>
+ <Ocm2>
+ <Type>0</Type>
+ <StartAddress>0x0</StartAddress>
+ <Size>0x0</Size>
+ </Ocm2>
+ <Ocm3>
+ <Type>0</Type>
+ <StartAddress>0x0</StartAddress>
+ <Size>0x0</Size>
+ </Ocm3>
+ <Ocm4>
+ <Type>0</Type>
+ <StartAddress>0x0</StartAddress>
+ <Size>0x0</Size>
+ </Ocm4>
+ <Ocm5>
+ <Type>0</Type>
+ <StartAddress>0x0</StartAddress>
+ <Size>0x0</Size>
+ </Ocm5>
+ <Ocm6>
+ <Type>0</Type>
+ <StartAddress>0x0</StartAddress>
+ <Size>0x0</Size>
+ </Ocm6>
+ <IRAM>
+ <Type>0</Type>
+ <StartAddress>0x20000000</StartAddress>
+ <Size>0x40000</Size>
+ </IRAM>
+ <IROM>
+ <Type>1</Type>
+ <StartAddress>0x0</StartAddress>
+ <Size>0x100000</Size>
+ </IROM>
+ <XRAM>
+ <Type>0</Type>
+ <StartAddress>0x0</StartAddress>
+ <Size>0x0</Size>
+ </XRAM>
+ <OCR_RVCT1>
+ <Type>1</Type>
+ <StartAddress>0x0</StartAddress>
+ <Size>0x0</Size>
+ </OCR_RVCT1>
+ <OCR_RVCT2>
+ <Type>1</Type>
+ <StartAddress>0x0</StartAddress>
+ <Size>0x0</Size>
+ </OCR_RVCT2>
+ <OCR_RVCT3>
+ <Type>1</Type>
+ <StartAddress>0x0</StartAddress>
+ <Size>0x0</Size>
+ </OCR_RVCT3>
+ <OCR_RVCT4>
+ <Type>1</Type>
+ <StartAddress>0x0</StartAddress>
+ <Size>0x100000</Size>
+ </OCR_RVCT4>
+ <OCR_RVCT5>
+ <Type>1</Type>
+ <StartAddress>0x0</StartAddress>
+ <Size>0x0</Size>
+ </OCR_RVCT5>
+ <OCR_RVCT6>
+ <Type>0</Type>
+ <StartAddress>0x0</StartAddress>
+ <Size>0x0</Size>
+ </OCR_RVCT6>
+ <OCR_RVCT7>
+ <Type>0</Type>
+ <StartAddress>0x0</StartAddress>
+ <Size>0x0</Size>
+ </OCR_RVCT7>
+ <OCR_RVCT8>
+ <Type>0</Type>
+ <StartAddress>0x0</StartAddress>
+ <Size>0x0</Size>
+ </OCR_RVCT8>
+ <OCR_RVCT9>
+ <Type>0</Type>
+ <StartAddress>0x20000000</StartAddress>
+ <Size>0x40000</Size>
+ </OCR_RVCT9>
+ <OCR_RVCT10>
+ <Type>0</Type>
+ <StartAddress>0x0</StartAddress>
+ <Size>0x0</Size>
+ </OCR_RVCT10>
+ </OnChipMemories>
+ <RvctStartVector />
+ </ArmAdsMisc>
+ <Cads>
+ <interw>1</interw>
+ <Optim>1</Optim>
+ <oTime>0</oTime>
+ <SplitLS>0</SplitLS>
+ <OneElfS>0</OneElfS>
+ <Strict>0</Strict>
+ <EnumInt>0</EnumInt>
+ <PlainCh>0</PlainCh>
+ <Ropi>0</Ropi>
+ <Rwpi>0</Rwpi>
+ <wLevel>2</wLevel>
+ <uThumb>0</uThumb>
+ <uSurpInc>0</uSurpInc>
+ <uC99>0</uC99>
+ <useXO>0</useXO>
+ <VariousControls>
+ <MiscControls />
+ <Define>PART_TM4C129XNCZAD</Define>
+ <Undefine />
+ <IncludePath>libraries;libraries/inc;libraries/driverlib;applications;.;drivers;../../include;../../libcpu/arm/cortex-m4;../../libcpu/arm/common;../../components/drivers/include;../../components/drivers/include;../../components/finsh;../../components/net/lwip-1.4.1/src;../../components/net/lwip-1.4.1/src/include;../../components/net/lwip-1.4.1/src/include/ipv4;../../components/net/lwip-1.4.1/src/arch/include;../../components/net/lwip-1.4.1/src/include/netif</IncludePath>
+ </VariousControls>
+ </Cads>
+ <Aads>
+ <interw>1</interw>
+ <Ropi>0</Ropi>
+ <Rwpi>0</Rwpi>
+ <thumb>0</thumb>
+ <SplitLS>0</SplitLS>
+ <SwStkChk>0</SwStkChk>
+ <NoWarn>0</NoWarn>
+ <uSurpInc>0</uSurpInc>
+ <useXO>0</useXO>
+ <VariousControls>
+ <MiscControls />
+ <Define />
+ <Undefine />
+ <IncludePath />
+ </VariousControls>
+ </Aads>
+ <LDads>
+ <umfTarg>0</umfTarg>
+ <Ropi>0</Ropi>
+ <Rwpi>0</Rwpi>
+ <noStLib>0</noStLib>
+ <RepFail>1</RepFail>
+ <useFile>0</useFile>
+ <TextAddressRange>0x00000000</TextAddressRange>
+ <DataAddressRange>0x00000000</DataAddressRange>
+ <pXoBase />
+ <ScatterFile>tm4c_rom.sct</ScatterFile>
+ <IncludeLibs />
+ <IncludeLibsPath />
+ <Misc> --keep *.o(.rti_fn.*) --keep *.o(FSymTab) --keep *.o(VSymTab) </Misc>
+ <LinkerInputFile />
+ <DisabledWarnings />
+ </LDads>
+ </TargetArmAds>
+ </TargetOption>
+ <Groups>
+ <Group>
+ <GroupName>Libraries</GroupName>
+ <Files>
+ <File>
+ <FileName>adc.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>libraries/driverlib/adc.c</FilePath>
+ </File>
+ </Files>
+ <Files>
+ <File>
+ <FileName>aes.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>libraries/driverlib/aes.c</FilePath>
+ </File>
+ </Files>
+ <Files>
+ <File>
+ <FileName>can.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>libraries/driverlib/can.c</FilePath>
+ </File>
+ </Files>
+ <Files>
+ <File>
+ <FileName>comp.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>libraries/driverlib/comp.c</FilePath>
+ </File>
+ </Files>
+ <Files>
+ <File>
+ <FileName>cpu.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>libraries/driverlib/cpu.c</FilePath>
+ </File>
+ </Files>
+ <Files>
+ <File>
+ <FileName>crc.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>libraries/driverlib/crc.c</FilePath>
+ </File>
+ </Files>
+ <Files>
+ <File>
+ <FileName>des.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>libraries/driverlib/des.c</FilePath>
+ </File>
+ </Files>
+ <Files>
+ <File>
+ <FileName>eeprom.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>libraries/driverlib/eeprom.c</FilePath>
+ </File>
+ </Files>
+ <Files>
+ <File>
+ <FileName>emac.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>libraries/driverlib/emac.c</FilePath>
+ </File>
+ </Files>
+ <Files>
+ <File>
+ <FileName>epi.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>libraries/driverlib/epi.c</FilePath>
+ </File>
+ </Files>
+ <Files>
+ <File>
+ <FileName>flash.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>libraries/driverlib/flash.c</FilePath>
+ </File>
+ </Files>
+ <Files>
+ <File>
+ <FileName>fpu.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>libraries/driverlib/fpu.c</FilePath>
+ </File>
+ </Files>
+ <Files>
+ <File>
+ <FileName>gpio.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>libraries/driverlib/gpio.c</FilePath>
+ </File>
+ </Files>
+ <Files>
+ <File>
+ <FileName>hibernate.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>libraries/driverlib/hibernate.c</FilePath>
+ </File>
+ </Files>
+ <Files>
+ <File>
+ <FileName>i2c.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>libraries/driverlib/i2c.c</FilePath>
+ </File>
+ </Files>
+ <Files>
+ <File>
+ <FileName>interrupt.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>libraries/driverlib/interrupt.c</FilePath>
+ </File>
+ </Files>
+ <Files>
+ <File>
+ <FileName>lcd.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>libraries/driverlib/lcd.c</FilePath>
+ </File>
+ </Files>
+ <Files>
+ <File>
+ <FileName>mpu.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>libraries/driverlib/mpu.c</FilePath>
+ </File>
+ </Files>
+ <Files>
+ <File>
+ <FileName>pwm.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>libraries/driverlib/pwm.c</FilePath>
+ </File>
+ </Files>
+ <Files>
+ <File>
+ <FileName>qei.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>libraries/driverlib/qei.c</FilePath>
+ </File>
+ </Files>
+ <Files>
+ <File>
+ <FileName>shamd5.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>libraries/driverlib/shamd5.c</FilePath>
+ </File>
+ </Files>
+ <Files>
+ <File>
+ <FileName>ssi.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>libraries/driverlib/ssi.c</FilePath>
+ </File>
+ </Files>
+ <Files>
+ <File>
+ <FileName>sw_crc.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>libraries/driverlib/sw_crc.c</FilePath>
+ </File>
+ </Files>
+ <Files>
+ <File>
+ <FileName>sysctl.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>libraries/driverlib/sysctl.c</FilePath>
+ </File>
+ </Files>
+ <Files>
+ <File>
+ <FileName>sysexc.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>libraries/driverlib/sysexc.c</FilePath>
+ </File>
+ </Files>
+ <Files>
+ <File>
+ <FileName>systick.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>libraries/driverlib/systick.c</FilePath>
+ </File>
+ </Files>
+ <Files>
+ <File>
+ <FileName>tiva_timer.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>libraries/driverlib/tiva_timer.c</FilePath>
+ </File>
+ </Files>
+ <Files>
+ <File>
+ <FileName>uart.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>libraries/driverlib/uart.c</FilePath>
+ </File>
+ </Files>
+ <Files>
+ <File>
+ <FileName>udma.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>libraries/driverlib/udma.c</FilePath>
+ </File>
+ </Files>
+ <Files>
+ <File>
+ <FileName>usb.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>libraries/driverlib/usb.c</FilePath>
+ </File>
+ </Files>
+ <Files>
+ <File>
+ <FileName>watchdog.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>libraries/driverlib/watchdog.c</FilePath>
+ </File>
+ </Files>
+ <Files>
+ <File>
+ <FileName>startup_rvmdk.S</FileName>
+ <FileType>2</FileType>
+ <FilePath>libraries/startup/startup_rvmdk.S</FilePath>
+ </File>
+ </Files>
+ </Group>
+ <Group>
+ <GroupName>Applications</GroupName>
+ <Files>
+ <File>
+ <FileName>application.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>applications/application.c</FilePath>
+ </File>
+ </Files>
+ <Files>
+ <File>
+ <FileName>board.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>applications/board.c</FilePath>
+ </File>
+ </Files>
+ <Files>
+ <File>
+ <FileName>startup.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>applications/startup.c</FilePath>
+ </File>
+ </Files>
+ </Group>
+ <Group>
+ <GroupName>Drivers</GroupName>
+ <Files>
+ <File>
+ <FileName>drv_eth.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>drivers/drv_eth.c</FilePath>
+ </File>
+ </Files>
+ <Files>
+ <File>
+ <FileName>drv_uart.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>drivers/drv_uart.c</FilePath>
+ </File>
+ </Files>
+ </Group>
+ <Group>
+ <GroupName>Kernel</GroupName>
+ <Files>
+ <File>
+ <FileName>clock.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../../src/clock.c</FilePath>
+ </File>
+ </Files>
+ <Files>
+ <File>
+ <FileName>components.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../../src/components.c</FilePath>
+ </File>
+ </Files>
+ <Files>
+ <File>
+ <FileName>device.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../../src/device.c</FilePath>
+ </File>
+ </Files>
+ <Files>
+ <File>
+ <FileName>idle.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../../src/idle.c</FilePath>
+ </File>
+ </Files>
+ <Files>
+ <File>
+ <FileName>ipc.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../../src/ipc.c</FilePath>
+ </File>
+ </Files>
+ <Files>
+ <File>
+ <FileName>irq.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../../src/irq.c</FilePath>
+ </File>
+ </Files>
+ <Files>
+ <File>
+ <FileName>kservice.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../../src/kservice.c</FilePath>
+ </File>
+ </Files>
+ <Files>
+ <File>
+ <FileName>mem.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../../src/mem.c</FilePath>
+ </File>
+ </Files>
+ <Files>
+ <File>
+ <FileName>memheap.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../../src/memheap.c</FilePath>
+ </File>
+ </Files>
+ <Files>
+ <File>
+ <FileName>mempool.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../../src/mempool.c</FilePath>
+ </File>
+ </Files>
+ <Files>
+ <File>
+ <FileName>object.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../../src/object.c</FilePath>
+ </File>
+ </Files>
+ <Files>
+ <File>
+ <FileName>scheduler.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../../src/scheduler.c</FilePath>
+ </File>
+ </Files>
+ <Files>
+ <File>
+ <FileName>thread.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../../src/thread.c</FilePath>
+ </File>
+ </Files>
+ <Files>
+ <File>
+ <FileName>timer.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../../src/timer.c</FilePath>
+ </File>
+ </Files>
+ </Group>
+ <Group>
+ <GroupName>CORTEX-M4</GroupName>
+ <Files>
+ <File>
+ <FileName>cpuport.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../../libcpu/arm/cortex-m4/cpuport.c</FilePath>
+ </File>
+ </Files>
+ <Files>
+ <File>
+ <FileName>context_rvds.S</FileName>
+ <FileType>2</FileType>
+ <FilePath>../../libcpu/arm/cortex-m4/context_rvds.S</FilePath>
+ </File>
+ </Files>
+ <Files>
+ <File>
+ <FileName>backtrace.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../../libcpu/arm/common/backtrace.c</FilePath>
+ </File>
+ </Files>
+ <Files>
+ <File>
+ <FileName>div0.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../../libcpu/arm/common/div0.c</FilePath>
+ </File>
+ </Files>
+ <Files>
+ <File>
+ <FileName>showmem.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../../libcpu/arm/common/showmem.c</FilePath>
+ </File>
+ </Files>
+ </Group>
+ <Group>
+ <GroupName>DeviceDrivers</GroupName>
+ <Files>
+ <File>
+ <FileName>serial.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../../components/drivers/serial/serial.c</FilePath>
+ </File>
+ </Files>
+ <Files>
+ <File>
+ <FileName>completion.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../../components/drivers/src/completion.c</FilePath>
+ </File>
+ </Files>
+ <Files>
+ <File>
+ <FileName>dataqueue.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../../components/drivers/src/dataqueue.c</FilePath>
+ </File>
+ </Files>
+ <Files>
+ <File>
+ <FileName>pipe.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../../components/drivers/src/pipe.c</FilePath>
+ </File>
+ </Files>
+ <Files>
+ <File>
+ <FileName>portal.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../../components/drivers/src/portal.c</FilePath>
+ </File>
+ </Files>
+ <Files>
+ <File>
+ <FileName>ringbuffer.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../../components/drivers/src/ringbuffer.c</FilePath>
+ </File>
+ </Files>
+ <Files>
+ <File>
+ <FileName>workqueue.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../../components/drivers/src/workqueue.c</FilePath>
+ </File>
+ </Files>
+ </Group>
+ <Group>
+ <GroupName>finsh</GroupName>
+ <Files>
+ <File>
+ <FileName>shell.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../../components/finsh/shell.c</FilePath>
+ </File>
+ </Files>
+ <Files>
+ <File>
+ <FileName>symbol.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../../components/finsh/symbol.c</FilePath>
+ </File>
+ </Files>
+ <Files>
+ <File>
+ <FileName>cmd.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../../components/finsh/cmd.c</FilePath>
+ </File>
+ </Files>
+ <Files>
+ <File>
+ <FileName>finsh_compiler.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../../components/finsh/finsh_compiler.c</FilePath>
+ </File>
+ </Files>
+ <Files>
+ <File>
+ <FileName>finsh_error.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../../components/finsh/finsh_error.c</FilePath>
+ </File>
+ </Files>
+ <Files>
+ <File>
+ <FileName>finsh_heap.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../../components/finsh/finsh_heap.c</FilePath>
+ </File>
+ </Files>
+ <Files>
+ <File>
+ <FileName>finsh_init.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../../components/finsh/finsh_init.c</FilePath>
+ </File>
+ </Files>
+ <Files>
+ <File>
+ <FileName>finsh_node.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../../components/finsh/finsh_node.c</FilePath>
+ </File>
+ </Files>
+ <Files>
+ <File>
+ <FileName>finsh_ops.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../../components/finsh/finsh_ops.c</FilePath>
+ </File>
+ </Files>
+ <Files>
+ <File>
+ <FileName>finsh_parser.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../../components/finsh/finsh_parser.c</FilePath>
+ </File>
+ </Files>
+ <Files>
+ <File>
+ <FileName>finsh_var.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../../components/finsh/finsh_var.c</FilePath>
+ </File>
+ </Files>
+ <Files>
+ <File>
+ <FileName>finsh_vm.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../../components/finsh/finsh_vm.c</FilePath>
+ </File>
+ </Files>
+ <Files>
+ <File>
+ <FileName>finsh_token.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../../components/finsh/finsh_token.c</FilePath>
+ </File>
+ </Files>
+ </Group>
+ <Group>
+ <GroupName>LwIP</GroupName>
+ <Files>
+ <File>
+ <FileName>api_lib.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../../components/net/lwip-1.4.1/src/api/api_lib.c</FilePath>
+ </File>
+ </Files>
+ <Files>
+ <File>
+ <FileName>api_msg.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../../components/net/lwip-1.4.1/src/api/api_msg.c</FilePath>
+ </File>
+ </Files>
+ <Files>
+ <File>
+ <FileName>err.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../../components/net/lwip-1.4.1/src/api/err.c</FilePath>
+ </File>
+ </Files>
+ <Files>
+ <File>
+ <FileName>netbuf.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../../components/net/lwip-1.4.1/src/api/netbuf.c</FilePath>
+ </File>
+ </Files>
+ <Files>
+ <File>
+ <FileName>netdb.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../../components/net/lwip-1.4.1/src/api/netdb.c</FilePath>
+ </File>
+ </Files>
+ <Files>
+ <File>
+ <FileName>netifapi.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../../components/net/lwip-1.4.1/src/api/netifapi.c</FilePath>
+ </File>
+ </Files>
+ <Files>
+ <File>
+ <FileName>sockets.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../../components/net/lwip-1.4.1/src/api/sockets.c</FilePath>
+ </File>
+ </Files>
+ <Files>
+ <File>
+ <FileName>tcpip.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../../components/net/lwip-1.4.1/src/api/tcpip.c</FilePath>
+ </File>
+ </Files>
+ <Files>
+ <File>
+ <FileName>sys_arch.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../../components/net/lwip-1.4.1/src/arch/sys_arch.c</FilePath>
+ </File>
+ </Files>
+ <Files>
+ <File>
+ <FileName>def.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../../components/net/lwip-1.4.1/src/core/def.c</FilePath>
+ </File>
+ </Files>
+ <Files>
+ <File>
+ <FileName>dhcp.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../../components/net/lwip-1.4.1/src/core/dhcp.c</FilePath>
+ </File>
+ </Files>
+ <Files>
+ <File>
+ <FileName>dns.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../../components/net/lwip-1.4.1/src/core/dns.c</FilePath>
+ </File>
+ </Files>
+ <Files>
+ <File>
+ <FileName>init.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../../components/net/lwip-1.4.1/src/core/init.c</FilePath>
+ </File>
+ </Files>
+ <Files>
+ <File>
+ <FileName>memp.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../../components/net/lwip-1.4.1/src/core/memp.c</FilePath>
+ </File>
+ </Files>
+ <Files>
+ <File>
+ <FileName>netif.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../../components/net/lwip-1.4.1/src/core/netif.c</FilePath>
+ </File>
+ </Files>
+ <Files>
+ <File>
+ <FileName>pbuf.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../../components/net/lwip-1.4.1/src/core/pbuf.c</FilePath>
+ </File>
+ </Files>
+ <Files>
+ <File>
+ <FileName>raw.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../../components/net/lwip-1.4.1/src/core/raw.c</FilePath>
+ </File>
+ </Files>
+ <Files>
+ <File>
+ <FileName>stats.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../../components/net/lwip-1.4.1/src/core/stats.c</FilePath>
+ </File>
+ </Files>
+ <Files>
+ <File>
+ <FileName>sys.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../../components/net/lwip-1.4.1/src/core/sys.c</FilePath>
+ </File>
+ </Files>
+ <Files>
+ <File>
+ <FileName>tcp.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../../components/net/lwip-1.4.1/src/core/tcp.c</FilePath>
+ </File>
+ </Files>
+ <Files>
+ <File>
+ <FileName>tcp_in.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../../components/net/lwip-1.4.1/src/core/tcp_in.c</FilePath>
+ </File>
+ </Files>
+ <Files>
+ <File>
+ <FileName>tcp_out.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../../components/net/lwip-1.4.1/src/core/tcp_out.c</FilePath>
+ </File>
+ </Files>
+ <Files>
+ <File>
+ <FileName>timers.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../../components/net/lwip-1.4.1/src/core/timers.c</FilePath>
+ </File>
+ </Files>
+ <Files>
+ <File>
+ <FileName>udp.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../../components/net/lwip-1.4.1/src/core/udp.c</FilePath>
+ </File>
+ </Files>
+ <Files>
+ <File>
+ <FileName>autoip.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../../components/net/lwip-1.4.1/src/core/ipv4/autoip.c</FilePath>
+ </File>
+ </Files>
+ <Files>
+ <File>
+ <FileName>icmp.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../../components/net/lwip-1.4.1/src/core/ipv4/icmp.c</FilePath>
+ </File>
+ </Files>
+ <Files>
+ <File>
+ <FileName>igmp.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../../components/net/lwip-1.4.1/src/core/ipv4/igmp.c</FilePath>
+ </File>
+ </Files>
+ <Files>
+ <File>
+ <FileName>inet.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../../components/net/lwip-1.4.1/src/core/ipv4/inet.c</FilePath>
+ </File>
+ </Files>
+ <Files>
+ <File>
+ <FileName>inet_chksum.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../../components/net/lwip-1.4.1/src/core/ipv4/inet_chksum.c</FilePath>
+ </File>
+ </Files>
+ <Files>
+ <File>
+ <FileName>ip.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../../components/net/lwip-1.4.1/src/core/ipv4/ip.c</FilePath>
+ </File>
+ </Files>
+ <Files>
+ <File>
+ <FileName>ip_addr.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../../components/net/lwip-1.4.1/src/core/ipv4/ip_addr.c</FilePath>
+ </File>
+ </Files>
+ <Files>
+ <File>
+ <FileName>ip_frag.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../../components/net/lwip-1.4.1/src/core/ipv4/ip_frag.c</FilePath>
+ </File>
+ </Files>
+ <Files>
+ <File>
+ <FileName>etharp.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../../components/net/lwip-1.4.1/src/netif/etharp.c</FilePath>
+ </File>
+ </Files>
+ <Files>
+ <File>
+ <FileName>ethernetif.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../../components/net/lwip-1.4.1/src/netif/ethernetif.c</FilePath>
+ </File>
+ </Files>
+ <Files>
+ <File>
+ <FileName>slipif.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../../components/net/lwip-1.4.1/src/netif/slipif.c</FilePath>
+ </File>
+ </Files>
+ </Group>
+ </Groups>
+ </Target>
+ </Targets>
+</Project>
diff --git a/components/drivers/can/SConscript b/components/drivers/can/SConscript
new file mode 100644
index 0000000000..84ae2a10da
--- /dev/null
+++ b/components/drivers/can/SConscript
@@ -0,0 +1,8 @@
+from building import *
+
+cwd = GetCurrentDir()
+src = Glob('*.c')
+CPPPATH = [cwd + '/../include']
+group = DefineGroup('DeviceDrivers', src, depend = ['RT_USING_CAN'], CPPPATH = CPPPATH)
+
+Return('group')
diff --git a/components/drivers/can/can.c b/components/drivers/can/can.c
new file mode 100644
index 0000000000..8ac3029533
--- /dev/null
+++ b/components/drivers/can/can.c
@@ -0,0 +1,907 @@
+/*
+ * File : can.c
+ * This file is part of RT-Thread RTOS
+ * COPYRIGHT (C) 2015, 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
+ * 2015-05-14 [email protected] first version
+ */
+#include <rthw.h>
+#include <rtthread.h>
+#include <rtdevice.h>
+
+static rt_err_t rt_can_init(struct rt_device *dev)
+{
+ rt_err_t result = RT_EOK;
+ struct rt_can_device *can;
+
+ RT_ASSERT(dev != RT_NULL);
+ can = (struct rt_can_device *)dev;
+
+ /* initialize rx/tx */
+ can->can_rx = RT_NULL;
+ can->can_tx = RT_NULL;
+
+ /* apply configuration */
+ if (can->ops->configure)
+ result = can->ops->configure(can, &can->config);
+
+ return result;
+}
+/*
+ * can interrupt routines
+ */
+rt_inline int _can_int_rx(struct rt_can_device *can, struct rt_can_msg *data, int msgs)
+{
+ int size;
+ struct rt_can_rx_fifo* rx_fifo;
+
+ RT_ASSERT(can != RT_NULL);
+ size = msgs;
+
+ rx_fifo = (struct rt_can_rx_fifo*) can->can_rx;
+ RT_ASSERT(rx_fifo != RT_NULL);
+
+ /* read from software FIFO */
+ while (msgs)
+ {
+ rt_base_t level;
+ struct rt_can_msg_list *listmsg=RT_NULL;
+ /* disable interrupt */
+ level = rt_hw_interrupt_disable();
+#ifdef RT_CAN_USING_HDR
+ rt_int32_t hdr = data->hdr;
+ if (hdr >=0 && can->hdr && hdr < can->config.maxhdr && !rt_list_isempty(&can->hdr[hdr].list))
+ {
+ listmsg=rt_list_entry(can->hdr[hdr].list.next, struct rt_can_msg_list, hdrlist);
+ rt_list_remove(&listmsg->list);
+ rt_list_remove(&listmsg->hdrlist);
+ if(can->hdr[hdr].msgs) {
+ can->hdr[hdr].msgs--;
+ }
+ listmsg->owner = RT_NULL;
+ } else
+#endif /*RT_CAN_USING_HDR*/
+ if (!rt_list_isempty(&rx_fifo->uselist))
+ {
+ listmsg=rt_list_entry(rx_fifo->uselist.next, struct rt_can_msg_list, list);
+ rt_list_remove(&listmsg->list);
+#ifdef RT_CAN_USING_HDR
+ rt_list_remove(&listmsg->hdrlist);
+ if(listmsg->owner != RT_NULL && listmsg->owner->msgs) {
+ listmsg->owner->msgs--;
+ }
+ listmsg->owner = RT_NULL;
+#endif
+ }
+ else
+ {
+ /* no data, enable interrupt and break out */
+ rt_hw_interrupt_enable(level);
+ break;
+ }
+
+ /* enable interrupt */
+ rt_hw_interrupt_enable(level);
+ if(listmsg!=RT_NULL)
+ {
+ rt_memcpy(data,&listmsg->data,sizeof(struct rt_can_msg));
+ level = rt_hw_interrupt_disable();
+ rt_list_insert_before(&rx_fifo->freelist,&listmsg->list);
+ rx_fifo->freenumbers++;
+ RT_ASSERT(rx_fifo->freenumbers <= can->config.msgboxsz);
+ rt_hw_interrupt_enable(level);
+ listmsg = RT_NULL;
+ }
+ data ++; msgs -= sizeof(struct rt_can_msg);
+ }
+
+ return (size - msgs);
+}
+
+rt_inline int _can_int_tx(struct rt_can_device *can, const struct rt_can_msg *data, int msgs)
+{
+ int size;
+ struct rt_can_tx_fifo *tx_fifo;
+
+ RT_ASSERT(can != RT_NULL);
+
+ size = msgs;
+ tx_fifo = (struct rt_can_tx_fifo*) can->can_tx;
+ RT_ASSERT(tx_fifo != RT_NULL);
+
+ while (msgs)
+ {
+ rt_base_t level;
+ rt_uint32_t no;
+ struct rt_can_sndbxinx_list* tx_tosnd = RT_NULL;
+ level = rt_hw_interrupt_disable();
+ if(!rt_list_isempty(&tx_fifo->freelist))
+ {
+ tx_tosnd = rt_list_entry(tx_fifo->freelist.next, struct rt_can_sndbxinx_list, list);
+ RT_ASSERT(tx_tosnd != RT_NULL);
+ rt_list_remove(&tx_tosnd->list);
+ } else {
+ rt_hw_interrupt_enable(level);
+ rt_completion_wait(&(tx_fifo->completion), RT_WAITING_FOREVER);
+ continue;
+ }
+ rt_hw_interrupt_enable(level);
+ no=((rt_uint32_t)tx_tosnd-(rt_uint32_t)tx_fifo->buffer)/sizeof(struct rt_can_sndbxinx_list);
+ tx_tosnd->result = RT_CAN__SND_RESUTL_WAIT;
+ if (can->ops->sendmsg(can, data ,no))
+ {
+ level = rt_hw_interrupt_disable();
+ rt_list_insert_after(&tx_fifo->freelist,&tx_tosnd->list);
+ rt_hw_interrupt_enable(level);
+ continue;
+ }
+ can->status.sndchange = 1;
+ rt_completion_wait(&(tx_tosnd->completion), RT_WAITING_FOREVER);
+ level = rt_hw_interrupt_disable();
+ rt_uint32_t result = tx_tosnd->result;
+ if(!rt_list_isempty(&tx_tosnd->list)) {
+ rt_list_remove(&tx_tosnd->list);
+ }
+ rt_list_insert_before(&tx_fifo->freelist,&tx_tosnd->list);
+ rt_hw_interrupt_enable(level);
+
+ if(result == RT_CAN__SND_RESUTL_OK)
+ {
+ level = rt_hw_interrupt_disable();
+ can->status.sndpkg++;
+ rt_hw_interrupt_enable(level);
+ data ++; msgs -= sizeof(struct rt_can_msg);
+ if(!msgs) break;
+ }
+ else
+ {
+ level = rt_hw_interrupt_disable();
+ can->status.dropedsndpkg++;
+ rt_hw_interrupt_enable(level);
+ break;
+ }
+
+ level = rt_hw_interrupt_disable();
+ if(rt_list_isempty(&tx_fifo->freelist))
+ {
+ rt_hw_interrupt_enable(level);
+ rt_completion_done(&(tx_fifo->completion));
+ }
+ else
+ {
+ rt_hw_interrupt_enable(level);
+ }
+ }
+
+ return (size - msgs);
+}
+rt_inline int _can_int_tx_priv(struct rt_can_device *can, const struct rt_can_msg *data, int msgs)
+{
+ int size;
+ struct rt_can_tx_fifo *tx_fifo;
+
+ RT_ASSERT(can != RT_NULL);
+
+ size = msgs;
+ tx_fifo = (struct rt_can_tx_fifo*) can->can_tx;
+ RT_ASSERT(tx_fifo != RT_NULL);
+
+ rt_base_t level;
+ rt_uint32_t no;
+ rt_uint32_t result;
+ while (msgs)
+ {
+ no = data->priv;
+ if(no >= can->config.sndboxnumber) {
+ break;
+ }
+ level = rt_hw_interrupt_disable();
+ if((tx_fifo->buffer[no].result != RT_CAN__SND_RESUTL_OK)) {
+ rt_hw_interrupt_enable(level);
+ rt_completion_wait(&(tx_fifo->buffer[no].completion), RT_WAITING_FOREVER);
+ continue;
+ }
+ tx_fifo->buffer[no].result = RT_CAN__SND_RESUTL_WAIT;
+ rt_hw_interrupt_enable(level);
+ if (can->ops->sendmsg(can, data ,no) != RT_EOK)
+ {
+ continue;
+ }
+ can->status.sndchange = 1;
+ rt_completion_wait(&(tx_fifo->buffer[no].completion), RT_WAITING_FOREVER);
+ result = tx_fifo->buffer[no].result;
+ if(result == RT_CAN__SND_RESUTL_OK)
+ {
+ level = rt_hw_interrupt_disable();
+ can->status.sndpkg++;
+ rt_hw_interrupt_enable(level);
+ data ++; msgs -= sizeof(struct rt_can_msg);
+ if(!msgs) break;
+ }
+ else
+ {
+ level = rt_hw_interrupt_disable();
+ can->status.dropedsndpkg++;
+ rt_hw_interrupt_enable(level);
+ break;
+ }
+ }
+
+ return (size - msgs);
+}
+static rt_err_t rt_can_open(struct rt_device *dev, rt_uint16_t oflag)
+{
+ struct rt_can_device *can;
+
+ RT_ASSERT(dev != RT_NULL);
+ can = (struct rt_can_device *)dev;
+
+ /* get open flags */
+ dev->open_flag = oflag & 0xff;
+ rt_enter_critical();
+ if (can->can_rx == RT_NULL)
+ {
+ if (oflag & RT_DEVICE_FLAG_INT_RX)
+ {
+ struct rt_can_rx_fifo* rx_fifo;
+
+ rx_fifo = (struct rt_can_rx_fifo*) rt_malloc (sizeof(struct rt_can_rx_fifo) +
+ can->config.msgboxsz * sizeof(struct rt_can_msg_list));
+ RT_ASSERT(rx_fifo != RT_NULL);
+ rx_fifo->buffer = (struct rt_can_msg_list*) (rx_fifo + 1);
+ rt_memset(rx_fifo->buffer, 0, can->config.msgboxsz * sizeof(struct rt_can_msg_list));
+ rt_list_init(&rx_fifo->freelist);
+ rt_list_init(&rx_fifo->uselist);
+ rx_fifo->freenumbers=can->config.msgboxsz;
+ int i = 0;
+ for(i = 0; i< can->config.msgboxsz; i++)
+ {
+ rt_list_insert_before(&rx_fifo->freelist,&rx_fifo->buffer[i].list);
+#ifdef RT_CAN_USING_HDR
+ rt_list_init(&rx_fifo->buffer[i].hdrlist);
+ rx_fifo->buffer[i].owner = RT_NULL;
+#endif
+ }
+ can->can_rx = rx_fifo;
+ rt_exit_critical();
+ dev->open_flag |= RT_DEVICE_FLAG_INT_RX;
+ /* configure low level device */
+ can->ops->control(can, RT_DEVICE_CTRL_SET_INT, (void *)RT_DEVICE_FLAG_INT_RX);
+ }
+ else
+ {
+ can->can_rx = RT_NULL;
+ rt_exit_critical();
+ }
+ } else {
+ rt_exit_critical();
+ }
+ rt_enter_critical();
+ if (can->can_tx == RT_NULL)
+ {
+ if (oflag & RT_DEVICE_FLAG_INT_TX)
+ {
+ struct rt_can_tx_fifo *tx_fifo;
+
+ tx_fifo = (struct rt_can_tx_fifo*) rt_malloc(sizeof(struct rt_can_tx_fifo)+
+ can->config.sndboxnumber*sizeof(struct rt_can_sndbxinx_list));
+ RT_ASSERT(tx_fifo != RT_NULL);
+ tx_fifo->buffer = (struct rt_can_sndbxinx_list *) (tx_fifo + 1);
+ rt_memset(tx_fifo->buffer, 0,
+ can->config.sndboxnumber*sizeof(struct rt_can_sndbxinx_list));
+ rt_list_init(&tx_fifo->freelist);
+ int i = 0;
+ for(i = 0; i< can->config.sndboxnumber; i++)
+ {
+ rt_list_insert_before(&tx_fifo->freelist,&tx_fifo->buffer[i].list);
+ rt_completion_init(&(tx_fifo->buffer[i].completion));
+ tx_fifo->buffer[i].result = RT_CAN__SND_RESUTL_OK;
+ }
+ rt_completion_init(&(tx_fifo->completion));
+ can->can_tx = tx_fifo;
+ rt_exit_critical();
+ dev->open_flag |= RT_DEVICE_FLAG_INT_TX;
+ /* configure low level device */
+ can->ops->control(can, RT_DEVICE_CTRL_SET_INT, (void *)RT_DEVICE_FLAG_INT_TX);
+ }
+ else
+ {
+ can->can_tx = RT_NULL;
+ rt_exit_critical();
+ }
+ } else {
+ rt_exit_critical();
+ }
+ can->ops->control(can, RT_DEVICE_CTRL_SET_INT, (void *)RT_DEVICE_CAN_INT_ERR);
+#ifdef RT_CAN_USING_HDR
+ rt_enter_critical();
+ if(can->hdr == RT_NULL) {
+ struct rt_can_hdr * phdr;
+ phdr = (struct rt_can_hdr *) rt_malloc(can->config.maxhdr*sizeof(struct rt_can_hdr));
+ RT_ASSERT(phdr != RT_NULL);
+ rt_memset(phdr, 0,can->config.maxhdr*sizeof(struct rt_can_hdr));
+ int i = 0;
+ for(i = 0; i< can->config.maxhdr; i++)
+ {
+ rt_list_init(&phdr[i].list);
+ }
+ can->hdr = phdr;
+ rt_exit_critical();
+ } else {
+ rt_exit_critical();
+ }
+#endif
+ rt_enter_critical();
+ if(!can->timerinitflag) {
+ can->timerinitflag = 1;
+ rt_exit_critical();
+ #ifdef RT_CAN_USING_LED
+ if(can->config.rcvled != RT_NULL) {
+ rt_pin_mode(can->config.rcvled->pin,can->config.rcvled->mode);
+ rt_pin_write(can->config.rcvled->pin,can->config.rcvled->init);
+ }
+ if(can->config.sndled != RT_NULL) {
+ rt_pin_mode(can->config.sndled->pin,can->config.sndled->mode);
+ rt_pin_write(can->config.sndled->pin,can->config.sndled->init);
+ }
+ if(can->config.errled != RT_NULL) {
+ rt_pin_mode(can->config.errled->pin,can->config.errled->mode);
+ rt_pin_write(can->config.errled->pin,can->config.errled->init);
+ }
+ #endif
+ rt_timer_start(&can->timer);
+ } else {
+ rt_exit_critical();
+ }
+ return RT_EOK;
+}
+
+static rt_err_t rt_can_close(struct rt_device *dev)
+{
+ struct rt_can_device *can;
+
+ RT_ASSERT(dev != RT_NULL);
+ can = (struct rt_can_device *)dev;
+
+ /* this device has more reference count */
+ if (dev->ref_count > 1) return RT_EOK;
+ rt_enter_critical();
+ if(can->timerinitflag) {
+ can->timerinitflag = 0;
+ rt_exit_critical();
+ rt_timer_stop(&can->timer);
+ #ifdef RT_CAN_USING_LED
+ rt_pin_write(can->config.rcvled->pin,can->config.rcvled->init);
+ rt_pin_write(can->config.rcvled->pin,can->config.sndled->init);
+ rt_pin_write(can->config.rcvled->pin,can->config.errled->init);
+ #endif
+ } else {
+ rt_exit_critical();
+ }
+ rt_enter_critical();
+ can->status_indicate.ind = RT_NULL;
+ can->status_indicate.args = RT_NULL;
+ rt_exit_critical();
+#ifdef RT_CAN_USING_HDR
+ rt_enter_critical();
+ if(can->hdr != RT_NULL) {
+ rt_free(can->hdr);
+ can->hdr = RT_NULL;
+ rt_exit_critical();
+ } else {
+ rt_exit_critical();
+ }
+#endif
+ if (dev->open_flag & RT_DEVICE_FLAG_INT_RX)
+ {
+ struct rt_can_rx_fifo* rx_fifo;
+
+ rx_fifo = (struct rt_can_rx_fifo*)can->can_rx;
+ RT_ASSERT(rx_fifo != RT_NULL);
+
+ rt_free(rx_fifo);
+ dev->open_flag &= ~RT_DEVICE_FLAG_INT_RX;
+ /* configure low level device */
+ can->ops->control(can, RT_DEVICE_CTRL_CLR_INT, (void*)RT_DEVICE_FLAG_INT_TX);
+ }
+ if (dev->open_flag & RT_DEVICE_FLAG_INT_TX)
+ {
+ struct rt_can_tx_fifo* tx_fifo;
+
+ tx_fifo = (struct rt_can_tx_fifo*)can->can_rx;
+ RT_ASSERT(tx_fifo != RT_NULL);
+
+ rt_free(tx_fifo);
+ dev->open_flag &= ~RT_DEVICE_FLAG_INT_TX;
+ /* configure low level device */
+ can->ops->control(can, RT_DEVICE_CTRL_CLR_INT, (void*)RT_DEVICE_FLAG_INT_TX);
+ }
+ can->ops->control(can, RT_DEVICE_CTRL_CLR_INT, (void *)RT_DEVICE_CAN_INT_ERR);
+ return RT_EOK;
+}
+
+static rt_size_t rt_can_read(struct rt_device *dev,
+ rt_off_t pos,
+ void *buffer,
+ rt_size_t size)
+{
+ struct rt_can_device *can;
+
+ RT_ASSERT(dev != RT_NULL);
+ if (size == 0) return 0;
+
+ can = (struct rt_can_device *)dev;
+
+ if (dev->open_flag & RT_DEVICE_FLAG_INT_RX)
+ {
+ return _can_int_rx(can, buffer, size);
+ }
+ return 0;
+}
+
+static rt_size_t rt_can_write(struct rt_device *dev,
+ rt_off_t pos,
+ const void *buffer,
+ rt_size_t size)
+{
+ struct rt_can_device *can;
+
+ RT_ASSERT(dev != RT_NULL);
+ if (size == 0) return 0;
+
+ can = (struct rt_can_device *)dev;
+
+ if (dev->open_flag & RT_DEVICE_FLAG_INT_TX)
+ {
+ if(can->config.privmode) {
+ return _can_int_tx_priv(can, buffer, size);
+ } else {
+ return _can_int_tx(can, buffer, size);
+ }
+ }
+ return 0;
+}
+
+static rt_err_t rt_can_control(struct rt_device *dev,
+ rt_uint8_t cmd,
+ void *args)
+{
+ struct rt_can_device *can;
+ rt_err_t res;
+
+ RT_ASSERT(dev != RT_NULL);
+ can = (struct rt_can_device *)dev;
+
+ switch (cmd)
+ {
+ case RT_DEVICE_CTRL_SUSPEND:
+ /* suspend device */
+ dev->flag |= RT_DEVICE_FLAG_SUSPENDED;
+ break;
+
+ case RT_DEVICE_CTRL_RESUME:
+ /* resume device */
+ dev->flag &= ~RT_DEVICE_FLAG_SUSPENDED;
+ break;
+
+ case RT_DEVICE_CTRL_CONFIG:
+ /* configure device */
+ can->ops->configure(can, (struct can_configure *)args);
+ break;
+ case RT_CAN_CMD_SET_PRIV:
+ /* configure device */
+ if((rt_uint32_t)args != can->config.privmode) {
+ if(res = can->ops->control(can, cmd, args) != RT_EOK) {
+ return res;
+ }
+ struct rt_can_tx_fifo* tx_fifo;
+ tx_fifo = (struct rt_can_tx_fifo*) can->can_tx;
+ int i;
+ rt_base_t level;
+ if(can->config.privmode) {
+ rt_completion_done(&(tx_fifo->completion));
+ level = rt_hw_interrupt_disable();
+ for(i = 0; i< can->config.sndboxnumber; i++)
+ {
+ rt_list_remove(&tx_fifo->buffer[i].list);
+ }
+ rt_hw_interrupt_enable(level);
+ } else {
+ for(i = 0; i< can->config.sndboxnumber; i++)
+ {
+ rt_base_t level;
+ level = rt_hw_interrupt_disable();
+ if(tx_fifo->buffer[i].result == RT_CAN__SND_RESUTL_OK) {
+ rt_list_insert_before(&tx_fifo->freelist,&tx_fifo->buffer[i].list);
+ }
+ rt_hw_interrupt_enable(level);
+ }
+ }
+ return RT_EOK;
+ }
+ break;
+ case RT_CAN_CMD_SET_STATUS_IND:
+ can->status_indicate.ind = ((rt_can_status_ind_type_t)args)->ind;
+ can->status_indicate.args = ((rt_can_status_ind_type_t)args)->args;
+ break;
+#ifdef RT_CAN_USING_HDR
+ case RT_CAN_CMD_SET_FILTER:
+ res = can->ops->control(can, cmd, args);
+ if(res != RT_EOK || can->hdr == RT_NULL) {
+ return res;
+ }
+ {
+ struct rt_can_filter_config* pfilter;
+ struct rt_can_filter_item* pitem;
+ rt_uint32_t count;
+ rt_base_t level;
+ pfilter = (struct rt_can_filter_config*)args;
+ count = pfilter->count;
+ pitem = pfilter->items;
+ if(pfilter->actived) {
+ while(count) {
+ if(pitem->hdr >= can->config.maxhdr || pitem->hdr < 0) {
+ count--;
+ pitem++;
+ continue;
+ }
+ level = rt_hw_interrupt_disable();
+ if(!can->hdr[pitem->hdr].connected) {
+ rt_memcpy(&can->hdr[pitem->hdr].filter,pitem,
+ sizeof(struct rt_can_filter_item));
+ can->hdr[pitem->hdr].connected = 1;
+ can->hdr[pitem->hdr].msgs = 0;
+ rt_list_init(&can->hdr[pitem->hdr].list);
+ }
+ rt_hw_interrupt_enable(level);
+ count--;
+ pitem++;
+ }
+ } else {
+ while(count) {
+ if(pitem->hdr >= can->config.maxhdr || pitem->hdr < 0) {
+ count--;
+ pitem++;
+ continue;
+ }
+ level = rt_hw_interrupt_disable();
+ if(can->hdr[pitem->hdr].connected) {
+ rt_memset(&can->hdr[pitem->hdr].filter,0,
+ sizeof(struct rt_can_filter_item));
+ can->hdr[pitem->hdr].connected = 0;
+ can->hdr[pitem->hdr].msgs = 0;
+ if(!rt_list_isempty(&can->hdr[pitem->hdr].list))
+ {
+ rt_list_remove(can->hdr[pitem->hdr].list.next);
+ }
+ }
+ rt_hw_interrupt_enable(level);
+ count--;
+ pitem++;
+ }
+ }
+ }
+ break;
+#endif /*RT_CAN_USING_HDR*/
+ default :
+ /* control device */
+ if(can->ops->control != RT_NULL)
+ {
+ can->ops->control(can, cmd, args);
+ }
+ break;
+ }
+
+ return RT_EOK;
+}
+/*
+ * can timer
+ */
+static void cantimeout(void* arg)
+{
+ rt_uint32_t ledonflag = 0;
+ rt_can_t can = (rt_can_t)arg;
+ rt_device_control((rt_device_t)can,RT_CAN_CMD_GET_STATUS,(void* )&can->status);
+ if(can->timerinitflag == 1) {
+ ledonflag = 1;
+ can->timerinitflag = 0xFF;
+ }
+ #ifdef RT_CAN_USING_LED
+ if(can->config.rcvled != RT_NULL && can->config.sndled == RT_NULL) {
+ if(ledonflag == 1) {
+ rt_pin_write(can->config.rcvled->pin,can->config.rcvled->init?0:1);
+ } else {
+ if(can->status.rcvchange == 1 || can->status.sndchange == 1)
+ {
+ can->status.rcvchange = 0;
+ can->status.sndchange = 0;
+ rt_pin_write(can->config.rcvled->pin,rt_pin_read(can->config.rcvled->pin)?0:1);
+ } else {
+ rt_pin_write(can->config.rcvled->pin,can->config.rcvled->init);
+ }
+ }
+ } else if(can->config.rcvled != RT_NULL && can->config.sndled != RT_NULL) {
+ if(ledonflag == 1) {
+ rt_pin_write(can->config.rcvled->pin,can->config.rcvled->init?0:1);
+ rt_pin_write(can->config.sndled->pin,can->config.sndled->init?0:1);
+ } else {
+ if(can->status.rcvchange == 1)
+ {
+ can->status.rcvchange = 0;
+ rt_pin_write(can->config.rcvled->pin,rt_pin_read(can->config.rcvled->pin)?0:1);
+ } else {
+ rt_pin_write(can->config.rcvled->pin,can->config.rcvled->init);
+ }
+ if(can->status.sndchange == 1)
+ {
+ can->status.sndchange = 0;
+ rt_pin_write(can->config.sndled->pin,rt_pin_read(can->config.sndled->pin)?0:1);
+ } else {
+ rt_pin_write(can->config.sndled->pin,can->config.sndled->init);
+ }
+ }
+ } else if(can->config.rcvled == RT_NULL && can->config.sndled != RT_NULL) {
+ if(ledonflag == 1) {
+ rt_pin_write(can->config.sndled->pin,can->config.sndled->init?0:1);
+ } else {
+ if(can->status.rcvchange == 1 || can->status.sndchange == 1)
+ {
+ can->status.rcvchange = 0;
+ can->status.sndchange = 0;
+ rt_pin_write(can->config.sndled->pin,rt_pin_read(can->config.sndled->pin)?0:1);
+ } else {
+ rt_pin_write(can->config.sndled->pin,can->config.sndled->init);
+ }
+ }
+ }
+ if(ledonflag == 1) {
+ rt_pin_write(can->config.errled->pin,can->config.errled->init?0:1);
+ } else {
+ if(can->status.errcode) {
+ rt_pin_write(can->config.errled->pin,can->config.errled->init?0:1);
+ } else {
+ rt_pin_write(can->config.errled->pin,can->config.errled->init);
+ }
+ }
+ #endif
+ if(can->status_indicate.ind != RT_NULL)
+ {
+ can->status_indicate.ind(can,can->status_indicate.args);
+ }
+}
+
+/*
+ * can register
+ */
+rt_err_t rt_hw_can_register(struct rt_can_device *can,
+ const char *name,
+ const struct rt_can_ops *ops,
+ void *data)
+{
+ struct rt_device *device;
+ RT_ASSERT(can != RT_NULL);
+
+ device = &(can->parent);
+
+ device->type = RT_Device_Class_CAN;
+ device->rx_indicate = RT_NULL;
+ device->tx_complete = RT_NULL;
+#ifdef RT_CAN_USING_HDR
+ can->hdr = RT_NULL;
+#endif
+ can->can_rx = RT_NULL;
+ can->can_tx = RT_NULL;
+ device->init = rt_can_init;
+ device->open = rt_can_open;
+ device->close = rt_can_close;
+ device->read = rt_can_read;
+ device->write = rt_can_write;
+ device->control = rt_can_control;
+ can->ops = ops;
+
+ can->status_indicate.ind = RT_NULL;
+ can->status_indicate.args = RT_NULL;
+ rt_memset(&can->status,0,sizeof(can->status));
+
+ device->user_data = data;
+ can->timerinitflag = 0;
+ if(can->config.rcvled != RT_NULL ||
+ can->config.sndled != RT_NULL ||
+ can->config.errled != RT_NULL)
+ {
+ rt_timer_init(&can->timer,
+ name,
+ cantimeout,
+ (void*)can,
+ can->config.ticks,
+ RT_TIMER_FLAG_PERIODIC);
+ }
+ /* register a character device */
+ return rt_device_register(device, name, RT_DEVICE_FLAG_RDWR);
+}
+
+/* ISR for can interrupt */
+void rt_hw_can_isr(struct rt_can_device *can, int event)
+{
+ switch (event & 0xff)
+ {
+ case RT_CAN_EVENT_RXOF_IND:
+ {
+ rt_base_t level;
+ level = rt_hw_interrupt_disable();
+ can->status.dropedrcvpkg++;
+ rt_hw_interrupt_enable(level);
+ }
+ case RT_CAN_EVENT_RX_IND:
+ {
+ struct rt_can_msg tmpmsg;
+ struct rt_can_rx_fifo* rx_fifo;
+ struct rt_can_msg_list* listmsg=RT_NULL;
+#ifdef RT_CAN_USING_HDR
+ rt_int32_t hdr;
+#endif
+ int ch = -1;
+ rt_base_t level;
+ rx_fifo = (struct rt_can_rx_fifo*)can->can_rx;
+ RT_ASSERT(rx_fifo != RT_NULL);
+ /* interrupt mode receive */
+ RT_ASSERT(can->parent.open_flag & RT_DEVICE_FLAG_INT_RX);
+
+ rt_uint32_t no;
+ no = event >> 8;
+ ch = can->ops->recvmsg(can,&tmpmsg,no);
+ if (ch == -1) break;
+ /* disable interrupt */
+ level = rt_hw_interrupt_disable();
+ can->status.rcvpkg++;
+ can->status.rcvchange = 1;
+ if(!rt_list_isempty(&rx_fifo->freelist))
+ {
+ listmsg = rt_list_entry(rx_fifo->freelist.next, struct rt_can_msg_list, list);
+ rt_list_remove(&listmsg->list);
+#ifdef RT_CAN_USING_HDR
+ rt_list_remove(&listmsg->hdrlist);
+ if(listmsg->owner != RT_NULL && listmsg->owner->msgs) {
+ listmsg->owner->msgs--;
+ }
+ listmsg->owner = RT_NULL;
+#endif /*RT_CAN_USING_HDR*/
+ RT_ASSERT(rx_fifo->freenumbers >0);
+ rx_fifo->freenumbers--;
+ } else if(!rt_list_isempty(&rx_fifo->uselist)) {
+ listmsg = rt_list_entry(rx_fifo->uselist.next, struct rt_can_msg_list, list);
+ can->status.dropedrcvpkg++;
+ rt_list_remove(&listmsg->list);
+#ifdef RT_CAN_USING_HDR
+ rt_list_remove(&listmsg->hdrlist);
+ if(listmsg->owner != RT_NULL && listmsg->owner->msgs) {
+ listmsg->owner->msgs--;
+ }
+ listmsg->owner = RT_NULL;
+#endif
+ }
+ /* enable interrupt */
+ rt_hw_interrupt_enable(level);
+ if(listmsg != RT_NULL) {
+ rt_memcpy(&listmsg->data,&tmpmsg,sizeof(struct rt_can_msg));
+ level = rt_hw_interrupt_disable();
+ rt_list_insert_before(&rx_fifo->uselist,&listmsg->list);
+#ifdef RT_CAN_USING_HDR
+ hdr = tmpmsg.hdr;
+ if(can->hdr != RT_NULL) {
+ RT_ASSERT(hdr < can->config.maxhdr && hdr >= 0);
+ if(can->hdr[hdr].connected) {
+ rt_list_insert_before(&can->hdr[hdr].list,&listmsg->hdrlist);
+ listmsg->owner = &can->hdr[hdr];
+ can->hdr[hdr].msgs++;
+ }
+
+ }
+#endif
+ rt_hw_interrupt_enable(level);
+ }
+
+ /* invoke callback */
+#ifdef RT_CAN_USING_HDR
+ if(can->hdr != RT_NULL && can->hdr[hdr].connected && can->hdr[hdr].filter.ind) {
+ RT_ASSERT(hdr < can->config.maxhdr && hdr >= 0);
+ rt_size_t rx_length;
+ level = rt_hw_interrupt_disable();
+ rx_length = can->hdr[hdr].msgs * sizeof(struct rt_can_msg);
+ rt_hw_interrupt_enable(level);
+ can->hdr[hdr].filter.ind(&can->parent, can->hdr[hdr].filter.args, hdr, rx_length);
+
+ } else
+#endif
+ if (can->parent.rx_indicate != RT_NULL) {
+ rt_size_t rx_length;
+ /* get rx length */
+ level = rt_hw_interrupt_disable();
+ rx_length = rx_fifo->freenumbers*sizeof(struct rt_can_msg);
+ rt_hw_interrupt_enable(level);
+
+ can->parent.rx_indicate(&can->parent, rx_length);
+ }
+ break;
+ }
+ case RT_CAN_EVENT_TX_DONE:
+ case RT_CAN_EVENT_TX_FAIL:
+ {
+ struct rt_can_tx_fifo* tx_fifo;
+ rt_uint32_t no;
+ no = event >> 8;
+ tx_fifo = (struct rt_can_tx_fifo*) can->can_tx;
+ RT_ASSERT(tx_fifo != RT_NULL);
+ if((event & 0xff) == RT_CAN_EVENT_TX_DONE) {
+ tx_fifo->buffer[no].result = RT_CAN__SND_RESUTL_OK;
+ } else {
+ tx_fifo->buffer[no].result = RT_CAN__SND_RESUTL_ERR;
+ }
+ rt_completion_done(&(tx_fifo->buffer[no].completion));
+ break;
+ }
+ }
+}
+#ifdef RT_USING_FINSH
+#include <finsh.h>
+int cmd_canstat(int argc,void** argv)
+{
+ static const char* ErrCode[] = {
+ "No Error!",
+ "Warning !",
+ "Passive !",
+ "Bus Off !"
+ };
+ if(argc >= 2) {
+ rt_device_t candev = rt_device_find(argv[1]);
+ if(!candev) {
+ rt_kprintf(" Can't find can device %s\n",argv[1]);
+ return -1;
+ }
+ rt_kprintf(" Finded can device: %s...",argv[1]);
+ struct rt_can_status status;
+ rt_device_control(candev,RT_CAN_CMD_GET_STATUS,&status);
+ rt_kprintf("\n Receive...error..count: %010ld. Send.....error....count: %010ld.",
+ status.rcverrcnt,status.snderrcnt);
+ rt_kprintf("\n Bit..pad..error..count: %010ld. Format...error....count: %010ld",
+ status.bitpaderrcnt,status.formaterrcnt);
+ rt_kprintf("\n Ack.......error..count: %010ld. Bit......error....count: %010ld.",
+ status.ackerrcnt,status.biterrcnt);
+ rt_kprintf("\n CRC.......error..count: %010ld. Error.code.[%010ld]: ",
+ status.crcerrcnt,status.errcode);
+ switch(status.errcode) {
+ case 0:
+ rt_kprintf("%s.",ErrCode[0]);
+ break;
+ case 1:
+ rt_kprintf("%s.",ErrCode[1]);
+ break;
+ case 2:
+ case 3:
+ rt_kprintf("%s.",ErrCode[2]);
+ break;
+ case 4:
+ case 5:
+ case 6:
+ case 7:
+ rt_kprintf("%s.",ErrCode[3]);
+ break;
+ }
+ rt_kprintf("\n Total.receive.packages: %010ld. Droped.receive.packages: %010ld.",
+ status.rcvpkg,status.dropedrcvpkg);
+ rt_kprintf("\n Total..send...packages: %010ld. Droped...send..packages: %010ld.\n",
+ status.sndpkg + status.dropedsndpkg,status.dropedsndpkg);
+ } else {
+ rt_kprintf(" Invalid Call %s\n",argv[0]);
+ rt_kprintf(" Please using %s cannamex .Here canname is driver name and x is candrive number.\n",argv[0]);
+ }
+ return 0;
+}
+FINSH_FUNCTION_EXPORT_ALIAS(cmd_canstat, __cmd_canstat, Stat Can Device Status.);
+#endif
diff --git a/components/drivers/can/readme-zh.txt b/components/drivers/can/readme-zh.txt
new file mode 100644
index 0000000000..3eb63d155f
--- /dev/null
+++ b/components/drivers/can/readme-zh.txt
@@ -0,0 +1,132 @@
+说明:
+本驱动完成了can控制器硬件抽象
+一 CAN Driver 注册
+ Can driver注册需要填充以下几个数据结构:
+ 1、struct can_configure
+ {
+ rt_uint32_t baud_rate;
+ rt_uint32_t msgboxsz;
+ rt_uint32_t sndboxnumber;
+ rt_uint32_t mode :8;
+ rt_uint32_t privmode :8;
+ rt_uint32_t reserved :16;
+ #ifdef RT_CAN_USING_LED
+ const struct rt_can_led* rcvled;
+ const struct rt_can_led* sndled;
+ const struct rt_can_led* errled;
+ #endif /*RT_CAN_USING_LED*/
+ rt_uint32_t ticks;
+ #ifdef RT_CAN_USING_HDR
+ rt_uint32_t maxhdr;
+ #endif
+ };
+ struct can_configure 为can驱动的基本配置信息:
+ baud_rate :
+ enum CANBAUD
+ {
+ CAN1MBaud=0, // 1 MBit/sec
+ CAN800kBaud, // 800 kBit/sec
+ CAN500kBaud, // 500 kBit/sec
+ CAN250kBaud, // 250 kBit/sec
+ CAN125kBaud, // 125 kBit/sec
+ CAN100kBaud, // 100 kBit/sec
+ CAN50kBaud, // 50 kBit/sec
+ CAN20kBaud, // 20 kBit/sec
+ CAN10kBaud // 10 kBit/sec
+ };
+ 配置Can的波特率。
+ msgboxsz : Can接收邮箱缓冲数量,本驱动在软件层开辟msgboxsz个接收邮箱。
+ sndboxnumber : can 发送通道数量,该配置为Can控制器实际的发送通道数量。
+ mode :
+ #define RT_CAN_MODE_NORMAL 0 正常模式
+ #define RT_CAN_MODE_LISEN 1 只听模式
+ #define RT_CAN_MODE_LOOPBACK 2 自发自收模式
+ #define RT_CAN_MODE_LOOPBACKANLISEN 3 自发自收只听模式
+ 配置Can 的工作状态。
+ privmode :
+ #define RT_CAN_MODE_PRIV 0x01 处于优先级模式,高优先级的消息优先发送。
+ #define RT_CAN_MODE_NOPRIV 0x00
+ 配置Can driver的优先级模式。
+ #ifdef RT_CAN_USING_LED
+ const struct rt_can_led* rcvled;
+ const struct rt_can_led* sndled;
+ const struct rt_can_led* errled;
+ #endif /*RT_CAN_USING_LED*/
+ 配置can led信息, 当前can驱动的led使用了 pin驱动,
+ 开启RT_CAN_USING_LED时要确保当前系统已实现pin驱动。
+ rt_uint32_t ticks : 配置Can driver timer周期。
+ #ifdef RT_CAN_USING_HDR
+ rt_uint32_t maxhdr;
+ #endif
+ 如果使用硬件过滤,则开启RT_CAN_USING_HDR, maxhdr 为Can控制器过滤表的数量。
+ 2、struct rt_can_ops
+ {
+ rt_err_t (*configure)(struct rt_can_device *can, struct can_configure *cfg);
+ rt_err_t (*control)(struct rt_can_device *can, int cmd, void *arg);
+ int (*sendmsg)(struct rt_can_device *can, const void* buf, rt_uint32_t boxno);
+ int (*recvmsg)(struct rt_can_device *can,void* buf, rt_uint32_t boxno);
+ };
+ struct rt_can_ops 为要实现的特定的can控制器操作。
+ rt_err_t (*configure)(struct rt_can_device *can, struct can_configure *cfg);
+ configure根据配置信息初始化Can控制器工作模式。
+ rt_err_t (*control)(struct rt_can_device *can, int cmd, void *arg);
+ control 当前接受以下cmd参数:
+ #define RT_CAN_CMD_SET_FILTER 0x13
+ #define RT_CAN_CMD_SET_BAUD 0x14
+ #define RT_CAN_CMD_SET_MODE 0x15
+ #define RT_CAN_CMD_SET_PRIV 0x16
+ #define RT_CAN_CMD_GET_STATUS 0x17
+ #define RT_CAN_CMD_SET_STATUS_IND 0x18
+ int (*sendmsg)(struct rt_can_device *can, const void* buf, rt_uint32_t boxno);
+ sendmsg向Can控制器发送数,boxno为发送通道号。
+ int (*recvmsg)(struct rt_can_device *can,void* buf, rt_uint32_t boxno);
+ recvmsg从Can控制器接收数据,boxno为接收通道号。
+ struct rt_can_device
+ {
+ struct rt_device parent;
+
+ const struct rt_can_ops *ops;
+ struct can_configure config;
+ struct rt_can_status status;
+ rt_uint32_t timerinitflag;
+ struct rt_timer timer;
+ struct rt_can_status_ind_type status_indicate;
+ #ifdef RT_CAN_USING_HDR
+ struct rt_can_hdr* hdr;
+ #endif
+ void *can_rx;
+ void *can_tx;
+ };
+ 填充完成后,便可调用rt_hw_can_register完成can驱动的注册。
+二、 CAN Driver 的添加:
+ 要添加一个新的Can驱动,至少要完成以下接口。
+ 1、struct rt_can_ops
+ {
+ rt_err_t (*configure)(struct rt_can_device *can, struct can_configure *cfg);
+ rt_err_t (*control)(struct rt_can_device *can, int cmd, void *arg);
+ int (*sendmsg)(struct rt_can_device *can, const void* buf, rt_uint32_t boxno);
+ int (*recvmsg)(struct rt_can_device *can,void* buf, rt_uint32_t boxno);
+ };
+ 2、 rt_err_t (*control)(struct rt_can_device *can, int cmd, void *arg);
+ 接口的
+ #define RT_CAN_CMD_SET_FILTER 0x13
+ #define RT_CAN_CMD_SET_BAUD 0x14
+ #define RT_CAN_CMD_SET_MODE 0x15
+ #define RT_CAN_CMD_SET_PRIV 0x16
+ #define RT_CAN_CMD_GET_STATUS 0x17
+ #define RT_CAN_CMD_SET_STATUS_IND 0x18
+ 若干命令。
+ 3、can口中断,要完接收,发送结束,以及错误中断。
+ #define RT_CAN_EVENT_RX_IND 0x01 /* Rx indication */
+ #define RT_CAN_EVENT_TX_DONE 0x02 /* Tx complete */
+ #define RT_CAN_EVENT_TX_FAIL 0x03 /* Tx complete */
+ #define RT_CAN_EVENT_RX_TIMEOUT 0x05 /* Rx timeout */
+ #define RT_CAN_EVENT_RXOF_IND 0x06 /* Rx overflow */
+ 中断产生后,调用rt_hw_can_isr(struct rt_can_device *can, int event)
+ 进入相应的操作,其中接收发送中断的event,最低8位为上面的事件,16到24位为通信通道号。
+ 一个作为一个例子,参见bsp/stm32f10x/driver下的bxcan.c 。
+三、CAN Driver的使用:
+ 一个使用的例子,参数bsp/stm32f10x/applications下的canapp.c
+四、当前Can驱动,没有实现轮模式,采用中断模式,bxcan驱动工作在loopback模式下的时候不能读数据。
+
+五、当前Can驱动,在stm32f105上测试,暂无问题。
diff --git a/components/drivers/include/drivers/can.h b/components/drivers/include/drivers/can.h
new file mode 100644
index 0000000000..3a24162f03
--- /dev/null
+++ b/components/drivers/include/drivers/can.h
@@ -0,0 +1,293 @@
+/*
+ * File : can.h
+ * This file is part of RT-Thread RTOS
+ * COPYRIGHT (C) 2015, 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
+ * 2015-05-14 [email protected] first version
+ */
+#ifndef CAN_H_
+#define CAN_H_
+
+#ifndef RT_CANMSG_BOX_SZ
+#define RT_CANMSG_BOX_SZ 16
+#endif
+#ifndef RT_CANSND_BOX_NUM
+#define RT_CANSND_BOX_NUM 1
+#endif
+
+enum CANBAUD
+{
+ CAN1MBaud=0, // 1 MBit/sec
+ CAN800kBaud, // 800 kBit/sec
+ CAN500kBaud, // 500 kBit/sec
+ CAN250kBaud, // 250 kBit/sec
+ CAN125kBaud, // 125 kBit/sec
+ CAN100kBaud, // 100 kBit/sec
+ CAN50kBaud, // 50 kBit/sec
+ CAN20kBaud, // 20 kBit/sec
+ CAN10kBaud // 10 kBit/sec
+};
+#define RT_CAN_MODE_NORMAL 0
+#define RT_CAN_MODE_LISEN 1
+#define RT_CAN_MODE_LOOPBACK 2
+#define RT_CAN_MODE_LOOPBACKANLISEN 3
+
+#define RT_CAN_MODE_PRIV 0x01
+#define RT_CAN_MODE_NOPRIV 0x00
+
+#ifdef RT_CAN_USING_LED
+struct rt_can_led
+{
+ rt_uint32_t pin,mode,init;
+ struct rt_timer* timer;
+ const char* timer_name;
+};
+#endif /*RT_CAN_USING_LED*/
+
+struct rt_can_filter_item
+{
+ rt_uint32_t id :29;
+ rt_uint32_t ide :1;
+ rt_uint32_t rtr :1;
+ rt_uint32_t mode :1;
+ rt_uint32_t mask;
+ rt_int32_t hdr;
+ rt_err_t (*ind)(rt_device_t dev, void* args ,rt_int32_t hdr, rt_size_t size);
+ void* args;
+};
+#ifdef RT_CAN_USING_HDR
+#define RT_CAN_FILTER_ITEM_INIT(id,ide,rtr,mode,mask,ind,args) \
+ {\
+ id,\
+ ide,\
+ rtr,\
+ mode,\
+ mask,\
+ -1,\
+ ind,\
+ args,\
+ }
+#define RT_CAN_FILTER_STD_INIT(id,ind,args) \
+ RT_CAN_FILTER_ITEM_INIT(id,0,0,0,0xFFFFFFFF,ind,args)
+#define RT_CAN_FILTER_EXT_INIT(id,ind,args) \
+ RT_CAN_FILTER_ITEM_INIT(id,1,0,0,0xFFFFFFFF,ind,args)
+#define RT_CAN_STD_RMT_FILTER_INIT(id,ind,args) \
+ RT_CAN_FILTER_ITEM_INIT(id,0,1,0,0xFFFFFFFF,ind,args)
+#define RT_CAN_EXT_RMT_FILTER_INIT(id,ind,args) \
+ RT_CAN_FILTER_ITEM_INIT(id,1,1,0,0xFFFFFFFF,ind,args)
+#define RT_CAN_STD_RMT_DATA_FILTER_INIT(id,ind,args) \
+ RT_CAN_FILTER_ITEM_INIT(id,0,0,1,0xFFFFFFFF,ind,args)
+#define RT_CAN_EXT_RMT_DATA_FILTER_INIT(id,ind,args) \
+ RT_CAN_FILTER_ITEM_INIT(id,1,0,1,0xFFFFFFFF,ind,args)
+#else
+#define RT_CAN_FILTER_ITEM_INIT(id,ide,rtr,mode,mask,args) \
+ {\
+ id,\
+ ide,\
+ rtr,\
+ mode,\
+ mask,\
+ -1,\
+ args,\
+ }
+#define RT_CAN_FILTER_STD_INIT(id,args) \
+ RT_CAN_FILTER_ITEM_INIT(id,0,0,0,0xFFFFFFFF,args)
+#define RT_CAN_FILTER_EXT_INIT(id,args) \
+ RT_CAN_FILTER_ITEM_INIT(id,1,0,0,0xFFFFFFFF,args)
+#define RT_CAN_STD_RMT_FILTER_INIT(id,args) \
+ RT_CAN_FILTER_ITEM_INIT(id,0,1,0,0xFFFFFFFF,args)
+#define RT_CAN_EXT_RMT_FILTER_INIT(id,args) \
+ RT_CAN_FILTER_ITEM_INIT(id,1,1,0,0xFFFFFFFF,args)
+#define RT_CAN_STD_RMT_DATA_FILTER_INIT(id,args) \
+ RT_CAN_FILTER_ITEM_INIT(id,0,0,1,0xFFFFFFFF,args)
+#define RT_CAN_EXT_RMT_DATA_FILTER_INIT(id,args) \
+ RT_CAN_FILTER_ITEM_INIT(id,1,0,1,0xFFFFFFFF,args)
+#endif
+
+struct rt_can_filter_config
+{
+ rt_uint32_t count;
+ rt_uint32_t actived;
+ struct rt_can_filter_item* items;
+};
+struct can_configure
+{
+ rt_uint32_t baud_rate;
+ rt_uint32_t msgboxsz;
+ rt_uint32_t sndboxnumber;
+ rt_uint32_t mode :8;
+ rt_uint32_t privmode :8;
+ rt_uint32_t reserved :16;
+ #ifdef RT_CAN_USING_LED
+ const struct rt_can_led* rcvled;
+ const struct rt_can_led* sndled;
+ const struct rt_can_led* errled;
+ #endif /*RT_CAN_USING_LED*/
+ rt_uint32_t ticks;
+#ifdef RT_CAN_USING_HDR
+ rt_uint32_t maxhdr;
+#endif
+};
+
+#define CANDEFAULTCONFIG \
+{\
+ CAN1MBaud,\
+ RT_CANMSG_BOX_SZ,\
+ RT_CANSND_BOX_NUM,\
+ RT_CAN_MODE_NORMAL,\
+};
+
+struct rt_can_ops;
+#define RT_CAN_CMD_SET_FILTER 0x13
+#define RT_CAN_CMD_SET_BAUD 0x14
+#define RT_CAN_CMD_SET_MODE 0x15
+#define RT_CAN_CMD_SET_PRIV 0x16
+#define RT_CAN_CMD_GET_STATUS 0x17
+#define RT_CAN_CMD_SET_STATUS_IND 0x18
+
+#define RT_DEVICE_CAN_INT_ERR 0x1000
+
+enum RT_CAN_STATUS_MODE
+{
+ NORMAL = 0,
+ ERRWARNING = 1,
+ ERRPASSIVE = 2,
+ BUSOFF = 4,
+};
+enum RT_CAN_BUS_ERR
+{
+ RT_CAN_BUS_NO_ERR = 0,
+ RT_CAN_BUS_BIT_PAD_ERR = 1,
+ RT_CAN_BUS_FORMAT_ERR = 2,
+ RT_CAN_BUS_ACK_ERR = 3,
+ RT_CAN_BUS_IMPLICIT_BIT_ERR = 4,
+ RT_CAN_BUS_EXPLICIT_BIT_ERR = 5,
+ RT_CAN_BUS_CRC_ERR = 6,
+};
+struct rt_can_status
+{
+ rt_uint32_t rcverrcnt;
+ rt_uint32_t snderrcnt;
+ rt_uint32_t errcode;
+ rt_uint32_t rcvpkg;
+ rt_uint32_t dropedrcvpkg;
+ rt_uint32_t sndpkg;
+ rt_uint32_t dropedsndpkg;
+ rt_uint32_t bitpaderrcnt;
+ rt_uint32_t formaterrcnt;
+ rt_uint32_t ackerrcnt;
+ rt_uint32_t biterrcnt;
+ rt_uint32_t crcerrcnt;
+ rt_uint32_t rcvchange;
+ rt_uint32_t sndchange;
+ rt_uint32_t lasterrtype;
+};
+#ifdef RT_CAN_USING_HDR
+struct rt_can_hdr {
+ rt_uint32_t connected;
+ rt_uint32_t msgs;
+ struct rt_can_filter_item filter;
+ struct rt_list_node list;
+};
+#endif
+struct rt_can_device;
+typedef rt_err_t (*rt_canstatus_ind)(struct rt_can_device*, void*);
+typedef struct rt_can_status_ind_type
+{
+ rt_canstatus_ind ind;
+ void* args;
+} *rt_can_status_ind_type_t;
+struct rt_can_device
+{
+ struct rt_device parent;
+
+ const struct rt_can_ops *ops;
+ struct can_configure config;
+ struct rt_can_status status;
+ rt_uint32_t timerinitflag;
+ struct rt_timer timer;
+ struct rt_can_status_ind_type status_indicate;
+#ifdef RT_CAN_USING_HDR
+ struct rt_can_hdr* hdr;
+#endif
+ void *can_rx;
+ void *can_tx;
+};
+typedef struct rt_can_device *rt_can_t;
+
+#define RT_CAN_STDID 0
+#define RT_CAN_EXTID 1
+#define RT_CAN_DTR 0
+#define RT_CAN_RTR 1
+
+typedef struct rt_can_status * rt_can_status_t;
+struct rt_can_msg
+{
+ rt_uint32_t id :29;
+ rt_uint32_t ide :1;
+ rt_uint32_t rtr :1;
+ rt_uint32_t rsv :1;
+ rt_uint32_t len :8;
+ rt_uint32_t priv :8;
+ rt_uint32_t hdr :8;
+ rt_uint32_t reserved :8;
+ rt_uint8_t data[8];
+};
+typedef struct rt_can_msg* rt_can_msg_t;
+struct rt_can_msg_list {
+ struct rt_list_node list;
+#ifdef RT_CAN_USING_HDR
+ struct rt_list_node hdrlist;
+ struct rt_can_hdr* owner;
+#endif
+ struct rt_can_msg data;
+};
+struct rt_can_rx_fifo
+{
+ /* software fifo */
+ struct rt_can_msg_list *buffer;
+ rt_uint32_t freenumbers;
+ struct rt_list_node freelist;
+ struct rt_list_node uselist;
+};
+
+#define RT_CAN__SND_RESUTL_OK 0
+#define RT_CAN__SND_RESUTL_ERR 1
+#define RT_CAN__SND_RESUTL_WAIT 2
+
+#define RT_CAN_EVENT_RX_IND 0x01 /* Rx indication */
+#define RT_CAN_EVENT_TX_DONE 0x02 /* Tx complete */
+#define RT_CAN_EVENT_TX_FAIL 0x03 /* Tx complete */
+#define RT_CAN_EVENT_RX_TIMEOUT 0x05 /* Rx timeout */
+#define RT_CAN_EVENT_RXOF_IND 0x06 /* Rx overflow */
+
+struct rt_can_sndbxinx_list {
+ struct rt_list_node list;
+ struct rt_completion completion;
+ rt_uint32_t result;
+};
+struct rt_can_tx_fifo
+{
+ struct rt_can_sndbxinx_list *buffer;
+ struct rt_completion completion;
+ struct rt_list_node freelist;
+};
+struct rt_can_ops
+{
+ rt_err_t (*configure)(struct rt_can_device *can, struct can_configure *cfg);
+ rt_err_t (*control)(struct rt_can_device *can, int cmd, void *arg);
+ int (*sendmsg)(struct rt_can_device *can, const void* buf, rt_uint32_t boxno);
+ int (*recvmsg)(struct rt_can_device *can,void* buf, rt_uint32_t boxno);
+};
+rt_err_t rt_hw_can_register(struct rt_can_device *can,
+ const char *name,
+ const struct rt_can_ops *ops,
+ void *data);
+void rt_hw_can_isr(struct rt_can_device *can, int event);
+#endif /*_CAN_H*/
diff --git a/components/drivers/include/rtdevice.h b/components/drivers/include/rtdevice.h
index 5d74ed6199..f4d967831c 100644
--- a/components/drivers/include/rtdevice.h
+++ b/components/drivers/include/rtdevice.h
@@ -366,6 +366,10 @@ rt_inline void rt_work_init(struct rt_work* work, void (*work_func)(struct rt_wo
#include "drivers/pin.h"
#endif
+#ifdef RT_USING_CAN
+#include "drivers/can.h"
+#endif
+
#ifdef __cplusplus
}
#endif
diff --git a/components/drivers/spi/spi_flash_w25qxx.c b/components/drivers/spi/spi_flash_w25qxx.c
index bdcdbd83c1..6e002c38c8 100644
--- a/components/drivers/spi/spi_flash_w25qxx.c
+++ b/components/drivers/spi/spi_flash_w25qxx.c
@@ -13,6 +13,7 @@
* 2012-05-06 aozima can page write.
* 2012-08-23 aozima add flash lock.
* 2012-08-24 aozima fixed write status register BUG.
+ * 2015-05-13 bernard add GD25Q flash ID.
*/
#include <stdint.h>
@@ -28,8 +29,10 @@
#define PAGE_SIZE 4096
-/* JEDEC Manufacturer��s ID */
+/* JEDEC Manufacturer��s ID */
#define MF_ID (0xEF)
+#define GD_ID (0xC8)
+
/* JEDEC Device ID: Memory type and Capacity */
#define MTC_W25Q16_BV_CL_CV (0x4015) /* W25Q16BV W25Q16CL W25Q16CV */
#define MTC_W25Q16_DW (0x6015) /* W25Q16DW */
@@ -297,7 +300,7 @@ rt_err_t w25qxx_init(const char * flash_device_name, const char * spi_device_nam
flash_unlock(&spi_flash_device);
- if(id_recv[0] != MF_ID)
+ if(id_recv[0] != MF_ID && id_recv[0] != GD_ID)
{
FLASH_TRACE("Manufacturers ID error!\r\n");
FLASH_TRACE("JEDEC Read-ID Data : %02X %02X %02X\r\n", id_recv[0], id_recv[1], id_recv[2]);
diff --git a/components/net/lwip/apps/ftpd.c b/components/net/lwip/apps/ftpd.c
index af48237e42..df1609fe1d 100644
--- a/components/net/lwip/apps/ftpd.c
+++ b/components/net/lwip/apps/ftpd.c
@@ -11,17 +11,24 @@
#define FTP_MAX_CONNECTION 2
#define FTP_USER "rtt"
#define FTP_PASSWORD "demo"
-#define FTP_WELCOME_MSG "220-= welcome on RT-Thread FTP server =-\r\n220 \r\n"
+#define FTP_WELCOME_MSG "220 welcome on RT-Thread FTP server.\r\n"
#define FTP_BUFFER_SIZE 1024
+#define INET_ADDRSTRLEN 16
+
+
struct ftp_session
{
rt_bool_t is_anonymous;
int sockfd;
struct sockaddr_in remote;
+ struct sockaddr_in server;
+
+ char serveraddr[INET_ADDRSTRLEN];
/* pasv data */
+ int pasv_listen_sockfd;
char pasv_active;
int pasv_sockfd;
@@ -43,6 +50,7 @@ struct ftp_session* ftp_new_session()
struct ftp_session* session;
session = (struct ftp_session*)rt_malloc(sizeof(struct ftp_session));
+ rt_memset((void *)session, 0, sizeof(struct ftp_session));
session->next = session_list;
session_list = session;
@@ -71,6 +79,83 @@ void ftp_close_session(struct ftp_session* session)
rt_free(session);
}
+static int open_data_connection(struct ftp_session* session)
+{
+ socklen_t len = sizeof(struct sockaddr);
+ struct sockaddr_in sin;
+#if 0
+ /* Previous PORT command from client */
+ if (ctrl->data_address[0]) {
+ ctrl->data_sd = socket(AF_INET, SOCK_STREAM, 0);
+ if (-1 == ctrl->data_sd) {
+ printf("Failed creating data socket");
+ return -1;
+ }
+
+ memset(&sin, 0, sizeof(sin));
+ sin.sin_family = AF_INET;
+ sin.sin_port = htons(ctrl->data_port);
+ inet_aton(ctrl->data_address, &(sin.sin_addr));
+
+ if (connect(ctrl->data_sd, (struct sockaddr *)&sin, len) == -1) {
+ printf("Failed connecting data socket to client");
+ close(ctrl->data_sd);
+ ctrl->data_sd = -1;
+
+ return -1;
+ }
+
+ DBG("Connected successfully to client's previously requested address:PORT %s:%d", ctrl->data_address, ctrl->data_port);
+ return 0;
+ }
+#endif
+ /* Previous PASV command, accept connect from client */
+ if (session->pasv_listen_sockfd > 0) {
+ char client_ip[100];
+
+ session->pasv_sockfd = accept(session->pasv_listen_sockfd, (struct sockaddr *)&sin, &len);
+ if (-1 == session->pasv_sockfd) {
+ printf("Failed accepting connection from client");
+ return -1;
+ }
+
+ len = sizeof(struct sockaddr);
+ if (-1 == getpeername(session->pasv_sockfd, (struct sockaddr *)&sin, &len)) {
+ printf("Cannot determine client address");
+ closesocket(session->pasv_sockfd);
+ session->pasv_sockfd = -1;
+ return -1;
+ }
+
+ printf("Client PASV data connection from %s\n", inet_ntoa(sin.sin_addr));
+ }
+
+ return 0;
+}
+
+static void close_data_connection(struct ftp_session* session)
+{
+ /* PASV server listening socket */
+ if (session->pasv_listen_sockfd > 0) {
+ closesocket(session->pasv_listen_sockfd);
+ session->pasv_listen_sockfd = -1;
+ }
+
+ /* PASV client socket */
+ if (session->pasv_sockfd > 0) {
+ closesocket(session->pasv_sockfd);
+ session->pasv_sockfd = -1;
+ }
+#if 0
+ /* PORT */
+ if (ctrl->data_address[0]) {
+ ctrl->data_address[0] = 0;
+ ctrl->data_port = 0;
+ }
+#endif
+}
+
+
int ftp_get_filesize(char * filename)
{
int pos;
@@ -179,6 +264,10 @@ void ftpd_thread_entry(void* parameter)
session = ftp_new_session();
if (session != NULL)
{
+ if (-1 == getsockname(com_socket, (struct sockaddr *)&session->server, &addr_len)) {
+ printf("Cannot determine our address, need it if client should connect to us\n");
+ }
+ ipaddr_ntoa_r(&(session->server.sin_addr), session->serveraddr, sizeof(session->serveraddr));
strcpy(session->currentdir, FTP_SRV_ROOT);
session->sockfd = com_socket;
session->remote = remote;
@@ -201,6 +290,7 @@ void ftpd_thread_entry(void* parameter)
rt_kprintf("Client %s disconnected\n", inet_ntoa(session->remote.sin_addr));
FD_CLR(session->sockfd, &readfds);
closesocket(session->sockfd);
+ session->sockfd = -1;
ftp_close_session(session);
}
else
@@ -210,6 +300,7 @@ void ftpd_thread_entry(void* parameter)
{
rt_kprintf("Client %s disconnected\r\n", inet_ntoa(session->remote.sin_addr));
closesocket(session->sockfd);
+ session->sockfd = -1;
ftp_close_session(session);
}
}
@@ -359,7 +450,7 @@ int ftp_process_request(struct ftp_session* session, char *buf)
}
else if (strcmp(parameter_ptr, FTP_USER) == 0)
{
- session->is_anonymous = RT_FALSE;
+ session->is_anonymous = RT_FALSE;
rt_sprintf(sbuf, "331 Password required for %s\r\n", parameter_ptr);
send(session->sockfd, sbuf, strlen(sbuf), 0);
}
@@ -380,25 +471,26 @@ int ftp_process_request(struct ftp_session* session, char *buf)
session->is_anonymous == RT_TRUE)
{
// password correct
- rt_sprintf(sbuf, "230 User logged in\r\n");
+ rt_sprintf(sbuf, "230 User logged in.\r\n");
send(session->sockfd, sbuf, strlen(sbuf), 0);
- rt_free(sbuf);
+ rt_free(sbuf);
return 0;
}
// incorrect password
rt_sprintf(sbuf, "530 Login or Password incorrect. Bye!\r\n");
send(session->sockfd, sbuf, strlen(sbuf), 0);
- rt_free(sbuf);
+ rt_free(sbuf);
return -1;
}
else if(str_begin_with(buf, "LIST")==0 )
{
memset(sbuf,0,FTP_BUFFER_SIZE);
+ open_data_connection(session);
rt_sprintf(sbuf, "150 Opening Binary mode connection for file list.\r\n");
send(session->sockfd, sbuf, strlen(sbuf), 0);
do_list(session->currentdir, session->pasv_sockfd);
- closesocket(session->pasv_sockfd);
+ close_data_connection(session);
session->pasv_active = 0;
rt_sprintf(sbuf, "226 Transfert Complete.\r\n");
send(session->sockfd, sbuf, strlen(sbuf), 0);
@@ -408,8 +500,9 @@ int ftp_process_request(struct ftp_session* session, char *buf)
memset(sbuf, 0, FTP_BUFFER_SIZE);
rt_sprintf(sbuf, "150 Opening Binary mode connection for file list.\r\n");
send(session->sockfd, sbuf, strlen(sbuf), 0);
+ open_data_connection(session);
do_simple_list(session->currentdir, session->pasv_sockfd);
- closesocket(session->pasv_sockfd);
+ close_data_connection(session);
session->pasv_active = 0;
rt_sprintf(sbuf, "226 Transfert Complete.\r\n");
send(session->sockfd, sbuf, strlen(sbuf), 0);
@@ -436,8 +529,20 @@ int ftp_process_request(struct ftp_session* session, char *buf)
else if(str_begin_with(buf, "PASV")==0)
{
int dig1, dig2;
- int sockfd;
- char optval='1';
+ //int sockfd;
+ int optval=1;
+ int port;
+ struct sockaddr_in data;
+ socklen_t len = sizeof(struct sockaddr);
+ char *msg, *p;
+
+ if (session->pasv_sockfd > 0) {
+ closesocket(session->pasv_sockfd);
+ session->pasv_sockfd = -1;
+ }
+
+ if (session->pasv_listen_sockfd > 0)
+ closesocket(session->pasv_listen_sockfd);
session->pasv_port = 10000;
session->pasv_active = 1;
@@ -448,40 +553,63 @@ int ftp_process_request(struct ftp_session* session, char *buf)
dig2 = session->pasv_port % 256;
FD_ZERO(&readfds);
- if((sockfd=socket(PF_INET, SOCK_STREAM, 0))==-1)
+ if((session->pasv_listen_sockfd=socket(PF_INET, SOCK_STREAM, 0))==-1)
{
- rt_sprintf(sbuf, "425 Can't open data connection.\r\n");
+ rt_sprintf(sbuf, "425 Can't open data connection0.\r\n");
send(session->sockfd, sbuf, strlen(sbuf), 0);
goto err1;
}
- if(setsockopt(sockfd, SOL_SOCKET, SO_REUSEADDR, &optval, sizeof(optval))==-1)
+ if(setsockopt(session->pasv_listen_sockfd, SOL_SOCKET, SO_REUSEADDR, &optval, sizeof(optval))==-1)
{
- rt_sprintf(sbuf, "425 Can't open data connection.\r\n");
+ rt_sprintf(sbuf, "425 Can't open data connection1.\r\n");
send(session->sockfd, sbuf, strlen(sbuf), 0);
goto err1;
}
- if(bind(sockfd, (struct sockaddr *)&local, addr_len)==-1)
+ if(bind(session->pasv_listen_sockfd, (struct sockaddr *)&local, addr_len)==-1)
{
- rt_sprintf(sbuf, "425 Can't open data connection.\r\n");
+ rt_sprintf(sbuf, "425 Can't open data connection2.\r\n");
send(session->sockfd, sbuf, strlen(sbuf), 0);
goto err1;
}
- if(listen(sockfd, 1)==-1)
+ if(listen(session->pasv_listen_sockfd, 1)==-1)
{
- rt_sprintf(sbuf, "425 Can't open data connection.\r\n");
+ rt_sprintf(sbuf, "425 Can't open data connection3.\r\n");
+ send(session->sockfd, sbuf, strlen(sbuf), 0);
+ goto err1;
+ }
+ if (-1 == getsockname(session->pasv_listen_sockfd, (struct sockaddr *)&data, &len)) {
+ rt_kprintf("Cannot determine our address, need it if client should connect to us\n");
+ goto err1;
+ }
+
+ port = ntohs(data.sin_port);
+ rt_kprintf("Port %d\n", port);
+
+ /* Convert server IP address and port to comma separated list */
+ msg = strdup(session->serveraddr);
+ if (!msg) {
+ rt_sprintf(sbuf, "426 Internal server error.\r\n");
send(session->sockfd, sbuf, strlen(sbuf), 0);
goto err1;
}
+ p = msg;
+ while ((p = strchr(p, '.')))
+ *p++ = ',';
+
rt_kprintf("Listening %d seconds @ port %d\n", tv.tv_sec, session->pasv_port);
- rt_sprintf(sbuf, "227 Entering passive mode (%d,%d,%d,%d,%d,%d)\r\n", 127, 0, 0, 1, dig1, dig2);
+ rt_sprintf(sbuf, "227 Entering passive mode (%s,%d,%d)\r\n", msg, port / 256, port % 256);
send(session->sockfd, sbuf, strlen(sbuf), 0);
+ rt_free(sbuf);
+ rt_free(msg);
+ return 0;
+ #if 0
FD_SET(sockfd, &readfds);
select(0, &readfds, 0, 0, &tv);
if(FD_ISSET(sockfd, &readfds))
{
if((session->pasv_sockfd = accept(sockfd, (struct sockaddr*)&pasvremote, &addr_len))==-1)
{
- rt_sprintf(sbuf, "425 Can't open data connection.\r\n");
+ rt_sprintf(sbuf, "425 Can't open data connection4.\r\n");
send(session->sockfd, sbuf, strlen(sbuf), 0);
goto err1;
}
@@ -500,11 +628,21 @@ err1:
rt_free(sbuf);
return 0;
}
+ #endif
+err1:
+ close_data_connection(session);
+ session->pasv_active = 0;
+ rt_free(sbuf);
+ rt_free(msg);
+ return 0;
+
}
else if (str_begin_with(buf, "RETR")==0)
{
int file_size;
+ open_data_connection(session);
+
strcpy(filename, buf + 5);
build_full_path(session, parameter_ptr, filename, 256);
@@ -514,13 +652,15 @@ err1:
rt_sprintf(sbuf, "550 \"%s\" : not a regular file\r\n", filename);
send(session->sockfd, sbuf, strlen(sbuf), 0);
session->offset=0;
- rt_free(sbuf);
+ close_data_connection(session);
+ rt_free(sbuf);
return 0;
}
fd = open(filename, O_RDONLY, 0);
if (fd < 0)
{
+ close_data_connection(session);
rt_free(sbuf);
return 0;
}
@@ -543,14 +683,16 @@ err1:
rt_sprintf(sbuf, "226 Finished.\r\n");
send(session->sockfd, sbuf, strlen(sbuf), 0);
close(fd);
- closesocket(session->pasv_sockfd);
+ close_data_connection(session);
}
else if (str_begin_with(buf, "STOR")==0)
{
+ open_data_connection(session);
if(session->is_anonymous == RT_TRUE)
{
rt_sprintf(sbuf, "550 Permission denied.\r\n");
send(session->sockfd, sbuf, strlen(sbuf), 0);
+ close_data_connection(session);
rt_free(sbuf);
return 0;
}
@@ -562,6 +704,7 @@ err1:
{
rt_sprintf(sbuf, "550 Cannot open \"%s\" for writing.\r\n", filename);
send(session->sockfd, sbuf, strlen(sbuf), 0);
+ close_data_connection(session);
rt_free(sbuf);
return 0;
}
@@ -579,7 +722,7 @@ err1:
else if(numbytes==0)
{
close(fd);
- closesocket(session->pasv_sockfd);
+ close_data_connection(session);
rt_sprintf(sbuf, "226 Finished.\r\n");
send(session->sockfd, sbuf, strlen(sbuf), 0);
break;
@@ -587,12 +730,12 @@ err1:
else if(numbytes==-1)
{
close(fd);
- closesocket(session->pasv_sockfd);
+ close_data_connection(session);
rt_free(sbuf);
return -1;
}
}
- closesocket(session->pasv_sockfd);
+ close_data_connection(session);
}
else if(str_begin_with(buf, "SIZE")==0)
{
@@ -659,7 +802,7 @@ err1:
send(session->sockfd, sbuf, strlen(sbuf), 0);
closesocket(session->pasv_sockfd);
session->pasv_active = 0;
- rt_free(sbuf);
+ rt_free(sbuf);
return 0;
}
pasvremote.sin_addr.s_addr=inet_addr(tmpip);
@@ -674,7 +817,7 @@ err1:
rt_sprintf(sbuf, "425 Can't open data connection.\r\n");
send(session->sockfd, sbuf, strlen(sbuf), 0);
closesocket(session->pasv_sockfd);
- rt_free(sbuf);
+ rt_free(sbuf);
return 0;
}
}
@@ -697,9 +840,9 @@ err1:
{
if (session->is_anonymous == RT_TRUE)
{
- rt_sprintf(sbuf, "550 Permission denied.\r\n");
+ rt_sprintf(sbuf, "530 Permission denied.\r\n");
send(session->sockfd, sbuf, strlen(sbuf), 0);
- rt_free(sbuf);
+ rt_free(sbuf);
return 0;
}
@@ -720,7 +863,7 @@ err1:
{
if (session->is_anonymous == RT_TRUE)
{
- rt_sprintf(sbuf, "550 Permission denied.\r\n");
+ rt_sprintf(sbuf, "530 Permission denied.\r\n");
send(session->sockfd, sbuf, strlen(sbuf), 0);
rt_free(sbuf);
return 0;
@@ -740,9 +883,9 @@ err1:
{
if (session->is_anonymous == RT_TRUE)
{
- rt_sprintf(sbuf, "550 Permission denied.\r\n");
+ rt_sprintf(sbuf, "530 Permission denied.\r\n");
send(session->sockfd, sbuf, strlen(sbuf), 0);
- rt_free(sbuf);
+ rt_free(sbuf);
return 0;
}
build_full_path(session, parameter_ptr, filename, 256);
@@ -758,12 +901,53 @@ err1:
send(session->sockfd, sbuf, strlen(sbuf), 0);
}
}
-
+ else if(str_begin_with(buf, "RNFR")==0)
+ {
+ if (session->is_anonymous == RT_TRUE)
+ {
+ rt_sprintf(sbuf, "530 Permission denied.\r\n");
+ send(session->sockfd, sbuf, strlen(sbuf), 0);
+ rt_free(sbuf);
+ return 0;
+ }
+ build_full_path(session, parameter_ptr, filename, 256);
+
+ rt_sprintf(sbuf, "350 Successfully rececive old file \"%s\".\r\n", filename);
+ send(session->sockfd, sbuf, strlen(sbuf), 0);
+ }
+ else if(str_begin_with(buf, "RNTO")==0)
+ {
+ char new_filename[256];
+ if (session->is_anonymous == RT_TRUE)
+ {
+ rt_sprintf(sbuf, "530 Permission denied.\r\n");
+ send(session->sockfd, sbuf, strlen(sbuf), 0);
+ rt_free(sbuf);
+ return 0;
+ }
+ build_full_path(session, parameter_ptr, new_filename, 256);
+
+ if(rename(filename, new_filename) == -1)
+ {
+ rt_sprintf(sbuf, "553 rename file \"%s\" error.\r\n", filename);
+ send(session->sockfd, sbuf, strlen(sbuf), 0);
+ }
+ else
+ {
+ rt_sprintf(sbuf, "250 Successfully rename to new file \"%s\".\r\n", filename);
+ send(session->sockfd, sbuf, strlen(sbuf), 0);
+ }
+ }
+ else if((str_begin_with(buf, "NOOP")==0) || str_begin_with(buf, "noop")==0)
+ {
+ rt_sprintf(sbuf, "200 noop!\r\n");
+ send(session->sockfd, sbuf, strlen(sbuf), 0);
+ }
else if(str_begin_with(buf, "QUIT")==0)
{
rt_sprintf(sbuf, "221 Bye!\r\n");
send(session->sockfd, sbuf, strlen(sbuf), 0);
- rt_free(sbuf);
+ rt_free(sbuf);
return -1;
}
else
@@ -771,7 +955,7 @@ err1:
rt_sprintf(sbuf, "502 Not Implemented.\r\n");
send(session->sockfd, sbuf, strlen(sbuf), 0);
}
- rt_free(sbuf);
+ rt_free(sbuf);
return 0;
}
@@ -787,5 +971,15 @@ void ftpd_start()
#ifdef RT_USING_FINSH
#include <finsh.h>
-FINSH_FUNCTION_EXPORT(ftpd_start, start ftp server)
+FINSH_FUNCTION_EXPORT(ftpd_start, start ftp server);
+
+#ifdef FINSH_USING_MSH
+int cmd_ftpd_start(int argc, char** argv)
+{
+ ftpd_start();
+ return 0;
+}
+FINSH_FUNCTION_EXPORT_ALIAS(cmd_ftpd_start, __cmd_ftpd_start, start ftp server.);
+#endif
+
#endif
diff --git a/components/net/lwip_dhcpd/dhcp_server.c b/components/net/lwip_dhcpd/dhcp_server.c
index 47547a598b..cb3fc0f464 100644
--- a/components/net/lwip_dhcpd/dhcp_server.c
+++ b/components/net/lwip_dhcpd/dhcp_server.c
@@ -376,13 +376,24 @@ static void dhcpd_thread_entry(void *parameter)
void dhcpd_start(char* netif_name)
{
rt_thread_t thread;
- struct netif *netif = RT_NULL;
+ struct netif *netif = netif_list;
- /* find ethernet interface. */
- netif = netif_find(netif_name);
- if (netif == RT_NULL)
+ if(strlen(netif_name) > sizeof(netif->name))
+ {
+ rt_kprintf("network interface name too long!\r\n");
+ return;
+ }
+ while(netif != RT_NULL)
{
- DEBUG_PRINTF("Not found network interface:%s\n", netif_name);
+ if(strncmp(netif_name, netif->name, sizeof(netif->name)) == 0)
+ break;
+
+ netif = netif->next;
+ if( netif == RT_NULL )
+ {
+ rt_kprintf("network interface: %s not found!\r\n", netif_name);
+ return;
+ }
}
thread = rt_thread_create("dhcpd",
diff --git a/libcpu/arm/am335x/mmu.c b/libcpu/arm/am335x/mmu.c
index 46f2d6afd7..d3e505e76a 100644
--- a/libcpu/arm/am335x/mmu.c
+++ b/libcpu/arm/am335x/mmu.c
@@ -15,7 +15,7 @@
#include <rtthread.h>
#include "am33xx.h"
-#define DESC_SEC (0x2|(1<<4))
+#define DESC_SEC (0x2)
#define CB (3<<2) //cache_on, write_back
#define CNB (2<<2) //cache_on, write_through
#define NCB (1<<2) //cache_off,WR_BUF on
diff --git a/libcpu/arm/cortex-m0/context_rvds.S b/libcpu/arm/cortex-m0/context_rvds.S
index 89ac029282..bf68592e63 100644
--- a/libcpu/arm/cortex-m0/context_rvds.S
+++ b/libcpu/arm/cortex-m0/context_rvds.S
@@ -183,13 +183,11 @@ rt_hw_context_switch_to PROC
LDR r0, =NVIC_INT_CTRL
LDR r1, =NVIC_PENDSVSET
STR r1, [r0]
- NOP
; restore MSP
LDR r0, =SCB_VTOR
LDR r0, [r0]
LDR r0, [r0]
- NOP
MSR msp, r0
; enable interrupts at processor level
@@ -216,4 +214,6 @@ HardFault_Handler PROC
POP {pc}
ENDP
+ ALIGN 4
+
END
diff --git a/libcpu/arm/cortex-m3/context_rvds.S b/libcpu/arm/cortex-m3/context_rvds.S
index 33fcd124d9..ebfd5c8da8 100644
--- a/libcpu/arm/cortex-m3/context_rvds.S
+++ b/libcpu/arm/cortex-m3/context_rvds.S
@@ -177,7 +177,6 @@ rt_hw_context_switch_to PROC
rt_hw_interrupt_thread_switch PROC
EXPORT rt_hw_interrupt_thread_switch
BX lr
- NOP
ENDP
IMPORT rt_hw_hard_fault_exception
@@ -203,5 +202,6 @@ HardFault_Handler PROC
BX lr
ENDP
- NOP
- END \ No newline at end of file
+ ALIGN 4
+
+ END
diff --git a/libcpu/arm/cortex-m4/context_rvds.S b/libcpu/arm/cortex-m4/context_rvds.S
index af7461fd49..d7cb34d5c3 100644
--- a/libcpu/arm/cortex-m4/context_rvds.S
+++ b/libcpu/arm/cortex-m4/context_rvds.S
@@ -218,7 +218,6 @@ rt_hw_context_switch_to PROC
rt_hw_interrupt_thread_switch PROC
EXPORT rt_hw_interrupt_thread_switch
BX lr
- NOP
ENDP
IMPORT rt_hw_hard_fault_exception
@@ -235,4 +234,6 @@ HardFault_Handler PROC
BX lr
ENDP
+ ALIGN 4
+
END
diff --git a/tools/buildbot.py b/tools/buildbot.py
index b782dc6028..0567d84fd8 100644
--- a/tools/buildbot.py
+++ b/tools/buildbot.py
@@ -19,6 +19,17 @@ elif sys.argv[1] == 'clean':
command = ' -c'
elif sys.argv[1] == 'project':
command = ' --target=mdk -s'
+
+ projects = os.listdir(BSP_ROOT)
+ for item in projects:
+ project_dir = os.path.join(BSP_ROOT, item)
+
+ if os.path.isfile(os.path.join(project_dir, 'template.uvproj')):
+ print ('prepare MDK project file on ' + project_dir)
+
+ os.system('scons --directory=' + project_dir + command)
+
+ sys.exit(0)
else:
usage()
sys.exit(0)