Browse Source

[serial] 优化dma接收处理流程,解耦驱动调用串口框架的API接口

chenjh 3 years ago
parent
commit
fac3c5cda1

+ 21 - 21
bsp/stm32/libraries/HAL_Drivers/drv_usart_v2.c

@@ -342,37 +342,42 @@ static void dma_recv_isr(struct rt_serial_device *serial, rt_uint8_t isr_flag)
 {
 {
     struct stm32_uart *uart;
     struct stm32_uart *uart;
     rt_base_t level;
     rt_base_t level;
-    rt_uint16_t recv_len = 0;
+    rt_size_t recv_len, counter;
 
 
     RT_ASSERT(serial != RT_NULL);
     RT_ASSERT(serial != RT_NULL);
     uart = rt_container_of(serial, struct stm32_uart, serial);
     uart = rt_container_of(serial, struct stm32_uart, serial);
 
 
-    struct rt_serial_rx_fifo *rx_fifo;
-    rx_fifo = (struct rt_serial_rx_fifo *) serial->serial_rx;
-    RT_ASSERT(rx_fifo != RT_NULL);
-
     level = rt_hw_interrupt_disable();
     level = rt_hw_interrupt_disable();
-    rt_uint16_t index = __HAL_DMA_GET_COUNTER(&(uart->dma_rx.handle));
+    recv_len = 0;
+    counter = __HAL_DMA_GET_COUNTER(&(uart->dma_rx.handle));
+
     switch (isr_flag)
     switch (isr_flag)
     {
     {
-
-    case UART_RX_DMA_IT_TC_FLAG:
-        if(index >= uart->dma_rx.remaining_cnt)
-            recv_len = serial->config.rx_bufsz + uart->dma_rx.remaining_cnt - index;
+    case UART_RX_DMA_IT_IDLE_FLAG:
+        if (counter <= uart->dma_rx.remaining_cnt)
+            recv_len = uart->dma_rx.remaining_cnt - counter;
+        else
+            recv_len = serial->config.rx_bufsz + uart->dma_rx.remaining_cnt - counter;
         break;
         break;
 
 
     case UART_RX_DMA_IT_HT_FLAG:
     case UART_RX_DMA_IT_HT_FLAG:
-    case UART_RX_DMA_IT_IDLE_FLAG:
-        if(index < uart->dma_rx.remaining_cnt)
-            recv_len = uart->dma_rx.remaining_cnt - index;
+        if (counter < uart->dma_rx.remaining_cnt)
+            recv_len = uart->dma_rx.remaining_cnt - counter;
         break;
         break;
 
 
+    case UART_RX_DMA_IT_TC_FLAG:
+        if(counter >= uart->dma_rx.remaining_cnt)
+            recv_len = serial->config.rx_bufsz + uart->dma_rx.remaining_cnt - counter;
+
     default:
     default:
         break;
         break;
     }
     }
 
 
-    uart->dma_rx.remaining_cnt = index;
-    rt_serial_update_write_index(&(rx_fifo->rb), recv_len);
+    if (recv_len)
+    {
+        uart->dma_rx.remaining_cnt = counter;
+        rt_hw_serial_isr(serial, RT_SERIAL_EVENT_RX_DMADONE | (recv_len << 8));
+    }
     rt_hw_interrupt_enable(level);
     rt_hw_interrupt_enable(level);
 
 
 }
 }
@@ -444,7 +449,6 @@ static void uart_isr(struct rt_serial_device *serial)
              && (__HAL_UART_GET_IT_SOURCE(&(uart->handle), UART_IT_IDLE) != RESET))
              && (__HAL_UART_GET_IT_SOURCE(&(uart->handle), UART_IT_IDLE) != RESET))
     {
     {
         dma_recv_isr(serial, UART_RX_DMA_IT_IDLE_FLAG);
         dma_recv_isr(serial, UART_RX_DMA_IT_IDLE_FLAG);
-        rt_hw_serial_isr(serial, RT_SERIAL_EVENT_RX_IND);
         __HAL_UART_CLEAR_IDLEFLAG(&uart->handle);
         __HAL_UART_CLEAR_IDLEFLAG(&uart->handle);
     }
     }
 #endif
 #endif
@@ -1051,9 +1055,7 @@ void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
     struct stm32_uart *uart;
     struct stm32_uart *uart;
     RT_ASSERT(huart != NULL);
     RT_ASSERT(huart != NULL);
     uart = (struct stm32_uart *)huart;
     uart = (struct stm32_uart *)huart;
-
     dma_recv_isr(&uart->serial, UART_RX_DMA_IT_TC_FLAG);
     dma_recv_isr(&uart->serial, UART_RX_DMA_IT_TC_FLAG);
-    rt_hw_serial_isr(&uart->serial, RT_SERIAL_EVENT_RX_DMADONE);
 }
 }
 
 
 /**
 /**
@@ -1068,15 +1070,13 @@ void HAL_UART_RxHalfCpltCallback(UART_HandleTypeDef *huart)
     struct stm32_uart *uart;
     struct stm32_uart *uart;
     RT_ASSERT(huart != NULL);
     RT_ASSERT(huart != NULL);
     uart = (struct stm32_uart *)huart;
     uart = (struct stm32_uart *)huart;
-
     dma_recv_isr(&uart->serial, UART_RX_DMA_IT_HT_FLAG);
     dma_recv_isr(&uart->serial, UART_RX_DMA_IT_HT_FLAG);
-    rt_hw_serial_isr(&uart->serial, RT_SERIAL_EVENT_RX_DMADONE);
 }
 }
 
 
 /**
 /**
   * @brief  HAL_UART_TxCpltCallback
   * @brief  HAL_UART_TxCpltCallback
   * @param  huart: UART handle
   * @param  huart: UART handle
-  * @note   This callback can be called by two functions, first in UART_EndTransmit_IT when 
+  * @note   This callback can be called by two functions, first in UART_EndTransmit_IT when
   *         UART Tx complete and second in UART_DMATransmitCplt function in DMA Circular mode.
   *         UART Tx complete and second in UART_DMATransmitCplt function in DMA Circular mode.
   * @retval None
   * @retval None
   */
   */

+ 1 - 15
bsp/stm32/stm32l475-atk-pandora/.config

@@ -197,21 +197,7 @@ CONFIG_RT_USING_PIN=y
 # CONFIG_RT_USING_RYM is not set
 # CONFIG_RT_USING_RYM is not set
 # CONFIG_RT_USING_ULOG is not set
 # CONFIG_RT_USING_ULOG is not set
 # CONFIG_RT_USING_UTEST is not set
 # CONFIG_RT_USING_UTEST is not set
-CONFIG_RT_USING_RT_LINK=y
-CONFIG_RT_LINK_USING_SF_CRC=y
-# CONFIG_RT_LINK_USING_HW_CRC is not set
-
-#
-# rt-link hardware device configuration
-#
-CONFIG_RT_LINK_HW_DEVICE_NAME="uart2"
-CONFIG_RT_LINK_USING_UART=y
-
-#
-# rt link debug option
-#
-# CONFIG_USING_RT_LINK_DEBUG is not set
-# CONFIG_USING_RT_LINK_HW_DEBUG is not set
+# CONFIG_RT_USING_RT_LINK is not set
 # CONFIG_RT_USING_LWP is not set
 # CONFIG_RT_USING_LWP is not set
 
 
 #
 #

+ 136 - 244
bsp/stm32/stm32l475-atk-pandora/project.uvprojx

@@ -1,7 +1,10 @@
 <?xml version="1.0" encoding="UTF-8" standalone="no" ?>
 <?xml version="1.0" encoding="UTF-8" standalone="no" ?>
 <Project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="project_projx.xsd">
 <Project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="project_projx.xsd">
+
   <SchemaVersion>2.1</SchemaVersion>
   <SchemaVersion>2.1</SchemaVersion>
+
   <Header>### uVision Project, (C) Keil Software</Header>
   <Header>### uVision Project, (C) Keil Software</Header>
+
   <Targets>
   <Targets>
     <Target>
     <Target>
       <TargetName>rt-thread</TargetName>
       <TargetName>rt-thread</TargetName>
