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