]> begriffs open source - cmsis/blob - CMSIS/DoxyGen/Driver/src/USART_Demo.c
Corrected USART example code and made minor modifications to the ARM_USART_Control...
[cmsis] / CMSIS / DoxyGen / Driver / src / USART_Demo.c
1 #include "Driver_USART.h"\r
2 #include "cmsis_os.h"                   /* ARM::CMSIS:RTOS:Keil RTX */\r
3 #include <stdio.h>\r
4 #include <string.h>\r
5  \r
6 void myUART_Thread(void const *argument);\r
7 osThreadId tid_myUART_Thread;\r
8  \r
9 /* USART Driver */\r
10 extern ARM_DRIVER_USART Driver_USART3;\r
11  \r
12  \r
13 void myUSART_callback(uint32_t event)\r
14 {\r
15   uint32_t mask;\r
16 \r
17   mask = ARM_USART_EVENT_RECEIVE_COMPLETE  |\r
18          ARM_USART_EVENT_TRANSFER_COMPLETE |\r
19          ARM_USART_EVENT_SEND_COMPLETE     |\r
20          ARM_USART_EVENT_TX_COMPLETE       ;\r
21 \r
22   if (event & mask) {\r
23     /* Success: Wakeup Thread */\r
24     osSignalSet(tid_myUART_Thread, 0x01);\r
25   }\r
26 \r
27   if (event & ARM_USART_EVENT_RX_TIMEOUT) {\r
28     __breakpoint(0);  /* Error: Call debugger or replace with custom error handling */\r
29   }\r
30 \r
31   if (event & (ARM_USART_EVENT_RX_OVERFLOW | ARM_USART_EVENT_TX_UNDERFLOW)) {\r
32     __breakpoint(0);  /* Error: Call debugger or replace with custom error handling */\r
33   }\r
34 }\r
35 \r
36  \r
37 /* CMSIS-RTOS Thread - UART command thread */\r
38 void myUART_Thread(const void* args)\r
39 {\r
40     static ARM_DRIVER_USART * USARTdrv = &Driver_USART3;\r
41     ARM_DRIVER_VERSION     version;\r
42     ARM_USART_CAPABILITIES drv_capabilities;\r
43     char                   cmd;\r
44  \r
45   #ifdef DEBUG\r
46     version = USARTdrv->GetVersion();\r
47     if (version.api < 0x200)   /* requires at minimum API version 2.00 or higher */\r
48     {                          /* error handling */\r
49         return;\r
50     }\r
51     drv_capabilities = USARTdrv->GetCapabilities();\r
52     if (drv_capabilities.event_tx_complete == 0)\r
53     {                          /* error handling */\r
54         return;\r
55     }\r
56   #endif\r
57  \r
58     /*Initialize the USART driver */\r
59     USARTdrv->Initialize(myUSART_callback);\r
60     /*Power up the USART peripheral */\r
61     USARTdrv->PowerControl(ARM_POWER_FULL);\r
62     /*Configure the USART to 4800 Bits/sec */\r
63     USARTdrv->Control(ARM_USART_MODE_ASYNCHRONOUS |\r
64                       ARM_USART_DATA_BITS_8 |\r
65                       ARM_USART_PARITY_NONE |\r
66                       ARM_USART_STOP_BITS_1 |\r
67                       ARM_USART_FLOW_CONTROL_NONE, 4800);\r
68      \r
69     /* Enable Receiver and Transmitter lines */\r
70     USARTdrv->Control (ARM_USART_CONTROL_TX, 1);\r
71     USARTdrv->Control (ARM_USART_CONTROL_RX, 1);\r
72  \r
73     USARTdrv->Send("\nPress Enter to receive a message", 34);\r
74     osSignalWait(0x01, osWaitForever);\r
75      \r
76     while (1)\r
77     {\r
78         USARTdrv->Receive(&cmd, 1);          /* Get byte from UART */\r
79         osSignalWait(0x01, osWaitForever);\r
80         if (cmd == 13)                       /* CR, send greeting  */\r
81         {\r
82           USARTdrv->Send("\nHello World!", 12);\r
83           osSignalWait(0x01, osWaitForever);\r
84         }\r
85  \r
86     }\r
87 }\r