]> git.sur5r.net Git - freertos/commitdiff
Continued development on STM32L152 demo.
authorrichardbarry <richardbarry@1d2547de-c912-0410-9cb9-b8ca96c0e9e2>
Tue, 21 Dec 2010 16:09:34 +0000 (16:09 +0000)
committerrichardbarry <richardbarry@1d2547de-c912-0410-9cb9-b8ca96c0e9e2>
Tue, 21 Dec 2010 16:09:34 +0000 (16:09 +0000)
git-svn-id: https://svn.code.sf.net/p/freertos/code/trunk@1177 1d2547de-c912-0410-9cb9-b8ca96c0e9e2

Demo/Cortex_STM32L152_IAR/FreeRTOSConfig.h
Demo/Cortex_STM32L152_IAR/RTOSDemo.ewp
Demo/Cortex_STM32L152_IAR/main.c
Demo/Cortex_STM32L152_IAR/serial.c [new file with mode: 0644]
Demo/Cortex_STM32L152_IAR/settings/RTOSDemo.dbgdt
Demo/Cortex_STM32L152_IAR/settings/RTOSDemo.dni
Demo/Cortex_STM32L152_IAR/settings/RTOSDemo.wsdt
Demo/Cortex_STM32L152_IAR/system_and_ST_code/STM32L1xx_StdPeriph_Driver/inc/stm32l1xx_usart.h [new file with mode: 0644]
Demo/Cortex_STM32L152_IAR/system_and_ST_code/STM32L1xx_StdPeriph_Driver/src/stm32l1xx_usart.c [new file with mode: 0644]
Demo/Cortex_STM32L152_IAR/system_and_ST_code/stm32l1xx_flash.icf

index c0f3f3f6105d22101614c79ab8ecea36269b2be4..ab9283838a2486a4e67eda30a767eb120d55a076 100644 (file)
@@ -72,7 +72,7 @@
 #define configCPU_CLOCK_HZ                             ( 32000000UL )  \r
 #define configTICK_RATE_HZ                             ( ( portTickType ) 1000 )\r
 #define configMAX_PRIORITIES                   ( ( unsigned portBASE_TYPE ) 5 )\r
-#define configMINIMAL_STACK_SIZE               ( ( unsigned short ) 128 )\r
+#define configMINIMAL_STACK_SIZE               ( ( unsigned short ) 70 )\r
 #define configTOTAL_HEAP_SIZE                  ( ( size_t ) ( 10 * 1024 ) )\r
 #define configMAX_TASK_NAME_LEN                        ( 16 )\r
 #define configUSE_TRACE_FACILITY               0\r
@@ -80,6 +80,7 @@
 #define configIDLE_SHOULD_YIELD                        1\r
 #define configQUEUE_REGISTRY_SIZE              1\r
 #define configGENERATE_RUN_TIME_STATS  1\r
+#define configCHECK_FOR_STACK_OVERFLOW 2\r
 \r
 /* Co-routine definitions. */\r
 #define configUSE_CO_ROUTINES          0\r
@@ -100,25 +101,34 @@ to exclude the API function. */
 #ifdef __NVIC_PRIO_BITS\r
        #define configPRIO_BITS       __NVIC_PRIO_BITS\r
 #else\r
-       #define configPRIO_BITS       4        /* 32 priority levels */\r
+       #define configPRIO_BITS       4        /* 15 priority levels */\r
 #endif\r
 \r
+#define configLIBRARY_LOWEST_INTERRUPT_PRIORITY                        15\r
+//#define configLIBRARY_MAX_SYSCALL_INTERRUPT_PRIORITY 5\r
+#define configLIBRARY_MAX_SYSCALL_INTERRUPT_PRIORITY   15\r
+\r
 /* The lowest priority. */\r
-#define configKERNEL_INTERRUPT_PRIORITY        ( 15 << (8 - configPRIO_BITS) )\r
+//#define configKERNEL_INTERRUPT_PRIORITY      ( configLIBRARY_LOWEST_INTERRUPT_PRIORITY << (8 - configPRIO_BITS) )\r
 /* Priority 5, or 160 as only the top three bits are implemented. */\r
-#define configMAX_SYSCALL_INTERRUPT_PRIORITY   ( 5 << (8 - configPRIO_BITS) )\r
+//#define configMAX_SYSCALL_INTERRUPT_PRIORITY         ( configLIBRARY_MAX_SYSCALL_INTERRUPT_PRIORITY << (8 - configPRIO_BITS) )\r
+\r
+/* The lowest priority. */\r
+#define configKERNEL_INTERRUPT_PRIORITY        255\r
+/* Priority 5, or 160 as only the top three bits are implemented. */\r
+#define configMAX_SYSCALL_INTERRUPT_PRIORITY   255\r
+\r
 \r
 /* Prevent the following definitions being included when FreeRTOSConfig.h\r
 is included from an asm file. */\r
 #ifdef __ICCARM__\r
        #include "stm32l1xx_tim.h"\r
        extern void vConfigureTimerForRunTimeStats( void );\r
-       unsigned long ulGetRunTimeStatsCounterValue( void );\r
        extern unsigned long ulTIM6_OverflowCount;\r
 #endif /* __ICCARM__ */\r
 \r
 #define portCONFIGURE_TIMER_FOR_RUN_TIME_STATS() vConfigureTimerForRunTimeStats()\r
-#define portGET_RUN_TIME_COUNTER_VALUE() ulGetRunTimeStatsCounterValue()\r
+#define portGET_RUN_TIME_COUNTER_VALUE() ( ( ulTIM6_OverflowCount << 16UL ) | ( unsigned long ) TIM6->CNT )\r
 \r
 \r
 #endif /* FREERTOS_CONFIG_H */\r
index 3f63437a183d1c831a4727230e2520f144f2b05a..5696d39a4040286649efdf69599f66d90189c875 100644 (file)
   </group>\r
   <group>\r
     <name>Standard_Demo_Code</name>\r
+    <file>\r
+      <name>$PROJ_DIR$\..\Common\Minimal\comtest.c</name>\r
+    </file>\r
     <file>\r
       <name>$PROJ_DIR$\..\Common\Minimal\dynamic.c</name>\r
     </file>\r
       <file>\r
         <name>$PROJ_DIR$\system_and_ST_code\STM32L1xx_StdPeriph_Driver\src\stm32l1xx_tim.c</name>\r
       </file>\r
+      <file>\r
+        <name>$PROJ_DIR$\system_and_ST_code\STM32L1xx_StdPeriph_Driver\src\stm32l1xx_usart.c</name>\r
+      </file>\r
     </group>\r
     <file>\r
       <name>$PROJ_DIR$\system_and_ST_code\startup_stm32l1xx_md.s</name>\r
   <file>\r
     <name>$PROJ_DIR$\ParTest.c</name>\r
   </file>\r
+  <file>\r
+    <name>$PROJ_DIR$\serial.c</name>\r
+  </file>\r
 </project>\r
 \r
 \r
index f00bc03e33832048da2eb3cb85b50c26e5714060..ed78d1979269964bea3e2bfe985bf1cc96fc63ba 100644 (file)
@@ -63,6 +63,7 @@
 #include "partest.h"\r
 #include "flash.h"\r
 #include "dynamic.h"\r
+#include "comtest2.h"\r
 \r
 /* ST driver includes. */\r
 #include "stm32l1xx_usart.h"\r
@@ -73,6 +74,7 @@
 \r
 #define mainFLASH_TASK_PRIORITY                        ( tskIDLE_PRIORITY + 1 )\r
 #define mainLCD_TASK_PRIORITY                  ( tskIDLE_PRIORITY + 1 )\r
+#define mainCOM_TEST_PRIORITY                  ( tskIDLE_PRIORITY + 2 )\r
 \r
 #define mainLCD_TASK_STACK_SIZE                        ( configMINIMAL_STACK_SIZE * 2 )\r
 \r
 #define mainMESSAGE_BUTTON_SEL                 ( 5 )\r
 #define mainMESSAGE_STATUS                             ( 6 )\r
 \r
+/* Baud rate used by the comtest tasks. */\r
+#define mainCOM_TEST_BAUD_RATE         ( 9600 )\r
+\r
+/* The LED used by the comtest tasks. See the comtest.c file for more\r
+information. */\r
+#define mainCOM_TEST_LED                       ( 3 )\r
+\r
+\r
 /*\r
  * System configuration is performed prior to main() being called, this function\r
  * configures the peripherals used by the demo application.\r
@@ -118,6 +128,7 @@ void main( void )
                xTaskCreate( vTempTask, ( signed char * ) "Temp", configMINIMAL_STACK_SIZE, NULL, tskIDLE_PRIORITY, NULL );\r
                vStartDynamicPriorityTasks();\r
                vStartLEDFlashTasks( mainFLASH_TASK_PRIORITY );\r
+               vAltStartComTestTasks( mainCOM_TEST_PRIORITY, mainCOM_TEST_BAUD_RATE, mainCOM_TEST_LED );\r
                \r
                vTaskStartScheduler();\r
        }\r
@@ -125,7 +136,7 @@ void main( void )
        for( ;; );\r
 }\r
 /*-----------------------------------------------------------*/\r
-unsigned long ulTempArray[ 10 ], ulx = 0;\r
+\r
 static void prvLCDTask( void *pvParameters )\r
 {\r
 xQueueMessage xReceivedMessage;\r
@@ -133,6 +144,12 @@ long lLine = Line1;
 const long lFontHeight = (((sFONT *)LCD_GetFont())->Height);\r
 static char cBuffer[ 256 ];\r
 \r
+       /* This function is the only function that uses printf().  If printf() is\r
+       used from any other function then some sort of mutual exclusion on stdout\r
+       will be necessary. */\r
+\r
+       printf( "%d bytes of heap space remain unallocated\n", xPortGetFreeHeapSize() );\r
+\r
        for( ;; )\r
        {\r
                xQueueReceive( xLCDQueue, &xReceivedMessage, portMAX_DELAY );\r
@@ -153,7 +170,7 @@ static char cBuffer[ 256 ];
                                                                                                break;\r
                        case mainMESSAGE_BUTTON_RIGHT   :       sprintf( cBuffer, "Button right = %d", xReceivedMessage.lMessageValue );\r
                                                                                                break;\r
-                       case mainMESSAGE_BUTTON_SEL             :       printf( "\nTask\t     Abs Time\t     %%Time\n*****************************************\n" );\r
+                       case mainMESSAGE_BUTTON_SEL             :       printf( "\nTask\t     Abs Time\t     %%Time\n*****************************************" );\r
                                                                                                vTaskGetRunTimeStats( ( signed char * ) cBuffer );\r
                                                                                                printf( cBuffer );\r
                                                                                                \r
@@ -199,6 +216,11 @@ long lHigherPriorityTaskWoken = pdFALSE; /* Not used in this case as this is the
                        xStatusMessage.lMessageValue = pdFAIL;\r
                }\r
                \r
+               if( xAreComTestTasksStillRunning() != pdPASS )\r
+               {\r
+                       xStatusMessage.lMessageValue = pdFAIL;\r
+               }\r
+               \r
                xQueueSendFromISR( xLCDQueue, &xStatusMessage, &lHigherPriorityTaskWoken );\r
                ulCounter = 0;\r
        }\r
@@ -228,6 +250,8 @@ xQueueMessage xMessage;
 \r
 static void prvSetupHardware( void )\r
 {\r
+       NVIC_PriorityGroupConfig( NVIC_PriorityGroup_4 );\r
+       \r
        /* Initialise the LEDs. */\r
        vParTestInitialise();\r
 \r
@@ -245,19 +269,6 @@ static void prvSetupHardware( void )
        configMAX_SYSCALL_INTERRUPT_PRIORITY() value set in FreeRTOSConfig.h. */\r
        STM_EVAL_PBInit( BUTTON_SEL, BUTTON_MODE_EXTI );\r
 \r
-#if 0  \r
-USART_InitTypeDef USART_InitStructure;\r
-\r
-       USART_InitStructure.USART_BaudRate = 115200;\r
-       USART_InitStructure.USART_WordLength = USART_WordLength_8b;\r
-       USART_InitStructure.USART_StopBits = USART_StopBits_1;\r
-       USART_InitStructure.USART_Parity = USART_Parity_No;\r
-       USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;\r
-       USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;\r
-       \r
-       STM_EVAL_COMInit( COM1, &USART_InitStructure );\r
-#endif\r
-       \r
        /* Initialize the LCD */\r
        STM32L152_LCD_Init();\r
        \r
@@ -287,14 +298,13 @@ NVIC_InitTypeDef NVIC_InitStructure;
        \r
        /* Only interrupt on overflow events. */\r
        TIM6->CR1 |= TIM_CR1_URS;\r
-       //TIM6->CR1 &= (uint16_t)~((uint16_t)TIM_CR1_URS);\r
        \r
        TIM_ITConfig( TIM6, TIM_IT_Update, ENABLE );\r
        \r
        /* Enable the TIM6 gloabal Interrupt */\r
        NVIC_InitStructure.NVIC_IRQChannel = TIM6_IRQn;\r
-       NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x0f;\r
-       NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x0f;\r
+       NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = configLIBRARY_LOWEST_INTERRUPT_PRIORITY;\r
+       NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x00; /* Not used as 4 bits are used for the pre-emption priority. */\r
        NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;\r
        \r
        TIM_ClearITPendingBit( TIM6, TIM_IT_Update );\r
@@ -303,18 +313,6 @@ NVIC_InitTypeDef NVIC_InitStructure;
 }\r
 /*-----------------------------------------------------------*/\r
 \r
-unsigned long ulGetRunTimeStatsCounterValue( void )\r
-{\r
-unsigned long ulReturn;\r
-\r
-       TIM6->CR1 &= (uint16_t)(~((uint16_t)TIM_CR1_CEN));\r
-       ulReturn = ( ( ulTIM6_OverflowCount << 16UL ) | ( unsigned long ) TIM6->CNT );\r
-       TIM6->CR1 |= TIM_CR1_CEN;\r
-       \r
-       return ulReturn;\r
-}\r
-/*-----------------------------------------------------------*/\r
-\r
 void TIM6_IRQHandler( void )\r
 {\r
        if( TIM_GetITStatus( TIM6, TIM_IT_Update) != RESET)\r
@@ -323,5 +321,15 @@ void TIM6_IRQHandler( void )
                TIM_ClearITPendingBit( TIM6, TIM_IT_Update );\r
        }\r
 }\r
+/*-----------------------------------------------------------*/\r
+\r
+void vApplicationStackOverflowHook( xTaskHandle *pxTask, signed char *pcTaskName )\r
+{\r
+       ( void ) pcTaskName;\r
+       ( void ) pxTask;\r
+       \r
+       for( ;; );\r
+}\r
+\r
 \r
 \r
