summaryrefslogtreecommitdiff
path: root/bsp/imx6ul/platform/include/imx_uart.h
blob: b663bdaef3fa0858c006de1c0d8992c94f1d562b (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
/*
 * Copyright (c) 2010-2012, Freescale Semiconductor, Inc.
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without modification,
 * are permitted provided that the following conditions are met:
 *
 * o Redistributions of source code must retain the above copyright notice, this list
 *   of conditions and the following disclaimer.
 *
 * o Redistributions in binary form must reproduce the above copyright notice, this
 *   list of conditions and the following disclaimer in the documentation and/or
 *   other materials provided with the distribution.
 *
 * o Neither the name of Freescale Semiconductor, Inc. nor the names of its
 *   contributors may be used to endorse or promote products derived from this
 *   software without specific prior written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
 * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
 * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
 * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 */


/*!
 * @file imx_uart.h
 * @brief various defines used by imx_uart.c
 */

#ifndef __IMX_UART_H__
#define __IMX_UART_H__

#include "sdk.h"

//! @addtogroup diag_uart
//! @{

//////////////////////////////////////////////////////////////////////////
//Constants
/////////////////////////////////////////////////////////////////////////

/* UART specific defines */
//! @brief Modes of the PARITY for UART transfer.
enum _uart_parity
{
	PARITY_NONE = 0, //!< PARITY mode is PARITY_NONE.
	PARITY_EVEN = 2, //!< PARITY mode is PARITY_EVEN.
        PARITY_ODD  = 3  //!< PARITY mode is PARITY_ODD. 
};

//!  @brief Number of stopbits after a character.
enum _uart_stopbits
{
	STOPBITS_ONE = 0, //!< One stopbits after a character.
	STOPBITS_TWO = 1  //!< Two stopbits after a character.
};

//!  @brief Flow control mode for UART transfer.
enum _uart_flowctrl
{
	FLOWCTRL_OFF = 0, //!< Flow control off for UART transfer.
	FLOWCTRL_ON  = 1  //!< Flow control on for UART transfer.
};

//!  @brief Specify the FIFO for UART transfer.
enum _uart_fifo
{
	TX_FIFO = 0,	  //!< Config the TX fifo for UART transfer.
	RX_FIFO = 1	  //!< Config the RX fifo for UART transfer.
};   	

//! @brief Specify the number of bits in a data
enum _uart_bits
{
	SEVENBITS = 0,	  //!< Config seven bits in a data.
	EIGHTBITS = 1     //!< Config eight bits in a data.
};

//! @brief Specify the service mode
#define	DMA_MODE  2	  //!< Config the service mode for dma request.
#define	IRQ_MODE  1      //!< Config the service mode for interrupt.

#define UART_MODULE_CLK(x) ((x) == HW_UART1 ? UART1_MODULE_CLK : (x) == HW_UART2 ? UART2_MODULE_CLK : (x) == HW_UART3 ? UART3_MODULE_CLK : (x) == HW_UART4 ? UART4_MODULE_CLK : -1)

#define UART_IRQS(x) ((x) == HW_UART1 ? IMX_INT_UART1 : (x) == HW_UART2 ? IMX_INT_UART2 : (x) == HW_UART3 ? IMX_INT_UART3 : (x) == HW_UART4 ? IMX_INT_UART4 : (x) == HW_UART5 ? IMX_INT_UART5 : 0xFFFFFFFF)

//////////////////////////////////////////////////////////////////////////
//API
/////////////////////////////////////////////////////////////////////////


/*!
 * @brief   Initialize the UART port
 *
 * @param   instance the UART instance number.
 * @param   baudrate serial baud rate such 9600, 57600, 115200, etc.
 * @param   parity enable parity checking: PARITY_NONE, PARITY_EVEN,
 *                   PARITY_ODD.
 * @param   stopbits number of stop bits: STOPBITS_ONE, STOPBITS_TWO.
 * @param   datasize number of bits in a data: SEVENBITS, EIGHTBITS,
 *                     NINEBITS (like RS-485 but not supported).
 * @param   flowcontrol enable (RTS/CTS) hardware flow control:
 *                        FLOWCTRL_ON, FLOWCTRL_OFF.
 */
void uart_init(uint32_t instance, uint32_t baudrate, uint8_t parity,uint8_t stopbits, uint8_t datasize, uint8_t flowcontrol);

/*!
 * @brief   Output a character to UART port
 *
 * @param   instance the UART instance number.
 * @param   ch pointer to the character for output
 * @return  the character that has been sent
 */
uint8_t uart_putchar(uint32_t instance, uint8_t * ch);

/*!
 * @brief   Receive a character on the UART port
 *
 * @param   instance the UART instance number.
 * @return  a character received from the UART port; if the RX FIFO
 *          is empty or errors are detected, it returns NONE_CHAR
 */
uint8_t uart_getchar(uint32_t instance);

/*!
 * @brief   Configure the RX or TX FIFO level and trigger mode
 *
 * @param   instance the UART instance number.
 * @param   fifo FIFO to configure: RX_FIFO or TX_FIFO.
 * @param   trigger_level set the trigger level of the FIFO to generate
 *                          an IRQ or a DMA request: number of characters.
 * @param   service_mode FIFO served with DMA or IRQ or polling (default).
 */
void uart_set_FIFO_mode(uint32_t instance, uint8_t fifo, uint8_t trigger_level,
                        uint8_t service_mode);

/*!
 * @brief   Enables UART loopback test mode
 *
 * @param   instance the UART instance number.
 * @param   state enable/disable the loopback mode
 */
void uart_set_loopback_mode(uint32_t instance, uint8_t state);

/*!
 * @brief   Setup UART interrupt. It enables or disables the related HW module
 * interrupt, and attached the related sub-routine into the vector table.
 *
 * @param   instance the UART instance number.
 * @param   irq_subroutine the UART interrupt interrupt routine.
 * @param   state ENABLE or DISABLE the interrupt.
 */
void uart_setup_interrupt(uint32_t instance, void (*irq_subroutine)(void), uint8_t state);


/*!
 * @brief   Obtain UART reference frequency
 *
 * @param   instance the UART instance number.
 * @return  reference frequency in Hz
 */
uint32_t uart_get_reffreq(uint32_t instance);

//! @name Board support functions
//!
//! These functions are called by the driver in order to factor out board
//! specific functionality. They must be defined by the board support
//! library or the application.
//@{
//! @brief Configure IOMUX for the UART driver.
void uart_iomux_config(int instance);
//@}

//! @}

#endif //__IMX_UART_H__