@@ -13,31 +16,31 @@
         <TargetCommonOption>
         <TargetCommonOption>
           <Device>STM32L475VETx</Device>
           <Device>STM32L475VETx</Device>
           <Vendor>STMicroelectronics</Vendor>
           <Vendor>STMicroelectronics</Vendor>
-          <PackID>Keil.STM32L4xx_DFP.2.0.0</PackID>
+          <PackID>Keil.STM32L4xx_DFP.2.2.0</PackID>
           <PackURL>http://www.keil.com/pack</PackURL>
           <PackURL>http://www.keil.com/pack</PackURL>
           <Cpu>IRAM(0x20000000,0x00018000) IRAM2(0x10000000,0x00008000) IROM(0x08000000,0x00080000) CPUTYPE("Cortex-M4") FPU2 CLOCK(12000000) ELITTLE</Cpu>
           <Cpu>IRAM(0x20000000,0x00018000) IRAM2(0x10000000,0x00008000) IROM(0x08000000,0x00080000) CPUTYPE("Cortex-M4") FPU2 CLOCK(12000000) ELITTLE</Cpu>
-          <FlashUtilSpec />
-          <StartupFile />
+          <FlashUtilSpec></FlashUtilSpec>
+          <StartupFile></StartupFile>
           <FlashDriverDll>UL2CM3(-S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0STM32L4xx_512 -FS08000000 -FL080000 -FP0($$Device:STM32L475VETx$CMSIS\Flash\STM32L4xx_512.FLM))</FlashDriverDll>
           <FlashDriverDll>UL2CM3(-S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0STM32L4xx_512 -FS08000000 -FL080000 -FP0($$Device:STM32L475VETx$CMSIS\Flash\STM32L4xx_512.FLM))</FlashDriverDll>
           <DeviceId>0</DeviceId>
           <DeviceId>0</DeviceId>
           <RegisterFile>$$Device:STM32L475VETx$Drivers\CMSIS\Device\ST\STM32L4xx\Include\stm32l4xx.h</RegisterFile>
           <RegisterFile>$$Device:STM32L475VETx$Drivers\CMSIS\Device\ST\STM32L4xx\Include\stm32l4xx.h</RegisterFile>
-          <MemoryEnv />
-          <Cmp />
-          <Asm />
-          <Linker />
-          <OHString />
-          <InfinionOptionDll />
-          <SLE66CMisc />
-          <SLE66AMisc />
-          <SLE66LinkerMisc />
+          <MemoryEnv></MemoryEnv>
+          <Cmp></Cmp>
+          <Asm></Asm>
+          <Linker></Linker>
+          <OHString></OHString>
+          <InfinionOptionDll></InfinionOptionDll>
+          <SLE66CMisc></SLE66CMisc>
+          <SLE66AMisc></SLE66AMisc>
+          <SLE66LinkerMisc></SLE66LinkerMisc>
           <SFDFile>$$Device:STM32L475VETx$CMSIS\SVD\STM32L4x5.svd</SFDFile>
           <SFDFile>$$Device:STM32L475VETx$CMSIS\SVD\STM32L4x5.svd</SFDFile>
           <bCustSvd>0</bCustSvd>
           <bCustSvd>0</bCustSvd>
           <UseEnv>0</UseEnv>
           <UseEnv>0</UseEnv>
-          <BinPath />
-          <IncludePath />
-          <LibPath />
-          <RegisterFilePath />
-          <DBRegisterFilePath />
+          <BinPath></BinPath>
+          <IncludePath></IncludePath>
+          <LibPath></LibPath>
+          <RegisterFilePath></RegisterFilePath>
+          <DBRegisterFilePath></DBRegisterFilePath>
           <TargetStatus>
           <TargetStatus>
             <Error>0</Error>
             <Error>0</Error>
             <ExitCodeStop>0</ExitCodeStop>
             <ExitCodeStop>0</ExitCodeStop>
@@ -59,8 +62,8 @@
           <BeforeCompile>
           <BeforeCompile>
             <RunUserProg1>0</RunUserProg1>
             <RunUserProg1>0</RunUserProg1>
             <RunUserProg2>0</RunUserProg2>
             <RunUserProg2>0</RunUserProg2>
-            <UserProg1Name />
-            <UserProg2Name />
+            <UserProg1Name></UserProg1Name>
+            <UserProg2Name></UserProg2Name>
             <UserProg1Dos16Mode>0</UserProg1Dos16Mode>
             <UserProg1Dos16Mode>0</UserProg1Dos16Mode>
             <UserProg2Dos16Mode>0</UserProg2Dos16Mode>
             <UserProg2Dos16Mode>0</UserProg2Dos16Mode>
             <nStopU1X>0</nStopU1X>
             <nStopU1X>0</nStopU1X>
@@ -69,8 +72,8 @@
           <BeforeMake>
           <BeforeMake>
             <RunUserProg1>0</RunUserProg1>
             <RunUserProg1>0</RunUserProg1>
             <RunUserProg2>0</RunUserProg2>
             <RunUserProg2>0</RunUserProg2>
-            <UserProg1Name />
-            <UserProg2Name />
+            <UserProg1Name></UserProg1Name>
+            <UserProg2Name></UserProg2Name>
             <UserProg1Dos16Mode>0</UserProg1Dos16Mode>
             <UserProg1Dos16Mode>0</UserProg1Dos16Mode>
             <UserProg2Dos16Mode>0</UserProg2Dos16Mode>
             <UserProg2Dos16Mode>0</UserProg2Dos16Mode>
             <nStopB1X>0</nStopB1X>
             <nStopB1X>0</nStopB1X>
@@ -80,14 +83,14 @@
             <RunUserProg1>1</RunUserProg1>
             <RunUserProg1>1</RunUserProg1>
             <RunUserProg2>0</RunUserProg2>
             <RunUserProg2>0</RunUserProg2>
             <UserProg1Name>fromelf --bin !L --output rtthread.bin</UserProg1Name>
             <UserProg1Name>fromelf --bin !L --output rtthread.bin</UserProg1Name>
-            <UserProg2Name />
+            <UserProg2Name></UserProg2Name>
             <UserProg1Dos16Mode>0</UserProg1Dos16Mode>
             <UserProg1Dos16Mode>0</UserProg1Dos16Mode>
             <UserProg2Dos16Mode>0</UserProg2Dos16Mode>
             <UserProg2Dos16Mode>0</UserProg2Dos16Mode>
             <nStopA1X>0</nStopA1X>
             <nStopA1X>0</nStopA1X>
             <nStopA2X>0</nStopA2X>
             <nStopA2X>0</nStopA2X>
           </AfterMake>
           </AfterMake>
           <SelectedForBatchBuild>0</SelectedForBatchBuild>
           <SelectedForBatchBuild>0</SelectedForBatchBuild>
-          <SVCSIdString />
+          <SVCSIdString></SVCSIdString>
         </TargetCommonOption>
         </TargetCommonOption>
         <CommonProperty>
         <CommonProperty>
           <UseCPPCompiler>0</UseCPPCompiler>
           <UseCPPCompiler>0</UseCPPCompiler>
@@ -101,8 +104,8 @@
           <AssembleAssemblyFile>0</AssembleAssemblyFile>
           <AssembleAssemblyFile>0</AssembleAssemblyFile>
           <PublicsOnly>0</PublicsOnly>
           <PublicsOnly>0</PublicsOnly>
           <StopOnExitCode>3</StopOnExitCode>
           <StopOnExitCode>3</StopOnExitCode>
-          <CustomArgument />
-          <IncludeLibraryModules />
+          <CustomArgument></CustomArgument>
+          <IncludeLibraryModules></IncludeLibraryModules>
           <ComprImg>1</ComprImg>
           <ComprImg>1</ComprImg>
         </CommonProperty>
         </CommonProperty>
         <DllOption>
         <DllOption>
@@ -136,10 +139,10 @@
           <bUseTDR>1</bUseTDR>
           <bUseTDR>1</bUseTDR>
           <Flash2>BIN\UL2CM3.DLL</Flash2>
           <Flash2>BIN\UL2CM3.DLL</Flash2>
           <Flash3>"" ()</Flash3>
           <Flash3>"" ()</Flash3>
