fsl_i2c_cmsis.c 70 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749175017511752175317541755175617571758175917601761176217631764176517661767176817691770177117721773177417751776177717781779178017811782178317841785178617871788178917901791179217931794179517961797179817991800180118021803180418051806180718081809181018111812181318141815181618171818181918201821182218231824182518261827182818291830183118321833183418351836183718381839184018411842184318441845184618471848184918501851185218531854185518561857185818591860186118621863186418651866186718681869187018711872187318741875187618771878187918801881188218831884188518861887188818891890189118921893189418951896189718981899190019011902190319041905190619071908190919101911191219131914191519161917191819191920192119221923192419251926192719281929193019311932193319341935193619371938193919401941194219431944194519461947194819491950195119521953195419551956195719581959196019611962196319641965196619671968196919701971197219731974197519761977197819791980198119821983198419851986198719881989199019911992199319941995199619971998199920002001200220032004200520062007200820092010201120122013201420152016201720182019202020212022202320242025202620272028202920302031203220332034203520362037203820392040204120422043204420452046204720482049205020512052205320542055205620572058205920602061206220632064206520662067206820692070207120722073207420752076207720782079208020812082208320842085208620872088208920902091209220932094209520962097209820992100210121022103210421052106210721082109211021112112211321142115211621172118211921202121212221232124212521262127212821292130213121322133213421352136213721382139214021412142214321442145214621472148214921502151215221532154215521562157215821592160216121622163216421652166216721682169217021712172217321742175217621772178217921802181218221832184218521862187218821892190219121922193219421952196219721982199220022012202220322042205220622072208220922102211221222132214221522162217221822192220222122222223222422252226222722282229223022312232223322342235223622372238223922402241224222432244224522462247224822492250225122522253225422552256225722582259226022612262226322642265
  1. /*
  2. * Copyright (c) 2013-2016 ARM Limited. All rights reserved.
  3. * Copyright (c) 2016, Freescale Semiconductor, Inc. Not a Contribution.
  4. * Copyright 2016-2017 NXP. Not a Contribution.
  5. *
  6. * SPDX-License-Identifier: Apache-2.0
  7. *
  8. * Licensed under the Apache License, Version 2.0 (the License); you may
  9. * not use this file except in compliance with the License.
  10. * You may obtain a copy of the License at
  11. *
  12. * http://www.apache.org/licenses/LICENSE-2.0
  13. *
  14. * Unless required by applicable law or agreed to in writing, software
  15. * distributed under the License is distributed on an AS IS BASIS, WITHOUT
  16. * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  17. * See the License for the specific language governing permissions and
  18. * limitations under the License.
  19. */
  20. #include "fsl_i2c_cmsis.h"
  21. /* Component ID definition, used by tools. */
  22. #ifndef FSL_COMPONENT_ID
  23. #define FSL_COMPONENT_ID "platform.drivers.flexcomm_i2c_cmsis"
  24. #endif
  25. #if (RTE_I2C0 || RTE_I2C1 || RTE_I2C2 || RTE_I2C3 || RTE_I2C4 || RTE_I2C5 || RTE_I2C6 || RTE_I2C7 || RTE_I2C8 || \
  26. RTE_I2C9)
  27. #define ARM_I2C_DRV_VERSION ARM_DRIVER_VERSION_MAJOR_MINOR(2, 0)
  28. /*
  29. * ARMCC does not support split the data section automatically, so the driver
  30. * needs to split the data to separate sections explicitly, to reduce codesize.
  31. */
  32. #if defined(__CC_ARM)
  33. #define ARMCC_SECTION(section_name) __attribute__((section(section_name)))
  34. #endif
  35. typedef const struct _cmsis_i2c_resource
  36. {
  37. I2C_Type *base; /*!< I2C peripheral base address. */
  38. uint32_t (*GetFreq)(void); /*!< Function to get the clock frequency. */
  39. } cmsis_i2c_resource_t;
  40. typedef union _cmsis_i2c_handle
  41. {
  42. i2c_master_handle_t master_handle; /*!< master Interupt transfer handle. */
  43. i2c_slave_handle_t slave_handle; /*!< slave Interupt transfer handle. */
  44. } cmsis_i2c_handle_t;
  45. typedef struct _cmsis_i2c_interrupt_driver_state
  46. {
  47. cmsis_i2c_resource_t *resource; /*!< Basic I2C resource. */
  48. cmsis_i2c_handle_t *handle;
  49. ARM_I2C_SignalEvent_t cb_event; /*!< Callback function. */
  50. uint8_t flags; /*!< Control and state flags. */
  51. } cmsis_i2c_interrupt_driver_state_t;
  52. #if (defined(FSL_FEATURE_SOC_DMA_COUNT) && FSL_FEATURE_SOC_DMA_COUNT)
  53. typedef const struct _cmsis_i2c_dma_resource
  54. {
  55. DMA_Type *i2cDmaBase; /*!< DMA peripheral base address for i2c. */
  56. uint32_t i2cDmaChannel; /*!< DMA channel for i2c. */
  57. } cmsis_i2c_dma_resource_t;
  58. typedef struct _cmsis_i2c_dma_driver_state
  59. {
  60. cmsis_i2c_resource_t *resource; /*!< i2c basic resource. */
  61. cmsis_i2c_dma_resource_t *dmaResource; /*!< i2c DMA resource. */
  62. i2c_master_dma_handle_t *master_dma_handle; /*!< i2c DMA transfer handle. */
  63. dma_handle_t *dmaHandle; /*!< DMA i2c handle. */
  64. uint8_t flags; /*!< Control and state flags. */
  65. } cmsis_i2c_dma_driver_state_t;
  66. #endif
  67. static const ARM_DRIVER_VERSION s_i2cDriverVersion = {ARM_I2C_API_VERSION, ARM_I2C_DRV_VERSION};
  68. static const ARM_I2C_CAPABILITIES s_i2cDriverCapabilities = {
  69. 0, /*< supports 10-bit addressing*/
  70. };
  71. extern uint32_t I2C_GetInstance(I2C_Type *base);
  72. static ARM_DRIVER_VERSION I2Cx_GetVersion(void)
  73. {
  74. return s_i2cDriverVersion;
  75. }
  76. static ARM_I2C_CAPABILITIES I2Cx_GetCapabilities(void)
  77. {
  78. return s_i2cDriverCapabilities;
  79. }
  80. #endif
  81. #if (RTE_I2C0_DMA_EN || RTE_I2C1_DMA_EN || RTE_I2C2_DMA_EN || RTE_I2C3_DMA_EN || RTE_I2C4_DMA_EN || RTE_I2C5_DMA_EN || \
  82. RTE_I2C6_DMA_EN || RTE_I2C7_DMA_EN || RTE_I2C8_DMA_EN || RTE_I2C9_DMA_EN)
  83. #if (defined(FSL_FEATURE_SOC_DMA_COUNT) && FSL_FEATURE_SOC_DMA_COUNT)
  84. void KSDK_I2C_MASTER_DmaCallback(I2C_Type *base, i2c_master_dma_handle_t *handle, status_t status, void *userData)
  85. {
  86. uint32_t event;
  87. if (status == kStatus_Success) /* Occurs after Master Transmit/Receive operation has finished. */
  88. {
  89. event = ARM_I2C_EVENT_TRANSFER_DONE;
  90. }
  91. if (userData)
  92. {
  93. ((ARM_I2C_SignalEvent_t)userData)(event);
  94. }
  95. }
  96. static int32_t I2C_Master_DmaInitialize(ARM_I2C_SignalEvent_t cb_event, cmsis_i2c_dma_driver_state_t *i2c)
  97. {
  98. if (!(i2c->flags & I2C_FLAG_INIT))
  99. {
  100. DMA_EnableChannel(i2c->dmaResource->i2cDmaBase, i2c->dmaResource->i2cDmaChannel);
  101. DMA_CreateHandle(i2c->dmaHandle, i2c->dmaResource->i2cDmaBase, i2c->dmaResource->i2cDmaChannel);
  102. I2C_MasterTransferCreateHandleDMA(i2c->resource->base, i2c->master_dma_handle, KSDK_I2C_MASTER_DmaCallback,
  103. (void *)cb_event, i2c->dmaHandle);
  104. i2c->flags = I2C_FLAG_INIT;
  105. }
  106. return ARM_DRIVER_OK;
  107. }
  108. int32_t I2C_Master_DmaUninitialize(cmsis_i2c_dma_driver_state_t *i2c)
  109. {
  110. i2c->flags = I2C_FLAG_UNINIT;
  111. return ARM_DRIVER_OK;
  112. }
  113. int32_t I2C_Master_DmaTransmit(
  114. uint32_t addr, const uint8_t *data, uint32_t num, bool xfer_pending, cmsis_i2c_dma_driver_state_t *i2c)
  115. {
  116. int32_t status;
  117. int32_t ret;
  118. i2c_master_transfer_t masterXfer;
  119. /* Check if the I2C bus is idle - if not return busy status. */
  120. if (i2c->master_dma_handle->state != 0)
  121. {
  122. return ARM_DRIVER_ERROR_BUSY;
  123. }
  124. masterXfer.slaveAddress = addr; /*7-bit slave address.*/
  125. masterXfer.direction = kI2C_Write; /*Transfer direction.*/
  126. masterXfer.subaddress = 0; /*Sub address*/
  127. masterXfer.subaddressSize = 0; /*Size of command buffer.*/
  128. masterXfer.data = (uint8_t *)data; /*Transfer buffer.*/
  129. masterXfer.dataSize = num; /*Transfer size.*/
  130. masterXfer.flags = kI2C_TransferDefaultFlag; /*Transfer flag which controls the transfer.*/
  131. if (xfer_pending)
  132. {
  133. masterXfer.flags |= kI2C_TransferNoStopFlag;
  134. }
  135. status = I2C_MasterTransferDMA(i2c->resource->base, i2c->master_dma_handle, &masterXfer);
  136. switch (status)
  137. {
  138. case kStatus_Success:
  139. ret = ARM_DRIVER_OK;
  140. break;
  141. case kStatus_I2C_Busy:
  142. ret = ARM_DRIVER_ERROR_BUSY;
  143. break;
  144. default:
  145. ret = ARM_DRIVER_ERROR;
  146. break;
  147. }
  148. return ret;
  149. }
  150. int32_t I2C_Master_DmaReceive(
  151. uint32_t addr, uint8_t *data, uint32_t num, bool xfer_pending, cmsis_i2c_dma_driver_state_t *i2c)
  152. {
  153. int32_t status;
  154. int32_t ret;
  155. i2c_master_transfer_t masterXfer;
  156. /* Check if the I2C bus is idle - if not return busy status. */
  157. if (i2c->master_dma_handle->state != 0)
  158. {
  159. return ARM_DRIVER_ERROR_BUSY;
  160. }
  161. masterXfer.slaveAddress = addr; /*7-bit slave address.*/
  162. masterXfer.direction = kI2C_Read; /*Transfer direction.*/
  163. masterXfer.subaddress = 0; /*Sub address*/
  164. masterXfer.subaddressSize = 0; /*Size of command buffer.*/
  165. masterXfer.data = data; /*Transfer buffer.*/
  166. masterXfer.dataSize = num; /*Transfer size.*/
  167. masterXfer.flags = kI2C_TransferDefaultFlag; /*Transfer flag which controls the transfer.*/
  168. if (xfer_pending)
  169. {
  170. masterXfer.flags |= kI2C_TransferNoStopFlag;
  171. }
  172. status = I2C_MasterTransferDMA(i2c->resource->base, i2c->master_dma_handle, &masterXfer);
  173. switch (status)
  174. {
  175. case kStatus_Success:
  176. ret = ARM_DRIVER_OK;
  177. break;
  178. case kStatus_I2C_Busy:
  179. ret = ARM_DRIVER_ERROR_BUSY;
  180. break;
  181. default:
  182. ret = ARM_DRIVER_ERROR;
  183. break;
  184. }
  185. return ret;
  186. }
  187. int32_t I2C_Master_DmaGetDataCount(cmsis_i2c_dma_driver_state_t *i2c)
  188. {
  189. size_t cnt; /*the number of currently transferred data bytes*/
  190. I2C_MasterTransferGetCountDMA(i2c->resource->base, i2c->master_dma_handle, &cnt);
  191. return cnt;
  192. }
  193. int32_t I2C_Master_DmaControl(uint32_t control, uint32_t arg, cmsis_i2c_dma_driver_state_t *i2c)
  194. {
  195. uint32_t baudRate_Bps;
  196. switch (control)
  197. {
  198. /* Not supported */
  199. case ARM_I2C_OWN_ADDRESS:
  200. return ARM_DRIVER_ERROR_UNSUPPORTED;
  201. /*Set Bus Speed; arg = bus speed*/
  202. case ARM_I2C_BUS_SPEED:
  203. switch (arg)
  204. {
  205. case ARM_I2C_BUS_SPEED_STANDARD:
  206. baudRate_Bps = 100000;
  207. break;
  208. case ARM_I2C_BUS_SPEED_FAST:
  209. baudRate_Bps = 400000;
  210. break;
  211. case ARM_I2C_BUS_SPEED_FAST_PLUS:
  212. baudRate_Bps = 1000000;
  213. break;
  214. default:
  215. return ARM_DRIVER_ERROR_UNSUPPORTED;
  216. }
  217. I2C_MasterSetBaudRate(i2c->resource->base, baudRate_Bps, i2c->resource->GetFreq());
  218. return ARM_DRIVER_OK;
  219. /* Not supported */
  220. case ARM_I2C_BUS_CLEAR:
  221. return ARM_DRIVER_ERROR_UNSUPPORTED;
  222. /*Aborts the data transfer when Master for Transmit or Receive*/
  223. case ARM_I2C_ABORT_TRANSFER:
  224. /*disable dma*/
  225. I2C_MasterTransferAbortDMA(i2c->resource->base, i2c->master_dma_handle);
  226. i2c->master_dma_handle->transferCount = 0;
  227. i2c->master_dma_handle->transfer.data = NULL;
  228. i2c->master_dma_handle->transfer.dataSize = 0;
  229. return ARM_DRIVER_OK;
  230. default:
  231. return ARM_DRIVER_ERROR_UNSUPPORTED;
  232. }
  233. }
  234. int32_t I2C_Master_DmaPowerControl(ARM_POWER_STATE state, cmsis_i2c_dma_driver_state_t *i2c)
  235. {
  236. switch (state)
  237. {
  238. /*terminates any pending data transfers, disable i2c moduole and i2c clock and related dma*/
  239. case ARM_POWER_OFF:
  240. if (i2c->flags & I2C_FLAG_POWER)
  241. {
  242. I2C_Master_DmaControl(ARM_I2C_ABORT_TRANSFER, 0, i2c);
  243. I2C_MasterDeinit(i2c->resource->base);
  244. DMA_DisableChannel(i2c->dmaResource->i2cDmaBase, i2c->dmaResource->i2cDmaChannel);
  245. i2c->flags = I2C_FLAG_INIT;
  246. }
  247. return ARM_DRIVER_OK;
  248. /* Not supported */
  249. case ARM_POWER_LOW:
  250. return ARM_DRIVER_ERROR_UNSUPPORTED;
  251. /*enable i2c moduole and i2c clock*/
  252. case ARM_POWER_FULL:
  253. if (i2c->flags == I2C_FLAG_UNINIT)
  254. {
  255. return ARM_DRIVER_ERROR;
  256. }
  257. if (i2c->flags & I2C_FLAG_POWER)
  258. {
  259. /* Driver already powered */
  260. break;
  261. }
  262. FLEXCOMM_Init(i2c->resource->base, FLEXCOMM_PERIPH_I2C);
  263. I2C_MasterEnable(i2c->resource->base, true);
  264. i2c->flags |= I2C_FLAG_POWER;
  265. return ARM_DRIVER_OK;
  266. default:
  267. return ARM_DRIVER_ERROR_UNSUPPORTED;
  268. }
  269. return ARM_DRIVER_OK;
  270. }
  271. ARM_I2C_STATUS I2C_Master_DmaGetStatus(cmsis_i2c_dma_driver_state_t *i2c)
  272. {
  273. ARM_I2C_STATUS stat;
  274. uint32_t ksdk_i2c_status = I2C_GetStatusFlags(i2c->resource->base);
  275. stat.busy = !(ksdk_i2c_status & I2C_STAT_MSTPENDING_MASK); /*Busy flag.*/
  276. stat.direction = i2c->master_dma_handle->transfer.direction; /*Direction: 0=Transmitter, 1=Receiver.*/
  277. stat.mode = 1; /*Mode: 0=Slave, 1=Master.*/
  278. stat.arbitration_lost = !(!(ksdk_i2c_status & I2C_STAT_MSTARBLOSS_MASK));
  279. /*Master lost arbitration (cleared on start of next Master operation)*/
  280. return stat;
  281. }
  282. #endif
  283. #endif
  284. #if ((RTE_I2C0 && !RTE_I2C0_DMA_EN) || (RTE_I2C1 && !RTE_I2C1_DMA_EN) || (RTE_I2C2 && !RTE_I2C2_DMA_EN) || \
  285. (RTE_I2C3 && !RTE_I2C3_DMA_EN) || (RTE_I2C4 && !RTE_I2C4_DMA_EN) || (RTE_I2C5 && !RTE_I2C5_DMA_EN) || \
  286. (RTE_I2C6 && !RTE_I2C6_DMA_EN) || (RTE_I2C7 && !RTE_I2C7_DMA_EN) || (RTE_I2C8 && !RTE_I2C8_DMA_EN) || \
  287. (RTE_I2C9 && !RTE_I2C9_DMA_EN))
  288. static void KSDK_I2C_SLAVE_InterruptCallback(I2C_Type *base, volatile i2c_slave_transfer_t *xfer, void *param)
  289. {
  290. uint32_t event;
  291. switch (xfer->event)
  292. {
  293. case kI2C_SlaveCompletionEvent: /* Occurs after Slave Transmit/Receive operation has finished. */
  294. event = ARM_I2C_EVENT_TRANSFER_DONE;
  295. break;
  296. default:
  297. event = ARM_I2C_EVENT_TRANSFER_INCOMPLETE;
  298. break;
  299. }
  300. if (param)
  301. {
  302. ((ARM_I2C_SignalEvent_t)param)(event);
  303. }
  304. }
  305. static void KSDK_I2C_MASTER_InterruptCallback(I2C_Type *base,
  306. i2c_master_handle_t *handle,
  307. status_t status,
  308. void *userData)
  309. {
  310. uint32_t event;
  311. switch (status)
  312. {
  313. case kStatus_Success: /* Occurs after Master Transmit/Receive operation has finished. */
  314. event = ARM_I2C_EVENT_TRANSFER_DONE;
  315. break;
  316. case kStatus_I2C_ArbitrationLost: /*Occurs in master mode when arbitration is lost.*/
  317. event = ARM_I2C_EVENT_ARBITRATION_LOST;
  318. break;
  319. default:
  320. event = ARM_I2C_EVENT_TRANSFER_INCOMPLETE;
  321. break;
  322. }
  323. /* User data is actually CMSIS driver callback. */
  324. if (userData)
  325. {
  326. ((ARM_I2C_SignalEvent_t)userData)(event);
  327. }
  328. }
  329. static int32_t I2C_InterruptInitialize(ARM_I2C_SignalEvent_t cb_event, cmsis_i2c_interrupt_driver_state_t *i2c)
  330. {
  331. if (!(i2c->flags & I2C_FLAG_INIT))
  332. {
  333. i2c->cb_event = cb_event; /* cb_event is CMSIS driver callback. */
  334. i2c->flags = I2C_FLAG_INIT;
  335. }
  336. return ARM_DRIVER_OK;
  337. }
  338. static int32_t I2C_InterruptUninitialize(cmsis_i2c_interrupt_driver_state_t *i2c)
  339. {
  340. i2c->flags = I2C_FLAG_UNINIT;
  341. return ARM_DRIVER_OK;
  342. }
  343. int32_t I2C_Master_InterruptTransmit(
  344. uint32_t addr, const uint8_t *data, uint32_t num, bool xfer_pending, cmsis_i2c_interrupt_driver_state_t *i2c)
  345. {
  346. int32_t status;
  347. int32_t ret;
  348. i2c_master_transfer_t masterXfer;
  349. /* Check if the I2C bus is idle - if not return busy status. */
  350. if (i2c->handle->master_handle.state != 0)
  351. {
  352. return ARM_DRIVER_ERROR_BUSY;
  353. }
  354. I2C_MasterEnable(i2c->resource->base, true);
  355. /*create master_handle*/
  356. I2C_MasterTransferCreateHandle(i2c->resource->base, &(i2c->handle->master_handle),
  357. KSDK_I2C_MASTER_InterruptCallback, (void *)i2c->cb_event);
  358. masterXfer.slaveAddress = addr; /*7-bit slave address.*/
  359. masterXfer.direction = kI2C_Write; /*Transfer direction.*/
  360. masterXfer.subaddress = (uint32_t)NULL; /*Sub address*/
  361. masterXfer.subaddressSize = 0; /*Size of command buffer.*/
  362. masterXfer.data = (uint8_t *)data; /*Transfer buffer.*/
  363. masterXfer.dataSize = num; /*Transfer size.*/
  364. masterXfer.flags = kI2C_TransferDefaultFlag; /*Transfer flag which controls the transfer.*/
  365. if (xfer_pending)
  366. {
  367. masterXfer.flags |= kI2C_TransferNoStopFlag;
  368. }
  369. status = I2C_MasterTransferNonBlocking(i2c->resource->base, &(i2c->handle->master_handle), &masterXfer);
  370. switch (status)
  371. {
  372. case kStatus_Success:
  373. ret = ARM_DRIVER_OK;
  374. break;
  375. case kStatus_I2C_Busy:
  376. ret = ARM_DRIVER_ERROR_BUSY;
  377. break;
  378. default:
  379. ret = ARM_DRIVER_ERROR;
  380. break;
  381. }
  382. return ret;
  383. }
  384. int32_t I2C_Master_InterruptReceive(
  385. uint32_t addr, uint8_t *data, uint32_t num, bool xfer_pending, cmsis_i2c_interrupt_driver_state_t *i2c)
  386. {
  387. int32_t status;
  388. int32_t ret;
  389. i2c_master_transfer_t masterXfer;
  390. /* Check if the I2C bus is idle - if not return busy status. */
  391. if (i2c->handle->master_handle.state != 0)
  392. {
  393. return ARM_DRIVER_ERROR_BUSY;
  394. }
  395. I2C_MasterEnable(i2c->resource->base, true);
  396. /*create master_handle*/
  397. I2C_MasterTransferCreateHandle(i2c->resource->base, &(i2c->handle->master_handle),
  398. KSDK_I2C_MASTER_InterruptCallback, (void *)i2c->cb_event);
  399. masterXfer.slaveAddress = addr; /*7-bit slave address.*/
  400. masterXfer.direction = kI2C_Read; /*Transfer direction.*/
  401. masterXfer.subaddress = (uint32_t)NULL; /*Sub address*/
  402. masterXfer.subaddressSize = 0; /*Size of command buffer.*/
  403. masterXfer.data = data; /*Transfer buffer.*/
  404. masterXfer.dataSize = num; /*Transfer size.*/
  405. masterXfer.flags = kI2C_TransferDefaultFlag; /*Transfer flag which controls the transfer.*/
  406. if (xfer_pending)
  407. {
  408. masterXfer.flags |= kI2C_TransferNoStopFlag;
  409. }
  410. status = I2C_MasterTransferNonBlocking(i2c->resource->base, &(i2c->handle->master_handle), &masterXfer);
  411. switch (status)
  412. {
  413. case kStatus_Success:
  414. ret = ARM_DRIVER_OK;
  415. break;
  416. case kStatus_I2C_Busy:
  417. ret = ARM_DRIVER_ERROR_BUSY;
  418. break;
  419. default:
  420. ret = ARM_DRIVER_ERROR;
  421. break;
  422. }
  423. return ret;
  424. }
  425. int32_t I2C_Slave_InterruptTransmit(const uint8_t *data, uint32_t num, cmsis_i2c_interrupt_driver_state_t *i2c)
  426. {
  427. int32_t status;
  428. int32_t ret;
  429. /* set Slave enable */
  430. I2C_SlaveEnable(i2c->resource->base, true);
  431. /*create slave_handle*/
  432. I2C_SlaveTransferCreateHandle(i2c->resource->base, &(i2c->handle->slave_handle), KSDK_I2C_SLAVE_InterruptCallback,
  433. (void *)i2c->cb_event);
  434. status = I2C_SlaveTransferNonBlocking(i2c->resource->base, &(i2c->handle->slave_handle), kI2C_SlaveCompletionEvent);
  435. i2c->handle->slave_handle.transfer.txData =
  436. (uint8_t *)data; /*Pointer to buffer with data to transmit to I2C Master*/
  437. i2c->handle->slave_handle.transfer.txSize = num; /*Number of data bytes to transmit*/
  438. i2c->handle->slave_handle.transfer.transferredCount =
  439. 0; /*Number of bytes actually transferred since start or last repeated start. */
  440. switch (status)
  441. {
  442. case kStatus_Success:
  443. ret = ARM_DRIVER_OK;
  444. break;
  445. case kStatus_I2C_Busy:
  446. ret = ARM_DRIVER_ERROR_BUSY;
  447. break;
  448. default:
  449. ret = ARM_DRIVER_ERROR;
  450. break;
  451. }
  452. return ret;
  453. }
  454. int32_t I2C_Slave_InterruptReceive(uint8_t *data, uint32_t num, cmsis_i2c_interrupt_driver_state_t *i2c)
  455. {
  456. int32_t status;
  457. int32_t ret;
  458. /* set Slave enable */
  459. I2C_SlaveEnable(i2c->resource->base, true);
  460. /*create slave_handle*/
  461. I2C_SlaveTransferCreateHandle(i2c->resource->base, &(i2c->handle->slave_handle), KSDK_I2C_SLAVE_InterruptCallback,
  462. (void *)i2c->cb_event);
  463. status = I2C_SlaveTransferNonBlocking(i2c->resource->base, &(i2c->handle->slave_handle), kI2C_SlaveCompletionEvent);
  464. i2c->handle->slave_handle.transfer.rxData = data; /*Pointer to buffer with data to transmit to I2C Master*/
  465. i2c->handle->slave_handle.transfer.rxSize = num; /*Number of data bytes to transmit*/
  466. i2c->handle->slave_handle.transfer.transferredCount =
  467. 0; /*Number of bytes actually transferred since start or last repeated start. */
  468. switch (status)
  469. {
  470. case kStatus_Success:
  471. ret = ARM_DRIVER_OK;
  472. break;
  473. case kStatus_I2C_Busy:
  474. ret = ARM_DRIVER_ERROR_BUSY;
  475. break;
  476. default:
  477. ret = ARM_DRIVER_ERROR;
  478. break;
  479. }
  480. return ret;
  481. }
  482. int32_t I2C_InterruptGetDataCount(cmsis_i2c_interrupt_driver_state_t *i2c)
  483. {
  484. uint32_t cnt = 0; /*the number of currently transferred data bytes*/
  485. if (i2c->resource->base->CFG & I2C_CFG_MSTEN_MASK)
  486. {
  487. cnt = i2c->handle->master_handle.transferCount;
  488. }
  489. else
  490. {
  491. cnt = i2c->handle->slave_handle.transfer.transferredCount;
  492. }
  493. return cnt;
  494. }
  495. int32_t I2C_InterruptControl(uint32_t control, uint32_t arg, cmsis_i2c_interrupt_driver_state_t *i2c)
  496. {
  497. uint32_t baudRate_Bps;
  498. switch (control)
  499. {
  500. /*Set Own Slave Address; arg = slave address*/
  501. case ARM_I2C_OWN_ADDRESS:
  502. I2C_SlaveSetAddress(i2c->resource->base, kI2C_SlaveAddressRegister0, arg, false);
  503. /* set Slave address 0 qual */
  504. i2c->resource->base->SLVQUAL0 = I2C_SLVQUAL0_QUALMODE0(0) | I2C_SLVQUAL0_SLVQUAL0(0);
  505. return ARM_DRIVER_OK;
  506. /*Set Bus Speed; arg = bus speed*/
  507. case ARM_I2C_BUS_SPEED:
  508. switch (arg)
  509. {
  510. case ARM_I2C_BUS_SPEED_STANDARD:
  511. baudRate_Bps = 100000;
  512. break;
  513. case ARM_I2C_BUS_SPEED_FAST:
  514. baudRate_Bps = 400000;
  515. break;
  516. case ARM_I2C_BUS_SPEED_FAST_PLUS:
  517. baudRate_Bps = 1000000;
  518. break;
  519. default:
  520. return ARM_DRIVER_ERROR_UNSUPPORTED;
  521. }
  522. I2C_MasterSetBaudRate(i2c->resource->base, baudRate_Bps, i2c->resource->GetFreq());
  523. return ARM_DRIVER_OK;
  524. // Not supported
  525. case ARM_I2C_BUS_CLEAR:
  526. return ARM_DRIVER_ERROR_UNSUPPORTED;
  527. /*Aborts the data transfer between Master and Slave for Transmit or Receive*/
  528. case ARM_I2C_ABORT_TRANSFER:
  529. if (i2c->resource->base->CFG & I2C_CFG_MSTEN_MASK)
  530. {
  531. /*disable master interrupt and send STOP signal*/
  532. I2C_MasterTransferAbort(i2c->resource->base, &(i2c->handle->master_handle));
  533. i2c->handle->master_handle.transferCount = 0;
  534. i2c->handle->master_handle.transfer.data = NULL;
  535. i2c->handle->master_handle.transfer.dataSize = 0;
  536. }
  537. /*if slave receive*/
  538. if ((i2c->resource->base->CFG & I2C_CFG_SLVEN_MASK) &&
  539. ((i2c->handle->slave_handle.slaveFsm) == kI2C_SlaveFsmReceive))
  540. {
  541. /*disable slave interrupt*/
  542. I2C_SlaveTransferAbort(i2c->resource->base, &(i2c->handle->slave_handle));
  543. i2c->handle->slave_handle.transfer.transferredCount = 0;
  544. i2c->handle->slave_handle.transfer.txData = NULL;
  545. i2c->handle->slave_handle.transfer.rxData = NULL;
  546. }
  547. return ARM_DRIVER_OK;
  548. default:
  549. return ARM_DRIVER_ERROR_UNSUPPORTED;
  550. }
  551. }
  552. static int32_t I2C_InterruptPowerControl(ARM_POWER_STATE state, cmsis_i2c_interrupt_driver_state_t *i2c)
  553. {
  554. switch (state)
  555. {
  556. /*terminates any pending data transfers, disable i2c moduole and i2c clock*/
  557. case ARM_POWER_OFF:
  558. if (i2c->flags & I2C_FLAG_POWER)
  559. {
  560. I2C_InterruptControl(ARM_I2C_ABORT_TRANSFER, 0, i2c);
  561. I2C_MasterDeinit(i2c->resource->base);
  562. I2C_SlaveDeinit(i2c->resource->base);
  563. i2c->flags = I2C_FLAG_INIT;
  564. }
  565. return ARM_DRIVER_OK;
  566. /* Not supported */
  567. case ARM_POWER_LOW:
  568. return ARM_DRIVER_ERROR_UNSUPPORTED;
  569. /*enable i2c moduole and i2c clock*/
  570. case ARM_POWER_FULL:
  571. if (i2c->flags == I2C_FLAG_UNINIT)
  572. {
  573. return ARM_DRIVER_ERROR;
  574. }
  575. if (i2c->flags & I2C_FLAG_POWER)
  576. {
  577. /* Driver already powered */
  578. break;
  579. }
  580. FLEXCOMM_Init(i2c->resource->base, FLEXCOMM_PERIPH_I2C);
  581. i2c->flags |= I2C_FLAG_POWER;
  582. return ARM_DRIVER_OK;
  583. default:
  584. return ARM_DRIVER_ERROR_UNSUPPORTED;
  585. }
  586. return ARM_DRIVER_OK;
  587. }
  588. ARM_I2C_STATUS I2C_InterruptGetStatus(cmsis_i2c_interrupt_driver_state_t *i2c)
  589. {
  590. ARM_I2C_STATUS stat;
  591. uint32_t ksdk_i2c_status = I2C_GetStatusFlags(i2c->resource->base);
  592. if (i2c->resource->base->CFG & I2C_CFG_MSTEN_MASK)
  593. {
  594. stat.busy = !(ksdk_i2c_status & I2C_STAT_MSTPENDING_MASK); /*Busy flag.*/
  595. stat.direction = i2c->handle->master_handle.transfer.direction; /*Direction: 0=Transmitter, 1=Receiver.*/
  596. stat.mode = 1; /*Mode: 0=Slave, 1=Master.*/
  597. stat.arbitration_lost = !(!(ksdk_i2c_status & I2C_STAT_MSTARBLOSS_MASK));
  598. /*Master lost arbitration (cleared on start of next Master operation)*/
  599. }
  600. if (i2c->resource->base->CFG & I2C_CFG_SLVEN_MASK)
  601. {
  602. stat.busy = !(ksdk_i2c_status & I2C_STAT_SLVPENDING_MASK); /*Busy flag.*/
  603. if ((i2c->handle->slave_handle.slaveFsm) == kI2C_SlaveFsmReceive)
  604. {
  605. stat.direction = 1; /*Direction: 0=Transmitter, 1=Receiver.*/
  606. }
  607. else
  608. {
  609. stat.direction = 0; /*Direction: 0=Transmitter, 1=Receiver.*/
  610. }
  611. stat.mode = 0; /*Mode: 0=Slave, 1=Master.*/
  612. }
  613. return stat;
  614. }
  615. #endif
  616. #if defined(I2C0) && RTE_I2C0
  617. /* User needs to provide the implementation for I2C0_GetFreq/InitPins/DeinitPins
  618. in the application for enabling according instance. */
  619. extern uint32_t I2C0_GetFreq(void);
  620. extern void I2C0_InitPins(void);
  621. extern void I2C0_DeinitPins(void);
  622. cmsis_i2c_resource_t I2C0_Resource = {I2C0, I2C0_GetFreq};
  623. #if RTE_I2C0_DMA_EN
  624. #if (defined(FSL_FEATURE_SOC_DMA_COUNT) && FSL_FEATURE_SOC_DMA_COUNT)
  625. cmsis_i2c_dma_resource_t I2C0_DmaResource = {RTE_I2C0_Master_DMA_BASE, RTE_I2C0_Master_DMA_CH};
  626. i2c_master_dma_handle_t I2C0_DmaHandle;
  627. dma_handle_t I2C0_DmaTxRxHandle;
  628. #if defined(__CC_ARM)
  629. ARMCC_SECTION("i2c0_dma_driver_state")
  630. cmsis_i2c_dma_driver_state_t I2C0_DmaDriverState = {
  631. #else
  632. cmsis_i2c_dma_driver_state_t I2C0_DmaDriverState = {
  633. #endif
  634. &I2C0_Resource, &I2C0_DmaResource, &I2C0_DmaHandle, &I2C0_DmaTxRxHandle,
  635. };
  636. static int32_t I2C0_Master_DmaInitialize(ARM_I2C_SignalEvent_t cb_event)
  637. {
  638. I2C0_InitPins();
  639. return I2C_Master_DmaInitialize(cb_event, &I2C0_DmaDriverState);
  640. }
  641. int32_t I2C0_Master_DmaUninitialize(void)
  642. {
  643. I2C0_DeinitPins();
  644. return I2C_Master_DmaUninitialize(&I2C0_DmaDriverState);
  645. }
  646. int32_t I2C0_Master_DmaPowerControl(ARM_POWER_STATE state)
  647. {
  648. return I2C_Master_DmaPowerControl(state, &I2C0_DmaDriverState);
  649. }
  650. int32_t I2C0_Master_DmaTransmit(uint32_t addr, const uint8_t *data, uint32_t num, bool xfer_pending)
  651. {
  652. return I2C_Master_DmaTransmit(addr, data, num, xfer_pending, &I2C0_DmaDriverState);
  653. }
  654. int32_t I2C0_Master_DmaReceive(uint32_t addr, uint8_t *data, uint32_t num, bool xfer_pending)
  655. {
  656. return I2C_Master_DmaReceive(addr, data, num, xfer_pending, &I2C0_DmaDriverState);
  657. }
  658. int32_t I2C0_Master_DmaGetDataCount(void)
  659. {
  660. return I2C_Master_DmaGetDataCount(&I2C0_DmaDriverState);
  661. }
  662. int32_t I2C0_Master_DmaControl(uint32_t control, uint32_t arg)
  663. {
  664. return I2C_Master_DmaControl(control, arg, &I2C0_DmaDriverState);
  665. }
  666. ARM_I2C_STATUS I2C0_Master_DmaGetStatus(void)
  667. {
  668. return I2C_Master_DmaGetStatus(&I2C0_DmaDriverState);
  669. }
  670. #endif
  671. #else
  672. cmsis_i2c_handle_t I2C0_handle;
  673. #if defined(__CC_ARM)
  674. ARMCC_SECTION("i2c0_interrupt_driver_state")
  675. cmsis_i2c_interrupt_driver_state_t I2C0_InterruptDriverState = {
  676. #else
  677. cmsis_i2c_interrupt_driver_state_t I2C0_InterruptDriverState = {
  678. #endif
  679. &I2C0_Resource, &I2C0_handle,
  680. };
  681. static int32_t I2C0_InterruptInitialize(ARM_I2C_SignalEvent_t cb_event)
  682. {
  683. I2C0_InitPins();
  684. return I2C_InterruptInitialize(cb_event, &I2C0_InterruptDriverState);
  685. }
  686. static int32_t I2C0_InterruptUninitialize(void)
  687. {
  688. I2C0_DeinitPins();
  689. return I2C_InterruptUninitialize(&I2C0_InterruptDriverState);
  690. }
  691. static int32_t I2C0_InterruptPowerControl(ARM_POWER_STATE state)
  692. {
  693. return I2C_InterruptPowerControl(state, &I2C0_InterruptDriverState);
  694. }
  695. int32_t I2C0_Master_InterruptTransmit(uint32_t addr, const uint8_t *data, uint32_t num, bool xfer_pending)
  696. {
  697. return I2C_Master_InterruptTransmit(addr, data, num, xfer_pending, &I2C0_InterruptDriverState);
  698. }
  699. int32_t I2C0_Master_InterruptReceive(uint32_t addr, uint8_t *data, uint32_t num, bool xfer_pending)
  700. {
  701. return I2C_Master_InterruptReceive(addr, data, num, xfer_pending, &I2C0_InterruptDriverState);
  702. }
  703. int32_t I2C0_Slave_InterruptTransmit(const uint8_t *data, uint32_t num)
  704. {
  705. return I2C_Slave_InterruptTransmit(data, num, &I2C0_InterruptDriverState);
  706. }
  707. int32_t I2C0_Slave_InterruptReceive(uint8_t *data, uint32_t num)
  708. {
  709. return I2C_Slave_InterruptReceive(data, num, &I2C0_InterruptDriverState);
  710. }
  711. int32_t I2C0_InterruptGetDataCount(void)
  712. {
  713. return I2C_InterruptGetDataCount(&I2C0_InterruptDriverState);
  714. }
  715. int32_t I2C0_InterruptControl(uint32_t control, uint32_t arg)
  716. {
  717. return I2C_InterruptControl(control, arg, &I2C0_InterruptDriverState);
  718. }
  719. ARM_I2C_STATUS I2C0_InterruptGetStatus(void)
  720. {
  721. return I2C_InterruptGetStatus(&I2C0_InterruptDriverState);
  722. }
  723. #endif
  724. ARM_DRIVER_I2C Driver_I2C0 = {I2Cx_GetVersion, I2Cx_GetCapabilities,
  725. #if RTE_I2C0_DMA_EN
  726. I2C0_Master_DmaInitialize, I2C0_Master_DmaUninitialize, I2C0_Master_DmaPowerControl,
  727. I2C0_Master_DmaTransmit, I2C0_Master_DmaReceive, NULL, NULL, I2C0_Master_DmaGetDataCount,
  728. I2C0_Master_DmaControl, I2C0_Master_DmaGetStatus
  729. #else
  730. I2C0_InterruptInitialize, I2C0_InterruptUninitialize, I2C0_InterruptPowerControl,
  731. I2C0_Master_InterruptTransmit, I2C0_Master_InterruptReceive, I2C0_Slave_InterruptTransmit,
  732. I2C0_Slave_InterruptReceive, I2C0_InterruptGetDataCount, I2C0_InterruptControl,
  733. I2C0_InterruptGetStatus
  734. #endif
  735. };
  736. #endif
  737. #if defined(I2C1) && RTE_I2C1
  738. /* User needs to provide the implementation for I2C1_GetFreq/InitPins/DeinitPins
  739. in the application for enabling according instance. */
  740. extern uint32_t I2C1_GetFreq(void);
  741. extern void I2C1_InitPins(void);
  742. extern void I2C1_DeinitPins(void);
  743. cmsis_i2c_resource_t I2C1_Resource = {I2C1, I2C1_GetFreq};
  744. #if RTE_I2C1_DMA_EN
  745. #if (defined(FSL_FEATURE_SOC_DMA_COUNT) && FSL_FEATURE_SOC_DMA_COUNT)
  746. cmsis_i2c_dma_resource_t I2C1_DmaResource = {RTE_I2C1_Master_DMA_BASE, RTE_I2C1_Master_DMA_CH};
  747. i2c_master_dma_handle_t I2C1_DmaHandle;
  748. dma_handle_t I2C1_DmaTxRxHandle;
  749. #if defined(__CC_ARM)
  750. ARMCC_SECTION("i2c1_dma_driver_state")
  751. cmsis_i2c_dma_driver_state_t I2C1_DmaDriverState = {
  752. #else
  753. cmsis_i2c_dma_driver_state_t I2C1_DmaDriverState = {
  754. #endif
  755. &I2C1_Resource, &I2C1_DmaResource, &I2C1_DmaHandle, &I2C1_DmaTxRxHandle,
  756. };
  757. static int32_t I2C1_Master_DmaInitialize(ARM_I2C_SignalEvent_t cb_event)
  758. {
  759. I2C1_InitPins();
  760. return I2C_Master_DmaInitialize(cb_event, &I2C1_DmaDriverState);
  761. }
  762. int32_t I2C1_Master_DmaUninitialize(void)
  763. {
  764. I2C1_DeinitPins();
  765. return I2C_Master_DmaUninitialize(&I2C1_DmaDriverState);
  766. }
  767. int32_t I2C1_Master_DmaPowerControl(ARM_POWER_STATE state)
  768. {
  769. return I2C_Master_DmaPowerControl(state, &I2C1_DmaDriverState);
  770. }
  771. int32_t I2C1_Master_DmaTransmit(uint32_t addr, const uint8_t *data, uint32_t num, bool xfer_pending)
  772. {
  773. return I2C_Master_DmaTransmit(addr, data, num, xfer_pending, &I2C1_DmaDriverState);
  774. }
  775. int32_t I2C1_Master_DmaReceive(uint32_t addr, uint8_t *data, uint32_t num, bool xfer_pending)
  776. {
  777. return I2C_Master_DmaReceive(addr, data, num, xfer_pending, &I2C1_DmaDriverState);
  778. }
  779. int32_t I2C1_Master_DmaGetDataCount(void)
  780. {
  781. return I2C_Master_DmaGetDataCount(&I2C1_DmaDriverState);
  782. }
  783. int32_t I2C1_Master_DmaControl(uint32_t control, uint32_t arg)
  784. {
  785. return I2C_Master_DmaControl(control, arg, &I2C1_DmaDriverState);
  786. }
  787. ARM_I2C_STATUS I2C1_Master_DmaGetStatus(void)
  788. {
  789. return I2C_Master_DmaGetStatus(&I2C1_DmaDriverState);
  790. }
  791. #endif
  792. #else
  793. cmsis_i2c_handle_t I2C1_Handle;
  794. #if defined(__CC_ARM)
  795. ARMCC_SECTION("i2c1_interrupt_driver_state")
  796. cmsis_i2c_interrupt_driver_state_t I2C1_InterruptDriverState = {
  797. #else
  798. cmsis_i2c_interrupt_driver_state_t I2C1_InterruptDriverState = {
  799. #endif
  800. &I2C1_Resource, &I2C1_Handle,
  801. };
  802. static int32_t I2C1_InterruptInitialize(ARM_I2C_SignalEvent_t cb_event)
  803. {
  804. I2C1_InitPins();
  805. return I2C_InterruptInitialize(cb_event, &I2C1_InterruptDriverState);
  806. }
  807. static int32_t I2C1_InterruptUninitialize(void)
  808. {
  809. I2C1_DeinitPins();
  810. return I2C_InterruptUninitialize(&I2C1_InterruptDriverState);
  811. }
  812. static int32_t I2C1_InterruptPowerControl(ARM_POWER_STATE state)
  813. {
  814. return I2C_InterruptPowerControl(state, &I2C1_InterruptDriverState);
  815. }
  816. int32_t I2C1_Master_InterruptTransmit(uint32_t addr, const uint8_t *data, uint32_t num, bool xfer_pending)
  817. {
  818. return I2C_Master_InterruptTransmit(addr, data, num, xfer_pending, &I2C1_InterruptDriverState);
  819. }
  820. int32_t I2C1_Master_InterruptReceive(uint32_t addr, uint8_t *data, uint32_t num, bool xfer_pending)
  821. {
  822. return I2C_Master_InterruptReceive(addr, data, num, xfer_pending, &I2C1_InterruptDriverState);
  823. }
  824. int32_t I2C1_Slave_InterruptTransmit(const uint8_t *data, uint32_t num)
  825. {
  826. return I2C_Slave_InterruptTransmit(data, num, &I2C1_InterruptDriverState);
  827. }
  828. int32_t I2C1_Slave_InterruptReceive(uint8_t *data, uint32_t num)
  829. {
  830. return I2C_Slave_InterruptReceive(data, num, &I2C1_InterruptDriverState);
  831. }
  832. int32_t I2C1_InterruptGetDataCount(void)
  833. {
  834. return I2C_InterruptGetDataCount(&I2C1_InterruptDriverState);
  835. }
  836. int32_t I2C1_InterruptControl(uint32_t control, uint32_t arg)
  837. {
  838. return I2C_InterruptControl(control, arg, &I2C1_InterruptDriverState);
  839. }
  840. ARM_I2C_STATUS I2C1_InterruptGetStatus(void)
  841. {
  842. return I2C_InterruptGetStatus(&I2C1_InterruptDriverState);
  843. }
  844. #endif
  845. ARM_DRIVER_I2C Driver_I2C1 = {I2Cx_GetVersion, I2Cx_GetCapabilities,
  846. #if RTE_I2C1_DMA_EN
  847. I2C1_Master_DmaInitialize, I2C1_Master_DmaUninitialize, I2C1_Master_DmaPowerControl,
  848. I2C1_Master_DmaTransmit, I2C1_Master_DmaReceive, NULL, NULL, I2C1_Master_DmaGetDataCount,
  849. I2C1_Master_DmaControl, I2C1_Master_DmaGetStatus
  850. #else
  851. I2C1_InterruptInitialize, I2C1_InterruptUninitialize, I2C1_InterruptPowerControl,
  852. I2C1_Master_InterruptTransmit, I2C1_Master_InterruptReceive, I2C1_Slave_InterruptTransmit,
  853. I2C1_Slave_InterruptReceive, I2C1_InterruptGetDataCount, I2C1_InterruptControl,
  854. I2C1_InterruptGetStatus
  855. #endif
  856. };
  857. #endif
  858. #if defined(I2C2) && RTE_I2C2
  859. /* User needs to provide the implementation for I2C2_GetFreq/InitPins/DeinitPins
  860. in the application for enabling according instance. */
  861. extern uint32_t I2C2_GetFreq(void);
  862. extern void I2C2_InitPins(void);
  863. extern void I2C2_DeinitPins(void);
  864. cmsis_i2c_resource_t I2C2_Resource = {I2C2, I2C2_GetFreq};
  865. #if RTE_I2C2_DMA_EN
  866. #if (defined(FSL_FEATURE_SOC_DMA_COUNT) && FSL_FEATURE_SOC_DMA_COUNT)
  867. cmsis_i2c_dma_resource_t I2C2_DmaResource = {RTE_I2C2_Master_DMA_BASE, RTE_I2C2_Master_DMA_CH};
  868. i2c_master_dma_handle_t I2C2_DmaHandle;
  869. dma_handle_t I2C2_DmaTxRxHandle;
  870. #if defined(__CC_ARM)
  871. ARMCC_SECTION("i2c2_dma_driver_state")
  872. cmsis_i2c_dma_driver_state_t I2C2_DmaDriverState = {
  873. #else
  874. cmsis_i2c_dma_driver_state_t I2C2_DmaDriverState = {
  875. #endif
  876. &I2C2_Resource, &I2C2_DmaResource, &I2C2_DmaHandle, &I2C2_DmaTxRxHandle,
  877. };
  878. static int32_t I2C2_Master_DmaInitialize(ARM_I2C_SignalEvent_t cb_event)
  879. {
  880. I2C2_InitPins();
  881. return I2C_Master_DmaInitialize(cb_event, &I2C2_DmaDriverState);
  882. }
  883. int32_t I2C2_Master_DmaUninitialize(void)
  884. {
  885. I2C2_DeinitPins();
  886. return I2C_Master_DmaUninitialize(&I2C2_DmaDriverState);
  887. }
  888. int32_t I2C2_Master_DmaPowerControl(ARM_POWER_STATE state)
  889. {
  890. return I2C_Master_DmaPowerControl(state, &I2C2_DmaDriverState);
  891. }
  892. int32_t I2C2_Master_DmaTransmit(uint32_t addr, const uint8_t *data, uint32_t num, bool xfer_pending)
  893. {
  894. return I2C_Master_DmaTransmit(addr, data, num, xfer_pending, &I2C2_DmaDriverState);
  895. }
  896. int32_t I2C2_Master_DmaReceive(uint32_t addr, uint8_t *data, uint32_t num, bool xfer_pending)
  897. {
  898. return I2C_Master_DmaReceive(addr, data, num, xfer_pending, &I2C2_DmaDriverState);
  899. }
  900. int32_t I2C2_Master_DmaGetDataCount(void)
  901. {
  902. return I2C_Master_DmaGetDataCount(&I2C2_DmaDriverState);
  903. }
  904. int32_t I2C2_Master_DmaControl(uint32_t control, uint32_t arg)
  905. {
  906. return I2C_Master_DmaControl(control, arg, &I2C2_DmaDriverState);
  907. }
  908. ARM_I2C_STATUS I2C2_Master_DmaGetStatus(void)
  909. {
  910. return I2C_Master_DmaGetStatus(&I2C2_DmaDriverState);
  911. }
  912. #endif
  913. #else
  914. cmsis_i2c_handle_t I2C2_Handle;
  915. #if defined(__CC_ARM)
  916. ARMCC_SECTION("i2c2_interrupt_driver_state")
  917. cmsis_i2c_interrupt_driver_state_t I2C2_InterruptDriverState = {
  918. #else
  919. cmsis_i2c_interrupt_driver_state_t I2C2_InterruptDriverState = {
  920. #endif
  921. &I2C2_Resource, &I2C2_Handle,
  922. };
  923. static int32_t I2C2_InterruptInitialize(ARM_I2C_SignalEvent_t cb_event)
  924. {
  925. I2C2_InitPins();
  926. return I2C_InterruptInitialize(cb_event, &I2C2_InterruptDriverState);
  927. }
  928. static int32_t I2C2_InterruptUninitialize(void)
  929. {
  930. I2C2_DeinitPins();
  931. return I2C_InterruptUninitialize(&I2C2_InterruptDriverState);
  932. }
  933. static int32_t I2C2_InterruptPowerControl(ARM_POWER_STATE state)
  934. {
  935. return I2C_InterruptPowerControl(state, &I2C2_InterruptDriverState);
  936. }
  937. int32_t I2C2_Master_InterruptTransmit(uint32_t addr, const uint8_t *data, uint32_t num, bool xfer_pending)
  938. {
  939. return I2C_Master_InterruptTransmit(addr, data, num, xfer_pending, &I2C2_InterruptDriverState);
  940. }
  941. int32_t I2C2_Master_InterruptReceive(uint32_t addr, uint8_t *data, uint32_t num, bool xfer_pending)
  942. {
  943. return I2C_Master_InterruptReceive(addr, data, num, xfer_pending, &I2C2_InterruptDriverState);
  944. }
  945. int32_t I2C2_Slave_InterruptTransmit(const uint8_t *data, uint32_t num)
  946. {
  947. return I2C_Slave_InterruptTransmit(data, num, &I2C2_InterruptDriverState);
  948. }
  949. int32_t I2C2_Slave_InterruptReceive(uint8_t *data, uint32_t num)
  950. {
  951. return I2C_Slave_InterruptReceive(data, num, &I2C2_InterruptDriverState);
  952. }
  953. int32_t I2C2_InterruptGetDataCount(void)
  954. {
  955. return I2C_InterruptGetDataCount(&I2C2_InterruptDriverState);
  956. }
  957. int32_t I2C2_InterruptControl(uint32_t control, uint32_t arg)
  958. {
  959. return I2C_InterruptControl(control, arg, &I2C2_InterruptDriverState);
  960. }
  961. ARM_I2C_STATUS I2C2_InterruptGetStatus(void)
  962. {
  963. return I2C_InterruptGetStatus(&I2C2_InterruptDriverState);
  964. }
  965. #endif
  966. ARM_DRIVER_I2C Driver_I2C2 = {I2Cx_GetVersion, I2Cx_GetCapabilities,
  967. #if RTE_I2C2_DMA_EN
  968. I2C2_Master_DmaInitialize, I2C2_Master_DmaUninitialize, I2C2_Master_DmaPowerControl,
  969. I2C2_Master_DmaTransmit, I2C2_Master_DmaReceive, NULL, NULL, I2C2_Master_DmaGetDataCount,
  970. I2C2_Master_DmaControl, I2C2_Master_DmaGetStatus
  971. #else
  972. I2C2_InterruptInitialize, I2C2_InterruptUninitialize, I2C2_InterruptPowerControl,
  973. I2C2_Master_InterruptTransmit, I2C2_Master_InterruptReceive, I2C2_Slave_InterruptTransmit,
  974. I2C2_Slave_InterruptReceive, I2C2_InterruptGetDataCount, I2C2_InterruptControl,
  975. I2C2_InterruptGetStatus
  976. #endif
  977. };
  978. #endif
  979. #if defined(I2C3) && RTE_I2C3
  980. /* User needs to provide the implementation for I2C3_GetFreq/InitPins/DeinitPins
  981. in the application for enabling according instance. */
  982. extern uint32_t I2C3_GetFreq(void);
  983. extern void I2C3_InitPins(void);
  984. extern void I2C3_DeinitPins(void);
  985. cmsis_i2c_resource_t I2C3_Resource = {I2C3, I2C3_GetFreq};
  986. #if RTE_I2C3_DMA_EN
  987. #if (defined(FSL_FEATURE_SOC_DMA_COUNT) && FSL_FEATURE_SOC_DMA_COUNT)
  988. cmsis_i2c_dma_resource_t I2C3_DmaResource = {RTE_I2C3_Master_DMA_BASE, RTE_I2C3_Master_DMA_CH};
  989. i2c_master_dma_handle_t I2C3_DmaHandle;
  990. dma_handle_t I2C3_DmaTxRxHandle;
  991. #if defined(__CC_ARM)
  992. ARMCC_SECTION("i2c3_dma_driver_state")
  993. cmsis_i2c_dma_driver_state_t I2C3_DmaDriverState = {
  994. #else
  995. cmsis_i2c_dma_driver_state_t I2C3_DmaDriverState = {
  996. #endif
  997. &I2C3_Resource, &I2C3_DmaResource, &I2C3_DmaHandle, &I2C3_DmaTxRxHandle,
  998. };
  999. static int32_t I2C3_Master_DmaInitialize(ARM_I2C_SignalEvent_t cb_event)
  1000. {
  1001. I2C3_InitPins();
  1002. return I2C_Master_DmaInitialize(cb_event, &I2C3_DmaDriverState);
  1003. }
  1004. int32_t I2C3_Master_DmaUninitialize(void)
  1005. {
  1006. I2C3_DeinitPins();
  1007. return I2C_Master_DmaUninitialize(&I2C3_DmaDriverState);
  1008. }
  1009. int32_t I2C3_Master_DmaPowerControl(ARM_POWER_STATE state)
  1010. {
  1011. return I2C_Master_DmaPowerControl(state, &I2C3_DmaDriverState);
  1012. }
  1013. int32_t I2C3_Master_DmaTransmit(uint32_t addr, const uint8_t *data, uint32_t num, bool xfer_pending)
  1014. {
  1015. return I2C_Master_DmaTransmit(addr, data, num, xfer_pending, &I2C3_DmaDriverState);
  1016. }
  1017. int32_t I2C3_Master_DmaReceive(uint32_t addr, uint8_t *data, uint32_t num, bool xfer_pending)
  1018. {
  1019. return I2C_Master_DmaReceive(addr, data, num, xfer_pending, &I2C3_DmaDriverState);
  1020. }
  1021. int32_t I2C3_Master_DmaGetDataCount(void)
  1022. {
  1023. return I2C_Master_DmaGetDataCount(&I2C3_DmaDriverState);
  1024. }
  1025. int32_t I2C3_Master_DmaControl(uint32_t control, uint32_t arg)
  1026. {
  1027. return I2C_Master_DmaControl(control, arg, &I2C3_DmaDriverState);
  1028. }
  1029. ARM_I2C_STATUS I2C3_Master_DmaGetStatus(void)
  1030. {
  1031. return I2C_Master_DmaGetStatus(&I2C3_DmaDriverState);
  1032. }
  1033. #endif
  1034. #else
  1035. cmsis_i2c_handle_t I2C3_Handle;
  1036. #if defined(__CC_ARM)
  1037. ARMCC_SECTION("i2c3_interrupt_driver_state")
  1038. cmsis_i2c_interrupt_driver_state_t I2C3_InterruptDriverState = {
  1039. #else
  1040. cmsis_i2c_interrupt_driver_state_t I2C3_InterruptDriverState = {
  1041. #endif
  1042. &I2C3_Resource, &I2C3_Handle,
  1043. };
  1044. static int32_t I2C3_InterruptInitialize(ARM_I2C_SignalEvent_t cb_event)
  1045. {
  1046. I2C3_InitPins();
  1047. return I2C_InterruptInitialize(cb_event, &I2C3_InterruptDriverState);
  1048. }
  1049. static int32_t I2C3_InterruptUninitialize(void)
  1050. {
  1051. I2C3_DeinitPins();
  1052. return I2C_InterruptUninitialize(&I2C3_InterruptDriverState);
  1053. }
  1054. static int32_t I2C3_InterruptPowerControl(ARM_POWER_STATE state)
  1055. {
  1056. return I2C_InterruptPowerControl(state, &I2C3_InterruptDriverState);
  1057. }
  1058. int32_t I2C3_Master_InterruptTransmit(uint32_t addr, const uint8_t *data, uint32_t num, bool xfer_pending)
  1059. {
  1060. return I2C_Master_InterruptTransmit(addr, data, num, xfer_pending, &I2C3_InterruptDriverState);
  1061. }
  1062. int32_t I2C3_Master_InterruptReceive(uint32_t addr, uint8_t *data, uint32_t num, bool xfer_pending)
  1063. {
  1064. return I2C_Master_InterruptReceive(addr, data, num, xfer_pending, &I2C3_InterruptDriverState);
  1065. }
  1066. int32_t I2C3_Slave_InterruptTransmit(const uint8_t *data, uint32_t num)
  1067. {
  1068. return I2C_Slave_InterruptTransmit(data, num, &I2C3_InterruptDriverState);
  1069. }
  1070. int32_t I2C3_Slave_InterruptReceive(uint8_t *data, uint32_t num)
  1071. {
  1072. return I2C_Slave_InterruptReceive(data, num, &I2C3_InterruptDriverState);
  1073. }
  1074. int32_t I2C3_InterruptGetDataCount(void)
  1075. {
  1076. return I2C_InterruptGetDataCount(&I2C3_InterruptDriverState);
  1077. }
  1078. int32_t I2C3_InterruptControl(uint32_t control, uint32_t arg)
  1079. {
  1080. return I2C_InterruptControl(control, arg, &I2C3_InterruptDriverState);
  1081. }
  1082. ARM_I2C_STATUS I2C3_InterruptGetStatus(void)
  1083. {
  1084. return I2C_InterruptGetStatus(&I2C3_InterruptDriverState);
  1085. }
  1086. #endif
  1087. ARM_DRIVER_I2C Driver_I2C3 = {I2Cx_GetVersion, I2Cx_GetCapabilities,
  1088. #if RTE_I2C3_DMA_EN
  1089. I2C3_Master_DmaInitialize, I2C3_Master_DmaUninitialize, I2C3_Master_DmaPowerControl,
  1090. I2C3_Master_DmaTransmit, I2C3_Master_DmaReceive, NULL, NULL, I2C3_Master_DmaGetDataCount,
  1091. I2C3_Master_DmaControl, I2C3_Master_DmaGetStatus
  1092. #else
  1093. I2C3_InterruptInitialize, I2C3_InterruptUninitialize, I2C3_InterruptPowerControl,
  1094. I2C3_Master_InterruptTransmit, I2C3_Master_InterruptReceive, I2C3_Slave_InterruptTransmit,
  1095. I2C3_Slave_InterruptReceive, I2C3_InterruptGetDataCount, I2C3_InterruptControl,
  1096. I2C3_InterruptGetStatus
  1097. #endif
  1098. };
  1099. #endif
  1100. #if defined(I2C4) && RTE_I2C4
  1101. /* User needs to provide the implementation for I2C4_GetFreq/InitPins/DeinitPins
  1102. in the application for enabling according instance. */
  1103. extern uint32_t I2C4_GetFreq(void);
  1104. extern void I2C4_InitPins(void);
  1105. extern void I2C4_DeinitPins(void);
  1106. cmsis_i2c_resource_t I2C4_Resource = {I2C4, I2C4_GetFreq};
  1107. #if RTE_I2C4_DMA_EN
  1108. #if (defined(FSL_FEATURE_SOC_DMA_COUNT) && FSL_FEATURE_SOC_DMA_COUNT)
  1109. cmsis_i2c_dma_resource_t I2C4_DmaResource = {RTE_I2C4_Master_DMA_BASE, RTE_I2C4_Master_DMA_CH};
  1110. i2c_master_dma_handle_t I2C4_DmaHandle;
  1111. dma_handle_t I2C4_DmaTxRxHandle;
  1112. #if defined(__CC_ARM)
  1113. ARMCC_SECTION("i2c4_dma_driver_state")
  1114. cmsis_i2c_dma_driver_state_t I2C4_DmaDriverState = {
  1115. #else
  1116. cmsis_i2c_dma_driver_state_t I2C4_DmaDriverState = {
  1117. #endif
  1118. &I2C4_Resource, &I2C4_DmaResource, &I2C4_DmaHandle, &I2C4_DmaTxRxHandle,
  1119. };
  1120. static int32_t I2C4_Master_DmaInitialize(ARM_I2C_SignalEvent_t cb_event)
  1121. {
  1122. I2C4_InitPins();
  1123. return I2C_Master_DmaInitialize(cb_event, &I2C4_DmaDriverState);
  1124. }
  1125. int32_t I2C4_Master_DmaUninitialize(void)
  1126. {
  1127. I2C4_DeinitPins();
  1128. return I2C_Master_DmaUninitialize(&I2C4_DmaDriverState);
  1129. }
  1130. int32_t I2C4_Master_DmaPowerControl(ARM_POWER_STATE state)
  1131. {
  1132. return I2C_Master_DmaPowerControl(state, &I2C4_DmaDriverState);
  1133. }
  1134. int32_t I2C4_Master_DmaTransmit(uint32_t addr, const uint8_t *data, uint32_t num, bool xfer_pending)
  1135. {
  1136. return I2C_Master_DmaTransmit(addr, data, num, xfer_pending, &I2C4_DmaDriverState);
  1137. }
  1138. int32_t I2C4_Master_DmaReceive(uint32_t addr, uint8_t *data, uint32_t num, bool xfer_pending)
  1139. {
  1140. return I2C_Master_DmaReceive(addr, data, num, xfer_pending, &I2C4_DmaDriverState);
  1141. }
  1142. int32_t I2C4_Master_DmaGetDataCount(void)
  1143. {
  1144. return I2C_Master_DmaGetDataCount(&I2C4_DmaDriverState);
  1145. }
  1146. int32_t I2C4_Master_DmaControl(uint32_t control, uint32_t arg)
  1147. {
  1148. return I2C_Master_DmaControl(control, arg, &I2C4_DmaDriverState);
  1149. }
  1150. ARM_I2C_STATUS I2C4_Master_DmaGetStatus(void)
  1151. {
  1152. return I2C_Master_DmaGetStatus(&I2C4_DmaDriverState);
  1153. }
  1154. #endif
  1155. #else
  1156. cmsis_i2c_handle_t I2C4_handle;
  1157. #if defined(__CC_ARM)
  1158. ARMCC_SECTION("i2c4_interrupt_driver_state")
  1159. cmsis_i2c_interrupt_driver_state_t I2C4_InterruptDriverState = {
  1160. #else
  1161. cmsis_i2c_interrupt_driver_state_t I2C4_InterruptDriverState = {
  1162. #endif
  1163. &I2C4_Resource, &I2C4_handle,
  1164. };
  1165. static int32_t I2C4_InterruptInitialize(ARM_I2C_SignalEvent_t cb_event)
  1166. {
  1167. I2C4_InitPins();
  1168. return I2C_InterruptInitialize(cb_event, &I2C4_InterruptDriverState);
  1169. }
  1170. static int32_t I2C4_InterruptUninitialize(void)
  1171. {
  1172. I2C4_DeinitPins();
  1173. return I2C_InterruptUninitialize(&I2C4_InterruptDriverState);
  1174. }
  1175. static int32_t I2C4_InterruptPowerControl(ARM_POWER_STATE state)
  1176. {
  1177. return I2C_InterruptPowerControl(state, &I2C4_InterruptDriverState);
  1178. }
  1179. int32_t I2C4_Master_InterruptTransmit(uint32_t addr, const uint8_t *data, uint32_t num, bool xfer_pending)
  1180. {
  1181. return I2C_Master_InterruptTransmit(addr, data, num, xfer_pending, &I2C4_InterruptDriverState);
  1182. }
  1183. int32_t I2C4_Master_InterruptReceive(uint32_t addr, uint8_t *data, uint32_t num, bool xfer_pending)
  1184. {
  1185. return I2C_Master_InterruptReceive(addr, data, num, xfer_pending, &I2C4_InterruptDriverState);
  1186. }
  1187. int32_t I2C4_Slave_InterruptTransmit(const uint8_t *data, uint32_t num)
  1188. {
  1189. return I2C_Slave_InterruptTransmit(data, num, &I2C4_InterruptDriverState);
  1190. }
  1191. int32_t I2C4_Slave_InterruptReceive(uint8_t *data, uint32_t num)
  1192. {
  1193. return I2C_Slave_InterruptReceive(data, num, &I2C4_InterruptDriverState);
  1194. }
  1195. int32_t I2C4_InterruptGetDataCount(void)
  1196. {
  1197. return I2C_InterruptGetDataCount(&I2C4_InterruptDriverState);
  1198. }
  1199. int32_t I2C4_InterruptControl(uint32_t control, uint32_t arg)
  1200. {
  1201. return I2C_InterruptControl(control, arg, &I2C4_InterruptDriverState);
  1202. }
  1203. ARM_I2C_STATUS I2C4_InterruptGetStatus(void)
  1204. {
  1205. return I2C_InterruptGetStatus(&I2C4_InterruptDriverState);
  1206. }
  1207. #endif
  1208. ARM_DRIVER_I2C Driver_I2C4 = {I2Cx_GetVersion, I2Cx_GetCapabilities,
  1209. #if RTE_I2C4_DMA_EN
  1210. I2C4_Master_DmaInitialize, I2C4_Master_DmaUninitialize, I2C4_Master_DmaPowerControl,
  1211. I2C4_Master_DmaTransmit, I2C4_Master_DmaReceive, NULL, NULL, I2C4_Master_DmaGetDataCount,
  1212. I2C4_Master_DmaControl, I2C4_Master_DmaGetStatus
  1213. #else
  1214. I2C4_InterruptInitialize, I2C4_InterruptUninitialize, I2C4_InterruptPowerControl,
  1215. I2C4_Master_InterruptTransmit, I2C4_Master_InterruptReceive, I2C4_Slave_InterruptTransmit,
  1216. I2C4_Slave_InterruptReceive, I2C4_InterruptGetDataCount, I2C4_InterruptControl,
  1217. I2C4_InterruptGetStatus
  1218. #endif
  1219. };
  1220. #endif
  1221. #if defined(I2C5) && RTE_I2C5
  1222. /* User needs to provide the implementation for I2C5_GetFreq/InitPins/DeinitPins
  1223. in the application for enabling according instance. */
  1224. extern uint32_t I2C5_GetFreq(void);
  1225. extern void I2C5_InitPins(void);
  1226. extern void I2C5_DeinitPins(void);
  1227. cmsis_i2c_resource_t I2C5_Resource = {I2C5, I2C5_GetFreq};
  1228. #if RTE_I2C5_DMA_EN
  1229. #if (defined(FSL_FEATURE_SOC_DMA_COUNT) && FSL_FEATURE_SOC_DMA_COUNT)
  1230. cmsis_i2c_dma_resource_t I2C5_DmaResource = {RTE_I2C5_Master_DMA_BASE, RTE_I2C5_Master_DMA_CH};
  1231. i2c_master_dma_handle_t I2C5_DmaHandle;
  1232. dma_handle_t I2C5_DmaTxRxHandle;
  1233. #if defined(__CC_ARM)
  1234. ARMCC_SECTION("i2c5_dma_driver_state")
  1235. cmsis_i2c_dma_driver_state_t I2C5_DmaDriverState = {
  1236. #else
  1237. cmsis_i2c_dma_driver_state_t I2C5_DmaDriverState = {
  1238. #endif
  1239. &I2C5_Resource, &I2C5_DmaResource, &I2C5_DmaHandle, &I2C5_DmaTxRxHandle,
  1240. };
  1241. static int32_t I2C5_Master_DmaInitialize(ARM_I2C_SignalEvent_t cb_event)
  1242. {
  1243. I2C5_InitPins();
  1244. return I2C_Master_DmaInitialize(cb_event, &I2C5_DmaDriverState);
  1245. }
  1246. int32_t I2C5_Master_DmaUninitialize(void)
  1247. {
  1248. I2C5_DeinitPins();
  1249. return I2C_Master_DmaUninitialize(&I2C5_DmaDriverState);
  1250. }
  1251. int32_t I2C5_Master_DmaPowerControl(ARM_POWER_STATE state)
  1252. {
  1253. return I2C_Master_DmaPowerControl(state, &I2C5_DmaDriverState);
  1254. }
  1255. int32_t I2C5_Master_DmaTransmit(uint32_t addr, const uint8_t *data, uint32_t num, bool xfer_pending)
  1256. {
  1257. return I2C_Master_DmaTransmit(addr, data, num, xfer_pending, &I2C5_DmaDriverState);
  1258. }
  1259. int32_t I2C5_Master_DmaReceive(uint32_t addr, uint8_t *data, uint32_t num, bool xfer_pending)
  1260. {
  1261. return I2C_Master_DmaReceive(addr, data, num, xfer_pending, &I2C5_DmaDriverState);
  1262. }
  1263. int32_t I2C5_Master_DmaGetDataCount(void)
  1264. {
  1265. return I2C_Master_DmaGetDataCount(&I2C5_DmaDriverState);
  1266. }
  1267. int32_t I2C5_Master_DmaControl(uint32_t control, uint32_t arg)
  1268. {
  1269. return I2C_Master_DmaControl(control, arg, &I2C5_DmaDriverState);
  1270. }
  1271. ARM_I2C_STATUS I2C5_Master_DmaGetStatus(void)
  1272. {
  1273. return I2C_Master_DmaGetStatus(&I2C5_DmaDriverState);
  1274. }
  1275. #endif
  1276. #else
  1277. cmsis_i2c_handle_t I2C5_handle;
  1278. #if defined(__CC_ARM)
  1279. ARMCC_SECTION("i2c5_interrupt_driver_state")
  1280. cmsis_i2c_interrupt_driver_state_t I2C5_InterruptDriverState = {
  1281. #else
  1282. cmsis_i2c_interrupt_driver_state_t I2C5_InterruptDriverState = {
  1283. #endif
  1284. &I2C5_Resource, &I2C5_handle,
  1285. };
  1286. static int32_t I2C5_InterruptInitialize(ARM_I2C_SignalEvent_t cb_event)
  1287. {
  1288. I2C5_InitPins();
  1289. return I2C_InterruptInitialize(cb_event, &I2C5_InterruptDriverState);
  1290. }
  1291. static int32_t I2C5_InterruptUninitialize(void)
  1292. {
  1293. I2C5_DeinitPins();
  1294. return I2C_InterruptUninitialize(&I2C5_InterruptDriverState);
  1295. }
  1296. static int32_t I2C5_InterruptPowerControl(ARM_POWER_STATE state)
  1297. {
  1298. return I2C_InterruptPowerControl(state, &I2C5_InterruptDriverState);
  1299. }
  1300. int32_t I2C5_Master_InterruptTransmit(uint32_t addr, const uint8_t *data, uint32_t num, bool xfer_pending)
  1301. {
  1302. return I2C_Master_InterruptTransmit(addr, data, num, xfer_pending, &I2C5_InterruptDriverState);
  1303. }
  1304. int32_t I2C5_Master_InterruptReceive(uint32_t addr, uint8_t *data, uint32_t num, bool xfer_pending)
  1305. {
  1306. return I2C_Master_InterruptReceive(addr, data, num, xfer_pending, &I2C5_InterruptDriverState);
  1307. }
  1308. int32_t I2C5_Slave_InterruptTransmit(const uint8_t *data, uint32_t num)
  1309. {
  1310. return I2C_Slave_InterruptTransmit(data, num, &I2C5_InterruptDriverState);
  1311. }
  1312. int32_t I2C5_Slave_InterruptReceive(uint8_t *data, uint32_t num)
  1313. {
  1314. return I2C_Slave_InterruptReceive(data, num, &I2C5_InterruptDriverState);
  1315. }
  1316. int32_t I2C5_InterruptGetDataCount(void)
  1317. {
  1318. return I2C_InterruptGetDataCount(&I2C5_InterruptDriverState);
  1319. }
  1320. int32_t I2C5_InterruptControl(uint32_t control, uint32_t arg)
  1321. {
  1322. return I2C_InterruptControl(control, arg, &I2C5_InterruptDriverState);
  1323. }
  1324. ARM_I2C_STATUS I2C5_InterruptGetStatus(void)
  1325. {
  1326. return I2C_InterruptGetStatus(&I2C5_InterruptDriverState);
  1327. }
  1328. #endif
  1329. ARM_DRIVER_I2C Driver_I2C5 = {I2Cx_GetVersion, I2Cx_GetCapabilities,
  1330. #if RTE_I2C5_DMA_EN
  1331. I2C5_Master_DmaInitialize, I2C5_Master_DmaUninitialize, I2C5_Master_DmaPowerControl,
  1332. I2C5_Master_DmaTransmit, I2C5_Master_DmaReceive, NULL, NULL, I2C5_Master_DmaGetDataCount,
  1333. I2C5_Master_DmaControl, I2C5_Master_DmaGetStatus
  1334. #else
  1335. I2C5_InterruptInitialize, I2C5_InterruptUninitialize, I2C5_InterruptPowerControl,
  1336. I2C5_Master_InterruptTransmit, I2C5_Master_InterruptReceive, I2C5_Slave_InterruptTransmit,
  1337. I2C5_Slave_InterruptReceive, I2C5_InterruptGetDataCount, I2C5_InterruptControl,
  1338. I2C5_InterruptGetStatus
  1339. #endif
  1340. };
  1341. #endif
  1342. #if defined(I2C6) && RTE_I2C6
  1343. /* User needs to provide the implementation for I2C6_GetFreq/InitPins/DeinitPins
  1344. in the application for enabling according instance. */
  1345. extern uint32_t I2C6_GetFreq(void);
  1346. extern void I2C6_InitPins(void);
  1347. extern void I2C6_DeinitPins(void);
  1348. cmsis_i2c_resource_t I2C6_Resource = {I2C6, I2C6_GetFreq};
  1349. #if RTE_I2C6_DMA_EN
  1350. #if (defined(FSL_FEATURE_SOC_DMA_COUNT) && FSL_FEATURE_SOC_DMA_COUNT)
  1351. cmsis_i2c_dma_resource_t I2C6_DmaResource = {RTE_I2C6_Master_DMA_BASE, RTE_I2C6_Master_DMA_CH};
  1352. i2c_master_dma_handle_t I2C6_DmaHandle;
  1353. dma_handle_t I2C6_DmaTxRxHandle;
  1354. #if defined(__CC_ARM)
  1355. ARMCC_SECTION("i2c6_dma_driver_state")
  1356. cmsis_i2c_dma_driver_state_t I2C6_DmaDriverState = {
  1357. #else
  1358. cmsis_i2c_dma_driver_state_t I2C6_DmaDriverState = {
  1359. #endif
  1360. &I2C6_Resource, &I2C6_DmaResource, &I2C6_DmaHandle, &I2C6_DmaTxRxHandle,
  1361. };
  1362. static int32_t I2C6_Master_DmaInitialize(ARM_I2C_SignalEvent_t cb_event)
  1363. {
  1364. I2C6_InitPins();
  1365. return I2C_Master_DmaInitialize(cb_event, &I2C6_DmaDriverState);
  1366. }
  1367. int32_t I2C6_Master_DmaUninitialize(void)
  1368. {
  1369. I2C6_DeinitPins();
  1370. return I2C_Master_DmaUninitialize(&I2C6_DmaDriverState);
  1371. }
  1372. int32_t I2C6_Master_DmaPowerControl(ARM_POWER_STATE state)
  1373. {
  1374. return I2C_Master_DmaPowerControl(state, &I2C6_DmaDriverState);
  1375. }
  1376. int32_t I2C6_Master_DmaTransmit(uint32_t addr, const uint8_t *data, uint32_t num, bool xfer_pending)
  1377. {
  1378. return I2C_Master_DmaTransmit(addr, data, num, xfer_pending, &I2C6_DmaDriverState);
  1379. }
  1380. int32_t I2C6_Master_DmaReceive(uint32_t addr, uint8_t *data, uint32_t num, bool xfer_pending)
  1381. {
  1382. return I2C_Master_DmaReceive(addr, data, num, xfer_pending, &I2C6_DmaDriverState);
  1383. }
  1384. int32_t I2C6_Master_DmaGetDataCount(void)
  1385. {
  1386. return I2C_Master_DmaGetDataCount(&I2C6_DmaDriverState);
  1387. }
  1388. int32_t I2C6_Master_DmaControl(uint32_t control, uint32_t arg)
  1389. {
  1390. return I2C_Master_DmaControl(control, arg, &I2C6_DmaDriverState);
  1391. }
  1392. ARM_I2C_STATUS I2C6_Master_DmaGetStatus(void)
  1393. {
  1394. return I2C_Master_DmaGetStatus(&I2C6_DmaDriverState);
  1395. }
  1396. #endif
  1397. #else
  1398. cmsis_i2c_handle_t I2C6_handle;
  1399. #if defined(__CC_ARM)
  1400. ARMCC_SECTION("i2c6_interrupt_driver_state")
  1401. cmsis_i2c_interrupt_driver_state_t I2C6_InterruptDriverState = {
  1402. #else
  1403. cmsis_i2c_interrupt_driver_state_t I2C6_InterruptDriverState = {
  1404. #endif
  1405. &I2C6_Resource, &I2C6_handle,
  1406. };
  1407. static int32_t I2C6_InterruptInitialize(ARM_I2C_SignalEvent_t cb_event)
  1408. {
  1409. I2C6_InitPins();
  1410. return I2C_InterruptInitialize(cb_event, &I2C6_InterruptDriverState);
  1411. }
  1412. static int32_t I2C6_InterruptUninitialize(void)
  1413. {
  1414. I2C6_DeinitPins();
  1415. return I2C_InterruptUninitialize(&I2C6_InterruptDriverState);
  1416. }
  1417. static int32_t I2C6_InterruptPowerControl(ARM_POWER_STATE state)
  1418. {
  1419. return I2C_InterruptPowerControl(state, &I2C6_InterruptDriverState);
  1420. }
  1421. int32_t I2C6_Master_InterruptTransmit(uint32_t addr, const uint8_t *data, uint32_t num, bool xfer_pending)
  1422. {
  1423. return I2C_Master_InterruptTransmit(addr, data, num, xfer_pending, &I2C6_InterruptDriverState);
  1424. }
  1425. int32_t I2C6_Master_InterruptReceive(uint32_t addr, uint8_t *data, uint32_t num, bool xfer_pending)
  1426. {
  1427. return I2C_Master_InterruptReceive(addr, data, num, xfer_pending, &I2C6_InterruptDriverState);
  1428. }
  1429. int32_t I2C6_Slave_InterruptTransmit(const uint8_t *data, uint32_t num)
  1430. {
  1431. return I2C_Slave_InterruptTransmit(data, num, &I2C6_InterruptDriverState);
  1432. }
  1433. int32_t I2C6_Slave_InterruptReceive(uint8_t *data, uint32_t num)
  1434. {
  1435. return I2C_Slave_InterruptReceive(data, num, &I2C6_InterruptDriverState);
  1436. }
  1437. int32_t I2C6_InterruptGetDataCount(void)
  1438. {
  1439. return I2C_InterruptGetDataCount(&I2C6_InterruptDriverState);
  1440. }
  1441. int32_t I2C6_InterruptControl(uint32_t control, uint32_t arg)
  1442. {
  1443. return I2C_InterruptControl(control, arg, &I2C6_InterruptDriverState);
  1444. }
  1445. ARM_I2C_STATUS I2C6_InterruptGetStatus(void)
  1446. {
  1447. return I2C_InterruptGetStatus(&I2C6_InterruptDriverState);
  1448. }
  1449. #endif
  1450. ARM_DRIVER_I2C Driver_I2C6 = {I2Cx_GetVersion, I2Cx_GetCapabilities,
  1451. #if RTE_I2C6_DMA_EN
  1452. I2C6_Master_DmaInitialize, I2C6_Master_DmaUninitialize, I2C6_Master_DmaPowerControl,
  1453. I2C6_Master_DmaTransmit, I2C6_Master_DmaReceive, NULL, NULL, I2C6_Master_DmaGetDataCount,
  1454. I2C6_Master_DmaControl, I2C6_Master_DmaGetStatus
  1455. #else
  1456. I2C6_InterruptInitialize, I2C6_InterruptUninitialize, I2C6_InterruptPowerControl,
  1457. I2C6_Master_InterruptTransmit, I2C6_Master_InterruptReceive, I2C6_Slave_InterruptTransmit,
  1458. I2C6_Slave_InterruptReceive, I2C6_InterruptGetDataCount, I2C6_InterruptControl,
  1459. I2C6_InterruptGetStatus
  1460. #endif
  1461. };
  1462. #endif
  1463. #if defined(I2C7) && RTE_I2C7
  1464. /* User needs to provide the implementation for I2C7_GetFreq/InitPins/DeinitPins
  1465. in the application for enabling according instance. */
  1466. extern uint32_t I2C7_GetFreq(void);
  1467. extern void I2C7_InitPins(void);
  1468. extern void I2C7_DeinitPins(void);
  1469. cmsis_i2c_resource_t I2C7_Resource = {I2C7, I2C7_GetFreq};
  1470. #if RTE_I2C7_DMA_EN
  1471. #if (defined(FSL_FEATURE_SOC_DMA_COUNT) && FSL_FEATURE_SOC_DMA_COUNT)
  1472. cmsis_i2c_dma_resource_t I2C7_DmaResource = {RTE_I2C7_Master_DMA_BASE, RTE_I2C7_Master_DMA_CH};
  1473. i2c_master_dma_handle_t I2C7_DmaHandle;
  1474. dma_handle_t I2C7_DmaTxRxHandle;
  1475. #if defined(__CC_ARM)
  1476. ARMCC_SECTION("i2c7_dma_driver_state")
  1477. cmsis_i2c_dma_driver_state_t I2C7_DmaDriverState = {
  1478. #else
  1479. cmsis_i2c_dma_driver_state_t I2C7_DmaDriverState = {
  1480. #endif
  1481. &I2C7_Resource, &I2C7_DmaResource, &I2C7_DmaHandle, &I2C7_DmaTxRxHandle,
  1482. };
  1483. static int32_t I2C7_Master_DmaInitialize(ARM_I2C_SignalEvent_t cb_event)
  1484. {
  1485. I2C7_InitPins();
  1486. return I2C_Master_DmaInitialize(cb_event, &I2C7_DmaDriverState);
  1487. }
  1488. int32_t I2C7_Master_DmaUninitialize(void)
  1489. {
  1490. I2C7_DeinitPins();
  1491. return I2C_Master_DmaUninitialize(&I2C7_DmaDriverState);
  1492. }
  1493. int32_t I2C7_Master_DmaPowerControl(ARM_POWER_STATE state)
  1494. {
  1495. return I2C_Master_DmaPowerControl(state, &I2C7_DmaDriverState);
  1496. }
  1497. int32_t I2C7_Master_DmaTransmit(uint32_t addr, const uint8_t *data, uint32_t num, bool xfer_pending)
  1498. {
  1499. return I2C_Master_DmaTransmit(addr, data, num, xfer_pending, &I2C7_DmaDriverState);
  1500. }
  1501. int32_t I2C7_Master_DmaReceive(uint32_t addr, uint8_t *data, uint32_t num, bool xfer_pending)
  1502. {
  1503. return I2C_Master_DmaReceive(addr, data, num, xfer_pending, &I2C7_DmaDriverState);
  1504. }
  1505. int32_t I2C7_Master_DmaGetDataCount(void)
  1506. {
  1507. return I2C_Master_DmaGetDataCount(&I2C7_DmaDriverState);
  1508. }
  1509. int32_t I2C7_Master_DmaControl(uint32_t control, uint32_t arg)
  1510. {
  1511. return I2C_Master_DmaControl(control, arg, &I2C7_DmaDriverState);
  1512. }
  1513. ARM_I2C_STATUS I2C7_Master_DmaGetStatus(void)
  1514. {
  1515. return I2C_Master_DmaGetStatus(&I2C7_DmaDriverState);
  1516. }
  1517. #endif
  1518. #else
  1519. cmsis_i2c_handle_t I2C7_handle;
  1520. #if defined(__CC_ARM)
  1521. ARMCC_SECTION("i2c7_interrupt_driver_state")
  1522. cmsis_i2c_interrupt_driver_state_t I2C7_InterruptDriverState = {
  1523. #else
  1524. cmsis_i2c_interrupt_driver_state_t I2C7_InterruptDriverState = {
  1525. #endif
  1526. &I2C7_Resource, &I2C7_handle,
  1527. };
  1528. static int32_t I2C7_InterruptInitialize(ARM_I2C_SignalEvent_t cb_event)
  1529. {
  1530. I2C7_InitPins();
  1531. return I2C_InterruptInitialize(cb_event, &I2C7_InterruptDriverState);
  1532. }
  1533. static int32_t I2C7_InterruptUninitialize(void)
  1534. {
  1535. I2C7_DeinitPins();
  1536. return I2C_InterruptUninitialize(&I2C7_InterruptDriverState);
  1537. }
  1538. static int32_t I2C7_InterruptPowerControl(ARM_POWER_STATE state)
  1539. {
  1540. return I2C_InterruptPowerControl(state, &I2C7_InterruptDriverState);
  1541. }
  1542. int32_t I2C7_Master_InterruptTransmit(uint32_t addr, const uint8_t *data, uint32_t num, bool xfer_pending)
  1543. {
  1544. return I2C_Master_InterruptTransmit(addr, data, num, xfer_pending, &I2C7_InterruptDriverState);
  1545. }
  1546. int32_t I2C7_Master_InterruptReceive(uint32_t addr, uint8_t *data, uint32_t num, bool xfer_pending)
  1547. {
  1548. return I2C_Master_InterruptReceive(addr, data, num, xfer_pending, &I2C7_InterruptDriverState);
  1549. }
  1550. int32_t I2C7_Slave_InterruptTransmit(const uint8_t *data, uint32_t num)
  1551. {
  1552. return I2C_Slave_InterruptTransmit(data, num, &I2C7_InterruptDriverState);
  1553. }
  1554. int32_t I2C7_Slave_InterruptReceive(uint8_t *data, uint32_t num)
  1555. {
  1556. return I2C_Slave_InterruptReceive(data, num, &I2C7_InterruptDriverState);
  1557. }
  1558. int32_t I2C7_InterruptGetDataCount(void)
  1559. {
  1560. return I2C_InterruptGetDataCount(&I2C7_InterruptDriverState);
  1561. }
  1562. int32_t I2C7_InterruptControl(uint32_t control, uint32_t arg)
  1563. {
  1564. return I2C_InterruptControl(control, arg, &I2C7_InterruptDriverState);
  1565. }
  1566. ARM_I2C_STATUS I2C7_InterruptGetStatus(void)
  1567. {
  1568. return I2C_InterruptGetStatus(&I2C7_InterruptDriverState);
  1569. }
  1570. #endif
  1571. ARM_DRIVER_I2C Driver_I2C7 = {I2Cx_GetVersion, I2Cx_GetCapabilities,
  1572. #if RTE_I2C7_DMA_EN
  1573. I2C7_Master_DmaInitialize, I2C7_Master_DmaUninitialize, I2C7_Master_DmaPowerControl,
  1574. I2C7_Master_DmaTransmit, I2C7_Master_DmaReceive, NULL, NULL, I2C7_Master_DmaGetDataCount,
  1575. I2C7_Master_DmaControl, I2C7_Master_DmaGetStatus
  1576. #else
  1577. I2C7_InterruptInitialize, I2C7_InterruptUninitialize, I2C7_InterruptPowerControl,
  1578. I2C7_Master_InterruptTransmit, I2C7_Master_InterruptReceive, I2C7_Slave_InterruptTransmit,
  1579. I2C7_Slave_InterruptReceive, I2C7_InterruptGetDataCount, I2C7_InterruptControl,
  1580. I2C7_InterruptGetStatus
  1581. #endif
  1582. };
  1583. #endif
  1584. #if defined(I2C8) && RTE_I2C8
  1585. /* User needs to provide the implementation for I2C8_GetFreq/InitPins/DeinitPins
  1586. in the application for enabling according instance. */
  1587. extern uint32_t I2C8_GetFreq(void);
  1588. extern void I2C8_InitPins(void);
  1589. extern void I2C8_DeinitPins(void);
  1590. cmsis_i2c_resource_t I2C8_Resource = {I2C8, I2C8_GetFreq};
  1591. #if RTE_I2C8_DMA_EN
  1592. #if (defined(FSL_FEATURE_SOC_DMA_COUNT) && FSL_FEATURE_SOC_DMA_COUNT)
  1593. cmsis_i2c_dma_resource_t I2C8_DmaResource = {RTE_I2C8_Master_DMA_BASE, RTE_I2C8_Master_DMA_CH};
  1594. i2c_master_dma_handle_t I2C8_DmaHandle;
  1595. dma_handle_t I2C8_DmaTxRxHandle;
  1596. #if defined(__CC_ARM)
  1597. ARMCC_SECTION("i2c8_dma_driver_state")
  1598. cmsis_i2c_dma_driver_state_t I2C8_DmaDriverState = {
  1599. #else
  1600. cmsis_i2c_dma_driver_state_t I2C8_DmaDriverState = {
  1601. #endif
  1602. &I2C8_Resource, &I2C8_DmaResource, &I2C8_DmaHandle, &I2C8_DmaTxRxHandle,
  1603. };
  1604. static int32_t I2C8_Master_DmaInitialize(ARM_I2C_SignalEvent_t cb_event)
  1605. {
  1606. I2C8_InitPins();
  1607. return I2C_Master_DmaInitialize(cb_event, &I2C8_DmaDriverState);
  1608. }
  1609. int32_t I2C8_Master_DmaUninitialize(void)
  1610. {
  1611. I2C8_DeinitPins();
  1612. return I2C_Master_DmaUninitialize(&I2C8_DmaDriverState);
  1613. }
  1614. int32_t I2C8_Master_DmaPowerControl(ARM_POWER_STATE state)
  1615. {
  1616. return I2C_Master_DmaPowerControl(state, &I2C8_DmaDriverState);
  1617. }
  1618. int32_t I2C8_Master_DmaTransmit(uint32_t addr, const uint8_t *data, uint32_t num, bool xfer_pending)
  1619. {
  1620. return I2C_Master_DmaTransmit(addr, data, num, xfer_pending, &I2C8_DmaDriverState);
  1621. }
  1622. int32_t I2C8_Master_DmaReceive(uint32_t addr, uint8_t *data, uint32_t num, bool xfer_pending)
  1623. {
  1624. return I2C_Master_DmaReceive(addr, data, num, xfer_pending, &I2C8_DmaDriverState);
  1625. }
  1626. int32_t I2C8_Master_DmaGetDataCount(void)
  1627. {
  1628. return I2C_Master_DmaGetDataCount(&I2C8_DmaDriverState);
  1629. }
  1630. int32_t I2C8_Master_DmaControl(uint32_t control, uint32_t arg)
  1631. {
  1632. return I2C_Master_DmaControl(control, arg, &I2C8_DmaDriverState);
  1633. }
  1634. ARM_I2C_STATUS I2C8_Master_DmaGetStatus(void)
  1635. {
  1636. return I2C_Master_DmaGetStatus(&I2C8_DmaDriverState);
  1637. }
  1638. #endif
  1639. #else
  1640. cmsis_i2c_handle_t I2C8_handle;
  1641. #if defined(__CC_ARM)
  1642. ARMCC_SECTION("i2c8_interrupt_driver_state")
  1643. cmsis_i2c_interrupt_driver_state_t I2C8_InterruptDriverState = {
  1644. #else
  1645. cmsis_i2c_interrupt_driver_state_t I2C8_InterruptDriverState = {
  1646. #endif
  1647. &I2C8_Resource, &I2C8_handle,
  1648. };
  1649. static int32_t I2C8_InterruptInitialize(ARM_I2C_SignalEvent_t cb_event)
  1650. {
  1651. I2C8_InitPins();
  1652. return I2C_InterruptInitialize(cb_event, &I2C8_InterruptDriverState);
  1653. }
  1654. static int32_t I2C8_InterruptUninitialize(void)
  1655. {
  1656. I2C8_DeinitPins();
  1657. return I2C_InterruptUninitialize(&I2C8_InterruptDriverState);
  1658. }
  1659. static int32_t I2C8_InterruptPowerControl(ARM_POWER_STATE state)
  1660. {
  1661. return I2C_InterruptPowerControl(state, &I2C8_InterruptDriverState);
  1662. }
  1663. int32_t I2C8_Master_InterruptTransmit(uint32_t addr, const uint8_t *data, uint32_t num, bool xfer_pending)
  1664. {
  1665. return I2C_Master_InterruptTransmit(addr, data, num, xfer_pending, &I2C8_InterruptDriverState);
  1666. }
  1667. int32_t I2C8_Master_InterruptReceive(uint32_t addr, uint8_t *data, uint32_t num, bool xfer_pending)
  1668. {
  1669. return I2C_Master_InterruptReceive(addr, data, num, xfer_pending, &I2C8_InterruptDriverState);
  1670. }
  1671. int32_t I2C8_Slave_InterruptTransmit(const uint8_t *data, uint32_t num)
  1672. {
  1673. return I2C_Slave_InterruptTransmit(data, num, &I2C8_InterruptDriverState);
  1674. }
  1675. int32_t I2C8_Slave_InterruptReceive(uint8_t *data, uint32_t num)
  1676. {
  1677. return I2C_Slave_InterruptReceive(data, num, &I2C8_InterruptDriverState);
  1678. }
  1679. int32_t I2C8_InterruptGetDataCount(void)
  1680. {
  1681. return I2C_InterruptGetDataCount(&I2C8_InterruptDriverState);
  1682. }
  1683. int32_t I2C8_InterruptControl(uint32_t control, uint32_t arg)
  1684. {
  1685. return I2C_InterruptControl(control, arg, &I2C8_InterruptDriverState);
  1686. }
  1687. ARM_I2C_STATUS I2C8_InterruptGetStatus(void)
  1688. {
  1689. return I2C_InterruptGetStatus(&I2C8_InterruptDriverState);
  1690. }
  1691. #endif
  1692. ARM_DRIVER_I2C Driver_I2C8 = {I2Cx_GetVersion, I2Cx_GetCapabilities,
  1693. #if RTE_I2C8_DMA_EN
  1694. I2C8_Master_DmaInitialize, I2C8_Master_DmaUninitialize, I2C8_Master_DmaPowerControl,
  1695. I2C8_Master_DmaTransmit, I2C8_Master_DmaReceive, NULL, NULL, I2C8_Master_DmaGetDataCount,
  1696. I2C8_Master_DmaControl, I2C8_Master_DmaGetStatus
  1697. #else
  1698. I2C8_InterruptInitialize, I2C8_InterruptUninitialize, I2C8_InterruptPowerControl,
  1699. I2C8_Master_InterruptTransmit, I2C8_Master_InterruptReceive, I2C8_Slave_InterruptTransmit,
  1700. I2C8_Slave_InterruptReceive, I2C8_InterruptGetDataCount, I2C8_InterruptControl,
  1701. I2C8_InterruptGetStatus
  1702. #endif
  1703. };
  1704. #endif
  1705. #if defined(I2C9) && RTE_I2C9
  1706. /* User needs to provide the implementation for I2C9_GetFreq/InitPins/DeinitPins
  1707. in the application for enabling according instance. */
  1708. extern uint32_t I2C9_GetFreq(void);
  1709. extern void I2C9_InitPins(void);
  1710. extern void I2C9_DeinitPins(void);
  1711. cmsis_i2c_resource_t I2C9_Resource = {I2C9, I2C9_GetFreq};
  1712. #if RTE_I2C9_DMA_EN
  1713. #if (defined(FSL_FEATURE_SOC_DMA_COUNT) && FSL_FEATURE_SOC_DMA_COUNT)
  1714. cmsis_i2c_dma_resource_t I2C9_DmaResource = {RTE_I2C9_Master_DMA_BASE, RTE_I2C9_Master_DMA_CH};
  1715. i2c_master_dma_handle_t I2C9_DmaHandle;
  1716. dma_handle_t I2C9_DmaTxRxHandle;
  1717. #if defined(__CC_ARM)
  1718. ARMCC_SECTION("i2c9_dma_driver_state")
  1719. cmsis_i2c_dma_driver_state_t I2C9_DmaDriverState = {
  1720. #else
  1721. cmsis_i2c_dma_driver_state_t I2C9_DmaDriverState = {
  1722. #endif
  1723. &I2C9_Resource, &I2C9_DmaResource, &I2C9_DmaHandle, &I2C9_DmaTxRxHandle,
  1724. };
  1725. static int32_t I2C9_Master_DmaInitialize(ARM_I2C_SignalEvent_t cb_event)
  1726. {
  1727. I2C9_InitPins();
  1728. return I2C_Master_DmaInitialize(cb_event, &I2C9_DmaDriverState);
  1729. }
  1730. int32_t I2C9_Master_DmaUninitialize(void)
  1731. {
  1732. I2C9_DeinitPins();
  1733. return I2C_Master_DmaUninitialize(&I2C9_DmaDriverState);
  1734. }
  1735. int32_t I2C9_Master_DmaPowerControl(ARM_POWER_STATE state)
  1736. {
  1737. return I2C_Master_DmaPowerControl(state, &I2C9_DmaDriverState);
  1738. }
  1739. int32_t I2C9_Master_DmaTransmit(uint32_t addr, const uint8_t *data, uint32_t num, bool xfer_pending)
  1740. {
  1741. return I2C_Master_DmaTransmit(addr, data, num, xfer_pending, &I2C9_DmaDriverState);
  1742. }
  1743. int32_t I2C9_Master_DmaReceive(uint32_t addr, uint8_t *data, uint32_t num, bool xfer_pending)
  1744. {
  1745. return I2C_Master_DmaReceive(addr, data, num, xfer_pending, &I2C9_DmaDriverState);
  1746. }
  1747. int32_t I2C9_Master_DmaGetDataCount(void)
  1748. {
  1749. return I2C_Master_DmaGetDataCount(&I2C9_DmaDriverState);
  1750. }
  1751. int32_t I2C9_Master_DmaControl(uint32_t control, uint32_t arg)
  1752. {
  1753. return I2C_Master_DmaControl(control, arg, &I2C9_DmaDriverState);
  1754. }
  1755. ARM_I2C_STATUS I2C9_Master_DmaGetStatus(void)
  1756. {
  1757. return I2C_Master_DmaGetStatus(&I2C9_DmaDriverState);
  1758. }
  1759. #endif
  1760. #else
  1761. cmsis_i2c_handle_t I2C9_handle;
  1762. #if defined(__CC_ARM)
  1763. ARMCC_SECTION("i2c9_interrupt_driver_state")
  1764. cmsis_i2c_interrupt_driver_state_t I2C9_InterruptDriverState = {
  1765. #else
  1766. cmsis_i2c_interrupt_driver_state_t I2C9_InterruptDriverState = {
  1767. #endif
  1768. &I2C9_Resource, &I2C9_handle,
  1769. };
  1770. static int32_t I2C9_InterruptInitialize(ARM_I2C_SignalEvent_t cb_event)
  1771. {
  1772. I2C9_InitPins();
  1773. return I2C_InterruptInitialize(cb_event, &I2C9_InterruptDriverState);
  1774. }
  1775. static int32_t I2C9_InterruptUninitialize(void)
  1776. {
  1777. I2C9_DeinitPins();
  1778. return I2C_InterruptUninitialize(&I2C9_InterruptDriverState);
  1779. }
  1780. static int32_t I2C9_InterruptPowerControl(ARM_POWER_STATE state)
  1781. {
  1782. return I2C_InterruptPowerControl(state, &I2C9_InterruptDriverState);
  1783. }
  1784. int32_t I2C9_Master_InterruptTransmit(uint32_t addr, const uint8_t *data, uint32_t num, bool xfer_pending)
  1785. {
  1786. return I2C_Master_InterruptTransmit(addr, data, num, xfer_pending, &I2C9_InterruptDriverState);
  1787. }
  1788. int32_t I2C9_Master_InterruptReceive(uint32_t addr, uint8_t *data, uint32_t num, bool xfer_pending)
  1789. {
  1790. return I2C_Master_InterruptReceive(addr, data, num, xfer_pending, &I2C9_InterruptDriverState);
  1791. }
  1792. int32_t I2C9_Slave_InterruptTransmit(const uint8_t *data, uint32_t num)
  1793. {
  1794. return I2C_Slave_InterruptTransmit(data, num, &I2C9_InterruptDriverState);
  1795. }
  1796. int32_t I2C9_Slave_InterruptReceive(uint8_t *data, uint32_t num)
  1797. {
  1798. return I2C_Slave_InterruptReceive(data, num, &I2C9_InterruptDriverState);
  1799. }
  1800. int32_t I2C9_InterruptGetDataCount(void)
  1801. {
  1802. return I2C_InterruptGetDataCount(&I2C9_InterruptDriverState);
  1803. }
  1804. int32_t I2C9_InterruptControl(uint32_t control, uint32_t arg)
  1805. {
  1806. return I2C_InterruptControl(control, arg, &I2C9_InterruptDriverState);
  1807. }
  1808. ARM_I2C_STATUS I2C9_InterruptGetStatus(void)
  1809. {
  1810. return I2C_InterruptGetStatus(&I2C9_InterruptDriverState);
  1811. }
  1812. #endif
  1813. ARM_DRIVER_I2C Driver_I2C9 = {I2Cx_GetVersion, I2Cx_GetCapabilities,
  1814. #if RTE_I2C9_DMA_EN
  1815. I2C9_Master_DmaInitialize, I2C9_Master_DmaUninitialize, I2C9_Master_DmaPowerControl,
  1816. I2C9_Master_DmaTransmit, I2C9_Master_DmaReceive, NULL, NULL, I2C9_Master_DmaGetDataCount,
  1817. I2C9_Master_DmaControl, I2C9_Master_DmaGetStatus
  1818. #else
  1819. I2C9_InterruptInitialize, I2C9_InterruptUninitialize, I2C9_InterruptPowerControl,
  1820. I2C9_Master_InterruptTransmit, I2C9_Master_InterruptReceive, I2C9_Slave_InterruptTransmit,
  1821. I2C9_Slave_InterruptReceive, I2C9_InterruptGetDataCount, I2C9_InterruptControl,
  1822. I2C9_InterruptGetStatus
  1823. #endif
  1824. };
  1825. #endif