Lpspi_Ip.h 22 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441
  1. /*==================================================================================================
  2. * Project : RTD AUTOSAR 4.4
  3. * Platform : CORTEXM
  4. * Peripheral : LPSPI
  5. * Dependencies :
  6. *
  7. * Autosar Version : 4.4.0
  8. * Autosar Revision : ASR_REL_4_4_REV_0000
  9. * Autosar Conf.Variant :
  10. * SW Version : 1.0.0
  11. * Build Version : S32K1_RTD_1_0_0_HF01_D2109_ASR_REL_4_4_REV_0000_20210907
  12. *
  13. * (c) Copyright 2020-2021 NXP Semiconductors
  14. * All Rights Reserved.
  15. *
  16. * NXP Confidential. This software is owned or controlled by NXP and may only be
  17. * used strictly in accordance with the applicable license terms. By expressly
  18. * accepting such terms or by downloading, installing, activating and/or otherwise
  19. * using the software, you are agreeing that you have read, and that you agree to
  20. * comply with and are bound by, such license terms. If you do not agree to be
  21. * bound by the applicable license terms, then you may not retain, install,
  22. * activate or otherwise use the software.
  23. ==================================================================================================*/
  24. #ifndef LPSPI_IP_H
  25. #define LPSPI_IP_H
  26. /**
  27. * @file Lpspi_Ip.h
  28. *
  29. *
  30. * @brief LPSPI IP driver header file.
  31. * @details LPSPI IP driver header file.
  32. * @addtogroup LPSPI_DRIVER Lpspi Driver
  33. * @{
  34. */
  35. #ifdef __cplusplus
  36. extern "C"{
  37. #endif
  38. /*==================================================================================================
  39. * INCLUDE FILES
  40. * 1) system and project includes
  41. * 2) needed interfaces from external units
  42. * 3) internal and external interfaces from this unit
  43. ==================================================================================================*/
  44. #include "Lpspi_Ip_Types.h"
  45. #ifdef LPSPI_IP_ENABLE_USER_MODE_SUPPORT
  46. #include "Mcal.h"
  47. #endif
  48. /*==================================================================================================
  49. * SOURCE FILE VERSION INFORMATION
  50. ==================================================================================================*/
  51. #define LPSPI_IP_VENDOR_ID 43
  52. #define LPSPI_IP_AR_RELEASE_MAJOR_VERSION 4
  53. #define LPSPI_IP_AR_RELEASE_MINOR_VERSION 4
  54. #define LPSPI_IP_AR_RELEASE_REVISION_VERSION 0
  55. #define LPSPI_IP_SW_MAJOR_VERSION 1
  56. #define LPSPI_IP_SW_MINOR_VERSION 0
  57. #define LPSPI_IP_SW_PATCH_VERSION 0
  58. /*==================================================================================================
  59. * FILE VERSION CHECKS
  60. ==================================================================================================*/
  61. /* Check if Lpspi_Ip.h and Lpspi_Ip_Types.h are of the same vendor */
  62. #if (LPSPI_IP_VENDOR_ID != LPSPI_IP_TYPES_VENDOR_ID)
  63. #error "Lpspi_Ip.h and Lpspi_Ip_Types.h have different vendor ids"
  64. #endif
  65. /* Check if Lpspi_Ip.h file and Lpspi_Ip_Types.h file are of the same Autosar version */
  66. #if ((LPSPI_IP_AR_RELEASE_MAJOR_VERSION != LPSPI_IP_TYPES_AR_RELEASE_MAJOR_VERSION) || \
  67. (LPSPI_IP_AR_RELEASE_MINOR_VERSION != LPSPI_IP_TYPES_AR_RELEASE_MINOR_VERSION) || \
  68. (LPSPI_IP_AR_RELEASE_REVISION_VERSION != LPSPI_IP_TYPES_AR_RELEASE_REVISION_VERSION))
  69. #error "AutoSar Version Numbers of Lpspi_Ip.h and Lpspi_Ip_Types.h are different"
  70. #endif
  71. #if ((LPSPI_IP_SW_MAJOR_VERSION != LPSPI_IP_TYPES_SW_MAJOR_VERSION) || \
  72. (LPSPI_IP_SW_MINOR_VERSION != LPSPI_IP_TYPES_SW_MINOR_VERSION) || \
  73. (LPSPI_IP_SW_PATCH_VERSION != LPSPI_IP_TYPES_SW_PATCH_VERSION))
  74. #error "Software Version Numbers of Lpspi_Ip.h and Lpspi_Ip_Types.h are different"
  75. #endif
  76. #ifndef DISABLE_MCAL_INTERMODULE_ASR_CHECK
  77. /* Check if current file and Mcal header file are of the same Autosar version */
  78. #if ((LPSPI_IP_AR_RELEASE_MAJOR_VERSION != MCAL_AR_RELEASE_MAJOR_VERSION) || \
  79. (LPSPI_IP_AR_RELEASE_MINOR_VERSION != MCAL_AR_RELEASE_MINOR_VERSION))
  80. #error "AutoSar Version Numbers of Lpspi_Ip.h and Mcal.h are different"
  81. #endif
  82. #endif
  83. /*==================================================================================================
  84. * CONSTANTS
  85. ==================================================================================================*/
  86. /*==================================================================================================
  87. * DEFINES AND MACROS
  88. ==================================================================================================*/
  89. /*==================================================================================================
  90. * ENUMS
  91. ==================================================================================================*/
  92. /*==================================================================================================
  93. * STRUCTURES AND OTHER TYPEDEFS
  94. ==================================================================================================*/
  95. /*==================================================================================================
  96. * GLOBAL VARIABLE DECLARATIONS
  97. ==================================================================================================*/
  98. #define SPI_START_SEC_CONFIG_DATA_UNSPECIFIED
  99. #include "Spi_MemMap.h"
  100. /**
  101. * @brief Export Post-Build configurations.
  102. */
  103. LPSPI_IP_CONFIG_EXT
  104. #define SPI_STOP_SEC_CONFIG_DATA_UNSPECIFIED
  105. #include "Spi_MemMap.h"
  106. /*==================================================================================================
  107. * FUNCTION PROTOTYPES
  108. ==================================================================================================*/
  109. #define SPI_START_SEC_CODE
  110. #include "Spi_MemMap.h"
  111. /**
  112. * @brief LPSPI peripheral initialization.
  113. * @details The function initialize the SPI Unit specified in the configuration.
  114. *
  115. * @param[in] PhyUnitConfigPtr - pointer to the specified SPI Unit configuration.
  116. *
  117. * @return LPSPI_IP_STATUS_SUCCESS: Initialization command has been accepted.
  118. * LPSPI_IP_STATUS_FAIL: Initialization command has not been accepted.
  119. * @implements Lpspi_Ip_Init_Activity
  120. */
  121. Lpspi_Ip_StatusType Lpspi_Ip_Init(const Lpspi_Ip_ConfigType *PhyUnitConfigPtr);
  122. /**
  123. * @brief LPSPI peripheral deinitialization.
  124. * @details The function de-initialize the SPI peripheral instance specified.
  125. * All registers of SPI peripheral will be reset.
  126. *
  127. * @param[in] Instance - SPI peripheral instance number.
  128. *
  129. * @return LPSPI_IP_STATUS_SUCCESS: De-initialization command has been accepted.
  130. * LPSPI_IP_STATUS_FAIL: De-initialization command has not been accepted.
  131. * @implements Lpspi_Ip_DeInit_Activity
  132. */
  133. Lpspi_Ip_StatusType Lpspi_Ip_DeInit(uint8 Instance);
  134. /**
  135. * @brief LPSPI synchronous transmission.
  136. * @details This function initializes a synchronous transfer using the bus parameters provided
  137. * by external device.
  138. *
  139. * @param[in] ExternalDevice - pointer to the external device where data is transmitted.
  140. * @param[in] TxBuffer - pointer to transmit buffer.
  141. * @param[in-out] RxBuffer - pointer to receive buffer.
  142. * @param[in] Length - number of bytes to be sent.
  143. * @param[in] TimeOut - duration for sending one frame.
  144. *
  145. * @return LPSPI_IP_STATUS_SUCCESS: Transmission command has been accepted.
  146. * LPSPI_IP_FIFO_ERROR: Overflow or underflow error occurred.
  147. * LPSPI_IP_STATUS_FAIL: Transmission command has not been accepted.
  148. * LPSPI_IP_TIMEOUT: Timeout error occurred.
  149. *
  150. * @implements Lpspi_Ip_SyncTransmit_Activity
  151. */
  152. Lpspi_Ip_StatusType Lpspi_Ip_SyncTransmit(
  153. const Lpspi_Ip_ExternalDeviceType *ExternalDevice,
  154. uint8 *TxBuffer,
  155. uint8 *RxBuffer,
  156. uint16 Length,
  157. uint32 TimeOut
  158. );
  159. /**
  160. * @brief LPSPI asynchronous transmission.
  161. * @details This function initializes an asynchronous transfer using the bus parameters provided
  162. * by external device.
  163. *
  164. * @param[in] ExternalDevice - pointer to the external device where data is transmitted
  165. * @param[in] TxBuffer - pointer to transmit buffer.
  166. * @param[in-out] RxBuffer - pointer to receive buffer.
  167. * @param[in] Length - number of bytes to be sent.
  168. * @param[in] EndCallback - callback function is called at the end of transfer.
  169. *
  170. * @return LPSPI_IP_STATUS_SUCCESS: Transmission command has been accepted.
  171. * LPSPI_IP_STATUS_FAIL: Transmission command has not been accepted.
  172. * @implements Lpspi_Ip_AsyncTransmit_Activity
  173. */
  174. Lpspi_Ip_StatusType Lpspi_Ip_AsyncTransmit(
  175. const Lpspi_Ip_ExternalDeviceType *ExternalDevice,
  176. uint8 *TxBuffer,
  177. uint8 *RxBuffer,
  178. uint16 Length,
  179. Lpspi_Ip_CallbackType EndCallback
  180. );
  181. #if (STD_ON == LPSPI_IP_HALF_DUPLEX_MODE_SUPPORT)
  182. /**
  183. * @brief LPSPI synchronous transmission support half duplex mode.
  184. * @details This function initializes a synchronous transfer using the bus parameters provided
  185. * by external device.
  186. *
  187. * @param[in] ExternalDevice - pointer to the external device where data is transmitted.
  188. * @param[in] Buffer - pointer to transmit buffer.
  189. * @param[in] Length - number of bytes to be sent.
  190. * @param[in] TimeOut - duration for sending one frame.
  191. *
  192. * @return LPSPI_IP_STATUS_SUCCESS: Transmission command has been accepted.
  193. * LPSPI_IP_FIFO_ERROR: Overflow or underflow error occurred.
  194. * LPSPI_IP_STATUS_FAIL: Transmission command has not been accepted.
  195. * LPSPI_IP_TIMEOUT: Timeout error occurred.
  196. *
  197. * @implements Lpspi_Ip_SyncTransmitHalfDuplex_Activity
  198. */
  199. Lpspi_Ip_StatusType Lpspi_Ip_SyncTransmitHalfDuplex(
  200. const Lpspi_Ip_ExternalDeviceType *ExternalDevice,
  201. uint8 *Buffer,
  202. uint16 Length,
  203. Lpspi_Ip_HalfDuplexType TransferType,
  204. uint32 TimeOut
  205. );
  206. /**
  207. * @brief LPSPI asynchronous transmission support half duplex mode.
  208. * @details This function initializes an asynchronous transfer using the bus parameters provided
  209. * by external device.
  210. *
  211. * @param[in] ExternalDevice - pointer to the external device where data is transmitted
  212. * @param[in] Buffer - pointer to transmit buffer.
  213. * @param[in] Length - number of bytes to be sent.
  214. * @param[in] EndCallback - callback function is called at the end of transfer.
  215. *
  216. * @return LPSPI_IP_STATUS_SUCCESS: Transmission command has been accepted.
  217. * LPSPI_IP_STATUS_FAIL: Transmission command has not been accepted.
  218. * @implements Lpspi_Ip_AsyncTransmitHalfDuplex_Activity
  219. */
  220. Lpspi_Ip_StatusType Lpspi_Ip_AsyncTransmitHalfDuplex(
  221. const Lpspi_Ip_ExternalDeviceType *ExternalDevice,
  222. uint8 *Buffer,
  223. uint16 Length,
  224. Lpspi_Ip_HalfDuplexType TransferType,
  225. Lpspi_Ip_CallbackType EndCallback
  226. );
  227. #endif
  228. #if (LPSPI_IP_DMA_USED == STD_ON)
  229. #if (LPSPI_IP_ENABLE_DMAFASTTRANSFER_SUPPORT == STD_ON)
  230. /**
  231. * @brief LPSPI asynchronous transmission fast.
  232. * @details This function initializes an asynchronous transmission for multiple transfers session
  233. * and CPU used only for processing at the end of sequence transfer.
  234. * The list of transfers session is composed of an array of fast transfers settings.
  235. * The settings array is defined by the user needs: it contains entries parameters to be configured
  236. * for each transfer session as defined in Lpspi_Ip_FastTransferType.
  237. *
  238. * How to use this interface:
  239. * 1. Use the "Lpspi_Ip_FastTransferType" to create a list(array) of transfer session.
  240. * Each field in Lpspi_Ip_FastTransferType for each transfer session must be configured.
  241. * Note: This feature requires:
  242. * a. The parameters SpiBaudrate, SpiHwUnit, SpiTimeClk2Cs, SpiTimeCs2Clk, SpiTimeCs2Cs, SpiDataWidth, SpiTransferStart in all External Devices used(pointed by ExternalDevice) must be the same in each transfer session.
  243. * b. In each transfer section, the number of data buffer(Length) is NOT higher than 32767 if SpiDataWidth < 9.
  244. * c. Only Master mode is supported(SpiPhyUnit/SpiPhyUnitMode = SPI_MASTER).
  245. * d. Make sure that SpiPhyUnit/SpiMaxDmaFastTransfer value must NOT lower than total of transfer sessions.
  246. * e. Make sure that number of ScatterGathers configuration in SpiPhyUnit/SpiPhyTxDmaChannel must NOT lower than
  247. * total of transfer sessions plus number of time request CS de-assert(KeepCs = FALSE) at the end of transfer session in the list configured.
  248. * f. Make sure that number of ScatterGathers configuration in each SpiPhyUnit/SpiPhyRxDmaChannel must NOT lower than total of transfer sessions.
  249. * 2. Call the "Lpspi_Ip_AsyncTransmitFast()" interface.
  250. *
  251. * Example:
  252. * The user shall create the desired configuration list for his specific application.
  253. * For example use case:
  254. * - Requiring 2 transfers session, keep CS assert at the end of first transfer session.
  255. * - Transfer session 1:
  256. * + Use SpiExternalDevice_0 with SpiCsIdentifier = PCS0, SpiCsContinous = TRUE.
  257. * + Send 5 bytes. Tx buffer is "uint8 u8TxBuffer1[5u]={0,1,2,3,4};". Rx buffer is "uint8 u8RxBuffer1[5u];".
  258. * + Keep CS assert at the end of this transfer session.
  259. * - Transfer session 2:
  260. * + Use SpiExternalDevice_0 with SpiCsIdentifier = PCS0, SpiCsContinous = TRUE.
  261. * + Send 10 bytes with default transmit data value is 5. Tx buffer is NULL_PTR. Rx buffer is "uint8 u8RxBuffer2[10u];".
  262. * + This is last transfer session, so CS will not kipped by default at the end of last transfer session.
  263. * - Configuration example on configuration tool:
  264. * + SpiGeneral/SpiEnableDmaFastTransferSupport = true.
  265. * + SpiPhyUnit/SpiMaxDmaFastTransfer = 2(2 transfers session).
  266. * + Number of ScatterGathers configuration for SpiPhyTxDmaChannel is 3(2 transfers session + 1 time CS de-assert at the end of last transfer session).
  267. * + Number of ScatterGathers configuration for SpiPhyRxDmaChannel is 2(2 transfers session).
  268. * - Call "UserCallbackFunc" when Fast transfer completed.
  269. * - Coding example:
  270. * void UserCallbackFunc(uint8 Instance, Lpspi_Ip_EventType event);
  271. * Lpspi_Ip_FastTransferType aUserFastTransferCfgList[2u] =
  272. * {
  273. * {
  274. * Lpspi_Ip_DeviceAttributes_SpiExternalDevice_0_BOARD_InitPeripherals, ->Point to External Device 0 configuration generated by configuration tool
  275. * u8TxBuffer1, -> Store pointer for Tx buffer
  276. * u8RxBuffer1, -> Store pointer for Rx buffer
  277. * 0u, -> Default transmit data, don't care due to Tx buffer is not NULL_PTR
  278. * 5u, -> Number of bytes to be sent
  279. * (boolean)TRUE -> Keep CS signal at the end of this transfer session
  280. * },
  281. * {
  282. * Lpspi_Ip_DeviceAttributes_SpiExternalDevice_0_BOARD_InitPeripherals, -> Point to external device configuration
  283. * NULL_PTR, -> Store pointer for Tx buffer
  284. * u8RxBuffer2, -> Store pointer for Rx buffer
  285. * 5u, -> Default transmit data, don't care due to Tx buffer is not NULL_PTR
  286. * 10u, -> Number of bytes to be sent
  287. * (boolean)FALSE -> Not keep CS signal at the end of this transfer session, don't care this parameter for last transfer
  288. * }
  289. * };
  290. * Lpspi_Ip_AsyncTransmitFast(aUserFastTransferCfgList, 2u, &UserCallbackFunc);
  291. *
  292. * @param[in-out] pFastTransferCfg - pointer to the list of transfers section configuration.
  293. * @param[in] u16NumberOfTransfer - number of transfers session in the list is pointed by pFastTransferCfg.
  294. * @param[in] EndCallback - callback function is called at the end of sequence transfer.
  295. *
  296. * @return LPSPI_IP_STATUS_SUCCESS: Transmission command has been accepted.
  297. * LPSPI_IP_STATUS_FAIL: Transmission command has not been accepted.
  298. * @implements Lpspi_Ip_AsyncTransmitFast_Activity
  299. */
  300. Lpspi_Ip_StatusType Lpspi_Ip_AsyncTransmitFast(
  301. const Lpspi_Ip_FastTransferType *FastTransferCfg,
  302. uint8 NumberOfTransfer,
  303. Lpspi_Ip_CallbackType EndCallback
  304. );
  305. #endif
  306. #endif
  307. /**
  308. * @brief Get status of HW unit.
  309. * @details This function returns the status of the specified SPI Hardware microcontroller peripheral.
  310. *
  311. * @param[in] Instance - SPI peripheral instance number.
  312. *
  313. * @return Lpspi_Ip_HwStatusType
  314. * @implements Lpspi_Ip_GetStatus_Activity
  315. */
  316. Lpspi_Ip_HwStatusType Lpspi_Ip_GetStatus(uint8 Instance);
  317. /**
  318. * @brief Process transfer in POLLING mode.
  319. * @details This function shall polls the SPI interrupts linked to SPI peripheral instance allocated to
  320. * the transmission of data to enable the evolution of transmission state machine.
  321. *
  322. * @param[in] Instance - SPI peripheral instance number.
  323. *
  324. * @return void
  325. * @implements Lpspi_Ip_ManageBuffers_Activity
  326. */
  327. void Lpspi_Ip_ManageBuffers(uint8 Instance);
  328. /**
  329. * @brief LPSPI change frame size.
  330. * @details This function updates frame size of specific external device configuration for next transfers.
  331. *
  332. * @param[in] ExternalDevice - pointer to the external device configuration.
  333. * @param[in] FrameSize - Frame size.
  334. *
  335. * @return LPSPI_IP_STATUS_SUCCESS: Setting command has been accepted.
  336. * LPSPI_IP_STATUS_FAIL: Setting command has not been accepted.
  337. * @implements Lpspi_Ip_UpdateFrameSize_Activity
  338. */
  339. Lpspi_Ip_StatusType Lpspi_Ip_UpdateFrameSize(const Lpspi_Ip_ExternalDeviceType *ExternalDevice, uint8 FrameSize);
  340. /**
  341. * @brief LPSPI change bit order.
  342. * @details This function updates bits order LSB or MSB of specific external device configuration for next transfer.
  343. *
  344. * @param[in] ExternalDevice - pointer to the external device configuration.
  345. * @param[in] Lsb - Data is transferred LSB first or not.
  346. *
  347. * @return LPSPI_IP_STATUS_SUCCESS: Setting command has been accepted.
  348. * LPSPI_IP_STATUS_FAIL: Setting command has not been accepted.
  349. * @implements Lpspi_Ip_UpdateLsb_Activity
  350. */
  351. Lpspi_Ip_StatusType Lpspi_Ip_UpdateLsb(const Lpspi_Ip_ExternalDeviceType *ExternalDevice, boolean Lsb);
  352. /**
  353. * @brief LPSPI change default transmit data.
  354. * @details This function updates default transmit data of specific external device configuration for next transfer.
  355. *
  356. * @param[in] ExternalDevice - pointer to the external device configuration.
  357. * @param[in] DefaultData - New default transmit data.
  358. *
  359. * @return LPSPI_IP_STATUS_SUCCESS: Setting command has been accepted.
  360. * LPSPI_IP_STATUS_FAIL: Setting command has not been accepted.
  361. * @implements Lpspi_Ip_UpdateDefaultTransmitData_Activity
  362. */
  363. Lpspi_Ip_StatusType Lpspi_Ip_UpdateDefaultTransmitData(const Lpspi_Ip_ExternalDeviceType *ExternalDevice, uint32 DefaultData);
  364. /**
  365. * @brief LPSPI change transfer mode.
  366. * @details This function updates the asynchronous mechanism mode for the specified SPI Hardware microcontroller peripheral.
  367. *
  368. * @param[in] Instance - SPI peripheral instance number.
  369. * @param[in] Mode - new mode (interrupt or polling).
  370. *
  371. * @return LPSPI_IP_STATUS_SUCCESS: Setting command has been accepted.
  372. * LPSPI_IP_STATUS_FAIL: Setting command has not been accepted.
  373. * @implements Lpspi_Ip_UpdateTransferMode_Activity
  374. */
  375. Lpspi_Ip_StatusType Lpspi_Ip_UpdateTransferMode(uint8 Instance, Lpspi_Ip_ModeType Mode);
  376. /**
  377. * @brief LPSPI cancel current asynchronous transmission.
  378. * @details This function cancels an asynchronous transmission in progress for the specified SPI Hardware microcontroller peripheral.
  379. *
  380. * @param[in] Instance - SPI peripheral instance number.
  381. *
  382. * @return void
  383. * @implements Lpspi_Ip_Cancel_Activity
  384. */
  385. void Lpspi_Ip_Cancel(uint8 Instance);
  386. #if (LPSPI_IP_DUAL_CLOCK_MODE == STD_ON)
  387. /**
  388. * @brief Change clock mode.
  389. * @details This function will change clock mode to operate with other clock reference.
  390. *
  391. * @param[in] Instance - SPI peripheral instance number.
  392. * @param[in] ClockMode Clock mode.
  393. *
  394. * @return LPSPI_IP_STATUS_SUCCESS: Setting command has been accepted.
  395. * LPSPI_IP_STATUS_FAIL: Setting command has not been accepted.
  396. */
  397. Lpspi_Ip_StatusType Lpspi_Ip_SetClockMode(uint8 Instance, Lpspi_Ip_DualClockModeType ClockMode);
  398. #endif
  399. void Lpspi_Ip_IrqHandler(uint8 Instance);
  400. #if (LPSPI_IP_DMA_USED == STD_ON)
  401. void Lpspi_Ip_IrqTxDmaHandler(uint8 Instance);
  402. void Lpspi_Ip_IrqRxDmaHandler(uint8 Instance);
  403. #endif
  404. #define SPI_STOP_SEC_CODE
  405. #include "Spi_MemMap.h"
  406. #ifdef __cplusplus
  407. }
  408. #endif
  409. #endif /* LPSPI_IP_H */
  410. /** @} */