-          <Flash4 />
-          <pFcarmOut />
-          <pFcarmGrp />
-          <pFcArmRoot />
+          <Flash4></Flash4>
+          <pFcarmOut></pFcarmOut>
+          <pFcarmGrp></pFcarmGrp>
+          <pFcArmRoot></pFcArmRoot>
           <FcArmLst>0</FcArmLst>
           <FcArmLst>0</FcArmLst>
         </Utilities>
         </Utilities>
         <TargetArmAds>
         <TargetArmAds>
@@ -172,7 +175,7 @@
             <RvctClst>0</RvctClst>
             <RvctClst>0</RvctClst>
             <GenPPlst>0</GenPPlst>
             <GenPPlst>0</GenPPlst>
             <AdsCpuType>"Cortex-M4"</AdsCpuType>
             <AdsCpuType>"Cortex-M4"</AdsCpuType>
-            <RvctDeviceName />
+            <RvctDeviceName></RvctDeviceName>
             <mOS>0</mOS>
             <mOS>0</mOS>
             <uocRom>0</uocRom>
             <uocRom>0</uocRom>
             <uocRam>0</uocRam>
             <uocRam>0</uocRam>
@@ -181,6 +184,7 @@
             <hadXRAM>0</hadXRAM>
             <hadXRAM>0</hadXRAM>
             <uocXRam>0</uocXRam>
             <uocXRam>0</uocXRam>
             <RvdsVP>2</RvdsVP>
             <RvdsVP>2</RvdsVP>
+            <RvdsMve>0</RvdsMve>
             <hadIRAM2>1</hadIRAM2>
             <hadIRAM2>1</hadIRAM2>
             <hadIROM2>0</hadIROM2>
             <hadIROM2>0</hadIROM2>
             <StupSel>8</StupSel>
             <StupSel>8</StupSel>
@@ -304,7 +308,7 @@
                 <Size>0x8000</Size>
                 <Size>0x8000</Size>
               </OCR_RVCT10>
               </OCR_RVCT10>
             </OnChipMemories>
             </OnChipMemories>
-            <RvctStartVector />
+            <RvctStartVector></RvctStartVector>
           </ArmAdsMisc>
           </ArmAdsMisc>
           <Cads>
           <Cads>
             <interw>1</interw>
             <interw>1</interw>
@@ -331,10 +335,10 @@
             <v6WtE>0</v6WtE>
             <v6WtE>0</v6WtE>
             <v6Rtti>0</v6Rtti>
             <v6Rtti>0</v6Rtti>
             <VariousControls>
             <VariousControls>
-              <MiscControls />
+              <MiscControls></MiscControls>
               <Define>USE_HAL_DRIVER, __RTTHREAD__, STM32L475xx</Define>
               <Define>USE_HAL_DRIVER, __RTTHREAD__, STM32L475xx</Define>
-              <Undefine />
-              <IncludePath>.;applications;..\..\..\libcpu\arm\common;..\..\..\libcpu\arm\cortex-m4;..\..\..\components\drivers\include;..\..\..\components\drivers\include;..\..\..\components\drivers\include;board;board\CubeMX_Config\Inc;board\ports;..\libraries\HAL_Drivers;..\libraries\HAL_Drivers\config;..\..\..\components\finsh;.;..\..\..\include;..\..\..\components\libc\compilers\common;..\libraries\STM32L4xx_HAL\STM32L4xx_HAL_Driver\Inc;..\libraries\STM32L4xx_HAL\CMSIS\Device\ST\STM32L4xx\Include;..\libraries\STM32L4xx_HAL\CMSIS\Include</IncludePath>
+              <Undefine></Undefine>
+              <IncludePath>.;applications;..\..\..\libcpu\arm\common;..\..\..\libcpu\arm\cortex-m4;..\..\..\components\drivers\include;..\..\..\components\drivers\include;..\..\..\components\drivers\include;board;board\CubeMX_Config\Inc;board\ports;..\libraries\HAL_Drivers;..\libraries\HAL_Drivers\config;..\..\..\components\finsh;.;..\..\..\include;..\libraries\STM32L4xx_HAL\STM32L4xx_HAL_Driver\Inc;..\libraries\STM32L4xx_HAL\CMSIS\Device\ST\STM32L4xx\Include;..\libraries\STM32L4xx_HAL\CMSIS\Include</IncludePath>
             </VariousControls>
             </VariousControls>
           </Cads>
           </Cads>
           <Aads>
           <Aads>
@@ -349,10 +353,10 @@
             <useXO>0</useXO>
             <useXO>0</useXO>
             <uClangAs>0</uClangAs>
             <uClangAs>0</uClangAs>
             <VariousControls>
             <VariousControls>
-              <MiscControls />
-              <Define />
-              <Undefine />
-              <IncludePath />
+              <MiscControls></MiscControls>
+              <Define></Define>
+              <Undefine></Undefine>
+              <IncludePath></IncludePath>
             </VariousControls>
             </VariousControls>
           </Aads>
           </Aads>
           <LDads>
           <LDads>
@@ -364,13 +368,13 @@
             <useFile>0</useFile>
             <useFile>0</useFile>
             <TextAddressRange>0x08000000</TextAddressRange>
             <TextAddressRange>0x08000000</TextAddressRange>
             <DataAddressRange>0x20000000</DataAddressRange>
             <DataAddressRange>0x20000000</DataAddressRange>
-            <pXoBase />
+            <pXoBase></pXoBase>
             <ScatterFile>.\board\linker_scripts\link.sct</ScatterFile>
             <ScatterFile>.\board\linker_scripts\link.sct</ScatterFile>
-            <IncludeLibs />
-            <IncludeLibsPath />
-            <Misc />
-            <LinkerInputFile />
-            <DisabledWarnings />
+            <IncludeLibs></IncludeLibs>
+            <IncludeLibsPath></IncludeLibsPath>
+            <Misc></Misc>
+            <LinkerInputFile></LinkerInputFile>
+            <DisabledWarnings></DisabledWarnings>
           </LDads>
           </LDads>
         </TargetArmAds>
         </TargetArmAds>
       </TargetOption>
       </TargetOption>
@@ -383,39 +387,36 @@
               <FileType>1</FileType>
               <FileType>1</FileType>
               <FilePath>applications\main.c</FilePath>
               <FilePath>applications\main.c</FilePath>
             </File>
             </File>
+            <File>
+              <FileName>uart_sample.c</FileName>
+              <FileType>1</FileType>
+              <FilePath>.\applications\uart_sample.c</FilePath>
+            </File>
           </Files>
           </Files>
         </Group>
         </Group>
         <Group>
         <Group>
           <GroupName>CPU</GroupName>
           <GroupName>CPU</GroupName>
           <Files>
           <Files>
             <File>
             <File>
-              <FileName>backtrace.c</FileName>
+              <FileName>showmem.c</FileName>
               <FileType>1</FileType>
               <FileType>1</FileType>
-              <FilePath>..\..\..\libcpu\arm\common\backtrace.c</FilePath>
+              <FilePath>..\..\..\libcpu\arm\common\showmem.c</FilePath>
             </File>
             </File>
-          </Files>
-          <Files>
             <File>
             <File>
               <FileName>div0.c</FileName>
               <FileName>div0.c</FileName>
               <FileType>1</FileType>
               <FileType>1</FileType>
               <FilePath>..\..\..\libcpu\arm\common\div0.c</FilePath>
               <FilePath>..\..\..\libcpu\arm\common\div0.c</FilePath>
             </File>
             </File>
-          </Files>
-          <Files>
             <File>
             <File>
-              <FileName>showmem.c</FileName>
+              <FileName>backtrace.c</FileName>
               <FileType>1</FileType>
               <FileType>1</FileType>
-              <FilePath>..\..\..\libcpu\arm\common\showmem.c</FilePath>
+              <FilePath>..\..\..\libcpu\arm\common\backtrace.c</FilePath>
             </File>
             </File>
-          </Files>
-          <Files>
             <File>
             <File>
               <FileName>cpuport.c</FileName>
               <FileName>cpuport.c</FileName>
               <FileType>1</FileType>
               <FileType>1</FileType>
               <FilePath>..\..\..\libcpu\arm\cortex-m4\cpuport.c</FilePath>
               <FilePath>..\..\..\libcpu\arm\cortex-m4\cpuport.c</FilePath>
             </File>
             </File>