diff --git a/Demo/Cortex_STM32L152_IAR/serial.c b/Demo/Cortex_STM32L152_IAR/serial.c
new file mode 100644 (file)
index 0000000..fd3a150
--- /dev/null
@@ -0,0 +1,230 @@
+/*\r
+    FreeRTOS V6.1.0 - Copyright (C) 2010 Real Time Engineers Ltd.\r
+\r
+    ***************************************************************************\r
+    *                                                                         *\r
+    * If you are:                                                             *\r
+    *                                                                         *\r
+    *    + New to FreeRTOS,                                                   *\r
+    *    + Wanting to learn FreeRTOS or multitasking in general quickly       *\r
+    *    + Looking for basic training,                                        *\r
+    *    + Wanting to improve your FreeRTOS skills and productivity           *\r
+    *                                                                         *\r
+    * then take a look at the FreeRTOS books - available as PDF or paperback  *\r
+    *                                                                         *\r
+    *        "Using the FreeRTOS Real Time Kernel - a Practical Guide"        *\r
+    *                  http://www.FreeRTOS.org/Documentation                  *\r
+    *                                                                         *\r
+    * A pdf reference manual is also available.  Both are usually delivered   *\r
+    * to your inbox within 20 minutes to two hours when purchased between 8am *\r
+    * and 8pm GMT (although please allow up to 24 hours in case of            *\r
+    * exceptional circumstances).  Thank you for your support!                *\r
+    *                                                                         *\r
+    ***************************************************************************\r
+\r
+    This file is part of the FreeRTOS distribution.\r
+\r
+    FreeRTOS is free software; you can redistribute it and/or modify it under\r
+    the terms of the GNU General Public License (version 2) as published by the\r
+    Free Software Foundation AND MODIFIED BY the FreeRTOS exception.\r
+    ***NOTE*** The exception to the GPL is included to allow you to distribute\r
+    a combined work that includes FreeRTOS without being obliged to provide the\r
+    source code for proprietary components outside of the FreeRTOS kernel.\r
+    FreeRTOS is distributed in the hope that it will be useful, but WITHOUT\r
+    ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\r
+    FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for\r
+    more details. You should have received a copy of the GNU General Public\r
+    License and the FreeRTOS license exception along with FreeRTOS; if not it\r
+    can be viewed here: http://www.freertos.org/a00114.html and also obtained\r
+    by writing to Richard Barry, contact details for whom are available on the\r
+    FreeRTOS WEB site.\r
+\r
+    1 tab == 4 spaces!\r
+\r
+    http://www.FreeRTOS.org - Documentation, latest information, license and\r
+    contact details.\r
+\r
+    http://www.SafeRTOS.com - A version that is certified for use in safety\r
+    critical systems.\r
+\r
+    http://www.OpenRTOS.com - Commercial support, development, porting,\r
+    licensing and training services.\r
+*/\r
+\r
+/*\r
+       BASIC INTERRUPT DRIVEN SERIAL PORT DRIVER FOR UART0.\r
+*/\r
+\r
+/* Scheduler includes. */\r
+#include "FreeRTOS.h"\r
+#include "queue.h"\r
+#include "semphr.h"\r
+#include "comtest2.h"\r
+\r
+/* Library includes. */\r
+#include "stm32l152_eval.h"\r
+\r
+/* Demo application includes. */\r
+#include "serial.h"\r
+/*-----------------------------------------------------------*/\r
+\r
+/* Misc defines. */\r
+#define serINVALID_QUEUE                               ( ( xQueueHandle ) 0 )\r
+#define serNO_BLOCK                                            ( ( portTickType ) 0 )\r
+#define serTX_BLOCK_TIME                               ( 40 / portTICK_RATE_MS )\r
+\r
+/*-----------------------------------------------------------*/\r
+\r
+/* The queue used to hold received characters. */\r
+static xQueueHandle xRxedChars;\r
+static xQueueHandle xCharsForTx;\r
+\r
+/*-----------------------------------------------------------*/\r
+\r
+/*\r
+ * See the serial2.h header file.\r
+ */\r
+xComPortHandle xSerialPortInitMinimal( unsigned portLONG ulWantedBaud, unsigned portBASE_TYPE uxQueueLength )\r
+{\r
+USART_InitTypeDef USART_InitStructure;\r
+xComPortHandle xReturn;\r
+NVIC_InitTypeDef NVIC_InitStructure;\r
+\r
+       /* Create the queues used to hold Rx/Tx characters. */\r
+       xRxedChars = xQueueCreate( uxQueueLength, ( unsigned portBASE_TYPE ) sizeof( signed portCHAR ) );\r
+       xCharsForTx = xQueueCreate( uxQueueLength + 1, ( unsigned portBASE_TYPE ) sizeof( signed portCHAR ) );\r
+       \r
+       /* If the queue/semaphore was created correctly then setup the serial port\r
+       hardware. */\r
+       if( ( xRxedChars != serINVALID_QUEUE ) && ( xCharsForTx != serINVALID_QUEUE ) )\r
+       {\r
+               USART_InitStructure.USART_BaudRate = ulWantedBaud;\r
+               USART_InitStructure.USART_WordLength = USART_WordLength_8b;\r
+               USART_InitStructure.USART_StopBits = USART_StopBits_1;\r
+               USART_InitStructure.USART_Parity = USART_Parity_No;\r
+               USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;\r
+               USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;\r
+               \r
+               /* The Eval board COM2 is being used, which in reality is the STM32\r
+               USART3. */\r
+               STM_EVAL_COMInit( COM2, &USART_InitStructure );\r
+               \r
+               NVIC_InitStructure.NVIC_IRQChannel = USART3_IRQn;\r
+               NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = configLIBRARY_MAX_SYSCALL_INTERRUPT_PRIORITY;\r
+               NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0; /* Not used as 4 bits are used for the pre-emption priority. */;\r
+               NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;\r
+               NVIC_Init( &NVIC_InitStructure );\r
+               USART_ITConfig( USART3, USART_IT_RXNE, ENABLE );\r
+       }\r
+       else\r
+       {\r
+               xReturn = ( xComPortHandle ) 0;\r
+       }\r
+\r
+       /* This demo file only supports a single port but we have to return\r
+       something to comply with the standard demo header file. */\r
+       return xReturn;\r
+}\r
+/*-----------------------------------------------------------*/\r
+\r
+signed portBASE_TYPE xSerialGetChar( xComPortHandle pxPort, signed portCHAR *pcRxedChar, portTickType xBlockTime )\r
+{\r
+       /* The port handle is not required as this driver only supports one port. */\r
+       ( void ) pxPort;\r
+\r
+       /* Get the next character from the buffer.  Return false if no characters\r
+       are available, or arrive before xBlockTime expires. */\r
+       if( xQueueReceive( xRxedChars, pcRxedChar, xBlockTime ) )\r
+       {\r
+               return pdTRUE;\r
+       }\r
+       else\r
+       {\r
+               return pdFALSE;\r
+       }\r
+}\r
+/*-----------------------------------------------------------*/\r
+\r
+void vSerialPutString( xComPortHandle pxPort, const signed portCHAR * const pcString, unsigned portSHORT usStringLength )\r
+{\r
+signed portCHAR *pxNext;\r
+\r
+       /* A couple of parameters that this port does not use. */\r
+       ( void ) usStringLength;\r
+       ( void ) pxPort;\r
+\r
+       /* NOTE: This implementation does not handle the queue being full as no\r
+       block time is used! */\r
+\r
+       /* The port handle is not required as this driver only supports UART1. */\r
+       ( void ) pxPort;\r
+\r
+       /* Send each character in the string, one at a time. */\r
+       pxNext = ( signed portCHAR * ) pcString;\r
+       while( *pxNext )\r
+       {\r
+               xSerialPutChar( pxPort, *pxNext, serNO_BLOCK );\r
+               pxNext++;\r
+       }\r
+}\r
+/*-----------------------------------------------------------*/\r
+\r
+signed portBASE_TYPE xSerialPutChar( xComPortHandle pxPort, signed portCHAR cOutChar, portTickType xBlockTime )\r
+{\r
+signed portBASE_TYPE xReturn;\r
+\r
+       if( xQueueSend( xCharsForTx, &cOutChar, xBlockTime ) == pdPASS )\r
+       {\r
+               xReturn = pdPASS;\r
+               USART_ITConfig( USART3, USART_IT_TXE, ENABLE );\r
+       }\r
+       else\r
+       {\r
+               xReturn = pdFAIL;\r
+       }\r
+\r
+       return xReturn;\r
+}\r
+/*-----------------------------------------------------------*/\r
+\r
+void vSerialClose( xComPortHandle xPort )\r
+{\r
+       /* Not supported as not required by the demo application. */\r
+}\r
+/*-----------------------------------------------------------*/\r
+\r
+void USART3_IRQHandler( void )\r
+{\r
+portBASE_TYPE xHigherPriorityTaskWoken = pdFALSE;\r
+portCHAR cChar;\r
+\r
+       if( USART_GetITStatus( USART3, USART_IT_TXE ) == SET )\r
+       {\r
+               /* The interrupt was caused by the THR becoming empty.  Are there any\r
+               more characters to transmit? */\r
+               if( xQueueReceiveFromISR( xCharsForTx, &cChar, &xHigherPriorityTaskWoken ) == pdTRUE )\r
+               {\r
+                       /* A character was retrieved from the queue so can be sent to the\r
+                       THR now. */\r
+                       USART_SendData( USART3, cChar );\r
+               }\r
+               else\r
+               {\r
+                       USART_ITConfig( USART3, USART_IT_TXE, DISABLE );                \r
+               }               \r
+       }\r
+       \r
+       if( USART_GetITStatus( USART3, USART_IT_RXNE ) == SET )\r
+       {\r
+               cChar = USART_ReceiveData( USART3 );\r
+               xQueueSendFromISR( xRxedChars, &cChar, &xHigherPriorityTaskWoken );\r
+       }       \r
+\r
+       portEND_SWITCHING_ISR( xHigherPriorityTaskWoken );\r
+}\r
+\r
+\r
+\r
+\r
+\r
+       \r
index dd9da81afa08455600831b4a0cc7b265e1574ed0..97c967e71d3c3769f08fdc2cf33db4fc5cae900e 100644 (file)
@@ -19,7 +19,7 @@
           \r
           \r
           \r
-        <Column0>295</Column0><Column1>27</Column1><Column2>27</Column2><Column3>27</Column3></ColumnWidths>\r
+        <Column0>279</Column0><Column1>27</Column1><Column2>27</Column2><Column3>27</Column3></ColumnWidths>\r
       </Workspace>\r
       <Disassembly>\r
         <PreferedWindows>\r
         <CodeCovShow>1</CodeCovShow>\r
         <InstrProfShow>1</InstrProfShow>\r
       </Disassembly>\r
-    <Watch><Format><struct_types/><watch_formats/></Format><PreferedWindows><Position>2</Position><ScreenPosX>0</ScreenPosX><ScreenPosY>0</ScreenPosY><Windows/></PreferedWindows><Column0>125</Column0><Column1>100</Column1><Column2>100</Column2><Column3>100</Column3></Watch><QuickWatch><PreferedWindows><Position>2</Position><ScreenPosX>0</ScreenPosX><ScreenPosY>0</ScreenPosY><Windows/></PreferedWindows><Column0>208</Column0><Column1>100</Column1><Column2>100</Column2><Column3>100</Column3></QuickWatch><TerminalIO><PreferedWindows><Position>2</Position><ScreenPosX>0</ScreenPosX><ScreenPosY>0</ScreenPosY><Windows/></PreferedWindows><InputSource>1</InputSource><InputMode>10</InputMode><Filename>$PROJ_DIR$\TermIOInput.txt</Filename><InputEcho>1</InputEcho><ShowReset>0</ShowReset></TerminalIO><TASKVIEW><Column0>200</Column0><Column1>100</Column1><Column2>100</Column2><Column3>100</Column3><Column4>100</Column4><Column5>100</Column5><Column6>150</Column6></TASKVIEW><QUEUEVIEW><Column0>300</Column0><Column1>100</Column1><Column2>100</Column2><Column3>100</Column3><Column4>100</Column4><Column5>100</Column5><Column6>100</Column6></QUEUEVIEW><Register><PreferedWindows><Position>2</Position><ScreenPosX>0</ScreenPosX><ScreenPosY>0</ScreenPosY><Windows/></PreferedWindows></Register></Static>\r
+    <Watch><Format><struct_types/><watch_formats><Fmt><Key>{W}Watch-0:tmppre</Key><Value>1</Value></Fmt></watch_formats></Format><PreferedWindows><Position>2</Position><ScreenPosX>0</ScreenPosX><ScreenPosY>0</ScreenPosY><Windows/></PreferedWindows><Column0>151</Column0><Column1>148</Column1><Column2>100</Column2><Column3>100</Column3></Watch><QuickWatch><PreferedWindows><Position>2</Position><ScreenPosX>0</ScreenPosX><ScreenPosY>0</ScreenPosY><Windows/></PreferedWindows><Column0>208</Column0><Column1>100</Column1><Column2>100</Column2><Column3>100</Column3></QuickWatch><TerminalIO><PreferedWindows><Position>2</Position><ScreenPosX>0</ScreenPosX><ScreenPosY>0</ScreenPosY><Windows/></PreferedWindows><InputSource>1</InputSource><InputMode>10</InputMode><Filename>$PROJ_DIR$\TermIOInput.txt</Filename><InputEcho>1</InputEcho><ShowReset>0</ShowReset></TerminalIO><TASKVIEW><Column0>200</Column0><Column1>100</Column1><Column2>100</Column2><Column3>100</Column3><Column4>100</Column4><Column5>100</Column5><Column6>150</Column6></TASKVIEW><QUEUEVIEW><Column0>300</Column0><Column1>100</Column1><Column2>100</Column2><Column3>100</Column3><Column4>100</Column4><Column5>100</Column5><Column6>100</Column6></QUEUEVIEW><Register><PreferedWindows><Position>2</Position><ScreenPosX>0</ScreenPosX><ScreenPosY>0</ScreenPosY><Windows/></PreferedWindows></Register><CallStack><PreferedWindows><Position>1</Position><ScreenPosX>0</ScreenPosX><ScreenPosY>0</ScreenPosY><Windows/></PreferedWindows><ViewArgs>1</ViewArgs></CallStack></Static>\r
     <Windows>\r
       \r
       \r
-    <Wnd6>\r
+    <Wnd1>\r
         <Tabs>\r
           <Tab>\r
             <Identity>TabID-15530-21362</Identity>\r
             <Factory>Workspace</Factory>\r
             <Session>\r
               \r
-            <NodeDict><ExpandedNode>RTOSDemo</ExpandedNode><ExpandedNode>RTOSDemo/FreeRTOS_Source</ExpandedNode><ExpandedNode>RTOSDemo/System_and_ST_Code</ExpandedNode><ExpandedNode>RTOSDemo/System_and_ST_Code/Eval_Board_Library</ExpandedNode><ExpandedNode>RTOSDemo/System_and_ST_Code/Peripheral_Library</ExpandedNode></NodeDict></Session>\r
+            <NodeDict><ExpandedNode>RTOSDemo</ExpandedNode><ExpandedNode>RTOSDemo/FreeRTOS_Source</ExpandedNode><ExpandedNode>RTOSDemo/FreeRTOS_Source/Portable</ExpandedNode><ExpandedNode>RTOSDemo/System_and_ST_Code</ExpandedNode><ExpandedNode>RTOSDemo/System_and_ST_Code/Eval_Board_Library</ExpandedNode><ExpandedNode>RTOSDemo/System_and_ST_Code/Peripheral_Library</ExpandedNode><ExpandedNode>RTOSDemo/System_and_ST_Code/Peripheral_Library/misc.c</ExpandedNode></NodeDict></Session>\r
           </Tab>\r
         </Tabs>\r
         \r
