xref: /btstack/port/msp432p401lp-cc256x/ti/devices/msp432p4xx/driverlib/uart.h (revision 5fd0122a3e19d95e11e1f3eb8a08a2b2acb2557e)
1*5fd0122aSMatthias Ringwald /* --COPYRIGHT--,BSD
2*5fd0122aSMatthias Ringwald  * Copyright (c) 2017, Texas Instruments Incorporated
3*5fd0122aSMatthias Ringwald  * All rights reserved.
4*5fd0122aSMatthias Ringwald  *
5*5fd0122aSMatthias Ringwald  * Redistribution and use in source and binary forms, with or without
6*5fd0122aSMatthias Ringwald  * modification, are permitted provided that the following conditions
7*5fd0122aSMatthias Ringwald  * are met:
8*5fd0122aSMatthias Ringwald  *
9*5fd0122aSMatthias Ringwald  * *  Redistributions of source code must retain the above copyright
10*5fd0122aSMatthias Ringwald  *    notice, this list of conditions and the following disclaimer.
11*5fd0122aSMatthias Ringwald  *
12*5fd0122aSMatthias Ringwald  * *  Redistributions in binary form must reproduce the above copyright
13*5fd0122aSMatthias Ringwald  *    notice, this list of conditions and the following disclaimer in the
14*5fd0122aSMatthias Ringwald  *    documentation and/or other materials provided with the distribution.
15*5fd0122aSMatthias Ringwald  *
16*5fd0122aSMatthias Ringwald  * *  Neither the name of Texas Instruments Incorporated nor the names of
17*5fd0122aSMatthias Ringwald  *    its contributors may be used to endorse or promote products derived
18*5fd0122aSMatthias Ringwald  *    from this software without specific prior written permission.
19*5fd0122aSMatthias Ringwald  *
20*5fd0122aSMatthias Ringwald  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
21*5fd0122aSMatthias Ringwald  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
22*5fd0122aSMatthias Ringwald  * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
23*5fd0122aSMatthias Ringwald  * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
24*5fd0122aSMatthias Ringwald  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
25*5fd0122aSMatthias Ringwald  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
26*5fd0122aSMatthias Ringwald  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
27*5fd0122aSMatthias Ringwald  * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
28*5fd0122aSMatthias Ringwald  * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
29*5fd0122aSMatthias Ringwald  * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
30*5fd0122aSMatthias Ringwald  * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
31*5fd0122aSMatthias Ringwald  * --/COPYRIGHT--*/
32*5fd0122aSMatthias Ringwald #ifndef UART_H_
33*5fd0122aSMatthias Ringwald #define UART_H_
34*5fd0122aSMatthias Ringwald 
35*5fd0122aSMatthias Ringwald //*****************************************************************************
36*5fd0122aSMatthias Ringwald //
37*5fd0122aSMatthias Ringwald //! \addtogroup uart_api
38*5fd0122aSMatthias Ringwald //! @{
39*5fd0122aSMatthias Ringwald //
40*5fd0122aSMatthias Ringwald //*****************************************************************************
41*5fd0122aSMatthias Ringwald 
42*5fd0122aSMatthias Ringwald //*****************************************************************************
43*5fd0122aSMatthias Ringwald //
44*5fd0122aSMatthias Ringwald // If building with a C++ compiler, make all of the definitions in this header
45*5fd0122aSMatthias Ringwald // have a C binding.
46*5fd0122aSMatthias Ringwald //
47*5fd0122aSMatthias Ringwald //*****************************************************************************
48*5fd0122aSMatthias Ringwald #ifdef __cplusplus
49*5fd0122aSMatthias Ringwald extern "C"
50*5fd0122aSMatthias Ringwald {
51*5fd0122aSMatthias Ringwald #endif
52*5fd0122aSMatthias Ringwald 
53*5fd0122aSMatthias Ringwald #include <stdint.h>
54*5fd0122aSMatthias Ringwald #include <stdbool.h>
55*5fd0122aSMatthias Ringwald 
56*5fd0122aSMatthias Ringwald #include <ti/devices/msp432p4xx/inc/msp.h>
57*5fd0122aSMatthias Ringwald #include <ti/devices/msp432p4xx/driverlib/eusci.h>
58*5fd0122aSMatthias Ringwald 
59*5fd0122aSMatthias Ringwald #define DEFAULT_SYNC                                    0x00
60*5fd0122aSMatthias Ringwald #define EUSCI_A_UART_AUTOMATICBAUDRATE_SYNC             0x55
61*5fd0122aSMatthias Ringwald 
62*5fd0122aSMatthias Ringwald #define EUSCI_A_UART_NO_PARITY                          0x00
63*5fd0122aSMatthias Ringwald #define EUSCI_A_UART_ODD_PARITY                         0x01
64*5fd0122aSMatthias Ringwald #define EUSCI_A_UART_EVEN_PARITY                        0x02
65*5fd0122aSMatthias Ringwald 
66*5fd0122aSMatthias Ringwald #define EUSCI_A_UART_8_BIT_LEN                          0x00
67*5fd0122aSMatthias Ringwald #define EUSCI_A_UART_7_BIT_LEN                          0x01
68*5fd0122aSMatthias Ringwald #define EUSCI_A_UART_MSB_FIRST                          EUSCI_A_CTLW0_MSB
69*5fd0122aSMatthias Ringwald #define EUSCI_A_UART_LSB_FIRST                          0x00
70*5fd0122aSMatthias Ringwald 
71*5fd0122aSMatthias Ringwald #define EUSCI_A_UART_MODE                               EUSCI_A_CTLW0_MODE_0
72*5fd0122aSMatthias Ringwald #define EUSCI_A_UART_IDLE_LINE_MULTI_PROCESSOR_MODE        EUSCI_A_CTLW0_MODE_1
73*5fd0122aSMatthias Ringwald #define EUSCI_A_UART_ADDRESS_BIT_MULTI_PROCESSOR_MODE   EUSCI_A_CTLW0_MODE_2
74*5fd0122aSMatthias Ringwald #define EUSCI_A_UART_AUTOMATIC_BAUDRATE_DETECTION_MODE  EUSCI_A_CTLW0_MODE_3
75*5fd0122aSMatthias Ringwald 
76*5fd0122aSMatthias Ringwald #define EUSCI_A_UART_CLOCKSOURCE_SMCLK                  EUSCI_A_CTLW0_SSEL__SMCLK
77*5fd0122aSMatthias Ringwald #define EUSCI_A_UART_CLOCKSOURCE_ACLK                   EUSCI_A_CTLW0_SSEL__ACLK
78*5fd0122aSMatthias Ringwald 
79*5fd0122aSMatthias Ringwald #define EUSCI_A_UART_ONE_STOP_BIT                       0x00
80*5fd0122aSMatthias Ringwald #define EUSCI_A_UART_TWO_STOP_BITS                      EUSCI_A_CTLW0_SPB
81*5fd0122aSMatthias Ringwald 
82*5fd0122aSMatthias Ringwald #define EUSCI_A_UART_OVERSAMPLING_BAUDRATE_GENERATION   0x01
83*5fd0122aSMatthias Ringwald #define EUSCI_A_UART_LOW_FREQUENCY_BAUDRATE_GENERATION  0x00
84*5fd0122aSMatthias Ringwald 
85*5fd0122aSMatthias Ringwald #define EUSCI_A_UART_RECEIVE_INTERRUPT                  EUSCI_A_IE_RXIE
86*5fd0122aSMatthias Ringwald #define EUSCI_A_UART_TRANSMIT_INTERRUPT                 EUSCI_A_IE_TXIE
87*5fd0122aSMatthias Ringwald #define EUSCI_A_UART_RECEIVE_ERRONEOUSCHAR_INTERRUPT    EUSCI_A_CTLW0_RXEIE
88*5fd0122aSMatthias Ringwald #define EUSCI_A_UART_BREAKCHAR_INTERRUPT                EUSCI_A_CTLW0_BRKIE
89*5fd0122aSMatthias Ringwald #define EUSCI_A_UART_STARTBIT_INTERRUPT                 EUSCI_A_IE_STTIE
90*5fd0122aSMatthias Ringwald #define EUSCI_A_UART_TRANSMIT_COMPLETE_INTERRUPT        EUSCI_B_IE_STPIE
91*5fd0122aSMatthias Ringwald 
92*5fd0122aSMatthias Ringwald #define EUSCI_A_UART_RECEIVE_INTERRUPT_FLAG             EUSCI_A_IFG_RXIFG
93*5fd0122aSMatthias Ringwald #define EUSCI_A_UART_TRANSMIT_INTERRUPT_FLAG            EUSCI_A_IFG_TXIFG
94*5fd0122aSMatthias Ringwald #define EUSCI_A_UART_STARTBIT_INTERRUPT_FLAG            EUSCI_A_IFG_STTIFG
95*5fd0122aSMatthias Ringwald #define EUSCI_A_UART_TRANSMIT_COMPLETE_INTERRUPT_FLAG   EUSCI_A_IFG_TXCPTIFG
96*5fd0122aSMatthias Ringwald 
97*5fd0122aSMatthias Ringwald #define EUSCI_A_UART_LISTEN_ENABLE                      EUSCI_A_STATW_LISTEN
98*5fd0122aSMatthias Ringwald #define EUSCI_A_UART_FRAMING_ERROR                      EUSCI_A_STATW_FE
99*5fd0122aSMatthias Ringwald #define EUSCI_A_UART_OVERRUN_ERROR                      EUSCI_A_STATW_OE
100*5fd0122aSMatthias Ringwald #define EUSCI_A_UART_PARITY_ERROR                       EUSCI_A_STATW_PE
101*5fd0122aSMatthias Ringwald #define EUSCI_A_UART_BREAK_DETECT                       EUSCI_A_STATW_BRK
102*5fd0122aSMatthias Ringwald #define EUSCI_A_UART_RECEIVE_ERROR                      EUSCI_A_STATW_RXERR
103*5fd0122aSMatthias Ringwald #define EUSCI_A_UART_ADDRESS_RECEIVED                   EUSCI_A_STATW_ADDR_IDLE
104*5fd0122aSMatthias Ringwald #define EUSCI_A_UART_IDLELINE                           EUSCI_A_STATW_ADDR_IDLE
105*5fd0122aSMatthias Ringwald #define EUSCI_A_UART_BUSY                               EUSCI_A_STATW_BUSY
106*5fd0122aSMatthias Ringwald 
107*5fd0122aSMatthias Ringwald #define EUSCI_A_UART_DEGLITCH_TIME_2ns                  0x00
108*5fd0122aSMatthias Ringwald #define EUSCI_A_UART_DEGLITCH_TIME_50ns                 0x0001
109*5fd0122aSMatthias Ringwald #define EUSCI_A_UART_DEGLITCH_TIME_100ns                0x0002
110*5fd0122aSMatthias Ringwald #define EUSCI_A_UART_DEGLITCH_TIME_200ns                (0x0001 + 0x0002)
111*5fd0122aSMatthias Ringwald 
112*5fd0122aSMatthias Ringwald //*****************************************************************************
113*5fd0122aSMatthias Ringwald //
114*5fd0122aSMatthias Ringwald //!     ypedef eUSCI_eUSCI_UART_ConfigV1
115*5fd0122aSMatthias Ringwald //! \brief Type definition for \link _eUSCI_UART_Config \endlink
116*5fd0122aSMatthias Ringwald //!     structure
117*5fd0122aSMatthias Ringwald //!
118*5fd0122aSMatthias Ringwald //! \struct _eUSCI_eUSCI_UART_ConfigV1
119*5fd0122aSMatthias Ringwald //! \brief Configuration structure for compare mode in the \b UART module. See
120*5fd0122aSMatthias Ringwald //!          \link UART_initModule \endlink for parameter
121*5fd0122aSMatthias Ringwald //!                 documentation.
122*5fd0122aSMatthias Ringwald //
123*5fd0122aSMatthias Ringwald //*****************************************************************************
124*5fd0122aSMatthias Ringwald typedef struct _eUSCI_eUSCI_UART_ConfigV1
125*5fd0122aSMatthias Ringwald {
126*5fd0122aSMatthias Ringwald     uint_fast8_t selectClockSource;
127*5fd0122aSMatthias Ringwald     uint_fast16_t clockPrescalar;
128*5fd0122aSMatthias Ringwald     uint_fast8_t firstModReg;
129*5fd0122aSMatthias Ringwald     uint_fast8_t secondModReg;
130*5fd0122aSMatthias Ringwald     uint_fast8_t parity;
131*5fd0122aSMatthias Ringwald     uint_fast16_t msborLsbFirst;
132*5fd0122aSMatthias Ringwald     uint_fast16_t numberofStopBits;
133*5fd0122aSMatthias Ringwald     uint_fast16_t uartMode;
134*5fd0122aSMatthias Ringwald     uint_fast8_t overSampling;
135*5fd0122aSMatthias Ringwald     uint_fast16_t dataLength;
136*5fd0122aSMatthias Ringwald } eUSCI_UART_ConfigV1;
137*5fd0122aSMatthias Ringwald 
138*5fd0122aSMatthias Ringwald //*****************************************************************************
139*5fd0122aSMatthias Ringwald //
140*5fd0122aSMatthias Ringwald //! Initialization routine for the UART block. The values to be written
141*5fd0122aSMatthias Ringwald //! into the UCAxBRW and UCAxMCTLW registers should be pre-computed and passed
142*5fd0122aSMatthias Ringwald //! into the initialization function
143*5fd0122aSMatthias Ringwald //!
144*5fd0122aSMatthias Ringwald //! \param moduleInstance is the instance of the eUSCI A (UART) module.
145*5fd0122aSMatthias Ringwald //! Valid parameters vary from part to part, but can include:
146*5fd0122aSMatthias Ringwald //!         - \b EUSCI_A0_BASE
147*5fd0122aSMatthias Ringwald //!         - \b EUSCI_A1_BASE
148*5fd0122aSMatthias Ringwald //!         - \b EUSCI_A2_BASE
149*5fd0122aSMatthias Ringwald //!         - \b EUSCI_A3_BASE
150*5fd0122aSMatthias Ringwald //! \param config Configuration structure for the UART module
151*5fd0122aSMatthias Ringwald //!
152*5fd0122aSMatthias Ringwald //! <hr>
153*5fd0122aSMatthias Ringwald //! <b>Configuration options for \link eUSCI_UART_ConfigV1 \endlink
154*5fd0122aSMatthias Ringwald //!         structure.</b>
155*5fd0122aSMatthias Ringwald //! <hr>
156*5fd0122aSMatthias Ringwald //!  <br> It is important to note that for eUSCI modules, only "A" modules such
157*5fd0122aSMatthias Ringwald //!  as EUSCI_A0 can be used. "B" modules such as EUSCI_B0 do not support the
158*5fd0122aSMatthias Ringwald //!  UART mode.
159*5fd0122aSMatthias Ringwald //! \param selectClockSource selects Clock source. Valid values are
160*5fd0122aSMatthias Ringwald //!       - \b EUSCI_A_UART_CLOCKSOURCE_SMCLK
161*5fd0122aSMatthias Ringwald //!       - \b EUSCI_A_UART_CLOCKSOURCE_ACLK
162*5fd0122aSMatthias Ringwald //! \param clockPrescalar is the value to be written into UCBRx bits
163*5fd0122aSMatthias Ringwald //! \param firstModReg  is First modulation stage register setting. This
164*5fd0122aSMatthias Ringwald //!     value is a pre-calculated value which can be obtained from the Device
165*5fd0122aSMatthias Ringwald //!     User Guide.This value is written into UCBRFx bits of UCAxMCTLW.
166*5fd0122aSMatthias Ringwald //! \param secondModReg is Second modulation stage register setting.
167*5fd0122aSMatthias Ringwald //!     This value is a pre-calculated value which can be obtained from the
168*5fd0122aSMatthias Ringwald //!     Device User Guide. This value is written into UCBRSx bits of
169*5fd0122aSMatthias Ringwald //!     UCAxMCTLW.
170*5fd0122aSMatthias Ringwald //! \param parity is the desired parity. Valid values are
171*5fd0122aSMatthias Ringwald //!      - \b EUSCI_A_UART_NO_PARITY  [Default Value],
172*5fd0122aSMatthias Ringwald //!      - \b EUSCI_A_UART_ODD_PARITY,
173*5fd0122aSMatthias Ringwald //!      - \b EUSCI_A_UART_EVEN_PARITY
174*5fd0122aSMatthias Ringwald //! \param msborLsbFirst controls direction of receive and transmit shift
175*5fd0122aSMatthias Ringwald //!     register. Valid values are
176*5fd0122aSMatthias Ringwald //!      - \b EUSCI_A_UART_MSB_FIRST
177*5fd0122aSMatthias Ringwald //!      - \b EUSCI_A_UART_LSB_FIRST [Default Value]
178*5fd0122aSMatthias Ringwald //! \param numberofStopBits indicates one/two STOP bits
179*5fd0122aSMatthias Ringwald //!      Valid values are
180*5fd0122aSMatthias Ringwald //!      - \b EUSCI_A_UART_ONE_STOP_BIT [Default Value]
181*5fd0122aSMatthias Ringwald //!      - \b EUSCI_A_UART_TWO_STOP_BITS
182*5fd0122aSMatthias Ringwald //! \param uartMode selects the mode of operation
183*5fd0122aSMatthias Ringwald //!      Valid values are
184*5fd0122aSMatthias Ringwald //!      - \b EUSCI_A_UART_MODE  [Default Value],
185*5fd0122aSMatthias Ringwald //!      - \b EUSCI_A_UART_IDLE_LINE_MULTI_PROCESSOR_MODE,
186*5fd0122aSMatthias Ringwald //!      - \b EUSCI_A_UART_ADDRESS_BIT_MULTI_PROCESSOR_MODE,
187*5fd0122aSMatthias Ringwald //!      - \b EUSCI_A_UART_AUTOMATIC_BAUDRATE_DETECTION_MODE
188*5fd0122aSMatthias Ringwald //! \param overSampling indicates low frequency or oversampling baud
189*5fd0122aSMatthias Ringwald //!      generation
190*5fd0122aSMatthias Ringwald //!     Valid values are
191*5fd0122aSMatthias Ringwald //!      - \b EUSCI_A_UART_OVERSAMPLING_BAUDRATE_GENERATION
192*5fd0122aSMatthias Ringwald //!      - \b EUSCI_A_UART_LOW_FREQUENCY_BAUDRATE_GENERATION
193*5fd0122aSMatthias Ringwald //! \param dataLength indicates Character length. Selects 7-bit or 8-bit character length.
194*5fd0122aSMatthias Ringwald //!     Valid values are
195*5fd0122aSMatthias Ringwald //!      - \b EUSCI_A_UART_8_BIT_LEN
196*5fd0122aSMatthias Ringwald //!      - \b EUSCI_A_UART_7_BIT_LEN
197*5fd0122aSMatthias Ringwald //!
198*5fd0122aSMatthias Ringwald //! Upon successful initialization of the UART block, this function
199*5fd0122aSMatthias Ringwald //! will have initialized the module, but the UART block still remains
200*5fd0122aSMatthias Ringwald //! disabled and must be enabled with UART_enableModule()
201*5fd0122aSMatthias Ringwald //!
202*5fd0122aSMatthias Ringwald //! Refer to
203*5fd0122aSMatthias Ringwald //! <a href="http://software-dl.ti.com/msp430/msp430_public_sw/mcu/msp430/MSP430BaudRateConverter/index.html">
204*5fd0122aSMatthias Ringwald //! this calculator </a> for help on calculating values for the parameters.
205*5fd0122aSMatthias Ringwald //!
206*5fd0122aSMatthias Ringwald //! Modified bits are \b UCPEN, \b UCPAR, \b UCMSB, \b UC7BIT, \b UCSPB,
207*5fd0122aSMatthias Ringwald //! \b UCMODEx, \b UCSYNC bits of \b UCAxCTL0 and \b UCSSELx,
208*5fd0122aSMatthias Ringwald //! \b UCSWRST bits of \b UCAxCTL1
209*5fd0122aSMatthias Ringwald //!
210*5fd0122aSMatthias Ringwald //! \return true or
211*5fd0122aSMatthias Ringwald //!         false of the initialization process
212*5fd0122aSMatthias Ringwald //
213*5fd0122aSMatthias Ringwald //*****************************************************************************
214*5fd0122aSMatthias Ringwald extern bool UART_initModule(uint32_t moduleInstance,
215*5fd0122aSMatthias Ringwald         const eUSCI_UART_ConfigV1 *config);
216*5fd0122aSMatthias Ringwald 
217*5fd0122aSMatthias Ringwald //*****************************************************************************
218*5fd0122aSMatthias Ringwald //
219*5fd0122aSMatthias Ringwald //! Transmits a byte from the UART Module.
220*5fd0122aSMatthias Ringwald //!
221*5fd0122aSMatthias Ringwald //! \param moduleInstance is the instance of the eUSCI A (UART) module.
222*5fd0122aSMatthias Ringwald //! Valid parameters vary from part to part, but can include:
223*5fd0122aSMatthias Ringwald //!         - \b EUSCI_A0_BASE
224*5fd0122aSMatthias Ringwald //!         - \b EUSCI_A1_BASE
225*5fd0122aSMatthias Ringwald //!         - \b EUSCI_A2_BASE
226*5fd0122aSMatthias Ringwald //!         - \b EUSCI_A3_BASE
227*5fd0122aSMatthias Ringwald //!  <br> It is important to note that for eUSCI modules, only "A" modules such
228*5fd0122aSMatthias Ringwald //!  as EUSCI_A0 can be used. "B" modules such as EUSCI_B0 do not support the
229*5fd0122aSMatthias Ringwald //!  UART mode
230*5fd0122aSMatthias Ringwald //! \param transmitData data to be transmitted from the UART module
231*5fd0122aSMatthias Ringwald //!
232*5fd0122aSMatthias Ringwald //! This function will place the supplied data into UART transmit data register
233*5fd0122aSMatthias Ringwald //! to start transmission
234*5fd0122aSMatthias Ringwald //!
235*5fd0122aSMatthias Ringwald //! Modified register is \b UCAxTXBUF
236*5fd0122aSMatthias Ringwald //! \return None.
237*5fd0122aSMatthias Ringwald //
238*5fd0122aSMatthias Ringwald //*****************************************************************************
239*5fd0122aSMatthias Ringwald extern void UART_transmitData(uint32_t moduleInstance,
240*5fd0122aSMatthias Ringwald         uint_fast8_t transmitData);
241*5fd0122aSMatthias Ringwald 
242*5fd0122aSMatthias Ringwald //*****************************************************************************
243*5fd0122aSMatthias Ringwald //
244*5fd0122aSMatthias Ringwald //! Receives a byte that has been sent to the UART Module.
245*5fd0122aSMatthias Ringwald //!
246*5fd0122aSMatthias Ringwald //! \param moduleInstance is the instance of the eUSCI A (UART) module.
247*5fd0122aSMatthias Ringwald //! Valid parameters vary from part to part, but can include:
248*5fd0122aSMatthias Ringwald //!         - \b EUSCI_A0_BASE
249*5fd0122aSMatthias Ringwald //!         - \b EUSCI_A1_BASE
250*5fd0122aSMatthias Ringwald //!         - \b EUSCI_A2_BASE
251*5fd0122aSMatthias Ringwald //!         - \b EUSCI_A3_BASE
252*5fd0122aSMatthias Ringwald //!  <br> It is important to note that for eUSCI modules, only "A" modules such
253*5fd0122aSMatthias Ringwald //!  as  EUSCI_A0 can be used. "B" modules such as EUSCI_B0 do not support the
254*5fd0122aSMatthias Ringwald //!  UART mode
255*5fd0122aSMatthias Ringwald //!
256*5fd0122aSMatthias Ringwald //! This function reads a byte of data from the UART receive data Register.
257*5fd0122aSMatthias Ringwald //!
258*5fd0122aSMatthias Ringwald //! Modified register is \b UCAxRXBUF
259*5fd0122aSMatthias Ringwald //!
260*5fd0122aSMatthias Ringwald //! \return Returns the byte received from by the UART module, cast as an
261*5fd0122aSMatthias Ringwald //! uint8_t.
262*5fd0122aSMatthias Ringwald //
263*5fd0122aSMatthias Ringwald //*****************************************************************************
264*5fd0122aSMatthias Ringwald extern uint8_t UART_receiveData(uint32_t moduleInstance);
265*5fd0122aSMatthias Ringwald 
266*5fd0122aSMatthias Ringwald //*****************************************************************************
267*5fd0122aSMatthias Ringwald //
268*5fd0122aSMatthias Ringwald //! Enables the UART block.
269*5fd0122aSMatthias Ringwald //!
270*5fd0122aSMatthias Ringwald //! \param moduleInstance is the instance of the eUSCI A (UART) module.
271*5fd0122aSMatthias Ringwald //! Valid parameters vary from part to part, but can include:
272*5fd0122aSMatthias Ringwald //!         - \b EUSCI_A0_BASE
273*5fd0122aSMatthias Ringwald //!         - \b EUSCI_A1_BASE
274*5fd0122aSMatthias Ringwald //!         - \b EUSCI_A2_BASE
275*5fd0122aSMatthias Ringwald //!         - \b EUSCI_A3_BASE
276*5fd0122aSMatthias Ringwald //!  <br> It is important to note that for eUSCI modules, only "A" modules such
277*5fd0122aSMatthias Ringwald //!  as EUSCI_A0 can be used. "B" modules such as EUSCI_B0 do not support the
278*5fd0122aSMatthias Ringwald //!  UART mode
279*5fd0122aSMatthias Ringwald //!
280*5fd0122aSMatthias Ringwald //! This will enable operation of the UART block.
281*5fd0122aSMatthias Ringwald //!
282*5fd0122aSMatthias Ringwald //! Modified register is \b UCAxCTL1
283*5fd0122aSMatthias Ringwald //!
284*5fd0122aSMatthias Ringwald //! \return None.
285*5fd0122aSMatthias Ringwald //
286*5fd0122aSMatthias Ringwald //*****************************************************************************
287*5fd0122aSMatthias Ringwald extern void UART_enableModule(uint32_t moduleInstance);
288*5fd0122aSMatthias Ringwald 
289*5fd0122aSMatthias Ringwald //*****************************************************************************
290*5fd0122aSMatthias Ringwald //
291*5fd0122aSMatthias Ringwald //! Disables the UART block.
292*5fd0122aSMatthias Ringwald //!
293*5fd0122aSMatthias Ringwald //! \param moduleInstance is the instance of the eUSCI A (UART) module.
294*5fd0122aSMatthias Ringwald //! Valid parameters vary from part to part, but can include:
295*5fd0122aSMatthias Ringwald //!         - \b EUSCI_A0_BASE
296*5fd0122aSMatthias Ringwald //!         - \b EUSCI_A1_BASE
297*5fd0122aSMatthias Ringwald //!         - \b EUSCI_A2_BASE
298*5fd0122aSMatthias Ringwald //!         - \b EUSCI_A3_BASE
299*5fd0122aSMatthias Ringwald //!  <br> It is important to note that for eUSCI modules, only "A" modules such
300*5fd0122aSMatthias Ringwald //!  as EUSCI_A0 can be used. "B" modules such as EUSCI_B0 do not support the
301*5fd0122aSMatthias Ringwald //!  UART mode
302*5fd0122aSMatthias Ringwald //!
303*5fd0122aSMatthias Ringwald //! This will disable operation of the UART block.
304*5fd0122aSMatthias Ringwald //!
305*5fd0122aSMatthias Ringwald //! Modified register is \b UCAxCTL1
306*5fd0122aSMatthias Ringwald //!
307*5fd0122aSMatthias Ringwald //! \return None.
308*5fd0122aSMatthias Ringwald //
309*5fd0122aSMatthias Ringwald //*****************************************************************************
310*5fd0122aSMatthias Ringwald extern void UART_disableModule(uint32_t moduleInstance);
311*5fd0122aSMatthias Ringwald 
312*5fd0122aSMatthias Ringwald //*****************************************************************************
313*5fd0122aSMatthias Ringwald //
314*5fd0122aSMatthias Ringwald //! Gets the current UART status flags.
315*5fd0122aSMatthias Ringwald //!
316*5fd0122aSMatthias Ringwald //! \param moduleInstance is the instance of the eUSCI A (UART) module.
317*5fd0122aSMatthias Ringwald //! Valid parameters vary from part to part, but can include:
318*5fd0122aSMatthias Ringwald //!         - \b EUSCI_A0_BASE
319*5fd0122aSMatthias Ringwald //!         - \b EUSCI_A1_BASE
320*5fd0122aSMatthias Ringwald //!         - \b EUSCI_A2_BASE
321*5fd0122aSMatthias Ringwald //!         - \b EUSCI_A3_BASE
322*5fd0122aSMatthias Ringwald //!  <br> It is important to note that for eUSCI modules, only "A" modules such
323*5fd0122aSMatthias Ringwald //!  as EUSCI_A0 can be used. "B" modules such as EUSCI_B0 do not support the
324*5fd0122aSMatthias Ringwald //!  UART mode
325*5fd0122aSMatthias Ringwald //! \param mask is the masked interrupt flag status to be returned.
326*5fd0122aSMatthias Ringwald //!
327*5fd0122aSMatthias Ringwald //! This returns the status for the UART  module based on which
328*5fd0122aSMatthias Ringwald //! flag is passed. mask parameter can be either any of the following
329*5fd0122aSMatthias Ringwald //! selection.
330*5fd0122aSMatthias Ringwald //! - \b EUSCI_A_UART_LISTEN_ENABLE
331*5fd0122aSMatthias Ringwald //! - \b EUSCI_A_UART_FRAMING_ERROR
332*5fd0122aSMatthias Ringwald //! - \b EUSCI_A_UART_OVERRUN_ERROR
333*5fd0122aSMatthias Ringwald //! - \b EUSCI_A_UART_PARITY_ERROR
334*5fd0122aSMatthias Ringwald //! - \b eUARTBREAK_DETECT
335*5fd0122aSMatthias Ringwald //! - \b EUSCI_A_UART_RECEIVE_ERROR
336*5fd0122aSMatthias Ringwald //! - \b EUSCI_A_UART_ADDRESS_RECEIVED
337*5fd0122aSMatthias Ringwald //! - \b EUSCI_A_UART_IDLELINE
338*5fd0122aSMatthias Ringwald //! - \b EUSCI_A_UART_BUSY
339*5fd0122aSMatthias Ringwald //!
340*5fd0122aSMatthias Ringwald //! Modified register is \b UCAxSTAT
341*5fd0122aSMatthias Ringwald //!
342*5fd0122aSMatthias Ringwald //! \return the masked status flag
343*5fd0122aSMatthias Ringwald //
344*5fd0122aSMatthias Ringwald //*****************************************************************************
345*5fd0122aSMatthias Ringwald extern uint_fast8_t UART_queryStatusFlags(uint32_t moduleInstance,
346*5fd0122aSMatthias Ringwald         uint_fast8_t mask);
347*5fd0122aSMatthias Ringwald 
348*5fd0122aSMatthias Ringwald //*****************************************************************************
349*5fd0122aSMatthias Ringwald //
350*5fd0122aSMatthias Ringwald //! Sets the UART module in dormant mode
351*5fd0122aSMatthias Ringwald //!
352*5fd0122aSMatthias Ringwald //! \param moduleInstance is the instance of the eUSCI A (UART) module.
353*5fd0122aSMatthias Ringwald //! Valid parameters vary from part to part, but can include:
354*5fd0122aSMatthias Ringwald //!         - \b EUSCI_A0_BASE
355*5fd0122aSMatthias Ringwald //!         - \b EUSCI_A1_BASE
356*5fd0122aSMatthias Ringwald //!         - \b EUSCI_A2_BASE
357*5fd0122aSMatthias Ringwald //!         - \b EUSCI_A3_BASE
358*5fd0122aSMatthias Ringwald //!  <br> It is important to note that for eUSCI modules, only "A" modules such
359*5fd0122aSMatthias Ringwald //!  as EUSCI_A0 can be used. "B" modules such as EUSCI_B0 do not support the
360*5fd0122aSMatthias Ringwald //!  UART mode
361*5fd0122aSMatthias Ringwald //!
362*5fd0122aSMatthias Ringwald //! Puts USCI in sleep mode
363*5fd0122aSMatthias Ringwald //! Only characters that are preceded by an idle-line or with address bit set
364*5fd0122aSMatthias Ringwald //! UCRXIFG. In UART mode with automatic baud-rate detection, only the
365*5fd0122aSMatthias Ringwald //! combination of a break and synch field sets UCRXIFG.
366*5fd0122aSMatthias Ringwald //!
367*5fd0122aSMatthias Ringwald //! Modified register is \b UCAxCTL1
368*5fd0122aSMatthias Ringwald //!
369*5fd0122aSMatthias Ringwald //! \return None.
370*5fd0122aSMatthias Ringwald //
371*5fd0122aSMatthias Ringwald //*****************************************************************************
372*5fd0122aSMatthias Ringwald extern void UART_setDormant(uint32_t moduleInstance);
373*5fd0122aSMatthias Ringwald 
374*5fd0122aSMatthias Ringwald //*****************************************************************************
375*5fd0122aSMatthias Ringwald //
376*5fd0122aSMatthias Ringwald //! Re-enables UART module from dormant mode
377*5fd0122aSMatthias Ringwald //!
378*5fd0122aSMatthias Ringwald //! \param moduleInstance is the instance of the eUSCI A (UART) module.
379*5fd0122aSMatthias Ringwald //! Valid parameters vary from part to part, but can include:
380*5fd0122aSMatthias Ringwald //!         - \b EUSCI_A0_BASE
381*5fd0122aSMatthias Ringwald //!         - \b EUSCI_A1_BASE
382*5fd0122aSMatthias Ringwald //!         - \b EUSCI_A2_BASE
383*5fd0122aSMatthias Ringwald //!         - \b EUSCI_A3_BASE
384*5fd0122aSMatthias Ringwald //!  <br> It is important to note that for eUSCI modules, only "A" modules such
385*5fd0122aSMatthias Ringwald //!  as EUSCI_A0 can be used. "B" modules such as EUSCI_B0 do not support the
386*5fd0122aSMatthias Ringwald //!  UART mode
387*5fd0122aSMatthias Ringwald //!
388*5fd0122aSMatthias Ringwald //! Not dormant. All received characters set UCRXIFG.
389*5fd0122aSMatthias Ringwald //!
390*5fd0122aSMatthias Ringwald //! Modified bits are \b UCDORM of \b UCAxCTL1 register.
391*5fd0122aSMatthias Ringwald //!
392*5fd0122aSMatthias Ringwald //! \return None.
393*5fd0122aSMatthias Ringwald //
394*5fd0122aSMatthias Ringwald //*****************************************************************************
395*5fd0122aSMatthias Ringwald extern void UART_resetDormant(uint32_t moduleInstance);
396*5fd0122aSMatthias Ringwald 
397*5fd0122aSMatthias Ringwald //*****************************************************************************
398*5fd0122aSMatthias Ringwald //
399*5fd0122aSMatthias Ringwald //! Transmits the next byte to be transmitted marked as address depending on
400*5fd0122aSMatthias Ringwald //! selected multiprocessor mode
401*5fd0122aSMatthias Ringwald //!
402*5fd0122aSMatthias Ringwald //! \param moduleInstance is the instance of the eUSCI A (UART) module.
403*5fd0122aSMatthias Ringwald //! Valid parameters vary from part to part, but can include:
404*5fd0122aSMatthias Ringwald //!         - \b EUSCI_A0_BASE
405*5fd0122aSMatthias Ringwald //!         - \b EUSCI_A1_BASE
406*5fd0122aSMatthias Ringwald //!         - \b EUSCI_A2_BASE
407*5fd0122aSMatthias Ringwald //!         - \b EUSCI_A3_BASE
408*5fd0122aSMatthias Ringwald //!  <br> It is important to note that for eUSCI modules, only "A" modules such
409*5fd0122aSMatthias Ringwald //!  as EUSCI_A0 can be used. "B" modules such as EUSCI_B0 do not support the
410*5fd0122aSMatthias Ringwald //!  UART mode
411*5fd0122aSMatthias Ringwald //! \param transmitAddress is the next byte to be transmitted
412*5fd0122aSMatthias Ringwald //!
413*5fd0122aSMatthias Ringwald //! Modified register is \b UCAxCTL1, \b UCAxTXBUF
414*5fd0122aSMatthias Ringwald //!
415*5fd0122aSMatthias Ringwald //! \return None.
416*5fd0122aSMatthias Ringwald //
417*5fd0122aSMatthias Ringwald //*****************************************************************************
418*5fd0122aSMatthias Ringwald extern void UART_transmitAddress(uint32_t moduleInstance,
419*5fd0122aSMatthias Ringwald         uint_fast8_t transmitAddress);
420*5fd0122aSMatthias Ringwald 
421*5fd0122aSMatthias Ringwald //*****************************************************************************
422*5fd0122aSMatthias Ringwald //
423*5fd0122aSMatthias Ringwald //! Transmit break. Transmits a break with the next write to the transmit
424*5fd0122aSMatthias Ringwald //! buffer. In UART mode with automatic baud-rate detection,
425*5fd0122aSMatthias Ringwald //! EUSCI_A_UART_AUTOMATICBAUDRATE_SYNC(0x55) must be written into UCAxTXBUF to
426*5fd0122aSMatthias Ringwald //! generate the required break/synch fields.
427*5fd0122aSMatthias Ringwald //! Otherwise, DEFAULT_SYNC(0x00) must be written into the transmit buffer.
428*5fd0122aSMatthias Ringwald //! Also ensures module is ready for transmitting the next data
429*5fd0122aSMatthias Ringwald //!
430*5fd0122aSMatthias Ringwald //! \param moduleInstance is the instance of the eUSCI A (UART) module.
431*5fd0122aSMatthias Ringwald //! Valid parameters vary from part to part, but can include:
432*5fd0122aSMatthias Ringwald //!         - \b EUSCI_A0_BASE
433*5fd0122aSMatthias Ringwald //!         - \b EUSCI_A1_BASE
434*5fd0122aSMatthias Ringwald //!         - \b EUSCI_A2_BASE
435*5fd0122aSMatthias Ringwald //!         - \b EUSCI_A3_BASE
436*5fd0122aSMatthias Ringwald //!  <br> It is important to note that for eUSCI modules, only "A" modules such
437*5fd0122aSMatthias Ringwald //!  asEUSCI_A0 can be used. "B" modules such as EUSCI_B0 do not support the
438*5fd0122aSMatthias Ringwald //!  UART mode
439*5fd0122aSMatthias Ringwald //!
440*5fd0122aSMatthias Ringwald //! Modified register is \b UCAxCTL1, \b UCAxTXBUF
441*5fd0122aSMatthias Ringwald //!
442*5fd0122aSMatthias Ringwald //! \return None.
443*5fd0122aSMatthias Ringwald //
444*5fd0122aSMatthias Ringwald //*****************************************************************************
445*5fd0122aSMatthias Ringwald extern void UART_transmitBreak(uint32_t moduleInstance);
446*5fd0122aSMatthias Ringwald 
447*5fd0122aSMatthias Ringwald //*****************************************************************************
448*5fd0122aSMatthias Ringwald //
449*5fd0122aSMatthias Ringwald //! Returns the address of the RX Buffer of the UART for the DMA module.
450*5fd0122aSMatthias Ringwald //!
451*5fd0122aSMatthias Ringwald //! \param moduleInstance is the instance of the eUSCI A (UART) module.
452*5fd0122aSMatthias Ringwald //! Valid parameters vary from part to part, but can include:
453*5fd0122aSMatthias Ringwald //!         - \b EUSCI_A0_BASE
454*5fd0122aSMatthias Ringwald //!         - \b EUSCI_A1_BASE
455*5fd0122aSMatthias Ringwald //!         - \b EUSCI_A2_BASE
456*5fd0122aSMatthias Ringwald //!         - \b EUSCI_A3_BASE
457*5fd0122aSMatthias Ringwald //!  <br> It is important to note that for eUSCI modules, only "A" modules such
458*5fd0122aSMatthias Ringwald //!  as EUSCI_A0 can be used. "B" modules such as EUSCI_B0 do not support the
459*5fd0122aSMatthias Ringwald //!  UART mode
460*5fd0122aSMatthias Ringwald //!
461*5fd0122aSMatthias Ringwald //! Returns the address of the UART RX Buffer. This can be used in conjunction
462*5fd0122aSMatthias Ringwald //! with the DMA to store the received data directly to memory.
463*5fd0122aSMatthias Ringwald //!
464*5fd0122aSMatthias Ringwald //! \return None
465*5fd0122aSMatthias Ringwald //
466*5fd0122aSMatthias Ringwald //*****************************************************************************
467*5fd0122aSMatthias Ringwald extern uint32_t UART_getReceiveBufferAddressForDMA(uint32_t moduleInstance);
468*5fd0122aSMatthias Ringwald 
469*5fd0122aSMatthias Ringwald //*****************************************************************************
470*5fd0122aSMatthias Ringwald //
471*5fd0122aSMatthias Ringwald //! Returns the address of the TX Buffer of the UART for the DMA module.
472*5fd0122aSMatthias Ringwald //!
473*5fd0122aSMatthias Ringwald //! \param moduleInstance is the instance of the eUSCI A (UART) module.
474*5fd0122aSMatthias Ringwald //! Valid parameters vary from part to part, but can include:
475*5fd0122aSMatthias Ringwald //!         - \b EUSCI_A0_BASE
476*5fd0122aSMatthias Ringwald //!         - \b EUSCI_A1_BASE
477*5fd0122aSMatthias Ringwald //!         - \b EUSCI_A2_BASE
478*5fd0122aSMatthias Ringwald //!         - \b EUSCI_A3_BASE
479*5fd0122aSMatthias Ringwald //!  <br> It is important to note that for eUSCI modules, only "A" modules such
480*5fd0122aSMatthias Ringwald //!  as EUSCI_A0 can be used. "B" modules such as EUSCI_B0 do not support the
481*5fd0122aSMatthias Ringwald //!  UART mode
482*5fd0122aSMatthias Ringwald //!
483*5fd0122aSMatthias Ringwald //! Returns the address of the UART TX Buffer. This can be used in conjunction
484*5fd0122aSMatthias Ringwald //! with the DMA to obtain transmitted data directly from memory.
485*5fd0122aSMatthias Ringwald //!
486*5fd0122aSMatthias Ringwald //! \return None
487*5fd0122aSMatthias Ringwald //
488*5fd0122aSMatthias Ringwald //*****************************************************************************
489*5fd0122aSMatthias Ringwald extern uint32_t UART_getTransmitBufferAddressForDMA(uint32_t moduleInstance);
490*5fd0122aSMatthias Ringwald 
491*5fd0122aSMatthias Ringwald //*****************************************************************************
492*5fd0122aSMatthias Ringwald //
493*5fd0122aSMatthias Ringwald //! Sets the deglitch time
494*5fd0122aSMatthias Ringwald //!
495*5fd0122aSMatthias Ringwald //! \param moduleInstance is the instance of the eUSCI A (UART) module.
496*5fd0122aSMatthias Ringwald //! Valid parameters vary from part to part, but can include:
497*5fd0122aSMatthias Ringwald //!         - \b EUSCI_A0_BASE
498*5fd0122aSMatthias Ringwald //!         - \b EUSCI_A1_BASE
499*5fd0122aSMatthias Ringwald //!         - \b EUSCI_A2_BASE
500*5fd0122aSMatthias Ringwald //!         - \b EUSCI_A3_BASE
501*5fd0122aSMatthias Ringwald //!  <br> It is important to note that for eUSCI modules, only "A" modules such
502*5fd0122aSMatthias Ringwald //!  as EUSCI_A0 can be used. "B" modules such as EUSCI_B0 do not support the
503*5fd0122aSMatthias Ringwald //!  UART mode
504*5fd0122aSMatthias Ringwald //! \param deglitchTime is the selected deglitch time
505*5fd0122aSMatthias Ringwald //!     Valid values are
506*5fd0122aSMatthias Ringwald //!         - \b EUSCI_A_UART_DEGLITCH_TIME_2ns
507*5fd0122aSMatthias Ringwald //!         - \b EUSCI_A_UART_DEGLITCH_TIME_50ns
508*5fd0122aSMatthias Ringwald //!         - \b EUSCI_A_UART_DEGLITCH_TIME_100ns
509*5fd0122aSMatthias Ringwald //!         - \b EUSCI_A_UART_DEGLITCH_TIME_200ns
510*5fd0122aSMatthias Ringwald //!
511*5fd0122aSMatthias Ringwald //!
512*5fd0122aSMatthias Ringwald //! Returns the address of the UART TX Buffer. This can be used in conjunction
513*5fd0122aSMatthias Ringwald //! with the DMA to obtain transmitted data directly from memory.
514*5fd0122aSMatthias Ringwald //!
515*5fd0122aSMatthias Ringwald //! \return None
516*5fd0122aSMatthias Ringwald //
517*5fd0122aSMatthias Ringwald //*****************************************************************************
518*5fd0122aSMatthias Ringwald extern void UART_selectDeglitchTime(uint32_t moduleInstance,
519*5fd0122aSMatthias Ringwald         uint32_t deglitchTime);
520*5fd0122aSMatthias Ringwald 
521*5fd0122aSMatthias Ringwald //*****************************************************************************
522*5fd0122aSMatthias Ringwald //
523*5fd0122aSMatthias Ringwald //! Enables individual UART interrupt sources.
524*5fd0122aSMatthias Ringwald //!
525*5fd0122aSMatthias Ringwald //! \param moduleInstance is the instance of the eUSCI A (UART) module.
526*5fd0122aSMatthias Ringwald //! Valid parameters vary from part to part, but can include:
527*5fd0122aSMatthias Ringwald //!         - \b EUSCI_A0_BASE
528*5fd0122aSMatthias Ringwald //!         - \b EUSCI_A1_BASE
529*5fd0122aSMatthias Ringwald //!         - \b EUSCI_A2_BASE
530*5fd0122aSMatthias Ringwald //!         - \b EUSCI_A3_BASE
531*5fd0122aSMatthias Ringwald //!  <br> It is important to note that for eUSCI modules, only "A" modules such
532*5fd0122aSMatthias Ringwald //!  as EUSCI_A0 can be used. "B" modules such as EUSCI_B0 do not support the
533*5fd0122aSMatthias Ringwald //!  UART mode
534*5fd0122aSMatthias Ringwald //! \param mask is the bit mask of the interrupt sources to be enabled.
535*5fd0122aSMatthias Ringwald //!
536*5fd0122aSMatthias Ringwald //! Enables the indicated UART interrupt sources.  The interrupt flag is first
537*5fd0122aSMatthias Ringwald //! and then the corresponding interrupt is enabled. Only the sources that
538*5fd0122aSMatthias Ringwald //! are enabled can be reflected to the processor interrupt; disabled sources
539*5fd0122aSMatthias Ringwald //! have no effect on the processor.
540*5fd0122aSMatthias Ringwald //!
541*5fd0122aSMatthias Ringwald //! The mask parameter is the logical OR of any of the following:
542*5fd0122aSMatthias Ringwald //! - \b EUSCI_A_UART_RECEIVE_INTERRUPT -Receive interrupt
543*5fd0122aSMatthias Ringwald //! - \b EUSCI_A_UART_TRANSMIT_INTERRUPT - Transmit interrupt
544*5fd0122aSMatthias Ringwald //! - \b EUSCI_A_UART_RECEIVE_ERRONEOUSCHAR_INTERRUPT - Receive
545*5fd0122aSMatthias Ringwald //!                             erroneous-character interrupt enable
546*5fd0122aSMatthias Ringwald //! - \b EUSCI_A_UART_BREAKCHAR_INTERRUPT - Receive break character interrupt
547*5fd0122aSMatthias Ringwald //!                                           enable
548*5fd0122aSMatthias Ringwald //!
549*5fd0122aSMatthias Ringwald //! Modified register is \b UCAxIFG, \b UCAxIE and \b UCAxCTL1
550*5fd0122aSMatthias Ringwald //!
551*5fd0122aSMatthias Ringwald //! \return None.
552*5fd0122aSMatthias Ringwald //
553*5fd0122aSMatthias Ringwald //*****************************************************************************
554*5fd0122aSMatthias Ringwald extern void UART_enableInterrupt(uint32_t moduleInstance, uint_fast8_t mask);
555*5fd0122aSMatthias Ringwald 
556*5fd0122aSMatthias Ringwald //*****************************************************************************
557*5fd0122aSMatthias Ringwald //
558*5fd0122aSMatthias Ringwald //! Disables individual UART interrupt sources.
559*5fd0122aSMatthias Ringwald //!
560*5fd0122aSMatthias Ringwald //! \param moduleInstance is the instance of the eUSCI A (UART) module.
561*5fd0122aSMatthias Ringwald //! Valid parameters vary from part to part, but can include:
562*5fd0122aSMatthias Ringwald //!         - \b EUSCI_A0_BASE
563*5fd0122aSMatthias Ringwald //!         - \b EUSCI_A1_BASE
564*5fd0122aSMatthias Ringwald //!         - \b EUSCI_A2_BASE
565*5fd0122aSMatthias Ringwald //!         - \b EUSCI_A3_BASE
566*5fd0122aSMatthias Ringwald //!  <br> It is important to note that for eUSCI modules, only "A" modules such
567*5fd0122aSMatthias Ringwald //!  as EUSCI_A0 can be used. "B" modules such as EUSCI_B0 do not support the
568*5fd0122aSMatthias Ringwald //!  UART mode
569*5fd0122aSMatthias Ringwald //! \param mask is the bit mask of the interrupt sources to be
570*5fd0122aSMatthias Ringwald //! disabled.
571*5fd0122aSMatthias Ringwald //!
572*5fd0122aSMatthias Ringwald //! Disables the indicated UART interrupt sources.  Only the sources that
573*5fd0122aSMatthias Ringwald //! are enabled can be reflected to the processor interrupt; disabled sources
574*5fd0122aSMatthias Ringwald //! have no effect on the processor.
575*5fd0122aSMatthias Ringwald //!
576*5fd0122aSMatthias Ringwald //! The mask parameter is the logical OR of any of the following:
577*5fd0122aSMatthias Ringwald //! - \b EUSCI_A_UART_RECEIVE_INTERRUPT -Receive interrupt
578*5fd0122aSMatthias Ringwald //! - \b EUSCI_A_UART_TRANSMIT_INTERRUPT - Transmit interrupt
579*5fd0122aSMatthias Ringwald //! - \b EUSCI_A_UART_RECEIVE_ERRONEOUSCHAR_INTERRUPT - Receive
580*5fd0122aSMatthias Ringwald //!                             erroneous-character interrupt enable
581*5fd0122aSMatthias Ringwald //! - \b EUSCI_A_UART_BREAKCHAR_INTERRUPT - Receive break character interrupt
582*5fd0122aSMatthias Ringwald //!                                             enable
583*5fd0122aSMatthias Ringwald //!
584*5fd0122aSMatthias Ringwald //! Modified register is \b UCAxIFG, \b UCAxIE and \b UCAxCTL1
585*5fd0122aSMatthias Ringwald //! \return None.
586*5fd0122aSMatthias Ringwald //
587*5fd0122aSMatthias Ringwald //*****************************************************************************
588*5fd0122aSMatthias Ringwald extern void UART_disableInterrupt(uint32_t moduleInstance, uint_fast8_t mask);
589*5fd0122aSMatthias Ringwald 
590*5fd0122aSMatthias Ringwald //*****************************************************************************
591*5fd0122aSMatthias Ringwald //
592*5fd0122aSMatthias Ringwald //! Gets the current UART interrupt status.
593*5fd0122aSMatthias Ringwald //!
594*5fd0122aSMatthias Ringwald //! \param moduleInstance is the instance of the eUSCI A (UART) module.
595*5fd0122aSMatthias Ringwald //! Valid parameters vary from part to part, but can include:
596*5fd0122aSMatthias Ringwald //!         - \b EUSCI_A0_BASE
597*5fd0122aSMatthias Ringwald //!         - \b EUSCI_A1_BASE
598*5fd0122aSMatthias Ringwald //!         - \b EUSCI_A2_BASE
599*5fd0122aSMatthias Ringwald //!         - \b EUSCI_A3_BASE
600*5fd0122aSMatthias Ringwald //!  <br> It is important to note that for eUSCI modules, only "A" modules such
601*5fd0122aSMatthias Ringwald //!  as EUSCI_A0 can be used. "B" modules such as EUSCI_B0 do not support the
602*5fd0122aSMatthias Ringwald //!  UART mode
603*5fd0122aSMatthias Ringwald //! \param mask is the masked interrupt flag status to be returned.
604*5fd0122aSMatthias Ringwald //!        Mask value is the logical OR of any of the following:
605*5fd0122aSMatthias Ringwald //!        - \b EUSCI_A_UART_RECEIVE_INTERRUPT_FLAG
606*5fd0122aSMatthias Ringwald //!        - \b EUSCI_A_UART_TRANSMIT_INTERRUPT_FLAG
607*5fd0122aSMatthias Ringwald //!        - \b EUSCI_A_UART_STARTBIT_INTERRUPT_FLAG
608*5fd0122aSMatthias Ringwald //!        - \b EUSCI_A_UART_TRANSMIT_COMPLETE_INTERRUPT_FLAG
609*5fd0122aSMatthias Ringwald //!
610*5fd0122aSMatthias Ringwald //!
611*5fd0122aSMatthias Ringwald //! \return The current interrupt status as an ORed bit mask:
612*5fd0122aSMatthias Ringwald //! - \b EUSCI_A_UART_RECEIVE_INTERRUPT_FLAG -Receive interrupt flag
613*5fd0122aSMatthias Ringwald //! - \b EUSCI_A_UART_TRANSMIT_INTERRUPT_FLAG - Transmit interrupt flag
614*5fd0122aSMatthias Ringwald //
615*5fd0122aSMatthias Ringwald //*****************************************************************************
616*5fd0122aSMatthias Ringwald extern uint_fast8_t UART_getInterruptStatus(uint32_t moduleInstance,
617*5fd0122aSMatthias Ringwald         uint8_t mask);
618*5fd0122aSMatthias Ringwald 
619*5fd0122aSMatthias Ringwald //*****************************************************************************
620*5fd0122aSMatthias Ringwald //
621*5fd0122aSMatthias Ringwald //! Gets the current UART interrupt status masked with the enabled interrupts.
622*5fd0122aSMatthias Ringwald //! This function is useful to call in ISRs to get a list of pending
623*5fd0122aSMatthias Ringwald //! interrupts that are actually enabled and could have caused
624*5fd0122aSMatthias Ringwald //! the ISR.
625*5fd0122aSMatthias Ringwald 
626*5fd0122aSMatthias Ringwald //!
627*5fd0122aSMatthias Ringwald //! \param moduleInstance is the instance of the eUSCI A (UART) module.
628*5fd0122aSMatthias Ringwald //! Valid parameters vary from part to part, but can include:
629*5fd0122aSMatthias Ringwald //!         - \b EUSCI_A0_BASE
630*5fd0122aSMatthias Ringwald //!         - \b EUSCI_A1_BASE
631*5fd0122aSMatthias Ringwald //!         - \b EUSCI_A2_BASE
632*5fd0122aSMatthias Ringwald //!         - \b EUSCI_A3_BASE
633*5fd0122aSMatthias Ringwald //!  <br> It is important to note that for eUSCI modules, only "A" modules such
634*5fd0122aSMatthias Ringwald //!  as EUSCI_A0 can be used. "B" modules such as EUSCI_B0 do not support the
635*5fd0122aSMatthias Ringwald //!  UART mode
636*5fd0122aSMatthias Ringwald //!
637*5fd0122aSMatthias Ringwald //! \return The current interrupt status as an ORed bit mask:
638*5fd0122aSMatthias Ringwald //! - \b EUSCI_A_UART_RECEIVE_INTERRUPT_FLAG -Receive interrupt flag
639*5fd0122aSMatthias Ringwald //! - \b EUSCI_A_UART_TRANSMIT_INTERRUPT_FLAG - Transmit interrupt flag
640*5fd0122aSMatthias Ringwald //
641*5fd0122aSMatthias Ringwald //*****************************************************************************
642*5fd0122aSMatthias Ringwald extern uint_fast8_t UART_getEnabledInterruptStatus(uint32_t moduleInstance);
643*5fd0122aSMatthias Ringwald 
644*5fd0122aSMatthias Ringwald //*****************************************************************************
645*5fd0122aSMatthias Ringwald //
646*5fd0122aSMatthias Ringwald //! Clears UART interrupt sources.
647*5fd0122aSMatthias Ringwald //!
648*5fd0122aSMatthias Ringwald //! \param moduleInstance is the instance of the eUSCI A (UART) module.
649*5fd0122aSMatthias Ringwald //! Valid parameters vary from part to part, but can include:
650*5fd0122aSMatthias Ringwald //!         - \b EUSCI_A0_BASE
651*5fd0122aSMatthias Ringwald //!         - \b EUSCI_A1_BASE
652*5fd0122aSMatthias Ringwald //!         - \b EUSCI_A2_BASE
653*5fd0122aSMatthias Ringwald //!         - \b EUSCI_A3_BASE
654*5fd0122aSMatthias Ringwald //!  <br> It is important to note that for eUSCI modules, only "A" modules such
655*5fd0122aSMatthias Ringwald //!  as EUSCI_A0 can be used. "B" modules such as EUSCI_B0 do not support the
656*5fd0122aSMatthias Ringwald //!  UART mode
657*5fd0122aSMatthias Ringwald //! \param mask is a bit mask of the interrupt sources to be cleared.
658*5fd0122aSMatthias Ringwald //!
659*5fd0122aSMatthias Ringwald //! The UART interrupt source is cleared, so that it no longer asserts.
660*5fd0122aSMatthias Ringwald //! The highest interrupt flag is automatically cleared when an interrupt vector
661*5fd0122aSMatthias Ringwald //! generator is used.
662*5fd0122aSMatthias Ringwald //!
663*5fd0122aSMatthias Ringwald //! The mask parameter has the same definition as the mask parameter to
664*5fd0122aSMatthias Ringwald //! EUSCI_A_UART_enableInterrupt().
665*5fd0122aSMatthias Ringwald //!
666*5fd0122aSMatthias Ringwald //! Modified register is \b UCAxIFG
667*5fd0122aSMatthias Ringwald //!
668*5fd0122aSMatthias Ringwald //! \return None.
669*5fd0122aSMatthias Ringwald //
670*5fd0122aSMatthias Ringwald //*****************************************************************************
671*5fd0122aSMatthias Ringwald extern void UART_clearInterruptFlag(uint32_t moduleInstance, uint_fast8_t mask);
672*5fd0122aSMatthias Ringwald 
673*5fd0122aSMatthias Ringwald //*****************************************************************************
674*5fd0122aSMatthias Ringwald //
675*5fd0122aSMatthias Ringwald //! Registers an interrupt handler for UART interrupts.
676*5fd0122aSMatthias Ringwald //!
677*5fd0122aSMatthias Ringwald //! \param moduleInstance is the instance of the eUSCI A (UART) module.
678*5fd0122aSMatthias Ringwald //! Valid parameters vary from part to part, but can include:
679*5fd0122aSMatthias Ringwald //!         - \b EUSCI_A0_BASE
680*5fd0122aSMatthias Ringwald //!         - \b EUSCI_A1_BASE
681*5fd0122aSMatthias Ringwald //!         - \b EUSCI_A2_BASE
682*5fd0122aSMatthias Ringwald //!         - \b EUSCI_A3_BASE
683*5fd0122aSMatthias Ringwald //!  <br> It is important to note that for eUSCI modules, only "A" modules such
684*5fd0122aSMatthias Ringwald //!  as EUSCI_A0 can be used. "B" modules such as EUSCI_B0 do not support the
685*5fd0122aSMatthias Ringwald //!  UART mode.
686*5fd0122aSMatthias Ringwald //!
687*5fd0122aSMatthias Ringwald //! \param intHandler is a pointer to the function to be called when the
688*5fd0122aSMatthias Ringwald //! timer capture compare interrupt occurs.
689*5fd0122aSMatthias Ringwald //!
690*5fd0122aSMatthias Ringwald //! This function registers the handler to be called when an UART
691*5fd0122aSMatthias Ringwald //! interrupt occurs. This function enables the global interrupt in the
692*5fd0122aSMatthias Ringwald //! interrupt controller; specific UART interrupts must be enabled
693*5fd0122aSMatthias Ringwald //! via UART_enableInterrupt().  It is the interrupt handler's responsibility to
694*5fd0122aSMatthias Ringwald //! clear the interrupt source via UART_clearInterruptFlag().
695*5fd0122aSMatthias Ringwald //!
696*5fd0122aSMatthias Ringwald //! \return None.
697*5fd0122aSMatthias Ringwald //
698*5fd0122aSMatthias Ringwald //*****************************************************************************
699*5fd0122aSMatthias Ringwald extern void UART_registerInterrupt(uint32_t moduleInstance,
700*5fd0122aSMatthias Ringwald         void (*intHandler)(void));
701*5fd0122aSMatthias Ringwald 
702*5fd0122aSMatthias Ringwald //*****************************************************************************
703*5fd0122aSMatthias Ringwald //
704*5fd0122aSMatthias Ringwald //! Unregisters the interrupt handler for the UART module
705*5fd0122aSMatthias Ringwald //!
706*5fd0122aSMatthias Ringwald //! \param moduleInstance is the instance of the eUSCI A (UART) module.
707*5fd0122aSMatthias Ringwald //! Valid parameters vary from part to part, but can include:
708*5fd0122aSMatthias Ringwald //!         - \b EUSCI_A0_BASE
709*5fd0122aSMatthias Ringwald //!         - \b EUSCI_A1_BASE
710*5fd0122aSMatthias Ringwald //!         - \b EUSCI_A2_BASE
711*5fd0122aSMatthias Ringwald //!         - \b EUSCI_A3_BASE
712*5fd0122aSMatthias Ringwald //!  <br> It is important to note that for eUSCI modules, only "A" modules such
713*5fd0122aSMatthias Ringwald //!  as EUSCI_A0 can be used. "B" modules such as EUSCI_B0 do not support the
714*5fd0122aSMatthias Ringwald //!  UART mode.
715*5fd0122aSMatthias Ringwald //!
716*5fd0122aSMatthias Ringwald //! This function unregisters the handler to be called when timer
717*5fd0122aSMatthias Ringwald //! interrupt occurs.  This function also masks off the interrupt in the
718*5fd0122aSMatthias Ringwald //! interrupt controller so that the interrupt handler no longer is called.
719*5fd0122aSMatthias Ringwald //!
720*5fd0122aSMatthias Ringwald //! \sa Interrupt_registerInterrupt() for important information about
721*5fd0122aSMatthias Ringwald //! registering interrupt handlers.
722*5fd0122aSMatthias Ringwald //!
723*5fd0122aSMatthias Ringwald //! \return None.
724*5fd0122aSMatthias Ringwald //
725*5fd0122aSMatthias Ringwald //*****************************************************************************
726*5fd0122aSMatthias Ringwald extern void UART_unregisterInterrupt(uint32_t moduleInstance);
727*5fd0122aSMatthias Ringwald 
728*5fd0122aSMatthias Ringwald /* Backwards Compatibility Layer */
729*5fd0122aSMatthias Ringwald #define EUSCI_A_UART_transmitData UART_transmitData
730*5fd0122aSMatthias Ringwald #define EUSCI_A_UART_receiveData UART_receiveData
731*5fd0122aSMatthias Ringwald #define EUSCI_A_UART_enableInterrupt UART_enableInterrupt
732*5fd0122aSMatthias Ringwald #define EUSCI_A_UART_disableInterrupt UART_disableInterrupt
733*5fd0122aSMatthias Ringwald #define EUSCI_A_UART_getInterruptStatus UART_getInterruptStatus
734*5fd0122aSMatthias Ringwald #define EUSCI_A_UART_clearInterruptFlag UART_clearInterruptFlag
735*5fd0122aSMatthias Ringwald #define EUSCI_A_UART_enable UART_enableModule
736*5fd0122aSMatthias Ringwald #define EUSCI_A_UART_disable UART_disableModule
737*5fd0122aSMatthias Ringwald #define EUSCI_A_UART_queryStatusFlags UART_queryStatusFlags
738*5fd0122aSMatthias Ringwald #define EUSCI_A_UART_setDormant UART_setDormant
739*5fd0122aSMatthias Ringwald #define EUSCI_A_UART_resetDormant UART_resetDormant
740*5fd0122aSMatthias Ringwald #define EUSCI_A_UART_transmitAddress UART_transmitAddress
741*5fd0122aSMatthias Ringwald #define EUSCI_A_UART_transmitBreak UART_transmitBreak
742*5fd0122aSMatthias Ringwald #define EUSCI_A_UART_getReceiveBufferAddressForDMA UART_getReceiveBufferAddressForDMA
743*5fd0122aSMatthias Ringwald #define EUSCI_A_UART_getTransmitBufferAddressForDMA UART_getTransmitBufferAddressForDMA
744*5fd0122aSMatthias Ringwald #define EUSCI_A_UART_selectDeglitchTime UART_selectDeglitchTime
745*5fd0122aSMatthias Ringwald 
746*5fd0122aSMatthias Ringwald //*****************************************************************************
747*5fd0122aSMatthias Ringwald //
748*5fd0122aSMatthias Ringwald // Mark the end of the C bindings section for C++ compilers.
749*5fd0122aSMatthias Ringwald //
750*5fd0122aSMatthias Ringwald //*****************************************************************************
751*5fd0122aSMatthias Ringwald #ifdef __cplusplus
752*5fd0122aSMatthias Ringwald }
753*5fd0122aSMatthias Ringwald #endif
754*5fd0122aSMatthias Ringwald 
755*5fd0122aSMatthias Ringwald //*****************************************************************************
756*5fd0122aSMatthias Ringwald //
757*5fd0122aSMatthias Ringwald // Close the Doxygen group.
758*5fd0122aSMatthias Ringwald //! @}
759*5fd0122aSMatthias Ringwald //
760*5fd0122aSMatthias Ringwald //*****************************************************************************
761*5fd0122aSMatthias Ringwald 
762*5fd0122aSMatthias Ringwald #endif /* UART_H_ */
763