-          </Files>
-          <Files>
             <File>
             <File>
               <FileName>context_rvds.S</FileName>
               <FileName>context_rvds.S</FileName>
               <FileType>2</FileType>
               <FileType>2</FileType>
@@ -431,57 +432,41 @@
               <FileType>1</FileType>
               <FileType>1</FileType>
               <FilePath>..\..\..\components\drivers\misc\pin.c</FilePath>
               <FilePath>..\..\..\components\drivers\misc\pin.c</FilePath>
             </File>
             </File>
-          </Files>
-          <Files>
             <File>
             <File>
-              <FileName>serial.c</FileName>
+              <FileName>serial_v2.c</FileName>
               <FileType>1</FileType>
               <FileType>1</FileType>
-              <FilePath>..\..\..\components\drivers\serial\serial.c</FilePath>
+              <FilePath>..\..\..\components\drivers\serial\serial_v2.c</FilePath>
             </File>
             </File>
-          </Files>
-          <Files>
             <File>
             <File>
               <FileName>completion.c</FileName>
               <FileName>completion.c</FileName>
               <FileType>1</FileType>
               <FileType>1</FileType>
               <FilePath>..\..\..\components\drivers\src\completion.c</FilePath>
               <FilePath>..\..\..\components\drivers\src\completion.c</FilePath>
             </File>
             </File>
-          </Files>
-          <Files>
             <File>
             <File>
-              <FileName>dataqueue.c</FileName>
+              <FileName>ringbuffer.c</FileName>
               <FileType>1</FileType>
               <FileType>1</FileType>
-              <FilePath>..\..\..\components\drivers\src\dataqueue.c</FilePath>
+              <FilePath>..\..\..\components\drivers\src\ringbuffer.c</FilePath>
             </File>
             </File>
-          </Files>
-          <Files>
             <File>
             <File>
-              <FileName>pipe.c</FileName>
+              <FileName>waitqueue.c</FileName>
               <FileType>1</FileType>
               <FileType>1</FileType>
-              <FilePath>..\..\..\components\drivers\src\pipe.c</FilePath>
+              <FilePath>..\..\..\components\drivers\src\waitqueue.c</FilePath>
             </File>
             </File>
-          </Files>
-          <Files>
             <File>
             <File>
               <FileName>ringblk_buf.c</FileName>
               <FileName>ringblk_buf.c</FileName>
               <FileType>1</FileType>
               <FileType>1</FileType>
               <FilePath>..\..\..\components\drivers\src\ringblk_buf.c</FilePath>
               <FilePath>..\..\..\components\drivers\src\ringblk_buf.c</FilePath>
             </File>
             </File>
-          </Files>
-          <Files>
             <File>
             <File>
-              <FileName>ringbuffer.c</FileName>
+              <FileName>dataqueue.c</FileName>
               <FileType>1</FileType>
               <FileType>1</FileType>
-              <FilePath>..\..\..\components\drivers\src\ringbuffer.c</FilePath>
+              <FilePath>..\..\..\components\drivers\src\dataqueue.c</FilePath>
             </File>
             </File>
-          </Files>
-          <Files>
             <File>
             <File>
-              <FileName>waitqueue.c</FileName>
+              <FileName>pipe.c</FileName>
               <FileType>1</FileType>
               <FileType>1</FileType>
-              <FilePath>..\..\..\components\drivers\src\waitqueue.c</FilePath>
+              <FilePath>..\..\..\components\drivers\src\pipe.c</FilePath>
             </File>
             </File>
-          </Files>
-          <Files>
             <File>
             <File>
               <FileName>workqueue.c</FileName>
               <FileName>workqueue.c</FileName>
               <FileType>1</FileType>
               <FileType>1</FileType>
@@ -493,40 +478,30 @@
           <GroupName>Drivers</GroupName>
           <GroupName>Drivers</GroupName>
           <Files>
           <Files>
             <File>
             <File>
-              <FileName>board.c</FileName>
+              <FileName>stm32l4xx_hal_msp.c</FileName>
               <FileType>1</FileType>
               <FileType>1</FileType>
-              <FilePath>board\board.c</FilePath>
+              <FilePath>board\CubeMX_Config\Src\stm32l4xx_hal_msp.c</FilePath>
             </File>
             </File>
-          </Files>
-          <Files>
             <File>
             <File>
-              <FileName>stm32l4xx_hal_msp.c</FileName>
+              <FileName>board.c</FileName>
               <FileType>1</FileType>
               <FileType>1</FileType>
-              <FilePath>board\CubeMX_Config\Src\stm32l4xx_hal_msp.c</FilePath>
+              <FilePath>board\board.c</FilePath>
             </File>
             </File>
-          </Files>
-          <Files>
             <File>
             <File>
               <FileName>startup_stm32l475xx.s</FileName>
               <FileName>startup_stm32l475xx.s</FileName>
               <FileType>2</FileType>
               <FileType>2</FileType>
               <FilePath>..\libraries\STM32L4xx_HAL\CMSIS\Device\ST\STM32L4xx\Source\Templates\arm\startup_stm32l475xx.s</FilePath>
               <FilePath>..\libraries\STM32L4xx_HAL\CMSIS\Device\ST\STM32L4xx\Source\Templates\arm\startup_stm32l475xx.s</FilePath>
             </File>
             </File>
-          </Files>
-          <Files>
             <File>
             <File>
               <FileName>drv_gpio.c</FileName>
               <FileName>drv_gpio.c</FileName>
               <FileType>1</FileType>
               <FileType>1</FileType>
               <FilePath>..\libraries\HAL_Drivers\drv_gpio.c</FilePath>
               <FilePath>..\libraries\HAL_Drivers\drv_gpio.c</FilePath>
             </File>
             </File>
-          </Files>
-          <Files>
             <File>
             <File>
-              <FileName>drv_usart.c</FileName>
+              <FileName>drv_usart_v2.c</FileName>
               <FileType>1</FileType>
               <FileType>1</FileType>
-              <FilePath>..\libraries\HAL_Drivers\drv_usart.c</FilePath>
+              <FilePath>..\libraries\HAL_Drivers\drv_usart_v2.c</FilePath>
             </File>
             </File>
-          </Files>
-          <Files>
             <File>
             <File>
               <FileName>drv_common.c</FileName>
               <FileName>drv_common.c</FileName>
               <FileType>1</FileType>
               <FileType>1</FileType>
@@ -542,19 +517,15 @@
               <FileType>1</FileType>
               <FileType>1</FileType>
               <FilePath>..\..\..\components\finsh\shell.c</FilePath>
               <FilePath>..\..\..\components\finsh\shell.c</FilePath>
             </File>
             </File>
-          </Files>
-          <Files>
             <File>
             <File>
-              <FileName>cmd.c</FileName>
+              <FileName>msh.c</FileName>
               <FileType>1</FileType>
               <FileType>1</FileType>
-              <FilePath>..\..\..\components\finsh\cmd.c</FilePath>
+              <FilePath>..\..\..\components\finsh\msh.c</FilePath>
             </File>
             </File>
-          </Files>
-          <Files>
             <File>
             <File>
-              <FileName>msh.c</FileName>
+              <FileName>cmd.c</FileName>
               <FileType>1</FileType>
               <FileType>1</FileType>
-              <FilePath>..\..\..\components\finsh\msh.c</FilePath>
+              <FilePath>..\..\..\components\finsh\cmd.c</FilePath>
             </File>
             </File>
           </Files>
           </Files>
         </Group>
         </Group>
@@ -562,96 +533,65 @@
           <GroupName>Kernel</GroupName>
           <GroupName>Kernel</GroupName>
           <Files>
           <Files>
             <File>
             <File>
-              <FileName>clock.c</FileName>
+              <FileName>idle.c</FileName>
               <FileType>1</FileType>
               <FileType>1</FileType>
-              <FilePath>..\..\..\src\clock.c</FilePath>
+              <FilePath>..\..\..\src\idle.c</FilePath>
             </File>
             </File>
-          </Files>
-          <Files>
             <File>
             <File>
-              <FileName>components.c</FileName>
+              <FileName>kservice.c</FileName>
               <FileType>1</FileType>
               <FileType>1</FileType>
-              <FilePath>..\..\..\src\components.c</FilePath>
+              <FilePath>..\..\..\src\kservice.c</FilePath>
             </File>
             </File>
