]> git.sur5r.net Git - freertos/blob - FreeRTOS/Demo/RX113-RSK_Renesas_e2studio/src/cg_src/r_cg_sci_user.c
aec0de1017d723417a6219e6b72ec52fb812b580
[freertos] / FreeRTOS / Demo / RX113-RSK_Renesas_e2studio / src / cg_src / r_cg_sci_user.c
1 /***********************************************************************************************************************\r
2 * DISCLAIMER\r
3 * This software is supplied by Renesas Electronics Corporation and is only intended for use with Renesas products.\r
4 * No other uses are authorized. This software is owned by Renesas Electronics Corporation and is protected under all\r
5 * applicable laws, including copyright laws. \r
6 * THIS SOFTWARE IS PROVIDED "AS IS" AND RENESAS MAKES NO WARRANTIESREGARDING THIS SOFTWARE, WHETHER EXPRESS, IMPLIED\r
7 * OR STATUTORY, INCLUDING BUT NOT LIMITED TO WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\r
8 * NON-INFRINGEMENT.  ALL SUCH WARRANTIES ARE EXPRESSLY DISCLAIMED.TO THE MAXIMUM EXTENT PERMITTED NOT PROHIBITED BY\r
9 * LAW, NEITHER RENESAS ELECTRONICS CORPORATION NOR ANY OF ITS AFFILIATED COMPANIES SHALL BE LIABLE FOR ANY DIRECT,\r
10 * INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES FOR ANY REASON RELATED TO THIS SOFTWARE, EVEN IF RENESAS OR\r
11 * ITS AFFILIATES HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.\r
12 * Renesas reserves the right, without notice, to make changes to this software and to discontinue the availability \r
13 * of this software. By using this software, you agree to the additional terms and conditions found by accessing the \r
14 * following link:\r
15 * http://www.renesas.com/disclaimer\r
16 *\r
17 * Copyright (C) 2015 Renesas Electronics Corporation. All rights reserved.\r
18 ***********************************************************************************************************************/\r
19 \r
20 /***********************************************************************************************************************\r
21 * File Name    : r_cg_sci_user.c\r
22 * Version      : Code Generator for RX113 V1.02.01.02 [28 May 2015]\r
23 * Device(s)    : R5F51138AxFP\r
24 * Tool-Chain   : CCRX\r
25 * Description  : This file implements device driver for SCI module.\r
26 * Creation Date: 21/09/2015\r
27 ***********************************************************************************************************************/\r
28 \r
29 /***********************************************************************************************************************\r
30 Pragma directive\r
31 ***********************************************************************************************************************/\r
32 /* Start user code for pragma. Do not edit comment generated here */\r
33 /* End user code. Do not edit comment generated here */\r
34 \r
35 /***********************************************************************************************************************\r
36 Includes\r
37 ***********************************************************************************************************************/\r
38 #include "r_cg_macrodriver.h"\r
39 #include "r_cg_sci.h"\r
40 /* Start user code for include. Do not edit comment generated here */\r
41 #include "rskrx113def.h"\r
42 //_RB_#include "r_cg_cmt.h"\r
43 /* End user code. Do not edit comment generated here */\r
44 #include "r_cg_userdefine.h"\r
45 \r
46 /***********************************************************************************************************************\r
47 Global variables and functions\r
48 ***********************************************************************************************************************/\r
49 extern uint8_t * gp_sci1_tx_address;         /* SCI1 send buffer address */\r
50 extern uint16_t  g_sci1_tx_count;            /* SCI1 send data number */\r
51 extern uint8_t * gp_sci1_rx_address;         /* SCI1 receive buffer address */\r
52 extern uint16_t  g_sci1_rx_count;            /* SCI1 receive data number */\r
53 extern uint16_t  g_sci1_rx_length;           /* SCI1 receive data length */\r
54 /* Start user code for global. Do not edit comment generated here */\r
55 \r
56 /* Global used to receive a character from the PC terminal */\r
57 uint8_t g_rx_char;\r
58 \r
59 /* Flag used to control transmission to PC terminal */\r
60 volatile uint8_t g_tx_flag = FALSE;\r
61 \r
62 /* Flag used locally to detect transmission complete */\r
63 static volatile uint8_t sci1_txdone;\r
64 \r
65 /* End user code. Do not edit comment generated here */\r
66 \r
67 /***********************************************************************************************************************\r
68 * Function Name: r_sci1_transmit_interrupt\r
69 * Description  : None\r
70 * Arguments    : None\r
71 * Return Value : None\r
72 ***********************************************************************************************************************/\r
73 #if FAST_INTERRUPT_VECTOR == VECT_SCI1_TXI1\r
74 #pragma interrupt r_sci1_transmit_interrupt(vect=VECT(SCI1,TXI1),fint)\r
75 #else\r
76 #pragma interrupt r_sci1_transmit_interrupt(vect=VECT(SCI1,TXI1))\r
77 #endif\r
78 static void r_sci1_transmit_interrupt(void)\r
79 {\r
80     if (g_sci1_tx_count > 0U)\r
81     {\r
82         SCI1.TDR = *gp_sci1_tx_address;\r
83         gp_sci1_tx_address++;\r
84         g_sci1_tx_count--;\r
85     }\r
86     else \r
87     {\r
88         SCI1.SCR.BIT.TIE = 0U;\r
89         SCI1.SCR.BIT.TEIE = 1U;\r
90     }\r
91 }\r
92 /***********************************************************************************************************************\r
93 * Function Name: r_sci1_transmitend_interrupt\r
94 * Description  : None\r
95 * Arguments    : None\r
96 * Return Value : None\r
97 ***********************************************************************************************************************/\r
98 #if FAST_INTERRUPT_VECTOR == VECT_SCI1_TEI1\r
99 #pragma interrupt r_sci1_transmitend_interrupt(vect=VECT(SCI1,TEI1),fint)\r
100 #else\r
101 #pragma interrupt r_sci1_transmitend_interrupt(vect=VECT(SCI1,TEI1))\r
102 #endif\r
103 static void r_sci1_transmitend_interrupt(void)\r
104 {\r
105     /* Set TXD1 pin */\r
106     PORT1.PMR.BYTE &= 0xBFU;\r
107     SCI1.SCR.BIT.TIE = 0U;\r
108     SCI1.SCR.BIT.TE = 0U;\r
109     SCI1.SCR.BIT.TEIE = 0U;\r
110 \r
111     r_sci1_callback_transmitend();\r
112 }\r
113 /***********************************************************************************************************************\r
114 * Function Name: r_sci1_receive_interrupt\r
115 * Description  : None\r
116 * Arguments    : None\r
117 * Return Value : None\r
118 ***********************************************************************************************************************/\r
119 #if FAST_INTERRUPT_VECTOR == VECT_SCI1_RXI1\r
120 #pragma interrupt r_sci1_receive_interrupt(vect=VECT(SCI1,RXI1),fint)\r
121 #else\r
122 #pragma interrupt r_sci1_receive_interrupt(vect=VECT(SCI1,RXI1))\r
123 #endif\r
124 static void r_sci1_receive_interrupt(void)\r
125 {\r
126     if (g_sci1_rx_length > g_sci1_rx_count)\r
127     {\r
128         *gp_sci1_rx_address = SCI1.RDR;\r
129         gp_sci1_rx_address++;\r
130         g_sci1_rx_count++;\r
131 \r
132         if (g_sci1_rx_length == g_sci1_rx_count)\r
133         {\r
134             r_sci1_callback_receiveend();\r
135         }\r
136     }\r
137 }\r
138 /***********************************************************************************************************************\r
139 * Function Name: r_sci1_receiveerror_interrupt\r
140 * Description  : None\r
141 * Arguments    : None\r
142 * Return Value : None\r
143 ***********************************************************************************************************************/\r
144 #if FAST_INTERRUPT_VECTOR == VECT_SCI1_ERI1\r
145 #pragma interrupt r_sci1_receiveerror_interrupt(vect=VECT(SCI1,ERI1),fint)\r
146 #else\r
147 #pragma interrupt r_sci1_receiveerror_interrupt(vect=VECT(SCI1,ERI1))\r
148 #endif\r
149 static void r_sci1_receiveerror_interrupt(void)\r
150 {\r
151     uint8_t err_type;\r
152 \r
153     r_sci1_callback_receiveerror();\r
154 \r
155     /* Clear overrun, framing and parity error flags */\r
156     err_type = SCI1.SSR.BYTE;\r
157     SCI1.SSR.BYTE = err_type & 0xC7U;\r
158 }\r
159 /***********************************************************************************************************************\r
160 * Function Name: r_sci1_callback_transmitend\r
161 * Description  : This function is a callback function when SCI1 finishes transmission.\r
162 * Arguments    : None\r
163 * Return Value : None\r
164 ***********************************************************************************************************************/\r
165 static void r_sci1_callback_transmitend(void)\r
166 {\r
167     /* Start user code. Do not edit comment generated here */\r
168     sci1_txdone = TRUE;\r
169 \r
170     /* End user code. Do not edit comment generated here */\r
171 }\r
172 /***********************************************************************************************************************\r
173 * Function Name: r_sci1_callback_receiveend\r
174 * Description  : This function is a callback function when SCI1 finishes reception.\r
175 * Arguments    : None\r
176 * Return Value : None\r
177 ***********************************************************************************************************************/\r
178 static void r_sci1_callback_receiveend(void)\r
179 {\r
180     /* Start user code. Do not edit comment generated here */\r
181     /* Check the contents of g_rx_char */\r
182     if ('z' == g_rx_char)\r
183     {\r
184         /* Stop the timer used to control transmission to PC terminal*/\r
185 //_RB_        R_CMT0_Stop();\r
186 \r
187         /* Turn off LED0 and turn on LED1 to indicate serial transmission\r
188          inactive */\r
189         LED0 = LED_OFF;\r
190         LED1 = LED_ON;\r
191     }\r
192     else\r
193     {\r
194         /* Start the timer used to control transmission to PC terminal*/\r
195 //_RB_        R_CMT0_Start();\r
196 \r
197         /* Turn on LED0 and turn off LED1 to indicate serial transmission\r
198          active */\r
199         LED0 = LED_ON;\r
200         LED1 = LED_OFF;\r
201     }\r
202 \r
203     /* Set up SCI1 receive buffer again */\r
204     R_SCI1_Serial_Receive((uint8_t *) &g_rx_char, 1);\r
205 \r
206     /* End user code. Do not edit comment generated here */\r
207 }\r
208 /***********************************************************************************************************************\r
209 * Function Name: r_sci1_callback_receiveerror\r
210 * Description  : This function is a callback function when SCI1 reception encounters error.\r
211 * Arguments    : None\r
212 * Return Value : None\r
213 ***********************************************************************************************************************/\r
214 static void r_sci1_callback_receiveerror(void)\r
215 {\r
216     /* Start user code. Do not edit comment generated here */\r
217     /* End user code. Do not edit comment generated here */\r
218 }\r
219 \r
220 /* Start user code for adding. Do not edit comment generated here */\r
221 /***********************************************************************************************************************\r
222  * Function Name: R_SCI1_AsyncTransmit\r
223  * Description  : This function sends SCI1 data and waits for the transmit end flag.\r
224  * Arguments    : tx_buf -\r
225  *                    transfer buffer pointer\r
226  *                tx_num -\r
227  *                    buffer size\r
228  * Return Value : status -\r
229  *                    MD_OK or MD_ARGERROR\r
230  ***********************************************************************************************************************/\r
231 MD_STATUS R_SCI1_AsyncTransmit (uint8_t * const tx_buf, const uint16_t tx_num)\r
232 {\r
233     MD_STATUS status = MD_OK;\r
234 \r
235     /* clear the flag before initiating a new transmission */\r
236     sci1_txdone = FALSE;\r
237 \r
238     /* Send the data using the API */\r
239     status = R_SCI1_Serial_Send(tx_buf, tx_num);\r
240 \r
241     /* Wait for the transmit end flag */\r
242     while (FALSE == sci1_txdone)\r
243     {\r
244         /* Wait */\r
245     }\r
246     return (status);\r
247 }\r
248 /***********************************************************************************************************************\r
249  * End of function R_SCI1_AsyncTransmit\r
250  ***********************************************************************************************************************/\r
251 \r
252 /* End user code. Do not edit comment generated here */\r