-      <SelectedTab>0</SelectedTab></Wnd6><Wnd7><Tabs><Tab><Identity>TabID-10464-23570</Identity><TabName>Tasks</TabName><Factory>TASKVIEW</Factory><Session/></Tab></Tabs><SelectedTab>0</SelectedTab></Wnd7><Wnd8><Tabs><Tab><Identity>TabID-31438-23586</Identity><TabName>Queues</TabName><Factory>QUEUEVIEW</Factory><Session/></Tab></Tabs><SelectedTab>0</SelectedTab></Wnd8><Wnd9><Tabs><Tab><Identity>TabID-18392-8256</Identity><TabName>Terminal I/O</TabName><Factory>TerminalIO</Factory><Session/></Tab></Tabs><SelectedTab>0</SelectedTab></Wnd9></Windows>\r
+      <SelectedTab>0</SelectedTab></Wnd1><Wnd2><Tabs><Tab><Identity>TabID-10464-23570</Identity><TabName>Tasks</TabName><Factory>TASKVIEW</Factory><Session/></Tab></Tabs><SelectedTab>0</SelectedTab></Wnd2><Wnd4><Tabs><Tab><Identity>TabID-31438-23586</Identity><TabName>Queues</TabName><Factory>QUEUEVIEW</Factory><Session/></Tab></Tabs><SelectedTab>0</SelectedTab></Wnd4><Wnd0><Tabs><Tab><Identity>TabID-15541-875</Identity><TabName>Terminal I/O</TabName><Factory>TerminalIO</Factory><Session/></Tab></Tabs><SelectedTab>0</SelectedTab></Wnd0></Windows>\r
     <Editor>\r
       \r
       \r
       \r
       \r
-    <Pane><Tab><Factory>TextEditor</Factory><Filename>$WS_DIR$\main.c</Filename><XPos>0</XPos><YPos>139</YPos><SelStart>6109</SelStart><SelEnd>6109</SelEnd></Tab><Tab><Factory>TextEditor</Factory><Filename>$WS_DIR$\..\..\Source\portable\IAR\ARM_CM3\port.c</Filename><XPos>0</XPos><YPos>168</YPos><SelStart>7156</SelStart><SelEnd>7156</SelEnd></Tab><Tab><Factory>TextEditor</Factory><Filename>$WS_DIR$\..\Common\Minimal\flash.c</Filename><XPos>0</XPos><YPos>131</YPos><SelStart>5825</SelStart><SelEnd>5825</SelEnd></Tab><Tab><Factory>TextEditor</Factory><Filename>$WS_DIR$\FreeRTOSConfig.h</Filename><XPos>0</XPos><YPos>105</YPos><SelStart>5546</SelStart><SelEnd>5576</SelEnd></Tab><Tab><Factory>TextEditor</Factory><Filename>$WS_DIR$\..\..\Source\tasks.c</Filename><XPos>0</XPos><YPos>1589</YPos><SelStart>50344</SelStart><SelEnd>50344</SelEnd></Tab><Tab><Factory>TextEditor</Factory><Filename>$WS_DIR$\..\..\Source\portable\IAR\ARM_CM3\portasm.s</Filename><XPos>0</XPos><YPos>121</YPos><SelStart>4800</SelStart><SelEnd>4800</SelEnd></Tab><Tab><Factory>TextEditor</Factory><Filename>$WS_DIR$\..\Common\Minimal\dynamic.c</Filename><XPos>0</XPos><YPos>225</YPos><SelStart>11355</SelStart><SelEnd>11355</SelEnd></Tab><Tab><Factory>TextEditor</Factory><Filename>$WS_DIR$\system_and_ST_code\STM32L1xx_StdPeriph_Driver\inc\stm32l1xx_tim.h</Filename><XPos>0</XPos><YPos>583</YPos><SelStart>24547</SelStart><SelEnd>24547</SelEnd></Tab><Tab><Factory>TextEditor</Factory><Filename>$WS_DIR$\system_and_ST_code\STM32L1xx_StdPeriph_Driver\src\stm32l1xx_tim.c</Filename><XPos>0</XPos><YPos>1744</YPos><SelStart>61786</SelStart><SelEnd>61788</SelEnd></Tab><ActiveTab>8</ActiveTab><Tab><Factory>TextEditor</Factory><Filename>$WS_DIR$\system_and_ST_code\STM32L152_EVAL\stm32l152_eval.c</Filename><XPos>0</XPos><YPos>305</YPos><SelStart>11633</SelStart><SelEnd>11633</SelEnd></Tab></Pane><ActivePane>0</ActivePane><Sizes><Pane><X>1000000</X><Y>1000000</Y></Pane></Sizes><SplitMode>1</SplitMode></Editor>\r
+    <Pane><Tab><Factory>TextEditor</Factory><Filename>$WS_DIR$\serial.c</Filename><XPos>0</XPos><YPos>95</YPos><SelStart>5372</SelStart><SelEnd>5372</SelEnd></Tab><ActiveTab>0</ActiveTab><Tab><Factory>TextEditor</Factory><Filename>$WS_DIR$\main.c</Filename><XPos>0</XPos><YPos>102</YPos><SelStart>4609</SelStart><SelEnd>4609</SelEnd></Tab><Tab><Factory>TextEditor</Factory><Filename>$WS_DIR$\ParTest.c</Filename><XPos>0</XPos><YPos>47</YPos><SelStart>3862</SelStart><SelEnd>3862</SelEnd></Tab><Tab><Factory>TextEditor</Factory><Filename>$WS_DIR$\FreeRTOSConfig.h</Filename><XPos>0</XPos><YPos>86</YPos><SelStart>4824</SelStart><SelEnd>4840</SelEnd></Tab><Tab><Factory>TextEditor</Factory><Filename>$WS_DIR$\..\..\Source\list.c</Filename><XPos>40</XPos><YPos>136</YPos><SelStart>7024</SelStart><SelEnd>7024</SelEnd></Tab><Tab><Factory>TextEditor</Factory><Filename>$WS_DIR$\system_and_ST_code\STM32L152_EVAL\stm32l152_eval.c</Filename><XPos>0</XPos><YPos>315</YPos><SelStart>11570</SelStart><SelEnd>11570</SelEnd></Tab><Tab><Factory>TextEditor</Factory><Filename>$WS_DIR$\..\..\Source\portable\IAR\ARM_CM3\port.c</Filename><XPos>0</XPos><YPos>125</YPos><SelStart>6023</SelStart><SelEnd>6023</SelEnd></Tab><Tab><Factory>TextEditor</Factory><Filename>$WS_DIR$\..\Common\Minimal\comtest.c</Filename><XPos>0</XPos><YPos>146</YPos><SelStart>0</SelStart><SelEnd>0</SelEnd></Tab><Tab><Factory>TextEditor</Factory><Filename>$WS_DIR$\system_and_ST_code\STM32L1xx_StdPeriph_Driver\src\misc.c</Filename><XPos>0</XPos><YPos>117</YPos><SelStart>4483</SelStart><SelEnd>4483</SelEnd></Tab><Tab><Factory>TextEditor</Factory><Filename>$WS_DIR$\system_and_ST_code\CMSIS\CM3\DeviceSupport\ST\STM32L1xx\stm32l1xx.h</Filename><XPos>0</XPos><YPos>89</YPos><SelStart>4251</SelStart><SelEnd>4251</SelEnd></Tab></Pane><ActivePane>0</ActivePane><Sizes><Pane><X>1000000</X><Y>1000000</Y></Pane></Sizes><SplitMode>1</SplitMode></Editor>\r
     <Positions>\r
       \r
       \r
       \r
       \r
       \r
-    <Top><Row0><Sizes><Toolbar-012aae88><key>iaridepm.enu1</key></Toolbar-012aae88><Toolbar-04c87bf8><key>debuggergui.enu1</key></Toolbar-04c87bf8></Sizes></Row0><Row1><Sizes><Toolbar-06a0c250><key>armjlink.enu1</key></Toolbar-06a0c250></Sizes></Row1></Top><Left><Row0><Sizes><Wnd6><Rect><Top>-2</Top><Left>-2</Left><Bottom>600</Bottom><Right>369</Right><x>-2</x><y>-2</y><xscreen>200</xscreen><yscreen>200</yscreen><sizeHorzCX>119048</sizeHorzCX><sizeHorzCY>203666</sizeHorzCY><sizeVertCX>220833</sizeVertCX><sizeVertCY>613035</sizeVertCY></Rect></Wnd6></Sizes></Row0></Left><Right><Row0><Sizes><Wnd9><Rect><Top>-2</Top><Left>-2</Left><Bottom>600</Bottom><Right>467</Right><x>-2</x><y>-2</y><xscreen>200</xscreen><yscreen>200</yscreen><sizeHorzCX>119048</sizeHorzCX><sizeHorzCY>203666</sizeHorzCY><sizeVertCX>279167</sizeVertCX><sizeVertCY>613035</sizeVertCY></Rect></Wnd9></Sizes></Row0></Right><Bottom><Row0><Sizes><Wnd7><Rect><Top>-2</Top><Left>-2</Left><Bottom>243</Bottom><Right>1682</Right><x>-2</x><y>-2</y><xscreen>1684</xscreen><yscreen>245</yscreen><sizeHorzCX>1002381</sizeHorzCX><sizeHorzCY>249491</sizeHorzCY><sizeVertCX>119048</sizeVertCX><sizeVertCY>203666</sizeVertCY></Rect></Wnd7></Sizes></Row0><Row1><Sizes><Wnd8><Rect><Top>241</Top><Left>-2</Left><Bottom>314</Bottom><Right>1682</Right><x>-2</x><y>241</y><xscreen>1684</xscreen><yscreen>73</yscreen><sizeHorzCX>1002381</sizeHorzCX><sizeHorzCY>74338</sizeHorzCY><sizeVertCX>119048</sizeVertCX><sizeVertCY>203666</sizeVertCY></Rect></Wnd8></Sizes></Row1></Bottom><Float><Sizes/></Float></Positions>\r
+    <Top><Row0><Sizes><Toolbar-012aae88><key>iaridepm.enu1</key></Toolbar-012aae88><Toolbar-0a5af640><key>debuggergui.enu1</key></Toolbar-0a5af640></Sizes></Row0><Row1><Sizes><Toolbar-068cd630><key>armjlink.enu1</key></Toolbar-068cd630></Sizes></Row1></Top><Left><Row0><Sizes><Wnd1><Rect><Top>-2</Top><Left>-2</Left><Bottom>682</Bottom><Right>369</Right><x>-2</x><y>-2</y><xscreen>200</xscreen><yscreen>200</yscreen><sizeHorzCX>119048</sizeHorzCX><sizeHorzCY>203666</sizeHorzCY><sizeVertCX>220833</sizeVertCX><sizeVertCY>696538</sizeVertCY></Rect></Wnd1></Sizes></Row0></Left><Right><Row0><Sizes><Wnd0><Rect><Top>-2</Top><Left>-2</Left><Bottom>682</Bottom><Right>435</Right><x>-2</x><y>-2</y><xscreen>200</xscreen><yscreen>200</yscreen><sizeHorzCX>119048</sizeHorzCX><sizeHorzCY>203666</sizeHorzCY><sizeVertCX>260119</sizeVertCX><sizeVertCY>696538</sizeVertCY></Rect></Wnd0></Sizes></Row0></Right><Bottom><Row0><Sizes><Wnd2><Rect><Top>-2</Top><Left>-2</Left><Bottom>161</Bottom><Right>1682</Right><x>-2</x><y>-2</y><xscreen>1684</xscreen><yscreen>163</yscreen><sizeHorzCX>1002381</sizeHorzCX><sizeHorzCY>165988</sizeHorzCY><sizeVertCX>119048</sizeVertCX><sizeVertCY>203666</sizeVertCY></Rect></Wnd2></Sizes></Row0><Row1><Sizes><Wnd4><Rect><Top>159</Top><Left>-2</Left><Bottom>232</Bottom><Right>1682</Right><x>-2</x><y>159</y><xscreen>1684</xscreen><yscreen>73</yscreen><sizeHorzCX>1002381</sizeHorzCX><sizeHorzCY>74338</sizeHorzCY><sizeVertCX>119048</sizeVertCX><sizeVertCY>203666</sizeVertCY></Rect></Wnd4></Sizes></Row1></Bottom><Float><Sizes/></Float></Positions>\r
   </Desktop>\r
 </Project>\r
 \r
index 0ff5f031d5bbcdad65ece73c0a391295dfb8ec1e..0bb910e5551d5b5e15f287bc7ae35473aa543b15 100644 (file)
@@ -1,5 +1,5 @@
 [DebugChecksum]\r
-Checksum=-1294035724\r
+Checksum=317489748\r
 [DisAssemblyWindow]\r
 NumStates=_ 1\r
 State 1=_ 1\r
index e5687db787538802cc7adf4b97765044158a6134..ed80139b97b509ae41a81648b554804d167d4585 100644 (file)
@@ -17,7 +17,7 @@
     <Build><ColumnWidth0>20</ColumnWidth0><ColumnWidth1>1216</ColumnWidth1><ColumnWidth2>324</ColumnWidth2><ColumnWidth3>81</ColumnWidth3></Build><TerminalIO/><Debug-Log><ColumnWidth0>20</ColumnWidth0><ColumnWidth1>1622</ColumnWidth1></Debug-Log></Static>\r
     <Windows>\r
       \r
-    <Wnd0>\r
+    <Wnd2>\r
         <Tabs>\r
           <Tab>\r
             <Identity>TabID-27630-4718</Identity>\r
             <Factory>Workspace</Factory>\r
             <Session>\r
               \r
-            <NodeDict><ExpandedNode>RTOSDemo</ExpandedNode><ExpandedNode>RTOSDemo/FreeRTOS_Source</ExpandedNode><ExpandedNode>RTOSDemo/Standard_Demo_Code</ExpandedNode><ExpandedNode>RTOSDemo/System_and_ST_Code</ExpandedNode><ExpandedNode>RTOSDemo/System_and_ST_Code/Eval_Board_Library</ExpandedNode><ExpandedNode>RTOSDemo/System_and_ST_Code/Peripheral_Library</ExpandedNode></NodeDict></Session>\r
+            <NodeDict><ExpandedNode>RTOSDemo</ExpandedNode><ExpandedNode>RTOSDemo/FreeRTOS_Source</ExpandedNode><ExpandedNode>RTOSDemo/Standard_Demo_Code</ExpandedNode></NodeDict></Session>\r
           </Tab>\r
         </Tabs>\r
         \r
-      <SelectedTab>0</SelectedTab></Wnd0><Wnd1><Tabs><Tab><Identity>TabID-10002-7709</Identity><TabName>Build</TabName><Factory>Build</Factory><Session/></Tab><Tab><Identity>TabID-18437-21512</Identity><TabName>Debug Log</TabName><Factory>Debug-Log</Factory><Session/></Tab></Tabs><SelectedTab>0</SelectedTab></Wnd1></Windows>\r
+      <SelectedTab>0</SelectedTab></Wnd2><Wnd3><Tabs><Tab><Identity>TabID-10002-7709</Identity><TabName>Build</TabName><Factory>Build</Factory><Session/></Tab><Tab><Identity>TabID-18437-21512</Identity><TabName>Debug Log</TabName><Factory>Debug-Log</Factory><Session/></Tab></Tabs><SelectedTab>0</SelectedTab></Wnd3></Windows>\r
     <Editor>\r
       \r
       \r
       \r
       \r