-          </Files>
-          <Files>
             <File>
             <File>
               <FileName>device.c</FileName>
               <FileName>device.c</FileName>
               <FileType>1</FileType>
               <FileType>1</FileType>
               <FilePath>..\..\..\src\device.c</FilePath>
               <FilePath>..\..\..\src\device.c</FilePath>
             </File>
             </File>
-          </Files>
-          <Files>
-            <File>
-              <FileName>idle.c</FileName>
-              <FileType>1</FileType>
-              <FilePath>..\..\..\src\idle.c</FilePath>
-            </File>
-          </Files>
-          <Files>
             <File>
             <File>
-              <FileName>ipc.c</FileName>
+              <FileName>clock.c</FileName>
               <FileType>1</FileType>
               <FileType>1</FileType>
-              <FilePath>..\..\..\src\ipc.c</FilePath>
+              <FilePath>..\..\..\src\clock.c</FilePath>
             </File>
             </File>
-          </Files>
-          <Files>
             <File>
             <File>
-              <FileName>irq.c</FileName>
+              <FileName>mempool.c</FileName>
               <FileType>1</FileType>
               <FileType>1</FileType>
-              <FilePath>..\..\..\src\irq.c</FilePath>
+              <FilePath>..\..\..\src\mempool.c</FilePath>
             </File>
             </File>
-          </Files>
-          <Files>
             <File>
             <File>
-              <FileName>kservice.c</FileName>
+              <FileName>scheduler.c</FileName>
               <FileType>1</FileType>
               <FileType>1</FileType>
-              <FilePath>..\..\..\src\kservice.c</FilePath>
+              <FilePath>..\..\..\src\scheduler.c</FilePath>
             </File>
             </File>
-          </Files>
-          <Files>
             <File>
             <File>
               <FileName>mem.c</FileName>
               <FileName>mem.c</FileName>
               <FileType>1</FileType>
               <FileType>1</FileType>
               <FilePath>..\..\..\src\mem.c</FilePath>
               <FilePath>..\..\..\src\mem.c</FilePath>
             </File>
             </File>
-          </Files>
-          <Files>
             <File>
             <File>
-              <FileName>mempool.c</FileName>
+              <FileName>components.c</FileName>
               <FileType>1</FileType>
               <FileType>1</FileType>
-              <FilePath>..\..\..\src\mempool.c</FilePath>
+              <FilePath>..\..\..\src\components.c</FilePath>
             </File>
             </File>
-          </Files>
-          <Files>
             <File>
             <File>
-              <FileName>object.c</FileName>
+              <FileName>ipc.c</FileName>
               <FileType>1</FileType>
               <FileType>1</FileType>
-              <FilePath>..\..\..\src\object.c</FilePath>
+              <FilePath>..\..\..\src\ipc.c</FilePath>
             </File>
             </File>
-          </Files>
-          <Files>
             <File>
             <File>
-              <FileName>scheduler.c</FileName>
+              <FileName>irq.c</FileName>
               <FileType>1</FileType>
               <FileType>1</FileType>
-              <FilePath>..\..\..\src\scheduler.c</FilePath>
+              <FilePath>..\..\..\src\irq.c</FilePath>
             </File>
             </File>
-          </Files>
-          <Files>
             <File>
             <File>
-              <FileName>signal.c</FileName>
+              <FileName>object.c</FileName>
               <FileType>1</FileType>
               <FileType>1</FileType>
-              <FilePath>..\..\..\src\signal.c</FilePath>
+              <FilePath>..\..\..\src\object.c</FilePath>
             </File>
             </File>
-          </Files>
-          <Files>
             <File>
             <File>
               <FileName>thread.c</FileName>
               <FileName>thread.c</FileName>
               <FileType>1</FileType>
               <FileType>1</FileType>
               <FilePath>..\..\..\src\thread.c</FilePath>
               <FilePath>..\..\..\src\thread.c</FilePath>
             </File>
             </File>
-          </Files>
-          <Files>
             <File>
             <File>
               <FileName>timer.c</FileName>
               <FileName>timer.c</FileName>
               <FileType>1</FileType>
               <FileType>1</FileType>
@@ -659,172 +599,124 @@
             </File>
             </File>
           </Files>
           </Files>
         </Group>
         </Group>
-        <Group>
-          <GroupName>libc</GroupName>
-          <Files>
-            <File>
-              <FileName>time.c</FileName>
-              <FileType>1</FileType>
-              <FilePath>..\..\..\components\libc\compilers\common\time.c</FilePath>
-            </File>
-          </Files>
-        </Group>
         <Group>
         <Group>
           <GroupName>Libraries</GroupName>
           <GroupName>Libraries</GroupName>
           <Files>
           <Files>
             <File>
             <File>
-              <FileName>system_stm32l4xx.c</FileName>
+              <FileName>stm32l4xx_hal_cryp.c</FileName>
               <FileType>1</FileType>
               <FileType>1</FileType>
-              <FilePath>..\libraries\STM32L4xx_HAL\CMSIS\Device\ST\STM32L4xx\Source\Templates\system_stm32l4xx.c</FilePath>
+              <FilePath>..\libraries\STM32L4xx_HAL\STM32L4xx_HAL_Driver\Src\stm32l4xx_hal_cryp.c</FilePath>
             </File>
             </File>
-          </Files>
-          <Files>
             <File>
             <File>
-              <FileName>stm32l4xx_hal.c</FileName>
+              <FileName>stm32l4xx_hal_uart.c</FileName>
               <FileType>1</FileType>
               <FileType>1</FileType>
-              <FilePath>..\libraries\STM32L4xx_HAL\STM32L4xx_HAL_Driver\Src\stm32l4xx_hal.c</FilePath>
+              <FilePath>..\libraries\STM32L4xx_HAL\STM32L4xx_HAL_Driver\Src\stm32l4xx_hal_uart.c</FilePath>
             </File>
             </File>
-          </Files>
-          <Files>
             <File>
             <File>
-              <FileName>stm32l4xx_hal_comp.c</FileName>
+              <FileName>stm32l4xx_hal_usart.c</FileName>
               <FileType>1</FileType>
               <FileType>1</FileType>
-              <FilePath>..\libraries\STM32L4xx_HAL\STM32L4xx_HAL_Driver\Src\stm32l4xx_hal_comp.c</FilePath>
+              <FilePath>..\libraries\STM32L4xx_HAL\STM32L4xx_HAL_Driver\Src\stm32l4xx_hal_usart.c</FilePath>
             </File>
             </File>
-          </Files>
-          <Files>
             <File>
             <File>
               <FileName>stm32l4xx_hal_cortex.c</FileName>
               <FileName>stm32l4xx_hal_cortex.c</FileName>
               <FileType>1</FileType>
               <FileType>1</FileType>
               <FilePath>..\libraries\STM32L4xx_HAL\STM32L4xx_HAL_Driver\Src\stm32l4xx_hal_cortex.c</FilePath>
               <FilePath>..\libraries\STM32L4xx_HAL\STM32L4xx_HAL_Driver\Src\stm32l4xx_hal_cortex.c</FilePath>
             </File>
             </File>
-          </Files>
-          <Files>
             <File>
             <File>
-              <FileName>stm32l4xx_hal_crc.c</FileName>
+              <FileName>stm32l4xx_hal_gpio.c</FileName>
               <FileType>1</FileType>
               <FileType>1</FileType>
-              <FilePath>..\libraries\STM32L4xx_HAL\STM32L4xx_HAL_Driver\Src\stm32l4xx_hal_crc.c</FilePath>
+              <FilePath>..\libraries\STM32L4xx_HAL\STM32L4xx_HAL_Driver\Src\stm32l4xx_hal_gpio.c</FilePath>
             </File>
             </File>
-          </Files>
-          <Files>
             <File>
             <File>
-              <FileName>stm32l4xx_hal_crc_ex.c</FileName>
+              <FileName>stm32l4xx_hal_dma.c</FileName>
               <FileType>1</FileType>
               <FileType>1</FileType>
