]> git.sur5r.net Git - freertos/blob - FreeRTOS/Demo/CORTEX_A9_Zynq_ZC702/RTOSDemo_bsp/ps7_cortexa9_0/libsrc/uartps_v2_1/src/xuartps_hw.c
Remove obsolete MPU demos.
[freertos] / FreeRTOS / Demo / CORTEX_A9_Zynq_ZC702 / RTOSDemo_bsp / ps7_cortexa9_0 / libsrc / uartps_v2_1 / src / xuartps_hw.c
1 /******************************************************************************
2 *
3 * Copyright (C) 2010 - 2014 Xilinx, Inc.  All rights reserved.
4 *
5 * Permission is hereby granted, free of charge, to any person obtaining a copy
6 * of this software and associated documentation files (the "Software"), to deal
7 * in the Software without restriction, including without limitation the rights
8 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 * copies of the Software, and to permit persons to whom the Software is
10 * furnished to do so, subject to the following conditions:
11 *
12 * The above copyright notice and this permission notice shall be included in
13 * all copies or substantial portions of the Software.
14 *
15 * Use of the Software is limited solely to applications:
16 * (a) running on a Xilinx device, or
17 * (b) that interact with a Xilinx device through a bus or interconnect.
18 *
19 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
20 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
21 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
22 * XILINX  BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
23 * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF
24 * OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
25 * SOFTWARE.
26 *
27 * Except as contained in this notice, the name of the Xilinx shall not be used
28 * in advertising or otherwise to promote the sale, use or other dealings in
29 * this Software without prior written authorization from Xilinx.
30 *
31 ******************************************************************************/
32 /****************************************************************************/
33 /**
34 *
35 * @file xuartps_hw.c
36 * @addtogroup uartps_v2_1
37 * @{
38 *
39 *
40 * <pre>
41 * MODIFICATION HISTORY:
42 *
43 * Ver   Who    Date     Changes
44 * ----- ------ -------- ----------------------------------------------
45 * 1.00  drg/jz 01/12/10 First Release
46 * 1.05a hk     08/22/13 Added reset function
47 * </pre>
48 *
49 *****************************************************************************/
50
51 /***************************** Include Files ********************************/
52 #include "xuartps_hw.h"
53
54 /************************** Constant Definitions ****************************/
55
56
57 /***************** Macros (Inline Functions) Definitions ********************/
58
59
60 /************************** Function Prototypes ******************************/
61
62
63 /************************** Variable Definitions *****************************/
64
65 /****************************************************************************/
66 /**
67 *
68 * This function sends one byte using the device. This function operates in
69 * polled mode and blocks until the data has been put into the TX FIFO register.
70 *
71 * @param        BaseAddress contains the base address of the device.
72 * @param        Data contains the byte to be sent.
73 *
74 * @return       None.
75 *
76 * @note         None.
77 *
78 *****************************************************************************/
79 void XUartPs_SendByte(u32 BaseAddress, u8 Data)
80 {
81                 /*
82                  * Wait until there is space in TX FIFO
83                  */
84                 while (XUartPs_IsTransmitFull(BaseAddress));
85
86                 /*
87                  * Write the byte into the TX FIFO
88                  */
89                 XUartPs_WriteReg(BaseAddress, XUARTPS_FIFO_OFFSET, Data);
90 }
91
92 /****************************************************************************/
93 /**
94 *
95 * This function receives a byte from the device. It operates in polled mode
96 * and blocks until a byte has received.
97 *
98 * @param        BaseAddress contains the base address of the device.
99 *
100 * @return       The data byte received.
101 *
102 * @note         None.
103 *
104 *****************************************************************************/
105 u8 XUartPs_RecvByte(u32 BaseAddress)
106 {
107                 /*
108                  * Wait until there is data
109                  */
110                 while (!XUartPs_IsReceiveData(BaseAddress));
111
112                 /*
113                  * Return the byte received
114                  */
115                 return (XUartPs_ReadReg(BaseAddress, XUARTPS_FIFO_OFFSET));
116 }
117
118 /****************************************************************************/
119 /**
120 *
121 * This function resets UART
122 *
123 * @param        BaseAddress contains the base address of the device.
124 *
125 * @return       None
126 *
127 * @note         None.
128 *
129 *****************************************************************************/
130 void XUartPs_ResetHw(u32 BaseAddress)
131 {
132
133         /*
134          * Disable interrupts
135          */
136         XUartPs_WriteReg(BaseAddress, XUARTPS_IDR_OFFSET, XUARTPS_IXR_MASK);
137
138         /*
139          * Disable receive and transmit
140          */
141         XUartPs_WriteReg(BaseAddress, XUARTPS_CR_OFFSET,
142                                 XUARTPS_CR_RX_DIS | XUARTPS_CR_TX_DIS);
143
144         /*
145          * Software reset of receive and transmit
146          * This clears the FIFO.
147          */
148         XUartPs_WriteReg(BaseAddress, XUARTPS_CR_OFFSET,
149                                 XUARTPS_CR_TXRST | XUARTPS_CR_RXRST);
150
151         /*
152          * Clear status flags - SW reset wont clear sticky flags.
153          */
154         XUartPs_WriteReg(BaseAddress, XUARTPS_ISR_OFFSET, XUARTPS_IXR_MASK);
155
156         /*
157          * Mode register reset value : All zeroes
158          * Normal mode, even parity, 1 stop bit
159          */
160         XUartPs_WriteReg(BaseAddress, XUARTPS_MR_OFFSET,
161                                 XUARTPS_MR_CHMODE_NORM);
162
163         /*
164          * Rx and TX trigger register reset values
165          */
166         XUartPs_WriteReg(BaseAddress, XUARTPS_RXWM_OFFSET,
167                                 XUARTPS_RXWM_RESET_VAL);
168         XUartPs_WriteReg(BaseAddress, XUARTPS_TXWM_OFFSET,
169                                 XUARTPS_TXWM_RESET_VAL);
170
171         /*
172          * Rx timeout disabled by default
173          */
174         XUartPs_WriteReg(BaseAddress, XUARTPS_RXTOUT_OFFSET,
175                                 XUARTPS_RXTOUT_DISABLE);
176
177         /*
178          * Baud rate generator and dividor reset values
179          */
180         XUartPs_WriteReg(BaseAddress, XUARTPS_BAUDGEN_OFFSET,
181                                 XUARTPS_BAUDGEN_RESET_VAL);
182         XUartPs_WriteReg(BaseAddress, XUARTPS_BAUDDIV_OFFSET,
183                                 XUARTPS_BAUDDIV_RESET_VAL);
184
185         /*
186          * Control register reset value -
187          * RX and TX are disable by default
188          */
189         XUartPs_WriteReg(BaseAddress, XUARTPS_CR_OFFSET,
190                                 XUARTPS_CR_RX_DIS | XUARTPS_CR_TX_DIS |
191                                 XUARTPS_CR_STOPBRK);
192
193 }
194
195 /** @} */