-    <Pane><Tab><Factory>TextEditor</Factory><Filename>$WS_DIR$\main.c</Filename><XPos>0</XPos><YPos>139</YPos><SelStart>6109</SelStart><SelEnd>6109</SelEnd></Tab><Tab><Factory>TextEditor</Factory><Filename>$WS_DIR$\..\..\Source\portable\IAR\ARM_CM3\port.c</Filename><XPos>0</XPos><YPos>168</YPos><SelStart>7156</SelStart><SelEnd>7156</SelEnd></Tab><Tab><Factory>TextEditor</Factory><Filename>$WS_DIR$\..\Common\Minimal\flash.c</Filename><XPos>0</XPos><YPos>131</YPos><SelStart>5825</SelStart><SelEnd>5825</SelEnd></Tab><Tab><Factory>TextEditor</Factory><Filename>$WS_DIR$\FreeRTOSConfig.h</Filename><XPos>0</XPos><YPos>105</YPos><SelStart>5546</SelStart><SelEnd>5576</SelEnd></Tab><Tab><Factory>TextEditor</Factory><Filename>$WS_DIR$\..\..\Source\tasks.c</Filename><XPos>0</XPos><YPos>1589</YPos><SelStart>50344</SelStart><SelEnd>50344</SelEnd></Tab><Tab><Factory>TextEditor</Factory><Filename>$WS_DIR$\..\..\Source\portable\IAR\ARM_CM3\portasm.s</Filename><XPos>0</XPos><YPos>121</YPos><SelStart>4800</SelStart><SelEnd>4800</SelEnd></Tab><Tab><Factory>TextEditor</Factory><Filename>$WS_DIR$\..\Common\Minimal\dynamic.c</Filename><XPos>0</XPos><YPos>225</YPos><SelStart>11355</SelStart><SelEnd>11355</SelEnd></Tab><Tab><Factory>TextEditor</Factory><Filename>$WS_DIR$\system_and_ST_code\STM32L1xx_StdPeriph_Driver\inc\stm32l1xx_tim.h</Filename><XPos>0</XPos><YPos>583</YPos><SelStart>24547</SelStart><SelEnd>24547</SelEnd></Tab><Tab><Factory>TextEditor</Factory><Filename>$WS_DIR$\system_and_ST_code\STM32L1xx_StdPeriph_Driver\src\stm32l1xx_tim.c</Filename><XPos>0</XPos><YPos>1744</YPos><SelStart>61786</SelStart><SelEnd>61788</SelEnd></Tab><ActiveTab>8</ActiveTab><Tab><Factory>TextEditor</Factory><Filename>$WS_DIR$\system_and_ST_code\STM32L152_EVAL\stm32l152_eval.c</Filename><XPos>0</XPos><YPos>305</YPos><SelStart>11633</SelStart><SelEnd>11633</SelEnd></Tab></Pane><ActivePane>0</ActivePane><Sizes><Pane><X>1000000</X><Y>1000000</Y></Pane></Sizes><SplitMode>1</SplitMode></Editor>\r
+    <Pane><Tab><Factory>TextEditor</Factory><Filename>$WS_DIR$\serial.c</Filename><XPos>0</XPos><YPos>95</YPos><SelStart>5372</SelStart><SelEnd>5372</SelEnd></Tab><ActiveTab>0</ActiveTab><Tab><Factory>TextEditor</Factory><Filename>$WS_DIR$\main.c</Filename><XPos>0</XPos><YPos>102</YPos><SelStart>4609</SelStart><SelEnd>4609</SelEnd></Tab><Tab><Factory>TextEditor</Factory><Filename>$WS_DIR$\ParTest.c</Filename><XPos>0</XPos><YPos>47</YPos><SelStart>3862</SelStart><SelEnd>3862</SelEnd></Tab><Tab><Factory>TextEditor</Factory><Filename>$WS_DIR$\FreeRTOSConfig.h</Filename><XPos>0</XPos><YPos>86</YPos><SelStart>4824</SelStart><SelEnd>4840</SelEnd></Tab><Tab><Factory>TextEditor</Factory><Filename>$WS_DIR$\..\..\Source\list.c</Filename><XPos>40</XPos><YPos>136</YPos><SelStart>7024</SelStart><SelEnd>7024</SelEnd></Tab><Tab><Factory>TextEditor</Factory><Filename>$WS_DIR$\system_and_ST_code\STM32L152_EVAL\stm32l152_eval.c</Filename><XPos>0</XPos><YPos>315</YPos><SelStart>11570</SelStart><SelEnd>11570</SelEnd></Tab><Tab><Factory>TextEditor</Factory><Filename>$WS_DIR$\..\..\Source\portable\IAR\ARM_CM3\port.c</Filename><XPos>0</XPos><YPos>125</YPos><SelStart>6023</SelStart><SelEnd>6023</SelEnd></Tab><Tab><Factory>TextEditor</Factory><Filename>$WS_DIR$\..\Common\Minimal\comtest.c</Filename><XPos>0</XPos><YPos>146</YPos><SelStart>0</SelStart><SelEnd>0</SelEnd></Tab><Tab><Factory>TextEditor</Factory><Filename>$WS_DIR$\system_and_ST_code\STM32L1xx_StdPeriph_Driver\src\misc.c</Filename><XPos>0</XPos><YPos>117</YPos><SelStart>4483</SelStart><SelEnd>4483</SelEnd></Tab><Tab><Factory>TextEditor</Factory><Filename>$WS_DIR$\system_and_ST_code\CMSIS\CM3\DeviceSupport\ST\STM32L1xx\stm32l1xx.h</Filename><XPos>0</XPos><YPos>89</YPos><SelStart>4251</SelStart><SelEnd>4251</SelEnd></Tab></Pane><ActivePane>0</ActivePane><Sizes><Pane><X>1000000</X><Y>1000000</Y></Pane></Sizes><SplitMode>1</SplitMode></Editor>\r
     <Positions>\r
       \r
       \r
       \r
       \r
       \r
-    <Top><Row0><Sizes><Toolbar-012aae88><key>iaridepm.enu1</key></Toolbar-012aae88></Sizes></Row0><Row1><Sizes/></Row1></Top><Left><Row0><Sizes><Wnd0><Rect><Top>-2</Top><Left>-2</Left><Bottom>740</Bottom><Right>438</Right><x>-2</x><y>-2</y><xscreen>200</xscreen><yscreen>200</yscreen><sizeHorzCX>119048</sizeHorzCX><sizeHorzCY>203666</sizeHorzCY><sizeVertCX>261905</sizeVertCX><sizeVertCY>755601</sizeVertCY></Rect></Wnd0></Sizes></Row0></Left><Right><Row0><Sizes/></Row0></Right><Bottom><Row0><Sizes><Wnd1><Rect><Top>-2</Top><Left>-2</Left><Bottom>198</Bottom><Right>1682</Right><x>-2</x><y>-2</y><xscreen>1684</xscreen><yscreen>200</yscreen><sizeHorzCX>1002381</sizeHorzCX><sizeHorzCY>203666</sizeHorzCY><sizeVertCX>119048</sizeVertCX><sizeVertCY>203666</sizeVertCY></Rect></Wnd1></Sizes></Row0></Bottom><Float><Sizes/></Float></Positions>\r
+    <Top><Row0><Sizes><Toolbar-012aae88><key>iaridepm.enu1</key></Toolbar-012aae88></Sizes></Row0><Row1><Sizes/></Row1></Top><Left><Row0><Sizes><Wnd2><Rect><Top>-2</Top><Left>-2</Left><Bottom>740</Bottom><Right>438</Right><x>-2</x><y>-2</y><xscreen>200</xscreen><yscreen>200</yscreen><sizeHorzCX>119048</sizeHorzCX><sizeHorzCY>203666</sizeHorzCY><sizeVertCX>261905</sizeVertCX><sizeVertCY>755601</sizeVertCY></Rect></Wnd2></Sizes></Row0></Left><Right><Row0><Sizes/></Row0></Right><Bottom><Row0><Sizes><Wnd3><Rect><Top>-2</Top><Left>-2</Left><Bottom>198</Bottom><Right>1682</Right><x>-2</x><y>-2</y><xscreen>1684</xscreen><yscreen>200</yscreen><sizeHorzCX>1002381</sizeHorzCX><sizeHorzCY>203666</sizeHorzCY><sizeVertCX>119048</sizeVertCX><sizeVertCY>203666</sizeVertCY></Rect></Wnd3></Sizes></Row0></Bottom><Float><Sizes/></Float></Positions>\r
   </Desktop>\r
 </Workspace>\r
 \r