-              <FilePath>..\libraries\STM32L4xx_HAL\STM32L4xx_HAL_Driver\Src\stm32l4xx_hal_crc_ex.c</FilePath>
+              <FilePath>..\libraries\STM32L4xx_HAL\STM32L4xx_HAL_Driver\Src\stm32l4xx_hal_dma.c</FilePath>
             </File>
             </File>
-          </Files>
-          <Files>
             <File>
             <File>
-              <FileName>stm32l4xx_hal_cryp.c</FileName>
+              <FileName>stm32l4xx_hal_pwr.c</FileName>
               <FileType>1</FileType>
               <FileType>1</FileType>
-              <FilePath>..\libraries\STM32L4xx_HAL\STM32L4xx_HAL_Driver\Src\stm32l4xx_hal_cryp.c</FilePath>
+              <FilePath>..\libraries\STM32L4xx_HAL\STM32L4xx_HAL_Driver\Src\stm32l4xx_hal_pwr.c</FilePath>
             </File>
             </File>
-          </Files>
-          <Files>
             <File>
             <File>
-              <FileName>stm32l4xx_hal_cryp_ex.c</FileName>
+              <FileName>stm32l4xx_hal_rcc_ex.c</FileName>
               <FileType>1</FileType>
               <FileType>1</FileType>
-              <FilePath>..\libraries\STM32L4xx_HAL\STM32L4xx_HAL_Driver\Src\stm32l4xx_hal_cryp_ex.c</FilePath>
+              <FilePath>..\libraries\STM32L4xx_HAL\STM32L4xx_HAL_Driver\Src\stm32l4xx_hal_rcc_ex.c</FilePath>
             </File>
             </File>
-          </Files>
-          <Files>
             <File>
             <File>
-              <FileName>stm32l4xx_hal_dma.c</FileName>
+              <FileName>stm32l4xx_hal_rcc.c</FileName>
               <FileType>1</FileType>
               <FileType>1</FileType>
-              <FilePath>..\libraries\STM32L4xx_HAL\STM32L4xx_HAL_Driver\Src\stm32l4xx_hal_dma.c</FilePath>
+              <FilePath>..\libraries\STM32L4xx_HAL\STM32L4xx_HAL_Driver\Src\stm32l4xx_hal_rcc.c</FilePath>
             </File>
             </File>
-          </Files>
-          <Files>
             <File>
             <File>
               <FileName>stm32l4xx_hal_dma_ex.c</FileName>
               <FileName>stm32l4xx_hal_dma_ex.c</FileName>
               <FileType>1</FileType>
               <FileType>1</FileType>
               <FilePath>..\libraries\STM32L4xx_HAL\STM32L4xx_HAL_Driver\Src\stm32l4xx_hal_dma_ex.c</FilePath>
               <FilePath>..\libraries\STM32L4xx_HAL\STM32L4xx_HAL_Driver\Src\stm32l4xx_hal_dma_ex.c</FilePath>
             </File>
             </File>
-          </Files>
-          <Files>
             <File>
             <File>
               <FileName>stm32l4xx_hal_exti.c</FileName>
               <FileName>stm32l4xx_hal_exti.c</FileName>
               <FileType>1</FileType>
               <FileType>1</FileType>
               <FilePath>..\libraries\STM32L4xx_HAL\STM32L4xx_HAL_Driver\Src\stm32l4xx_hal_exti.c</FilePath>
               <FilePath>..\libraries\STM32L4xx_HAL\STM32L4xx_HAL_Driver\Src\stm32l4xx_hal_exti.c</FilePath>
             </File>
             </File>
-          </Files>
-          <Files>
             <File>
             <File>
-              <FileName>stm32l4xx_hal_pwr.c</FileName>
+              <FileName>stm32l4xx_hal_crc.c</FileName>
               <FileType>1</FileType>
               <FileType>1</FileType>
-              <FilePath>..\libraries\STM32L4xx_HAL\STM32L4xx_HAL_Driver\Src\stm32l4xx_hal_pwr.c</FilePath>
+              <FilePath>..\libraries\STM32L4xx_HAL\STM32L4xx_HAL_Driver\Src\stm32l4xx_hal_crc.c</FilePath>
             </File>
             </File>
-          </Files>
-          <Files>
             <File>
             <File>
-              <FileName>stm32l4xx_hal_pwr_ex.c</FileName>
+              <FileName>stm32l4xx_hal.c</FileName>
               <FileType>1</FileType>
               <FileType>1</FileType>
-              <FilePath>..\libraries\STM32L4xx_HAL\STM32L4xx_HAL_Driver\Src\stm32l4xx_hal_pwr_ex.c</FilePath>
+              <FilePath>..\libraries\STM32L4xx_HAL\STM32L4xx_HAL_Driver\Src\stm32l4xx_hal.c</FilePath>
             </File>
             </File>
-          </Files>
-          <Files>
             <File>
             <File>
-              <FileName>stm32l4xx_hal_rcc.c</FileName>
+              <FileName>stm32l4xx_hal_usart_ex.c</FileName>
               <FileType>1</FileType>
               <FileType>1</FileType>
-              <FilePath>..\libraries\STM32L4xx_HAL\STM32L4xx_HAL_Driver\Src\stm32l4xx_hal_rcc.c</FilePath>
+              <FilePath>..\libraries\STM32L4xx_HAL\STM32L4xx_HAL_Driver\Src\stm32l4xx_hal_usart_ex.c</FilePath>
             </File>
             </File>
-          </Files>
-          <Files>
             <File>
             <File>
-              <FileName>stm32l4xx_hal_rcc_ex.c</FileName>
+              <FileName>stm32l4xx_hal_uart_ex.c</FileName>
               <FileType>1</FileType>
               <FileType>1</FileType>
-              <FilePath>..\libraries\STM32L4xx_HAL\STM32L4xx_HAL_Driver\Src\stm32l4xx_hal_rcc_ex.c</FilePath>
+              <FilePath>..\libraries\STM32L4xx_HAL\STM32L4xx_HAL_Driver\Src\stm32l4xx_hal_uart_ex.c</FilePath>
             </File>
             </File>
-          </Files>
-          <Files>
             <File>
             <File>
-              <FileName>stm32l4xx_hal_rng.c</FileName>
+              <FileName>stm32l4xx_hal_crc_ex.c</FileName>
               <FileType>1</FileType>
               <FileType>1</FileType>
-              <FilePath>..\libraries\STM32L4xx_HAL\STM32L4xx_HAL_Driver\Src\stm32l4xx_hal_rng.c</FilePath>
+              <FilePath>..\libraries\STM32L4xx_HAL\STM32L4xx_HAL_Driver\Src\stm32l4xx_hal_crc_ex.c</FilePath>
             </File>
             </File>
-          </Files>
-          <Files>
             <File>
             <File>
-              <FileName>stm32l4xx_hal_gpio.c</FileName>
+              <FileName>stm32l4xx_hal_comp.c</FileName>
               <FileType>1</FileType>
               <FileType>1</FileType>
-              <FilePath>..\libraries\STM32L4xx_HAL\STM32L4xx_HAL_Driver\Src\stm32l4xx_hal_gpio.c</FilePath>
+              <FilePath>..\libraries\STM32L4xx_HAL\STM32L4xx_HAL_Driver\Src\stm32l4xx_hal_comp.c</FilePath>
             </File>
             </File>
-          </Files>
-          <Files>
             <File>
             <File>
-              <FileName>stm32l4xx_hal_uart.c</FileName>
+              <FileName>stm32l4xx_hal_pwr_ex.c</FileName>
               <FileType>1</FileType>
               <FileType>1</FileType>
-              <FilePath>..\libraries\STM32L4xx_HAL\STM32L4xx_HAL_Driver\Src\stm32l4xx_hal_uart.c</FilePath>
+              <FilePath>..\libraries\STM32L4xx_HAL\STM32L4xx_HAL_Driver\Src\stm32l4xx_hal_pwr_ex.c</FilePath>
             </File>
             </File>
-          </Files>
-          <Files>
             <File>
             <File>
-              <FileName>stm32l4xx_hal_uart_ex.c</FileName>
+              <FileName>stm32l4xx_hal_rng.c</FileName>
               <FileType>1</FileType>
               <FileType>1</FileType>
