eRPC API Reference  Rev. 1.7.2
NXP Semiconductors
erpc_mu_transport.h
Go to the documentation of this file.
1 /*
2  * Copyright 2017 NXP
3  * All rights reserved.
4  *
5  *
6  * SPDX-License-Identifier: BSD-3-Clause
7  */
8 
9 #ifndef _EMBEDDED_RPC__MU_TRANSPORT_H_
10 #define _EMBEDDED_RPC__MU_TRANSPORT_H_
11 
12 #include "erpc_config_internal.h"
13 #if ERPC_THREADS
14 #include "erpc_threading.h"
15 #endif
16 #include "erpc_message_buffer.h"
17 #include "erpc_transport.h"
18 #include "fsl_device_registers.h"
19 #include "fsl_mu.h"
20 
27 // Definitions
30 #if ERPC_TRANSPORT_MU_USE_MCMGR
31 
33 #define MU_REG_COUNT (MU_RR_COUNT - 1U)
34 #define MU_LAST_REG_IDX 2
35 
36 #define MU_RX_Interrupt_Handler(x) MU_RX_Interrupt(x)
37 #define MU_RX_Interrupt(number) MU_Rx##number##FullFlagISR
38 #define MU_RxFullFlagISRCallback MU_RX_Interrupt_Handler(MU_LAST_REG_IDX)
39 
40 #define MU_TX_Interrupt_Handler(x) MU_TX_Interrupt(x)
41 #define MU_TX_Interrupt(number) MU_Tx##number##EmptyFlagISR
42 #define MU_TxEmptyFlagISRCallback MU_TX_Interrupt_Handler(MU_LAST_REG_IDX)
43 
44 #else
45 #define MU_REG_COUNT (MU_RR_COUNT)
46 #endif /* ERPC_TRANSPORT_MU_USE_MCMGR */
47 // Classes
50 
51 namespace erpc {
70 class MUTransport : public Transport
71 {
72 public:
78  MUTransport(void);
79 
83  virtual ~MUTransport(void);
84 
95  virtual erpc_status_t init(MU_Type *muBase);
96 
106  virtual erpc_status_t receive(MessageBuffer *message);
107 
116  virtual erpc_status_t send(MessageBuffer *message);
117 
125  virtual bool hasMessage() { return m_newMessage; }
126 
127 #if ERPC_TRANSPORT_MU_USE_MCMGR
128 
136  static void mu_tx_empty_irq_callback(void);
144  static void mu_rx_full_irq_callback(void);
145 #else
146 
153  static void mu_irq_callback(void);
154 #endif /* ERPC_TRANSPORT_MU_USE_MCMGR */
155 
156 protected:
166  void rx_cb(void);
167 
174  void tx_cb(void);
175 
176  volatile bool m_newMessage;
178  uint32_t m_rxMsgSize;
180  uint32_t m_rxCntBytes;
181  uint32_t *volatile m_rxBuffer;
182  uint32_t m_txMsgSize;
184  uint32_t m_txCntBytes;
185  uint32_t *volatile m_txBuffer;
187 #if ERPC_THREADS
193 #endif
194 
195  MU_Type *m_muBase;
196 };
197 
198 } // namespace erpc
199 
202 #endif // _EMBEDDED_RPC__MU_TRANSPORT_H_
Abstract interface for transport layer.
Definition: erpc_transport.h:35
int32_t erpc_status_t
Type used for all status and error return values.
Definition: erpc_common.h:86
uint32_t m_txMsgSize
Definition: erpc_mu_transport.h:182
virtual erpc_status_t receive(MessageBuffer *message)
Start receiving data and stores it to passed message buffer.
Definition: erpc_mu_transport.cpp:184
virtual ~MUTransport(void)
Destructor of MU transport.
Definition: erpc_mu_transport.cpp:91
MUTransport(void)
Constructor of MU transport.
Definition: erpc_mu_transport.cpp:71
Semaphore m_txSemaphore
Definition: erpc_mu_transport.h:189
MU_Type * m_muBase
Definition: erpc_mu_transport.h:195
uint32_t m_rxMsgSize
Definition: erpc_mu_transport.h:178
Semaphore m_rxSemaphore
Definition: erpc_mu_transport.h:188
Mutex m_sendLock
Definition: erpc_mu_transport.h:191
virtual bool hasMessage()
Function to check if is new message to receive.
Definition: erpc_mu_transport.h:125
virtual erpc_status_t init(MU_Type *muBase)
Initialization of MU transport layer.
Definition: erpc_mu_transport.cpp:93
Represents a memory buffer containing a message.
Definition: erpc_message_buffer.h:36
uint32_t m_rxCntBytes
Definition: erpc_mu_transport.h:180
Definition: erpc_arbitrated_client_manager.h:25
uint32_t *volatile m_txBuffer
Definition: erpc_mu_transport.h:185
virtual erpc_status_t send(MessageBuffer *message)
Function to send prepared message.
Definition: erpc_mu_transport.cpp:217
Transport that uses Messaging Unit (MU) for interprocessor messaging.
Definition: erpc_mu_transport.h:70
uint32_t *volatile m_rxBuffer
Definition: erpc_mu_transport.h:181
void tx_cb(void)
Function called from MU IRQ when the MU TX empty flag is asserted and the IRQ is enabled.
Definition: erpc_mu_transport.cpp:154
Mutex m_receiveLock
Definition: erpc_mu_transport.h:192
volatile bool m_newMessage
Definition: erpc_mu_transport.h:176
uint32_t m_txCntBytes
Definition: erpc_mu_transport.h:184
static void mu_irq_callback(void)
Callback function called from MU IRQ.
Definition: erpc_mu_transport.cpp:42
Mutex.
Definition: erpc_threading.h:259
Simple semaphore class.
Definition: erpc_threading.h:359
void rx_cb(void)
Function called from MU IRQ when the MU RX full flag is asserted and the IRQ is enabled.
Definition: erpc_mu_transport.cpp:111