diff --git a/Demo/Cortex_STM32L152_IAR/system_and_ST_code/STM32L1xx_StdPeriph_Driver/inc/stm32l1xx_usart.h b/Demo/Cortex_STM32L152_IAR/system_and_ST_code/STM32L1xx_StdPeriph_Driver/inc/stm32l1xx_usart.h
new file mode 100644 (file)
index 0000000..c6a1416
--- /dev/null
@@ -0,0 +1,399 @@
+/**\r
+  ******************************************************************************\r
+  * @file    stm32l1xx_usart.h\r
+  * @author  MCD Application Team\r
+  * @version V1.0.0RC1\r
+  * @date    07/02/2010\r
+  * @brief   This file contains all the functions prototypes for the USART \r
+  *          firmware library.\r
+  ******************************************************************************\r
+  * @copy\r
+  *\r
+  * THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS\r
+  * WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE\r
+  * TIME. AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY\r
+  * DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING\r
+  * FROM THE CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE\r
+  * CODING INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.\r
+  *\r
+  * <h2><center>&copy; COPYRIGHT 2010 STMicroelectronics</center></h2>\r
+  */ \r
+\r
+/* Define to prevent recursive inclusion -------------------------------------*/\r
+#ifndef __STM32L1xx_USART_H\r
+#define __STM32L1xx_USART_H\r
+\r
+#ifdef __cplusplus\r
+ extern "C" {\r
+#endif\r
+\r
+/* Includes ------------------------------------------------------------------*/\r
+#include "stm32l1xx.h"\r
+\r
+/** @addtogroup STM32L1xx_StdPeriph_Driver\r
+  * @{\r
+  */\r
+\r
+/** @addtogroup USART\r
+  * @{\r
+  */ \r
+\r
+/** @defgroup USART_Exported_Types\r
+  * @{\r
+  */ \r
+\r
+/** \r
+  * @brief  USART Init Structure definition  \r
+  */ \r
+  \r
+typedef struct\r
+{\r
+  uint32_t USART_BaudRate;            /*!< This member configures the USART communication baud rate.\r
+                                           The baud rate is computed using the following formula:\r
+                                            - IntegerDivider = ((PCLKx) / (16 * (USART_InitStruct->USART_BaudRate)))\r
+                                            - FractionalDivider = ((IntegerDivider - ((u32) IntegerDivider)) * 16) + 0.5 */\r
+\r
+  uint16_t USART_WordLength;          /*!< Specifies the number of data bits transmitted or received in a frame.\r
+                                           This parameter can be a value of @ref USART_Word_Length */\r
+\r
+  uint16_t USART_StopBits;            /*!< Specifies the number of stop bits transmitted.\r
+                                           This parameter can be a value of @ref USART_Stop_Bits */\r
+\r
+  uint16_t USART_Parity;              /*!< Specifies the parity mode.\r
+                                           This parameter can be a value of @ref USART_Parity\r
+                                           @note When parity is enabled, the computed parity is inserted\r
+                                                 at the MSB position of the transmitted data (9th bit when\r
+                                                 the word length is set to 9 data bits; 8th bit when the\r
+                                                 word length is set to 8 data bits). */\r
\r
+  uint16_t USART_Mode;                /*!< Specifies wether the Receive or Transmit mode is enabled or disabled.\r
+                                           This parameter can be a value of @ref USART_Mode */\r
+\r
+  uint16_t USART_HardwareFlowControl; /*!< Specifies wether the hardware flow control mode is enabled\r
+                                           or disabled.\r
+                                           This parameter can be a value of @ref USART_Hardware_Flow_Control */\r
+} USART_InitTypeDef;\r
+\r
+/** \r
+  * @brief  USART Clock Init Structure definition  \r
+  */ \r
+  \r
+typedef struct\r
+{\r
+\r
+  uint16_t USART_Clock;   /*!< Specifies whether the USART clock is enabled or disabled.\r
+                               This parameter can be a value of @ref USART_Clock */\r
+\r
+  uint16_t USART_CPOL;    /*!< Specifies the steady state value of the serial clock.\r
+                               This parameter can be a value of @ref USART_Clock_Polarity */\r
+\r
+  uint16_t USART_CPHA;    /*!< Specifies the clock transition on which the bit capture is made.\r
+                               This parameter can be a value of @ref USART_Clock_Phase */\r
+\r
+  uint16_t USART_LastBit; /*!< Specifies whether the clock pulse corresponding to the last transmitted\r
+                               data bit (MSB) has to be output on the SCLK pin in synchronous mode.\r
+                               This parameter can be a value of @ref USART_Last_Bit */\r
+} USART_ClockInitTypeDef;\r
+\r
+/**\r
+  * @}\r
+  */ \r
+\r
+/** @defgroup USART_Exported_Constants\r
+  * @{\r
+  */ \r
+  \r
+#define IS_USART_ALL_PERIPH(PERIPH) (((PERIPH) == USART1) || \\r
+                                     ((PERIPH) == USART2) || \\r
+                                     ((PERIPH) == USART3))\r
+\r
+/** @defgroup USART_Word_Length \r
+  * @{\r
+  */ \r
+  \r
+#define USART_WordLength_8b                  ((uint16_t)0x0000)\r
+#define USART_WordLength_9b                  ((uint16_t)0x1000)\r
+                                    \r
+#define IS_USART_WORD_LENGTH(LENGTH) (((LENGTH) == USART_WordLength_8b) || \\r
+                                      ((LENGTH) == USART_WordLength_9b))\r
+/**\r
+  * @}\r
+  */ \r
+\r
+/** @defgroup USART_Stop_Bits \r
+  * @{\r
+  */ \r
+  \r
+#define USART_StopBits_1                     ((uint16_t)0x0000)\r
+#define USART_StopBits_0_5                   ((uint16_t)0x1000)\r
+#define USART_StopBits_2                     ((uint16_t)0x2000)\r
+#define USART_StopBits_1_5                   ((uint16_t)0x3000)\r
+#define IS_USART_STOPBITS(STOPBITS) (((STOPBITS) == USART_StopBits_1) || \\r
+                                     ((STOPBITS) == USART_StopBits_0_5) || \\r
+                                     ((STOPBITS) == USART_StopBits_2) || \\r
+                                     ((STOPBITS) == USART_StopBits_1_5))\r
+/**\r
+  * @}\r
+  */ \r
+\r
+/** @defgroup USART_Parity \r
+  * @{\r
+  */ \r
+  \r
+#define USART_Parity_No                      ((uint16_t)0x0000)\r
+#define USART_Parity_Even                    ((uint16_t)0x0400)\r
+#define USART_Parity_Odd                     ((uint16_t)0x0600) \r
+#define IS_USART_PARITY(PARITY) (((PARITY) == USART_Parity_No) || \\r
+                                 ((PARITY) == USART_Parity_Even) || \\r
+                                 ((PARITY) == USART_Parity_Odd))\r
+/**\r
+  * @}\r
+  */ \r
+\r
+/** @defgroup USART_Mode \r
+  * @{\r
+  */ \r
+  \r
+#define USART_Mode_Rx                        ((uint16_t)0x0004)\r
+#define USART_Mode_Tx                        ((uint16_t)0x0008)\r
+#define IS_USART_MODE(MODE) ((((MODE) & (uint16_t)0xFFF3) == 0x00) && ((MODE) != (uint16_t)0x00))\r
+/**\r
+  * @}\r
+  */ \r
+\r
+/** @defgroup USART_Hardware_Flow_Control \r
+  * @{\r
+  */ \r
+#define USART_HardwareFlowControl_None       ((uint16_t)0x0000)\r
+#define USART_HardwareFlowControl_RTS        ((uint16_t)0x0100)\r
+#define USART_HardwareFlowControl_CTS        ((uint16_t)0x0200)\r
+#define USART_HardwareFlowControl_RTS_CTS    ((uint16_t)0x0300)\r
+#define IS_USART_HARDWARE_FLOW_CONTROL(CONTROL)\\r
+                              (((CONTROL) == USART_HardwareFlowControl_None) || \\r
+                               ((CONTROL) == USART_HardwareFlowControl_RTS) || \\r
+                               ((CONTROL) == USART_HardwareFlowControl_CTS) || \\r
+                               ((CONTROL) == USART_HardwareFlowControl_RTS_CTS))\r
+/**\r
+  * @}\r
+  */ \r
+\r
+/** @defgroup USART_Clock \r
+  * @{\r
+  */ \r
+#define USART_Clock_Disable                  ((uint16_t)0x0000)\r
+#define USART_Clock_Enable                   ((uint16_t)0x0800)\r
+#define IS_USART_CLOCK(CLOCK) (((CLOCK) == USART_Clock_Disable) || \\r
+                               ((CLOCK) == USART_Clock_Enable))\r
+/**\r
+  * @}\r
+  */ \r
+\r
+/** @defgroup USART_Clock_Polarity \r
+  * @{\r
+  */\r
+  \r
+#define USART_CPOL_Low                       ((uint16_t)0x0000)\r
+#define USART_CPOL_High                      ((uint16_t)0x0400)\r
+#define IS_USART_CPOL(CPOL) (((CPOL) == USART_CPOL_Low) || ((CPOL) == USART_CPOL_High))\r
+\r
+/**\r
+  * @}\r
+  */ \r
+\r
+/** @defgroup USART_Clock_Phase\r
+  * @{\r
+  */\r
+\r
+#define USART_CPHA_1Edge                     ((uint16_t)0x0000)\r
+#define USART_CPHA_2Edge                     ((uint16_t)0x0200)\r
+#define IS_USART_CPHA(CPHA) (((CPHA) == USART_CPHA_1Edge) || ((CPHA) == USART_CPHA_2Edge))\r
+\r
+/**\r
+  * @}\r
+  */\r
+\r
+/** @defgroup USART_Last_Bit\r
+  * @{\r
+  */\r
+\r
+#define USART_LastBit_Disable                ((uint16_t)0x0000)\r
+#define USART_LastBit_Enable                 ((uint16_t)0x0100)\r
+#define IS_USART_LASTBIT(LASTBIT) (((LASTBIT) == USART_LastBit_Disable) || \\r
+                                   ((LASTBIT) == USART_LastBit_Enable))\r
+/**\r
+  * @}\r
+  */ \r
+\r
+/** @defgroup USART_Interrupt_definition \r
+  * @{\r
+  */\r
+  \r
+#define USART_IT_PE                          ((uint16_t)0x0028)\r
+#define USART_IT_TXE                         ((uint16_t)0x0727)\r
+#define USART_IT_TC                          ((uint16_t)0x0626)\r
+#define USART_IT_RXNE                        ((uint16_t)0x0525)\r
+#define USART_IT_IDLE                        ((uint16_t)0x0424)\r
+#define USART_IT_LBD                         ((uint16_t)0x0846)\r
+#define USART_IT_CTS                         ((uint16_t)0x096A)\r
+#define USART_IT_ERR                         ((uint16_t)0x0060)\r
+#define USART_IT_ORE                         ((uint16_t)0x0360)\r
+#define USART_IT_NE                          ((uint16_t)0x0260)\r
+#define USART_IT_FE                          ((uint16_t)0x0160)\r
+#define IS_USART_CONFIG_IT(IT) (((IT) == USART_IT_PE) || ((IT) == USART_IT_TXE) || \\r
+                                ((IT) == USART_IT_TC) || ((IT) == USART_IT_RXNE) || \\r
+                                ((IT) == USART_IT_IDLE) || ((IT) == USART_IT_LBD) || \\r
+                                ((IT) == USART_IT_CTS) || ((IT) == USART_IT_ERR))\r
+#define IS_USART_GET_IT(IT) (((IT) == USART_IT_PE) || ((IT) == USART_IT_TXE) || \\r
+                             ((IT) == USART_IT_TC) || ((IT) == USART_IT_RXNE) || \\r
+                             ((IT) == USART_IT_IDLE) || ((IT) == USART_IT_LBD) || \\r
+                             ((IT) == USART_IT_CTS) || ((IT) == USART_IT_ORE) || \\r
+                             ((IT) == USART_IT_NE) || ((IT) == USART_IT_FE))\r
+#define IS_USART_CLEAR_IT(IT) (((IT) == USART_IT_TC) || ((IT) == USART_IT_RXNE) || \\r
+                               ((IT) == USART_IT_LBD) || ((IT) == USART_IT_CTS))\r
+/**\r
+  * @}\r
+  */\r
+\r
+/** @defgroup USART_DMA_Requests \r
+  * @{\r
+  */\r
+\r
+#define USART_DMAReq_Tx                      ((uint16_t)0x0080)\r
+#define USART_DMAReq_Rx                      ((uint16_t)0x0040)\r
+#define IS_USART_DMAREQ(DMAREQ) ((((DMAREQ) & (uint16_t)0xFF3F) == 0x00) && ((DMAREQ) != (uint16_t)0x00))\r
+\r
+/**\r
+  * @}\r
+  */ \r
+\r
+/** @defgroup USART_WakeUp_methods\r
+  * @{\r
+  */\r
+\r
+#define USART_WakeUp_IdleLine                ((uint16_t)0x0000)\r
+#define USART_WakeUp_AddressMark             ((uint16_t)0x0800)\r
+#define IS_USART_WAKEUP(WAKEUP) (((WAKEUP) == USART_WakeUp_IdleLine) || \\r
+                                 ((WAKEUP) == USART_WakeUp_AddressMark))\r
+/**\r
+  * @}\r
+  */\r
+\r
+/** @defgroup USART_LIN_Break_Detection_Length \r
+  * @{\r
+  */\r
+  \r
+#define USART_LINBreakDetectLength_10b      ((uint16_t)0x0000)\r
+#define USART_LINBreakDetectLength_11b      ((uint16_t)0x0020)\r
+#define IS_USART_LIN_BREAK_DETECT_LENGTH(LENGTH) \\r
+                               (((LENGTH) == USART_LINBreakDetectLength_10b) || \\r
+                                ((LENGTH) == USART_LINBreakDetectLength_11b))\r
+/**\r
+  * @}\r
+  */\r
+\r
+/** @defgroup USART_IrDA_Low_Power \r
+  * @{\r
+  */\r
+\r
+#define USART_IrDAMode_LowPower              ((uint16_t)0x0004)\r
+#define USART_IrDAMode_Normal                ((uint16_t)0x0000)\r
+#define IS_USART_IRDA_MODE(MODE) (((MODE) == USART_IrDAMode_LowPower) || \\r
+                                  ((MODE) == USART_IrDAMode_Normal))\r
+/**\r
+  * @}\r
+  */ \r
+\r
+/** @defgroup USART_Flags \r
+  * @{\r
+  */\r
+\r
+#define USART_FLAG_CTS                       ((uint16_t)0x0200)\r
+#define USART_FLAG_LBD                       ((uint16_t)0x0100)\r
+#define USART_FLAG_TXE                       ((uint16_t)0x0080)\r
+#define USART_FLAG_TC                        ((uint16_t)0x0040)\r
+#define USART_FLAG_RXNE                      ((uint16_t)0x0020)\r
+#define USART_FLAG_IDLE                      ((uint16_t)0x0010)\r
+#define USART_FLAG_ORE                       ((uint16_t)0x0008)\r
+#define USART_FLAG_NE                        ((uint16_t)0x0004)\r
+#define USART_FLAG_FE                        ((uint16_t)0x0002)\r
+#define USART_FLAG_PE                        ((uint16_t)0x0001)\r
+#define IS_USART_FLAG(FLAG) (((FLAG) == USART_FLAG_PE) || ((FLAG) == USART_FLAG_TXE) || \\r
+                             ((FLAG) == USART_FLAG_TC) || ((FLAG) == USART_FLAG_RXNE) || \\r
+                             ((FLAG) == USART_FLAG_IDLE) || ((FLAG) == USART_FLAG_LBD) || \\r
+                             ((FLAG) == USART_FLAG_CTS) || ((FLAG) == USART_FLAG_ORE) || \\r
+                             ((FLAG) == USART_FLAG_NE) || ((FLAG) == USART_FLAG_FE))\r
+                              \r
+#define IS_USART_CLEAR_FLAG(FLAG) ((((FLAG) & (uint16_t)0xFC9F) == 0x00) && ((FLAG) != (uint16_t)0x00))\r
+\r
+#define IS_USART_BAUDRATE(BAUDRATE) (((BAUDRATE) > 0) && ((BAUDRATE) < 0x003D0901))\r
+#define IS_USART_ADDRESS(ADDRESS) ((ADDRESS) <= 0xF)\r
+#define IS_USART_DATA(DATA) ((DATA) <= 0x1FF)\r
+\r
+/**\r
+  * @}\r
+  */ \r
+\r
+/**\r
+  * @}\r
+  */ \r
+\r
+/** @defgroup USART_Exported_Macros\r
+  * @{\r
+  */ \r
+\r
+/**\r
+  * @}\r
+  */ \r
+\r
+/** @defgroup USART_Exported_Functions\r
+  * @{\r
+  */\r
+\r
+void USART_DeInit(USART_TypeDef* USARTx);\r
+void USART_Init(USART_TypeDef* USARTx, USART_InitTypeDef* USART_InitStruct);\r
+void USART_StructInit(USART_InitTypeDef* USART_InitStruct);\r
+void USART_ClockInit(USART_TypeDef* USARTx, USART_ClockInitTypeDef* USART_ClockInitStruct);\r
+void USART_ClockStructInit(USART_ClockInitTypeDef* USART_ClockInitStruct);\r
+void USART_Cmd(USART_TypeDef* USARTx, FunctionalState NewState);\r
+void USART_ITConfig(USART_TypeDef* USARTx, uint16_t USART_IT, FunctionalState NewState);\r
+void USART_DMACmd(USART_TypeDef* USARTx, uint16_t USART_DMAReq, FunctionalState NewState);\r
+void USART_SetAddress(USART_TypeDef* USARTx, uint8_t USART_Address);\r
+void USART_WakeUpConfig(USART_TypeDef* USARTx, uint16_t USART_WakeUp);\r
+void USART_ReceiverWakeUpCmd(USART_TypeDef* USARTx, FunctionalState NewState);\r
+void USART_LINBreakDetectLengthConfig(USART_TypeDef* USARTx, uint16_t USART_LINBreakDetectLength);\r
+void USART_LINCmd(USART_TypeDef* USARTx, FunctionalState NewState);\r
+void USART_SendData(USART_TypeDef* USARTx, uint16_t Data);\r
+uint16_t USART_ReceiveData(USART_TypeDef* USARTx);\r
+void USART_SendBreak(USART_TypeDef* USARTx);\r
+void USART_SetGuardTime(USART_TypeDef* USARTx, uint8_t USART_GuardTime);\r
+void USART_SetPrescaler(USART_TypeDef* USARTx, uint8_t USART_Prescaler);\r
+void USART_SmartCardCmd(USART_TypeDef* USARTx, FunctionalState NewState);\r
+void USART_SmartCardNACKCmd(USART_TypeDef* USARTx, FunctionalState NewState);\r
+void USART_HalfDuplexCmd(USART_TypeDef* USARTx, FunctionalState NewState);\r
+void USART_OverSampling8Cmd(USART_TypeDef* USARTx, FunctionalState NewState);\r
+void USART_OneBitMethodCmd(USART_TypeDef* USARTx, FunctionalState NewState);\r
+void USART_IrDAConfig(USART_TypeDef* USARTx, uint16_t USART_IrDAMode);\r
+void USART_IrDACmd(USART_TypeDef* USARTx, FunctionalState NewState);\r
+FlagStatus USART_GetFlagStatus(USART_TypeDef* USARTx, uint16_t USART_FLAG);\r
+void USART_ClearFlag(USART_TypeDef* USARTx, uint16_t USART_FLAG);\r
+ITStatus USART_GetITStatus(USART_TypeDef* USARTx, uint16_t USART_IT);\r
+void USART_ClearITPendingBit(USART_TypeDef* USARTx, uint16_t USART_IT);\r
+\r
+#ifdef __cplusplus\r
+}\r
+#endif\r
+\r
+#endif /* __STM32L1xx_USART_H */\r
+/**\r
+  * @}\r
+  */ \r
+\r
+/**\r
+  * @}\r
+  */ \r
+\r
+/**\r
+  * @}\r
+  */ \r
+\r
+/******************* (C) COPYRIGHT 2010 STMicroelectronics *****END OF FILE****/\r
diff --git a/Demo/Cortex_STM32L152_IAR/system_and_ST_code/STM32L1xx_StdPeriph_Driver/src/stm32l1xx_usart.c b/Demo/Cortex_STM32L152_IAR/system_and_ST_code/STM32L1xx_StdPeriph_Driver/src/stm32l1xx_usart.c
new file mode 100644 (file)
index 0000000..90c1492
--- /dev/null
@@ -0,0 +1,995 @@
+/**\r
+  ******************************************************************************\r
+  * @file    stm32l1xx_usart.c\r
+  * @author  MCD Application Team\r
+  * @version V1.0.0RC1\r
+  * @date    07/02/2010\r
+  * @brief   This file provides all the USART firmware functions.\r
+  ******************************************************************************\r
+  * @copy\r
+  *\r
+  * THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS\r
+  * WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE\r
+  * TIME. AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY\r
+  * DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING\r
+  * FROM THE CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE\r
+  * CODING INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.\r
+  *\r
+  * <h2><center>&copy; COPYRIGHT 2010 STMicroelectronics</center></h2>\r
+  */ \r
+\r
+/* Includes ------------------------------------------------------------------*/\r
+#include "stm32l1xx_usart.h"\r
+#include "stm32l1xx_rcc.h"\r
+\r
+/** @addtogroup STM32L1xx_StdPeriph_Driver\r
+  * @{\r
+  */\r
+\r
+/** @defgroup USART \r
+  * @brief USART driver modules\r
+  * @{\r
+  */\r
+\r
+/** @defgroup USART_Private_TypesDefinitions\r
+  * @{\r
+  */\r
+\r
+/**\r
+  * @}\r
+  */\r
+\r
+/** @defgroup USART_Private_Defines\r
+  * @{\r
+  */\r
+\r
+/*!< USART CR1 register clear Mask ((~(uint16_t)0xE9F3)) */\r
+#define CR1_CLEAR_MASK            ((uint16_t)(USART_CR1_M | USART_CR1_PCE | \\r
+                                              USART_CR1_PS | USART_CR1_TE | \\r
+                                              USART_CR1_RE))\r
+\r
+/*!< USART CR2 register clock bits clear Mask ((~(uint16_t)0xF0FF)) */\r
+#define CR2_CLOCK_CLEAR_MASK      ((uint16_t)(USART_CR2_CLKEN | USART_CR2_CPOL | \\r
+                                              USART_CR2_CPHA | USART_CR2_LBCL))\r
+\r
+/*!< USART CR3 register clear Mask ((~(uint16_t)0xFCFF)) */\r
+#define CR3_CLEAR_MASK            ((uint16_t)(USART_CR3_RTSE | USART_CR3_CTSE))\r
+\r
+/*!< USART Interrupts mask */\r
+#define IT_MASK                   ((uint16_t)0x001F)\r
+\r
+/**\r
+  * @}\r
+  */\r
+\r
+/** @defgroup USART_Private_Macros\r
+  * @{\r
+  */\r
+\r
+/**\r
+  * @}\r
+  */\r
+\r
+/** @defgroup USART_Private_Variables\r
+  * @{\r
+  */\r
+\r
+/**\r
+  * @}\r
+  */\r
+\r
+/** @defgroup USART_Private_FunctionPrototypes\r
+  * @{\r
+  */\r
+\r
+/**\r
+  * @}\r
+  */\r
+\r
+/** @defgroup USART_Private_Functions\r
+  * @{\r
+  */\r
+\r
+/**\r
+  * @brief  Deinitializes the USARTx peripheral registers to their default reset values.\r
+  * @param  USARTx: Select the USART peripheral. \r
+  *   This parameter can be one of the following values: USART1, USART2 or USART3.\r
+  * @retval None\r
+  */\r
+void USART_DeInit(USART_TypeDef* USARTx)\r
+{\r
+  /* Check the parameters */\r
+  assert_param(IS_USART_ALL_PERIPH(USARTx));\r
+\r
+  if (USARTx == USART1)\r
+  {\r
+    RCC_APB2PeriphResetCmd(RCC_APB2Periph_USART1, ENABLE);\r
+    RCC_APB2PeriphResetCmd(RCC_APB2Periph_USART1, DISABLE);\r
+  }\r
+  else if (USARTx == USART2)\r
+  {\r
+    RCC_APB1PeriphResetCmd(RCC_APB1Periph_USART2, ENABLE);\r
+    RCC_APB1PeriphResetCmd(RCC_APB1Periph_USART2, DISABLE);\r
+  }\r
+  else \r
+  {\r
+    if (USARTx == USART3)\r
+    {\r
+      RCC_APB1PeriphResetCmd(RCC_APB1Periph_USART3, ENABLE);\r
+      RCC_APB1PeriphResetCmd(RCC_APB1Periph_USART3, DISABLE);    \r
+    }\r
+  }    \r
+}\r
+\r
+/**\r
+  * @brief  Initializes the USARTx peripheral according to the specified\r
+  *   parameters in the USART_InitStruct .\r
+  * @param  USARTx: Select the USART peripheral. \r
+  *   This parameter can be one of the following values:\r
+  *   USART1, USART2 or USART3.\r
+  * @param  USART_InitStruct: pointer to a USART_InitTypeDef structure\r
+  *   that contains the configuration information for the specified USART peripheral.\r
+  * @retval None\r
+  */\r
+void USART_Init(USART_TypeDef* USARTx, USART_InitTypeDef* USART_InitStruct)\r
+{\r
+  uint32_t tmpreg = 0x00, apbclock = 0x00;\r
+  uint32_t integerdivider = 0x00;\r
+  uint32_t fractionaldivider = 0x00;\r
+  RCC_ClocksTypeDef RCC_ClocksStatus;\r
+\r
+  /* Check the parameters */\r
+  assert_param(IS_USART_ALL_PERIPH(USARTx));\r
+  assert_param(IS_USART_BAUDRATE(USART_InitStruct->USART_BaudRate));  \r
+  assert_param(IS_USART_WORD_LENGTH(USART_InitStruct->USART_WordLength));\r
+  assert_param(IS_USART_STOPBITS(USART_InitStruct->USART_StopBits));\r
+  assert_param(IS_USART_PARITY(USART_InitStruct->USART_Parity));\r
+  assert_param(IS_USART_MODE(USART_InitStruct->USART_Mode));\r
+  assert_param(IS_USART_HARDWARE_FLOW_CONTROL(USART_InitStruct->USART_HardwareFlowControl));\r
+  \r
+/*---------------------------- USART CR2 Configuration -----------------------*/\r
+  tmpreg = USARTx->CR2;\r
+  /* Clear STOP[13:12] bits */\r
+  tmpreg &= (uint32_t)~((uint32_t)USART_CR2_STOP);\r
+\r
+  /* Configure the USART Stop Bits, Clock, CPOL, CPHA and LastBit ------------*/\r
+  /* Set STOP[13:12] bits according to USART_StopBits value */\r
+  tmpreg |= (uint32_t)USART_InitStruct->USART_StopBits;\r
+  \r
+  /* Write to USART CR2 */\r
+  USARTx->CR2 = (uint16_t)tmpreg;\r
+\r
+/*---------------------------- USART CR1 Configuration -----------------------*/\r
+  tmpreg = USARTx->CR1;\r
+  /* Clear M, PCE, PS, TE and RE bits */\r
+  tmpreg &= (uint32_t)~((uint32_t)CR1_CLEAR_MASK);\r
+\r
+  /* Configure the USART Word Length, Parity and mode ----------------------- */\r
+  /* Set the M bits according to USART_WordLength value */\r
+  /* Set PCE and PS bits according to USART_Parity value */\r
+  /* Set TE and RE bits according to USART_Mode value */\r
+  tmpreg |= (uint32_t)USART_InitStruct->USART_WordLength | USART_InitStruct->USART_Parity |\r
+            USART_InitStruct->USART_Mode;\r
+\r
+  /* Write to USART CR1 */\r
+  USARTx->CR1 = (uint16_t)tmpreg;\r
+\r
+/*---------------------------- USART CR3 Configuration -----------------------*/  \r
+  tmpreg = USARTx->CR3;\r
+  /* Clear CTSE and RTSE bits */\r
+  tmpreg &= (uint32_t)~((uint32_t)CR3_CLEAR_MASK);\r
+\r
+  /* Configure the USART HFC -------------------------------------------------*/\r
+  /* Set CTSE and RTSE bits according to USART_HardwareFlowControl value */\r
+  tmpreg |= USART_InitStruct->USART_HardwareFlowControl;\r
+\r
+  /* Write to USART CR3 */\r
+  USARTx->CR3 = (uint16_t)tmpreg;\r
+\r
+/*---------------------------- USART BRR Configuration -----------------------*/\r
+  /* Configure the USART Baud Rate -------------------------------------------*/\r
+  RCC_GetClocksFreq(&RCC_ClocksStatus);\r
+  if (USARTx == USART1) \r
+  {\r
+    apbclock = RCC_ClocksStatus.PCLK2_Frequency;\r
+  }\r
+  else\r
+  {\r
+    apbclock = RCC_ClocksStatus.PCLK1_Frequency;\r
+  }\r
+\r
+  /* Determine the integer part */\r
+  if ((USARTx->CR1 & USART_CR1_OVER8) != 0)\r
+  {\r
+    /* Integer part computing in case Oversampling mode is 8 Samples */\r
+    integerdivider = ((25 * apbclock) / (2 * (USART_InitStruct->USART_BaudRate)));    \r
+  }\r
+  else /* if ((USARTx->CR1 & CR1_OVER8_Set) == 0) */\r
+  {\r
+    /* Integer part computing in case Oversampling mode is 16 Samples */\r
+    integerdivider = ((25 * apbclock) / (4 * (USART_InitStruct->USART_BaudRate)));    \r
+  }\r
+  tmpreg = (integerdivider / 100) << 4;\r
+\r
+  /* Determine the fractional part */\r
+  fractionaldivider = integerdivider - (100 * (tmpreg >> 4));\r
+\r
+  /* Implement the fractional part in the register */\r
+  if ((USARTx->CR1 & USART_CR1_OVER8) != 0)\r
+  {\r
+    tmpreg |= ((((fractionaldivider * 8) + 50) / 100)) & ((uint8_t)0x07);\r
+  }\r
+  else /* if ((USARTx->CR1 & CR1_OVER8_Set) == 0) */\r
+  {\r
+    tmpreg |= ((((fractionaldivider * 16) + 50) / 100)) & ((uint8_t)0x0F);\r
+  }\r
\r
+  /* Write to USART BRR */\r
+  USARTx->BRR = (uint16_t)tmpreg;\r
+}\r
+\r
+/**\r
+  * @brief  Fills each USART_InitStruct member with its default value.\r
+  * @param  USART_InitStruct: pointer to a USART_InitTypeDef structure\r
+  *   which will be initialized.\r
+  * @retval None\r
+  */\r
+void USART_StructInit(USART_InitTypeDef* USART_InitStruct)\r
+{\r
+  /* USART_InitStruct members default value */\r
+  USART_InitStruct->USART_BaudRate = 9600;\r
+  USART_InitStruct->USART_WordLength = USART_WordLength_8b;\r
+  USART_InitStruct->USART_StopBits = USART_StopBits_1;\r
+  USART_InitStruct->USART_Parity = USART_Parity_No ;\r
+  USART_InitStruct->USART_Mode = USART_Mode_Rx | USART_Mode_Tx;\r
+  USART_InitStruct->USART_HardwareFlowControl = USART_HardwareFlowControl_None;  \r
+}\r
+\r
+/**\r
+  * @brief  Initializes the USARTx peripheral Clock according to the \r
+  *   specified parameters in the USART_ClockInitStruct .\r
+  * @param  USARTx: where x can be 1, 2, 3 to select the USART peripheral.\r
+  * @param  USART_ClockInitStruct: pointer to a USART_ClockInitTypeDef\r
+  *   structure that contains the configuration information for the specified \r
+  *   USART peripheral.  \r
+  * @retval None\r
+  */\r
+void USART_ClockInit(USART_TypeDef* USARTx, USART_ClockInitTypeDef* USART_ClockInitStruct)\r
+{\r
+  uint32_t tmpreg = 0x00;\r
+  /* Check the parameters */\r
+  assert_param(IS_USART_ALL_PERIPH(USARTx));\r
+  assert_param(IS_USART_CLOCK(USART_ClockInitStruct->USART_Clock));\r
+  assert_param(IS_USART_CPOL(USART_ClockInitStruct->USART_CPOL));\r
+  assert_param(IS_USART_CPHA(USART_ClockInitStruct->USART_CPHA));\r
+  assert_param(IS_USART_LASTBIT(USART_ClockInitStruct->USART_LastBit));\r
+  \r
+/*---------------------------- USART CR2 Configuration -----------------------*/\r
+  tmpreg = USARTx->CR2;\r
+  /* Clear CLKEN, CPOL, CPHA and LBCL bits */\r
+  tmpreg &= (uint32_t)~((uint32_t)CR2_CLOCK_CLEAR_MASK);\r
+  /* Configure the USART Clock, CPOL, CPHA and LastBit ------------*/\r
+  /* Set CLKEN bit according to USART_Clock value */\r
+  /* Set CPOL bit according to USART_CPOL value */\r
+  /* Set CPHA bit according to USART_CPHA value */\r
+  /* Set LBCL bit according to USART_LastBit value */\r
+  tmpreg |= (uint32_t)USART_ClockInitStruct->USART_Clock | USART_ClockInitStruct->USART_CPOL | \r
+                 USART_ClockInitStruct->USART_CPHA | USART_ClockInitStruct->USART_LastBit;\r
+  /* Write to USART CR2 */\r
+  USARTx->CR2 = (uint16_t)tmpreg;\r
+}\r
+\r
+/**\r
+  * @brief  Fills each USART_ClockInitStruct member with its default value.\r
+  * @param  USART_ClockInitStruct: pointer to a USART_ClockInitTypeDef\r
+  *   structure which will be initialized.\r
+  * @retval None\r
+  */\r
+void USART_ClockStructInit(USART_ClockInitTypeDef* USART_ClockInitStruct)\r
+{\r
+  /* USART_ClockInitStruct members default value */\r
+  USART_ClockInitStruct->USART_Clock = USART_Clock_Disable;\r
+  USART_ClockInitStruct->USART_CPOL = USART_CPOL_Low;\r
+  USART_ClockInitStruct->USART_CPHA = USART_CPHA_1Edge;\r
+  USART_ClockInitStruct->USART_LastBit = USART_LastBit_Disable;\r
+}\r
+\r
+/**\r
+  * @brief  Enables or disables the specified USART peripheral.\r
+  * @param  USARTx: Select the USART peripheral. \r
+  *   This parameter can be one of the following values:\r
+  *   USART1, USART2 or USART3.\r
+  * @param  NewState: new state of the USARTx peripheral.\r
+  *   This parameter can be: ENABLE or DISABLE.\r
+  * @retval None\r
+  */\r
+void USART_Cmd(USART_TypeDef* USARTx, FunctionalState NewState)\r
+{\r
+  /* Check the parameters */\r
+  assert_param(IS_USART_ALL_PERIPH(USARTx));\r
+  assert_param(IS_FUNCTIONAL_STATE(NewState));\r
+  \r
+  if (NewState != DISABLE)\r
+  {\r
+    /* Enable the selected USART by setting the UE bit in the CR1 register */\r
+    USARTx->CR1 |= USART_CR1_UE;\r
+  }\r
+  else\r
+  {\r
+    /* Disable the selected USART by clearing the UE bit in the CR1 register */\r
+    USARTx->CR1 &= (uint16_t)~((uint16_t)USART_CR1_UE);\r
+  }\r
+}\r
+\r
+/**\r
+  * @brief  Enables or disables the specified USART interrupts.\r
+  * @param  USARTx: Select the USART peripheral. \r
+  *   This parameter can be one of the following values:\r
+  *   USART1, USART2 or USART3.\r
+  * @param  USART_IT: specifies the USART interrupt sources to be enabled or disabled.\r
+  *   This parameter can be one of the following values:\r
+  *     @arg USART_IT_CTS:  CTS change interrupt (not available for UART4 and UART5)\r
+  *     @arg USART_IT_LBD:  LIN Break detection interrupt\r
+  *     @arg USART_IT_TXE:  Tansmit Data Register empty interrupt\r
+  *     @arg USART_IT_TC:   Transmission complete interrupt\r
+  *     @arg USART_IT_RXNE: Receive Data register not empty interrupt\r
+  *     @arg USART_IT_IDLE: Idle line detection interrupt\r
+  *     @arg USART_IT_PE:   Parity Error interrupt\r
+  *     @arg USART_IT_ERR:  Error interrupt(Frame error, noise error, overrun error)\r
+  * @param  NewState: new state of the specified USARTx interrupts.\r
+  *   This parameter can be: ENABLE or DISABLE.\r
+  * @retval None\r
+  */\r
+void USART_ITConfig(USART_TypeDef* USARTx, uint16_t USART_IT, FunctionalState NewState)\r
+{\r
+  uint32_t usartreg = 0x00, itpos = 0x00, itmask = 0x00;\r
+  uint32_t usartxbase = 0x00;\r
+  /* Check the parameters */\r
+  assert_param(IS_USART_ALL_PERIPH(USARTx));\r
+  assert_param(IS_USART_CONFIG_IT(USART_IT));\r
+  assert_param(IS_FUNCTIONAL_STATE(NewState));\r
+  \r
+  usartxbase = (uint32_t)USARTx;\r
+\r
+  /* Get the USART register index */\r
+  usartreg = (((uint8_t)USART_IT) >> 0x05);\r
+\r
+  /* Get the interrupt position */\r
+  itpos = USART_IT & IT_MASK;\r
+  itmask = (((uint32_t)0x01) << itpos);\r
+    \r
+  if (usartreg == 0x01) /* The IT is in CR1 register */\r
+  {\r
+    usartxbase += 0x0C;\r
+  }\r
+  else if (usartreg == 0x02) /* The IT is in CR2 register */\r
+  {\r
+    usartxbase += 0x10;\r
+  }\r
+  else /* The IT is in CR3 register */\r
+  {\r
+    usartxbase += 0x14; \r
+  }\r
+  if (NewState != DISABLE)\r
+  {\r
+    *(__IO uint32_t*)usartxbase  |= itmask;\r
+  }\r
+  else\r
+  {\r
+    *(__IO uint32_t*)usartxbase &= ~itmask;\r
+  }\r
+}\r
+\r
+/**\r
+  * @brief  Enables or disables the USART\92s DMA interface.\r
+  * @param  USARTx: Select the USART peripheral. \r
+  *   This parameter can be one of the following values:\r
+  *   USART1, USART2 or USART3.\r
+  * @param  USART_DMAReq: specifies the DMA request.\r
+  *   This parameter can be any combination of the following values:\r
+  *     @arg USART_DMAReq_Tx: USART DMA transmit request\r
+  *     @arg USART_DMAReq_Rx: USART DMA receive request\r
+  * @param  NewState: new state of the DMA Request sources.\r
+  *   This parameter can be: ENABLE or DISABLE.\r
+  * @note The DMA mode is not available for UART5.  \r
+  * @retval None\r
+  */\r
+void USART_DMACmd(USART_TypeDef* USARTx, uint16_t USART_DMAReq, FunctionalState NewState)\r
+{\r
+  /* Check the parameters */\r
+  assert_param(IS_USART_ALL_PERIPH(USARTx));\r
+  assert_param(IS_USART_DMAREQ(USART_DMAReq));  \r
+  assert_param(IS_FUNCTIONAL_STATE(NewState)); \r
+\r
+  if (NewState != DISABLE)\r
+  {\r
+    /* Enable the DMA transfer for selected requests by setting the DMAT and/or\r
+       DMAR bits in the USART CR3 register */\r
+    USARTx->CR3 |= USART_DMAReq;\r
+  }\r
+  else\r
+  {\r
+    /* Disable the DMA transfer for selected requests by clearing the DMAT and/or\r
+       DMAR bits in the USART CR3 register */\r
+    USARTx->CR3 &= (uint16_t)~USART_DMAReq;\r
+  }\r
+}\r
+\r
+/**\r
+  * @brief  Sets the address of the USART node.\r
+  * @param  USARTx: Select the USART peripheral. \r
+  *   This parameter can be one of the following values:\r
+  *   USART1, USART2 or USART3.\r
+  * @param  USART_Address: Indicates the address of the USART node.\r
+  * @retval None\r
+  */\r
+void USART_SetAddress(USART_TypeDef* USARTx, uint8_t USART_Address)\r
+{\r
+  /* Check the parameters */\r
+  assert_param(IS_USART_ALL_PERIPH(USARTx));\r
+  assert_param(IS_USART_ADDRESS(USART_Address)); \r
+    \r
+  /* Clear the USART address */\r
+  USARTx->CR2 &= (uint16_t)~((uint16_t)USART_CR2_ADD);\r
+  /* Set the USART address node */\r
+  USARTx->CR2 |= USART_Address;\r
+}\r
+\r
+/**\r
+  * @brief  Selects the USART WakeUp method.\r
+  * @param  USARTx: Select the USART peripheral. \r
+  *   This parameter can be one of the following values:\r
+  *   USART1, USART2 or USART3.\r
+  * @param  USART_WakeUp: specifies the USART wakeup method.\r
+  *   This parameter can be one of the following values:\r
+  *     @arg USART_WakeUp_IdleLine: WakeUp by an idle line detection\r
+  *     @arg USART_WakeUp_AddressMark: WakeUp by an address mark\r
+  * @retval None\r
+  */\r
+void USART_WakeUpConfig(USART_TypeDef* USARTx, uint16_t USART_WakeUp)\r
+{\r
+  /* Check the parameters */\r
+  assert_param(IS_USART_ALL_PERIPH(USARTx));\r
+  assert_param(IS_USART_WAKEUP(USART_WakeUp));\r
+  \r
+  USARTx->CR1 &= (uint16_t)~((uint16_t)USART_CR1_WAKE);\r
+  USARTx->CR1 |= USART_WakeUp;\r
+}\r
+\r
+/**\r
+  * @brief  Determines if the USART is in mute mode or not.\r
+  * @param  USARTx: Select the USART peripheral. \r
+  *   This parameter can be one of the following values:\r
+  *   USART1, USART2 or USART3.\r
+  * @param  NewState: new state of the USART mute mode.\r
+  *   This parameter can be: ENABLE or DISABLE.\r
+  * @retval None\r
+  */\r
+void USART_ReceiverWakeUpCmd(USART_TypeDef* USARTx, FunctionalState NewState)\r
+{\r
+  /* Check the parameters */\r
+  assert_param(IS_USART_ALL_PERIPH(USARTx));\r
+  assert_param(IS_FUNCTIONAL_STATE(NewState)); \r
+  \r
+  if (NewState != DISABLE)\r
+  {\r
+    /* Enable the USART mute mode  by setting the RWU bit in the CR1 register */\r
+    USARTx->CR1 |= USART_CR1_RWU;\r
+  }\r
+  else\r
+  {\r
+    /* Disable the USART mute mode by clearing the RWU bit in the CR1 register */\r
+    USARTx->CR1 &= (uint16_t)~((uint16_t)USART_CR1_RWU);\r
+  }\r
+}\r
+\r
+/**\r
+  * @brief  Sets the USART LIN Break detection length.\r
+  * @param  USARTx: Select the USART peripheral. \r
+  *   This parameter can be one of the following values:\r
+  *   USART1, USART2 or USART3.\r
+  * @param  USART_LINBreakDetectLength: specifies the LIN break detection length.\r
+  *   This parameter can be one of the following values:\r
+  *     @arg USART_LINBreakDetectLength_10b: 10-bit break detection\r
+  *     @arg USART_LINBreakDetectLength_11b: 11-bit break detection\r
+  * @retval None\r
+  */\r
+void USART_LINBreakDetectLengthConfig(USART_TypeDef* USARTx, uint16_t USART_LINBreakDetectLength)\r
+{\r
+  /* Check the parameters */\r
+  assert_param(IS_USART_ALL_PERIPH(USARTx));\r
+  assert_param(IS_USART_LIN_BREAK_DETECT_LENGTH(USART_LINBreakDetectLength));\r
+  \r
+  USARTx->CR2 &= (uint16_t)~((uint16_t)USART_CR2_LBDL);\r
+  USARTx->CR2 |= USART_LINBreakDetectLength;  \r
+}\r
+\r
+/**\r
+  * @brief  Enables or disables the USART\92s LIN mode.\r
+  * @param  USARTx: Select the USART peripheral. \r
+  *   This parameter can be one of the following values:\r
+  *   USART1, USART2 or USART3.\r
+  * @param  NewState: new state of the USART LIN mode.\r
+  *   This parameter can be: ENABLE or DISABLE.\r
+  * @retval None\r
+  */\r
+void USART_LINCmd(USART_TypeDef* USARTx, FunctionalState NewState)\r
+{\r
+  /* Check the parameters */\r
+  assert_param(IS_USART_ALL_PERIPH(USARTx));\r
+  assert_param(IS_FUNCTIONAL_STATE(NewState));\r
+  \r
+  if (NewState != DISABLE)\r
+  {\r
+    /* Enable the LIN mode by setting the LINEN bit in the CR2 register */\r
+    USARTx->CR2 |= USART_CR2_LINEN;\r
+  }\r
+  else\r
+  {\r
+    /* Disable the LIN mode by clearing the LINEN bit in the CR2 register */\r
+    USARTx->CR2 &= (uint16_t)~((uint16_t)USART_CR2_LINEN);\r
+  }\r
+}\r
+\r
+/**\r
+  * @brief  Transmits single data through the USARTx peripheral.\r
+  * @param  USARTx: Select the USART peripheral. \r
+  *   This parameter can be one of the following values:\r
+  *   USART1, USART2 or USART3.\r
+  * @param  Data: the data to transmit.\r
+  * @retval None\r
+  */\r
+void USART_SendData(USART_TypeDef* USARTx, uint16_t Data)\r
+{\r
+  /* Check the parameters */\r
+  assert_param(IS_USART_ALL_PERIPH(USARTx));\r
+  assert_param(IS_USART_DATA(Data)); \r
+    \r
+  /* Transmit Data */\r
+  USARTx->DR = (Data & (uint16_t)0x01FF);\r
+}\r
+\r
+/**\r
+  * @brief  Returns the most recent received data by the USARTx peripheral.\r
+  * @param  USARTx: Select the USART peripheral. \r
+  *   This parameter can be one of the following values:\r
+  *   USART1, USART2 or USART3.\r
+  * @retval The received data.\r
+  */\r
+uint16_t USART_ReceiveData(USART_TypeDef* USARTx)\r
+{\r
+  /* Check the parameters */\r
+  assert_param(IS_USART_ALL_PERIPH(USARTx));\r
+  \r
+  /* Receive Data */\r
+  return (uint16_t)(USARTx->DR & (uint16_t)0x01FF);\r
+}\r
+\r
+/**\r
+  * @brief  Transmits break characters.\r
+  * @param  USARTx: Select the USART peripheral. \r
+  *   This parameter can be one of the following values:\r
+  *   USART1, USART2 or USART3.\r
+  * @retval None\r
+  */\r
+void USART_SendBreak(USART_TypeDef* USARTx)\r
+{\r
+  /* Check the parameters */\r
+  assert_param(IS_USART_ALL_PERIPH(USARTx));\r
+  \r
+  /* Send break characters */\r
+  USARTx->CR1 |= USART_CR1_SBK;\r
+}\r
+\r
+/**\r
+  * @brief  Sets the specified USART guard time.\r
+  * @param  USARTx: Select the USART peripheral. \r
+  *   This parameter can be one of the following values:\r
+  *   USART1, USART2 or USART3.\r
+  * @param  USART_GuardTime: specifies the guard time.\r
+  * @note The guard time bits are not available for UART4 and UART5.   \r
+  * @retval None\r
+  */\r
+void USART_SetGuardTime(USART_TypeDef* USARTx, uint8_t USART_GuardTime)\r
+{    \r
+  /* Check the parameters */\r
+  assert_param(IS_USART_ALL_PERIPH(USARTx));\r
+  \r
+  /* Clear the USART Guard time */\r
+  USARTx->GTPR &= USART_GTPR_PSC;\r
+  /* Set the USART guard time */\r
+  USARTx->GTPR |= (uint16_t)((uint16_t)USART_GuardTime << 0x08);\r
+}\r
+\r
+/**\r
+  * @brief  Sets the system clock prescaler.\r
+  * @param  USARTx: Select the USART peripheral. \r
+  *   This parameter can be one of the following values:\r
+  *   USART1, USART2 or USART3.\r
+  * @param  USART_Prescaler: specifies the prescaler clock.  \r
+  * @note   The function is used for IrDA mode with UART4 and UART5.\r
+  * @retval None\r
+  */\r
+void USART_SetPrescaler(USART_TypeDef* USARTx, uint8_t USART_Prescaler)\r
+{ \r
+  /* Check the parameters */\r
+  assert_param(IS_USART_ALL_PERIPH(USARTx));\r
+  \r
+  /* Clear the USART prescaler */\r
+  USARTx->GTPR &= USART_GTPR_GT;\r
+  /* Set the USART prescaler */\r
+  USARTx->GTPR |= USART_Prescaler;\r
+}\r
+\r
+/**\r
+  * @brief  Enables or disables the USART\92s Smart Card mode.\r
+  * @param  USARTx: Select the USART peripheral. \r
+  *   This parameter can be one of the following values:\r
+  *   USART1, USART2 or USART3.\r
+  * @param  NewState: new state of the Smart Card mode.\r
+  *   This parameter can be: ENABLE or DISABLE.     \r
+  * @note The Smart Card mode is not available for UART4 and UART5. \r
+  * @retval None\r
+  */\r
+void USART_SmartCardCmd(USART_TypeDef* USARTx, FunctionalState NewState)\r
+{\r
+  /* Check the parameters */\r
+  assert_param(IS_USART_ALL_PERIPH(USARTx));\r
+  assert_param(IS_FUNCTIONAL_STATE(NewState));\r
+  if (NewState != DISABLE)\r
+  {\r
+    /* Enable the SC mode by setting the SCEN bit in the CR3 register */\r
+    USARTx->CR3 |= USART_CR3_SCEN;\r
+  }\r
+  else\r
+  {\r
+    /* Disable the SC mode by clearing the SCEN bit in the CR3 register */\r
+    USARTx->CR3 &= (uint16_t)~((uint16_t)USART_CR3_SCEN);\r
+  }\r
+}\r
+\r
+/**\r
+  * @brief  Enables or disables NACK transmission.\r
+  * @param  USARTx: Select the USART peripheral. \r
+  *   This parameter can be one of the following values:\r
+  *   USART1, USART2 or USART3.\r
+  * @param  NewState: new state of the NACK transmission.\r
+  *   This parameter can be: ENABLE or DISABLE.  \r
+  * @note The Smart Card mode is not available for UART4 and UART5.\r
+  * @retval None\r
+  */\r
+void USART_SmartCardNACKCmd(USART_TypeDef* USARTx, FunctionalState NewState)\r
+{\r
+  /* Check the parameters */\r
+  assert_param(IS_USART_ALL_PERIPH(USARTx)); \r
+  assert_param(IS_FUNCTIONAL_STATE(NewState));\r
+  if (NewState != DISABLE)\r
+  {\r
+    /* Enable the NACK transmission by setting the NACK bit in the CR3 register */\r
+    USARTx->CR3 |= USART_CR3_NACK;\r
+  }\r
+  else\r
+  {\r
+    /* Disable the NACK transmission by clearing the NACK bit in the CR3 register */\r
+    USARTx->CR3 &= (uint16_t)~((uint16_t)USART_CR3_NACK);\r
+  }\r
+}\r
+\r
+/**\r
+  * @brief  Enables or disables the USART\92s Half Duplex communication.\r
+  * @param  USARTx: Select the USART peripheral. \r
+  *   This parameter can be one of the following values:\r
+  *   USART1, USART2 or USART3.\r
+  * @param  NewState: new state of the USART Communication.\r
+  *   This parameter can be: ENABLE or DISABLE.\r
+  * @retval None\r
+  */\r
+void USART_HalfDuplexCmd(USART_TypeDef* USARTx, FunctionalState NewState)\r
+{\r
+  /* Check the parameters */\r
+  assert_param(IS_USART_ALL_PERIPH(USARTx));\r
+  assert_param(IS_FUNCTIONAL_STATE(NewState));\r
+  \r
+  if (NewState != DISABLE)\r
+  {\r
+    /* Enable the Half-Duplex mode by setting the HDSEL bit in the CR3 register */\r
+    USARTx->CR3 |= USART_CR3_HDSEL;\r
+  }\r
+  else\r
+  {\r
+    /* Disable the Half-Duplex mode by clearing the HDSEL bit in the CR3 register */\r
+    USARTx->CR3 &= (uint16_t)~((uint16_t)USART_CR3_HDSEL);\r
+  }\r
+}\r
+\r
+/**\r
+  * @brief  Enables or disables the USART's 8x oversampling mode.\r
+  * @param USARTx: Select the USART or the UART peripheral. \r
+  *   This parameter can be one of the following values:\r
+  *     USART1, USART2, USART3.\r
+  * @param NewState: new state of the USART 8x oversampling mode.\r
+  *   This parameter can be: ENABLE or DISABLE.\r
+  *\r
+  * @note\r
+  *   This function has to be called before calling USART_Init()\r
+  *   function in order to have correct baudrate Divider value.\r
+  * @retval : None\r
+  */\r
+void USART_OverSampling8Cmd(USART_TypeDef* USARTx, FunctionalState NewState)\r
+{\r
+  /* Check the parameters */\r
+  assert_param(IS_USART_ALL_PERIPH(USARTx));\r
+  assert_param(IS_FUNCTIONAL_STATE(NewState));\r
+  \r
+  if (NewState != DISABLE)\r
+  {\r
+    /* Enable the 8x Oversampling mode by setting the OVER8 bit in the CR1 register */\r
+    USARTx->CR1 |= USART_CR1_OVER8;\r
+  }\r
+  else\r
+  {\r
+    /* Disable the 8x Oversampling mode by clearing the OVER8 bit in the CR1 register */\r
+    USARTx->CR1 &= (uint16_t)~((uint16_t)USART_CR1_OVER8);\r
+  }\r
+}  \r
+\r
+/**\r
+  * @brief  Enables or disables the USART's one bit sampling methode.\r
+  * @param USARTx: Select the USART or the UART peripheral. \r
+  *   This parameter can be one of the following values:\r
+  *   USART1, USART2, USART3.\r
+  * @param NewState: new state of the USART one bit sampling methode.\r
+  *   This parameter can be: ENABLE or DISABLE.\r
+  * @retval : None\r
+  */\r
+void USART_OneBitMethodCmd(USART_TypeDef* USARTx, FunctionalState NewState)\r
+{\r
+  /* Check the parameters */\r
+  assert_param(IS_USART_ALL_PERIPH(USARTx));\r
+  assert_param(IS_FUNCTIONAL_STATE(NewState));\r
+  \r
+  if (NewState != DISABLE)\r
+  {\r
+    /* Enable the one bit method by setting the ONEBITE bit in the CR3 register */\r
+    USARTx->CR3 |= USART_CR3_ONEBIT;\r
+  }\r
+  else\r
+  {\r
+    /* Disable tthe one bit method by clearing the ONEBITE bit in the CR3 register */\r
+    USARTx->CR3 &= (uint16_t)~((uint16_t)USART_CR3_ONEBIT);\r
+  }\r
+}\r
+\r
+/**\r
+  * @brief  Configures the USART\92s IrDA interface.\r
+  * @param  USARTx: Select the USART peripheral. \r
+  *   This parameter can be one of the following values:\r
+  *   USART1, USART2 or USART3.\r
+  * @param  USART_IrDAMode: specifies the IrDA mode.\r
+  *   This parameter can be one of the following values:\r
+  *     @arg USART_IrDAMode_LowPower\r
+  *     @arg USART_IrDAMode_Normal\r
+  * @retval None\r
+  */\r
+void USART_IrDAConfig(USART_TypeDef* USARTx, uint16_t USART_IrDAMode)\r
+{\r
+  /* Check the parameters */\r
+  assert_param(IS_USART_ALL_PERIPH(USARTx));\r
+  assert_param(IS_USART_IRDA_MODE(USART_IrDAMode));\r
+    \r
+  USARTx->CR3 &= (uint16_t)~((uint16_t)USART_CR3_IRLP);\r
+  USARTx->CR3 |= USART_IrDAMode;\r
+}\r
+\r
+/**\r
+  * @brief  Enables or disables the USART\92s IrDA interface.\r
+  * @param  USARTx: Select the USART peripheral. \r
+  *   This parameter can be one of the following values:\r
+  *   USART1, USART2 or USART3.\r
+  * @param  NewState: new state of the IrDA mode.\r
+  *   This parameter can be: ENABLE or DISABLE.\r
+  * @retval None\r
+  */\r
+void USART_IrDACmd(USART_TypeDef* USARTx, FunctionalState NewState)\r
+{\r
+  /* Check the parameters */\r
+  assert_param(IS_USART_ALL_PERIPH(USARTx));\r
+  assert_param(IS_FUNCTIONAL_STATE(NewState));\r
+    \r
+  if (NewState != DISABLE)\r
+  {\r
+    /* Enable the IrDA mode by setting the IREN bit in the CR3 register */\r
+    USARTx->CR3 |= USART_CR3_IREN;\r
+  }\r
+  else\r
+  {\r
+    /* Disable the IrDA mode by clearing the IREN bit in the CR3 register */\r
+    USARTx->CR3 &= (uint16_t)~((uint16_t)USART_CR3_IREN);\r
+  }\r
+}\r
+\r
+/**\r
+  * @brief  Checks whether the specified USART flag is set or not.\r
+  * @param  USARTx: Select the USART peripheral. \r
+  *   This parameter can be one of the following values:\r
+  *   USART1, USART2 or USART3.\r
+  * @param  USART_FLAG: specifies the flag to check.\r
+  *   This parameter can be one of the following values:\r
+  *     @arg USART_FLAG_CTS:  CTS Change flag\r
+  *     @arg USART_FLAG_LBD:  LIN Break detection flag\r
+  *     @arg USART_FLAG_TXE:  Transmit data register empty flag\r
+  *     @arg USART_FLAG_TC:   Transmission Complete flag\r
+  *     @arg USART_FLAG_RXNE: Receive data register not empty flag\r
+  *     @arg USART_FLAG_IDLE: Idle Line detection flag\r
+  *     @arg USART_FLAG_ORE:  OverRun Error flag\r
+  *     @arg USART_FLAG_NE:   Noise Error flag\r
+  *     @arg USART_FLAG_FE:   Framing Error flag\r
+  *     @arg USART_FLAG_PE:   Parity Error flag\r
+  * @retval The new state of USART_FLAG (SET or RESET).\r
+  */\r
+FlagStatus USART_GetFlagStatus(USART_TypeDef* USARTx, uint16_t USART_FLAG)\r
+{\r
+  FlagStatus bitstatus = RESET;\r
+  /* Check the parameters */\r
+  assert_param(IS_USART_ALL_PERIPH(USARTx));\r
+  assert_param(IS_USART_FLAG(USART_FLAG));\r
+  \r
+  if ((USARTx->SR & USART_FLAG) != (uint16_t)RESET)\r
+  {\r
+    bitstatus = SET;\r
+  }\r
+  else\r
+  {\r
+    bitstatus = RESET;\r
+  }\r
+  return bitstatus;\r
+}\r
+\r
+/**\r
+  * @brief  Clears the USARTx's pending flags.\r
+  * @param  USARTx: Select the USART peripheral. \r
+  *   This parameter can be one of the following values:\r
+  *   USART1, USART2 or USART3.\r
+  * @param  USART_FLAG: specifies the flag to clear.\r
+  *   This parameter can be any combination of the following values:\r
+  *     @arg USART_FLAG_CTS:  CTS Change flag.\r
+  *     @arg USART_FLAG_LBD:  LIN Break detection flag.\r
+  *     @arg USART_FLAG_TC:   Transmission Complete flag.\r
+  *     @arg USART_FLAG_RXNE: Receive data register not empty flag.\r
+  *   \r
+  * @note\r
+  *   - PE (Parity error), FE (Framing error), NE (Noise error), ORE (OverRun \r
+  *     error) and IDLE (Idle line detected) flags are cleared by software \r
+  *     sequence: a read operation to USART_SR register (USART_GetFlagStatus()) \r
+  *     followed by a read operation to USART_DR register (USART_ReceiveData()).\r
+  *   - RXNE flag can be also cleared by a read to the USART_DR register \r
+  *     (USART_ReceiveData()).\r
+  *   - TC flag can be also cleared by software sequence: a read operation to \r
+  *     USART_SR register (USART_GetFlagStatus()) followed by a write operation\r
+  *     to USART_DR register (USART_SendData()).\r
+  *   - TXE flag is cleared only by a write to the USART_DR register \r
+  *     (USART_SendData()).\r
+  * @retval None\r
+  */\r
+void USART_ClearFlag(USART_TypeDef* USARTx, uint16_t USART_FLAG)\r
+{\r
+  /* Check the parameters */\r
+  assert_param(IS_USART_ALL_PERIPH(USARTx));\r
+  assert_param(IS_USART_CLEAR_FLAG(USART_FLAG));\r
+     \r
+  USARTx->SR = (uint16_t)~USART_FLAG;\r
+}\r
+\r
+/**\r
+  * @brief  Checks whether the specified USART interrupt has occurred or not.\r
+  * @param  USARTx: Select the USART peripheral. \r
+  *   This parameter can be one of the following values:\r
+  *   USART1, USART2 or USART3.\r
+  * @param  USART_IT: specifies the USART interrupt source to check.\r
+  *   This parameter can be one of the following values:\r
+  *     @arg USART_IT_CTS:  CTS change interrupt\r
+  *     @arg USART_IT_LBD:  LIN Break detection interrupt\r
+  *     @arg USART_IT_TXE:  Tansmit Data Register empty interrupt\r
+  *     @arg USART_IT_TC:   Transmission complete interrupt\r
+  *     @arg USART_IT_RXNE: Receive Data register not empty interrupt\r
+  *     @arg USART_IT_IDLE: Idle line detection interrupt\r
+  *     @arg USART_IT_ORE:  OverRun Error interrupt\r
+  *     @arg USART_IT_NE:   Noise Error interrupt\r
+  *     @arg USART_IT_FE:   Framing Error interrupt\r
+  *     @arg USART_IT_PE:   Parity Error interrupt\r
+  * @retval The new state of USART_IT (SET or RESET).\r
+  */\r
+ITStatus USART_GetITStatus(USART_TypeDef* USARTx, uint16_t USART_IT)\r
+{\r
+  uint32_t bitpos = 0x00, itmask = 0x00, usartreg = 0x00;\r
+  ITStatus bitstatus = RESET;\r
+  /* Check the parameters */\r
+  assert_param(IS_USART_ALL_PERIPH(USARTx));\r
+  assert_param(IS_USART_GET_IT(USART_IT)); \r
+  \r
+  /* Get the USART register index */\r
+  usartreg = (((uint8_t)USART_IT) >> 0x05);\r
+  /* Get the interrupt position */\r
+  itmask = USART_IT & IT_MASK;\r
+  itmask = (uint32_t)0x01 << itmask;\r
+  \r
+  if (usartreg == 0x01) /* The IT  is in CR1 register */\r
+  {\r
+    itmask &= USARTx->CR1;\r
+  }\r
+  else if (usartreg == 0x02) /* The IT  is in CR2 register */\r
+  {\r
+    itmask &= USARTx->CR2;\r
+  }\r
+  else /* The IT  is in CR3 register */\r
+  {\r
+    itmask &= USARTx->CR3;\r
+  }\r
+  \r
+  bitpos = USART_IT >> 0x08;\r
+  bitpos = (uint32_t)0x01 << bitpos;\r
+  bitpos &= USARTx->SR;\r
+  if ((itmask != (uint16_t)RESET)&&(bitpos != (uint16_t)RESET))\r
+  {\r
+    bitstatus = SET;\r
+  }\r
+  else\r
+  {\r
+    bitstatus = RESET;\r
+  }\r
+  \r
+  return bitstatus;  \r
+}\r
+\r
+/**\r
+  * @brief  Clears the USARTx\92s interrupt pending bits.\r
+  * @param  USARTx: Select the USART peripheral. \r
+  *   This parameter can be one of the following values:\r
+  *   USART1, USART2 or USART3.\r
+  * @param  USART_IT: specifies the interrupt pending bit to clear.\r
+  *   This parameter can be one of the following values:\r
+  *     @arg USART_IT_CTS:  CTS change interrupt\r
+  *     @arg USART_IT_LBD:  LIN Break detection interrupt\r
+  *     @arg USART_IT_TC:   Transmission complete interrupt. \r
+  *     @arg USART_IT_RXNE: Receive Data register not empty interrupt.\r
+  *   \r
+  * @note\r
+  *   - PE (Parity error), FE (Framing error), NE (Noise error), ORE (OverRun \r
+  *     error) and IDLE (Idle line detected) pending bits are cleared by \r
+  *     software sequence: a read operation to USART_SR register \r
+  *     (USART_GetITStatus()) followed by a read operation to USART_DR register \r
+  *     (USART_ReceiveData()).\r
+  *   - RXNE pending bit can be also cleared by a read to the USART_DR register \r
+  *     (USART_ReceiveData()).\r
+  *   - TC pending bit can be also cleared by software sequence: a read \r
+  *     operation to USART_SR register (USART_GetITStatus()) followed by a write \r
+  *     operation to USART_DR register (USART_SendData()).\r
+  *   - TXE pending bit is cleared only by a write to the USART_DR register \r
+  *     (USART_SendData()).\r
+  * @retval None\r
+  */\r
+void USART_ClearITPendingBit(USART_TypeDef* USARTx, uint16_t USART_IT)\r
+{\r
+  uint16_t bitpos = 0x00, itmask = 0x00;\r
+  /* Check the parameters */\r
+  assert_param(IS_USART_ALL_PERIPH(USARTx));\r
+  assert_param(IS_USART_CLEAR_IT(USART_IT)); \r
+  \r
+  bitpos = USART_IT >> 0x08;\r
+  itmask = ((uint16_t)0x01 << (uint16_t)bitpos);\r
+  USARTx->SR = (uint16_t)~itmask;\r
+}\r
+\r
+/**\r
+  * @}\r
+  */\r
+\r
+/**\r
+  * @}\r
+  */\r
+\r
+/**\r
+  * @}\r
+  */\r
+\r
+/******************* (C) COPYRIGHT 2010 STMicroelectronics *****END OF FILE****/\r
index ebca1e63ae732dcd20e2dcbdcd3ac9c0869502d6..be00d54aae40b4b0258663bbab4aaa0209bf57a6 100644 (file)
@@ -9,7 +9,7 @@ define symbol __ICFEDIT_region_ROM_end__   = 0x0801FFFF;
 define symbol __ICFEDIT_region_RAM_start__ = 0x20000000;\r
 define symbol __ICFEDIT_region_RAM_end__   = 0x20003FFF;\r
 /*-Sizes-*/\r
-define symbol __ICFEDIT_size_cstack__ = 0x200;\r
+define symbol __ICFEDIT_size_cstack__ = 0x300;\r
 define symbol __ICFEDIT_size_heap__   = 0x0;\r
 /**** End of ICF editor section. ###ICF###*/\r
 \r