-              <FilePath>..\libraries\STM32L4xx_HAL\STM32L4xx_HAL_Driver\Src\stm32l4xx_hal_uart_ex.c</FilePath>
+              <FilePath>..\libraries\STM32L4xx_HAL\STM32L4xx_HAL_Driver\Src\stm32l4xx_hal_rng.c</FilePath>
             </File>
             </File>
-          </Files>
-          <Files>
             <File>
             <File>
-              <FileName>stm32l4xx_hal_usart.c</FileName>
+              <FileName>system_stm32l4xx.c</FileName>
               <FileType>1</FileType>
               <FileType>1</FileType>
-              <FilePath>..\libraries\STM32L4xx_HAL\STM32L4xx_HAL_Driver\Src\stm32l4xx_hal_usart.c</FilePath>
+              <FilePath>..\libraries\STM32L4xx_HAL\CMSIS\Device\ST\STM32L4xx\Source\Templates\system_stm32l4xx.c</FilePath>
             </File>
             </File>
-          </Files>
-          <Files>
             <File>
             <File>
-              <FileName>stm32l4xx_hal_usart_ex.c</FileName>
+              <FileName>stm32l4xx_hal_cryp_ex.c</FileName>
               <FileType>1</FileType>
               <FileType>1</FileType>
-              <FilePath>..\libraries\STM32L4xx_HAL\STM32L4xx_HAL_Driver\Src\stm32l4xx_hal_usart_ex.c</FilePath>
+              <FilePath>..\libraries\STM32L4xx_HAL\STM32L4xx_HAL_Driver\Src\stm32l4xx_hal_cryp_ex.c</FilePath>
             </File>
             </File>
           </Files>
           </Files>
         </Group>
         </Group>
       </Groups>
       </Groups>
     </Target>
     </Target>
   </Targets>
   </Targets>
+
   <RTE>
   <RTE>
-    <apis />
-    <components />
-    <files />
+    <apis/>
+    <components/>
+    <files/>
   </RTE>
   </RTE>
+
 </Project>
 </Project>

+ 0 - 10
bsp/stm32/stm32l475-atk-pandora/rtconfig.h

@@ -111,16 +111,6 @@
 
 
 /* Utilities */
 /* Utilities */
 
 
-#define RT_USING_RT_LINK
-#define RT_LINK_USING_SF_CRC
-
-/* rt-link hardware device configuration */
-
-#define RT_LINK_HW_DEVICE_NAME "uart2"
-#define RT_LINK_USING_UART
-
-/* rt link debug option */
-
 
 
 /* RT-Thread Utestcases */
 /* RT-Thread Utestcases */
 
 

+ 4 - 10
components/drivers/include/drivers/serial_v2.h

@@ -112,7 +112,7 @@ struct serial_configure
 };
 };
 
 
 /*
 /*
- * Serial FIFO mode 
+ * Serial Receive FIFO mode
  */
  */
 struct rt_serial_rx_fifo
 struct rt_serial_rx_fifo
 {
 {
@@ -128,6 +128,9 @@ struct rt_serial_rx_fifo
     rt_uint8_t buffer[];
     rt_uint8_t buffer[];
 };
 };
 
 
+/*
+ * Serial Transmit FIFO mode
+ */
 struct rt_serial_tx_fifo
 struct rt_serial_tx_fifo
 {
 {
     struct rt_ringbuffer rb;
     struct rt_ringbuffer rb;
@@ -174,15 +177,6 @@ struct rt_uart_ops
                                  rt_uint32_t             tx_flag);
                                  rt_uint32_t             tx_flag);
 };
 };
 
 
-rt_size_t rt_serial_get_linear_buffer(struct rt_ringbuffer     *rb,
-                                             rt_uint8_t       **ptr);
-
-rt_size_t rt_serial_update_read_index(struct rt_ringbuffer     *rb,
-                                             rt_uint16_t        read_index);
-
-rt_size_t rt_serial_update_write_index(struct rt_ringbuffer    *rb,
-                                              rt_uint16_t       write_index);
-
 void rt_hw_serial_isr(struct rt_serial_device *serial, int event);
 void rt_hw_serial_isr(struct rt_serial_device *serial, int event);
 
 
 rt_err_t rt_hw_serial_register(struct rt_serial_device      *serial,
 rt_err_t rt_hw_serial_register(struct rt_serial_device      *serial,

+ 28 - 23
components/drivers/serial/serial_v2.c

@@ -157,7 +157,7 @@ static int serial_fops_poll(struct dfs_fd *fd, struct rt_pollreq *req)
         rx_fifo = (struct rt_serial_rx_fifo*) serial->serial_rx;
         rx_fifo = (struct rt_serial_rx_fifo*) serial->serial_rx;
 
 
         level = rt_hw_interrupt_disable();
         level = rt_hw_interrupt_disable();
-        
+
         if (rt_ringbuffer_data_len(&rx_fifo->rb))
         if (rt_ringbuffer_data_len(&rx_fifo->rb))
             mask |= POLLIN;
             mask |= POLLIN;
         rt_hw_interrupt_enable(level);
         rt_hw_interrupt_enable(level);
@@ -180,8 +180,8 @@ const static struct dfs_file_ops _serial_fops =
 };
 };
 #endif
 #endif
 
 
-rt_size_t rt_serial_get_linear_buffer(struct rt_ringbuffer       *rb,
-                                             rt_uint8_t         **ptr)
+static rt_size_t rt_serial_get_linear_buffer(struct rt_ringbuffer       *rb,
+                                                    rt_uint8_t         **ptr)
 {
 {
     rt_size_t size;
     rt_size_t size;
 
 
@@ -206,8 +206,8 @@ rt_size_t rt_serial_get_linear_buffer(struct rt_ringbuffer       *rb,
     return rb->buffer_size - rb->read_index;
     return rb->buffer_size - rb->read_index;
 }
 }
 
 
-rt_size_t rt_serial_update_read_index(struct rt_ringbuffer     *rb,
-                                             rt_uint16_t        read_index)
+static rt_size_t rt_serial_update_read_index(struct rt_ringbuffer    *rb,
+                                                    rt_uint16_t       read_index)
 {
 {
     rt_size_t size;
     rt_size_t size;
 
 
@@ -219,7 +219,7 @@ rt_size_t rt_serial_update_read_index(struct rt_ringbuffer     *rb,
     /* no data */
     /* no data */
     if (size == 0)
     if (size == 0)
         return 0;
         return 0;
-    
+
     /* less data */
     /* less data */
     if(size < read_index)
     if(size < read_index)
         read_index = size;
         read_index = size;
@@ -239,8 +239,8 @@ rt_size_t rt_serial_update_read_index(struct rt_ringbuffer     *rb,
     return read_index;
     return read_index;
 }
 }
 
 
-rt_size_t rt_serial_update_write_index(struct rt_ringbuffer    *rb,
-                                              rt_uint16_t       write_index)
+static rt_size_t rt_serial_update_write_index(struct rt_ringbuffer  *rb,
+                                                     rt_uint16_t     write_index)
 {
 {
     rt_uint16_t size;
     rt_uint16_t size;
     RT_ASSERT(rb != RT_NULL);
     RT_ASSERT(rb != RT_NULL);
@@ -499,7 +499,7 @@ static rt_size_t _serial_fifo_tx_blocking_buf(struct rt_device        *dev,
 
 
     while (size)
     while (size)
     {
     {
-        /* Copy one piece of data into the ringbuffer at a time 
+        /* Copy one piece of data into the ringbuffer at a time
          * until the length of the data is equal to size */
          * until the length of the data is equal to size */
         tx_fifo->put_size = rt_ringbuffer_put(&(tx_fifo->rb),
         tx_fifo->put_size = rt_ringbuffer_put(&(tx_fifo->rb),
                                                (rt_uint8_t *)buffer + offset,
                                                (rt_uint8_t *)buffer + offset,
@@ -629,7 +629,7 @@ static rt_err_t rt_serial_tx_enable(struct rt_device        *dev,
         if (optmode == RT_SERIAL_TX_BLOCKING_BUFFER)
         if (optmode == RT_SERIAL_TX_BLOCKING_BUFFER)
         {
         {
             /* If use RT_SERIAL_TX_BLOCKING_BUFFER, the ringbuffer is initialized */
             /* If use RT_SERIAL_TX_BLOCKING_BUFFER, the ringbuffer is initialized */
-            tx_fifo = (struct rt_serial_tx_fifo *) rt_malloc 
+            tx_fifo = (struct rt_serial_tx_fifo *) rt_malloc
                     (sizeof(struct rt_serial_tx_fifo) + serial->config.tx_bufsz);
                     (sizeof(struct rt_serial_tx_fifo) + serial->config.tx_bufsz);
             RT_ASSERT(tx_fifo != RT_NULL);
             RT_ASSERT(tx_fifo != RT_NULL);
 
 
@@ -641,9 +641,9 @@ static rt_err_t rt_serial_tx_enable(struct rt_device        *dev,
         }
         }
         else
         else
         {
         {
-            /* If not use RT_SERIAL_TX_BLOCKING_BUFFER, 
+            /* If not use RT_SERIAL_TX_BLOCKING_BUFFER,
              * the control() API is called to configure the serial device */
              * the control() API is called to configure the serial device */
-            tx_fifo = (struct rt_serial_tx_fifo*) rt_malloc 
+            tx_fifo = (struct rt_serial_tx_fifo*) rt_malloc
                     (sizeof(struct rt_serial_tx_fifo));
                     (sizeof(struct rt_serial_tx_fifo));
             RT_ASSERT(tx_fifo != RT_NULL);
             RT_ASSERT(tx_fifo != RT_NULL);
 
 
@@ -665,14 +665,14 @@ static rt_err_t rt_serial_tx_enable(struct rt_device        *dev,
     /* When using RT_SERIAL_TX_NON_BLOCKING, ringbuffer needs to be initialized,
     /* When using RT_SERIAL_TX_NON_BLOCKING, ringbuffer needs to be initialized,
      * and initialize the tx_fifo->activated value is RT_FALSE.
      * and initialize the tx_fifo->activated value is RT_FALSE.
      */
      */
-    tx_fifo = (struct rt_serial_tx_fifo *) rt_malloc 
+    tx_fifo = (struct rt_serial_tx_fifo *) rt_malloc
             (sizeof(struct rt_serial_tx_fifo) + serial->config.tx_bufsz);
             (sizeof(struct rt_serial_tx_fifo) + serial->config.tx_bufsz);
     RT_ASSERT(tx_fifo != RT_NULL);
     RT_ASSERT(tx_fifo != RT_NULL);
 
 
     tx_fifo->activated = RT_FALSE;
     tx_fifo->activated = RT_FALSE;
     tx_fifo->put_size = 0;
     tx_fifo->put_size = 0;
-    rt_ringbuffer_init(&(tx_fifo->rb), 
-                        tx_fifo->buffer, 
+    rt_ringbuffer_init(&(tx_fifo->rb),
+                        tx_fifo->buffer,
                         serial->config.tx_bufsz);
                         serial->config.tx_bufsz);
     serial->serial_tx = tx_fifo;
     serial->serial_tx = tx_fifo;
 
 
@@ -712,7 +712,7 @@ static rt_err_t rt_serial_rx_enable(struct rt_device        *dev,
             return -RT_EINVAL;
             return -RT_EINVAL;
         }
         }
 
 
-        dev->read = _serial_poll_rx;    
+        dev->read = _serial_poll_rx;
         dev->open_flag |= RT_SERIAL_RX_BLOCKING;
         dev->open_flag |= RT_SERIAL_RX_BLOCKING;
         return RT_EOK;
         return RT_EOK;
     }
     }
@@ -892,7 +892,7 @@ static rt_err_t rt_serial_open(struct rt_device *dev, rt_uint16_t oflag)
         dev->open_flag |= RT_SERIAL_TX_BLOCKING;
         dev->open_flag |= RT_SERIAL_TX_BLOCKING;
 
 
     /* set steam flag */
     /* set steam flag */
-    if ((oflag & RT_DEVICE_FLAG_STREAM) || 
+    if ((oflag & RT_DEVICE_FLAG_STREAM) ||
         (dev->open_flag & RT_DEVICE_FLAG_STREAM))
         (dev->open_flag & RT_DEVICE_FLAG_STREAM))
         dev->open_flag |= RT_DEVICE_FLAG_STREAM;
         dev->open_flag |= RT_DEVICE_FLAG_STREAM;
 
 
@@ -903,7 +903,7 @@ static rt_err_t rt_serial_open(struct rt_device *dev, rt_uint16_t oflag)
 
 
     /* initialize the Tx structure according to open flag */
     /* initialize the Tx structure according to open flag */
     if (serial->serial_tx == RT_NULL)
     if (serial->serial_tx == RT_NULL)
-        rt_serial_tx_enable(dev, dev->open_flag & 
+        rt_serial_tx_enable(dev, dev->open_flag &
                             (RT_SERIAL_TX_BLOCKING | RT_SERIAL_TX_NON_BLOCKING));
                             (RT_SERIAL_TX_BLOCKING | RT_SERIAL_TX_NON_BLOCKING));
 
 
     return RT_EOK;
     return RT_EOK;
@@ -925,10 +925,10 @@ static rt_err_t rt_serial_close(struct rt_device *dev)
     /* this device has more reference count */
     /* this device has more reference count */
     if (dev->ref_count > 1) return -RT_ERROR;
     if (dev->ref_count > 1) return -RT_ERROR;
     /* Disable serial receive mode. */
     /* Disable serial receive mode. */
-    rt_serial_rx_disable(dev, dev->open_flag & 
+    rt_serial_rx_disable(dev, dev->open_flag &
                         (RT_SERIAL_RX_BLOCKING | RT_SERIAL_RX_NON_BLOCKING));
                         (RT_SERIAL_RX_BLOCKING | RT_SERIAL_RX_NON_BLOCKING));
     /* Disable serial tranmit mode. */
     /* Disable serial tranmit mode. */
-    rt_serial_tx_disable(dev, dev->open_flag & 
+    rt_serial_tx_disable(dev, dev->open_flag &
                         (RT_SERIAL_TX_BLOCKING | RT_SERIAL_TX_NON_BLOCKING));
                         (RT_SERIAL_TX_BLOCKING | RT_SERIAL_TX_NON_BLOCKING));
 
 
     /* Call the control() API to close the serial device */
     /* Call the control() API to close the serial device */
@@ -978,7 +978,7 @@ static rt_err_t rt_serial_control(struct rt_device *dev,
                 }
                 }
                /* set serial configure */
                /* set serial configure */
                 serial->config = *pconfig;
                 serial->config = *pconfig;
-                serial->ops->configure(serial, 
+                serial->ops->configure(serial,
                                     (struct serial_configure *) args);
                                     (struct serial_configure *) args);
             }
             }
 
 
@@ -994,7 +994,7 @@ static rt_err_t rt_serial_control(struct rt_device *dev,
 }
 }
 
 
 #ifdef RT_USING_DEVICE_OPS
 #ifdef RT_USING_DEVICE_OPS
-const static struct rt_device_ops serial_ops = 
+const static struct rt_device_ops serial_ops =
 {
 {
     rt_serial_init,
     rt_serial_init,
     rt_serial_open,
     rt_serial_open,
@@ -1070,9 +1070,14 @@ void rt_hw_serial_isr(struct rt_serial_device *serial, int event)
             rx_fifo = (struct rt_serial_rx_fifo *)serial->serial_rx;
             rx_fifo = (struct rt_serial_rx_fifo *)serial->serial_rx;
             RT_ASSERT(rx_fifo != RT_NULL);
             RT_ASSERT(rx_fifo != RT_NULL);
 
 
+            /* If the event is RT_SERIAL_EVENT_RX_IND, rx_length is equal to 0 */
+            rx_length = (event & (~0xff)) >> 8;
+
+            if (rx_length)
+                rt_serial_update_write_index(&(rx_fifo->rb), rx_length);
+
             /* Get the length of the data from the ringbuffer */
             /* Get the length of the data from the ringbuffer */
             rx_length = rt_ringbuffer_data_len(&rx_fifo->rb);
             rx_length = rt_ringbuffer_data_len(&rx_fifo->rb);
-
             if (rx_length == 0) break;
             if (rx_length == 0) break;
 
 
             if (serial->parent.open_flag & RT_SERIAL_RX_BLOCKING)
             if (serial->parent.open_flag & RT_SERIAL_RX_BLOCKING)