You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

пре 11 година
пре 10 година
пре 11 година
пре 10 година
пре 11 година
пре 10 година
пре 10 година
пре 9 година
пре 10 година
пре 10 година
пре 9 година
пре 9 година
пре 9 година
пре 9 година
пре 9 година
пре 9 година
пре 11 година
пре 9 година
пре 11 година
пре 9 година
пре 11 година
пре 9 година
пре 11 година
пре 9 година
пре 11 година
пре 9 година
пре 9 година
пре 9 година
пре 9 година
пре 11 година
пре 11 година
пре 9 година
пре 9 година
пре 9 година
пре 9 година
пре 9 година
пре 9 година
пре 9 година
пре 9 година
пре 9 година
пре 11 година
пре 11 година
пре 11 година
пре 10 година
пре 11 година
пре 11 година
пре 9 година
пре 9 година
пре 9 година
пре 11 година
пре 11 година
пре 11 година
пре 11 година
пре 11 година
пре 11 година
пре 11 година
пре 11 година
пре 11 година
пре 11 година
пре 11 година
пре 11 година
пре 11 година
пре 11 година
пре 11 година
пре 10 година
пре 11 година
пре 10 година
пре 10 година
пре 11 година
пре 10 година
пре 11 година
пре 10 година
пре 11 година
пре 10 година
пре 11 година
пре 10 година
пре 11 година
пре 10 година
пре 11 година
пре 10 година
пре 11 година
пре 10 година
пре 11 година
пре 11 година
пре 10 година
пре 11 година
пре 10 година
пре 11 година
пре 10 година
пре 11 година
пре 11 година
пре 11 година
пре 11 година
пре 11 година
пре 10 година
пре 11 година
пре 11 година
пре 11 година
пре 11 година
пре 11 година
пре 11 година
пре 11 година
пре 11 година
пре 11 година
пре 11 година
пре 11 година
пре 11 година
пре 11 година
пре 11 година
пре 11 година
пре 10 година
пре 11 година
пре 11 година
пре 11 година
пре 11 година
пре 11 година
пре 11 година
пре 11 година
пре 10 година
пре 11 година
пре 11 година
пре 10 година
пре 9 година
пре 9 година
пре 11 година
пре 11 година
пре 10 година
пре 10 година
пре 11 година
пре 11 година
пре 11 година
пре 11 година
пре 11 година
пре 11 година
пре 9 година
пре 11 година
пре 10 година
пре 10 година
пре 11 година
пре 11 година
пре 11 година
пре 11 година
пре 10 година
пре 11 година
пре 11 година
пре 9 година
пре 9 година
пре 11 година
пре 11 година
пре 11 година
пре 10 година
пре 11 година
пре 11 година
пре 11 година
пре 9 година
пре 11 година
пре 9 година
пре 10 година
пре 10 година
пре 9 година
пре 11 година
пре 11 година
пре 10 година
пре 10 година
пре 11 година
пре 11 година
пре 9 година
пре 11 година
пре 9 година
пре 11 година
пре 11 година
пре 11 година
пре 11 година
пре 11 година
пре 11 година
пре 11 година
пре 11 година
пре 11 година
пре 11 година
пре 11 година
пре 11 година
пре 11 година
пре 11 година
пре 9 година
пре 11 година
пре 11 година
пре 11 година
пре 11 година
пре 11 година
пре 11 година
пре 11 година
пре 11 година
пре 11 година
пре 9 година
пре 11 година
пре 11 година
пре 11 година
пре 9 година
пре 11 година
пре 11 година
пре 11 година
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529153015311532153315341535153615371538153915401541154215431544154515461547154815491550155115521553155415551556155715581559156015611562156315641565156615671568156915701571157215731574157515761577157815791580158115821583158415851586158715881589159015911592159315941595159615971598159916001601160216031604160516061607160816091610161116121613161416151616161716181619162016211622162316241625162616271628162916301631163216331634163516361637163816391640164116421643164416451646164716481649165016511652165316541655165616571658165916601661166216631664166516661667166816691670167116721673167416751676167716781679168016811682168316841685168616871688168916901691169216931694169516961697169816991700170117021703170417051706170717081709171017111712171317141715171617171718171917201721172217231724172517261727172817291730173117321733173417351736173717381739174017411742174317441745174617471748174917501751175217531754175517561757175817591760176117621763176417651766176717681769177017711772177317741775177617771778177917801781178217831784178517861787178817891790179117921793179417951796179717981799180018011802180318041805180618071808180918101811181218131814181518161817181818191820182118221823182418251826182718281829183018311832183318341835183618371838183918401841184218431844184518461847184818491850185118521853185418551856185718581859186018611862186318641865186618671868186918701871187218731874187518761877187818791880188118821883188418851886188718881889189018911892189318941895189618971898189919001901190219031904190519061907190819091910191119121913191419151916191719181919192019211922192319241925192619271928192919301931193219331934193519361937193819391940194119421943194419451946194719481949195019511952195319541955195619571958195919601961196219631964196519661967196819691970197119721973197419751976197719781979198019811982198319841985198619871988198919901991199219931994199519961997199819992000200120022003200420052006200720082009201020112012201320142015201620172018201920202021202220232024202520262027202820292030203120322033203420352036203720382039204020412042204320442045204620472048204920502051205220532054205520562057205820592060206120622063206420652066206720682069207020712072207320742075207620772078207920802081208220832084208520862087208820892090209120922093209420952096209720982099210021012102210321042105210621072108210921102111211221132114211521162117211821192120212121222123212421252126212721282129213021312132213321342135213621372138213921402141214221432144214521462147214821492150215121522153215421552156215721582159216021612162216321642165216621672168216921702171217221732174217521762177217821792180218121822183218421852186218721882189219021912192219321942195219621972198219922002201220222032204220522062207220822092210221122122213221422152216221722182219222022212222222322242225222622272228222922302231223222332234223522362237223822392240224122422243224422452246224722482249225022512252225322542255225622572258225922602261226222632264226522662267226822692270227122722273227422752276227722782279228022812282228322842285228622872288228922902291229222932294229522962297229822992300230123022303230423052306230723082309231023112312231323142315231623172318231923202321232223232324232523262327232823292330233123322333233423352336233723382339234023412342234323442345234623472348234923502351235223532354235523562357235823592360236123622363236423652366236723682369237023712372237323742375237623772378237923802381238223832384238523862387238823892390239123922393239423952396239723982399240024012402240324042405240624072408240924102411241224132414241524162417241824192420242124222423242424252426242724282429243024312432243324342435243624372438243924402441244224432444244524462447244824492450245124522453245424552456245724582459246024612462246324642465246624672468246924702471247224732474247524762477247824792480248124822483248424852486248724882489249024912492249324942495249624972498249925002501250225032504250525062507250825092510251125122513251425152516251725182519252025212522252325242525252625272528252925302531253225332534253525362537253825392540254125422543254425452546254725482549255025512552255325542555255625572558255925602561256225632564256525662567256825692570257125722573257425752576257725782579258025812582258325842585258625872588258925902591259225932594259525962597259825992600260126022603260426052606260726082609261026112612261326142615261626172618261926202621262226232624262526262627262826292630263126322633263426352636263726382639264026412642264326442645264626472648264926502651265226532654265526562657265826592660266126622663266426652666266726682669267026712672267326742675267626772678267926802681268226832684268526862687268826892690269126922693269426952696269726982699270027012702270327042705270627072708270927102711271227132714271527162717271827192720272127222723272427252726272727282729273027312732273327342735273627372738273927402741274227432744274527462747274827492750275127522753275427552756275727582759276027612762276327642765276627672768276927702771277227732774277527762777277827792780278127822783278427852786278727882789279027912792279327942795279627972798279928002801280228032804280528062807280828092810281128122813281428152816281728182819282028212822282328242825282628272828282928302831283228332834283528362837283828392840284128422843284428452846284728482849285028512852285328542855285628572858285928602861286228632864286528662867286828692870287128722873287428752876287728782879288028812882288328842885288628872888288928902891289228932894289528962897289828992900290129022903290429052906290729082909291029112912291329142915291629172918291929202921292229232924292529262927292829292930293129322933293429352936293729382939294029412942294329442945294629472948294929502951295229532954295529562957295829592960296129622963296429652966296729682969297029712972297329742975297629772978297929802981298229832984298529862987298829892990299129922993299429952996299729982999300030013002300330043005300630073008300930103011301230133014301530163017301830193020302130223023302430253026302730283029303030313032
  1. /* Teensyduino Core Library
  2. * http://www.pjrc.com/teensy/
  3. * Copyright (c) 2013 PJRC.COM, LLC.
  4. *
  5. * Permission is hereby granted, free of charge, to any person obtaining
  6. * a copy of this software and associated documentation files (the
  7. * "Software"), to deal in the Software without restriction, including
  8. * without limitation the rights to use, copy, modify, merge, publish,
  9. * distribute, sublicense, and/or sell copies of the Software, and to
  10. * permit persons to whom the Software is furnished to do so, subject to
  11. * the following conditions:
  12. *
  13. * 1. The above copyright notice and this permission notice shall be
  14. * included in all copies or substantial portions of the Software.
  15. *
  16. * 2. If the Software is incorporated into a build system that allows
  17. * selection among a list of target devices, then similar target
  18. * devices manufactured by PJRC.COM must be included in the list of
  19. * target devices and selectable in the same manner.
  20. *
  21. * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
  22. * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
  23. * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
  24. * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
  25. * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
  26. * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
  27. * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
  28. * SOFTWARE.
  29. */
  30. #ifndef _kinetis_h_
  31. #define _kinetis_h_
  32. #include <stdint.h>
  33. // Teensy 3.0
  34. #if defined(__MK20DX128__)
  35. enum IRQ_NUMBER_t {
  36. IRQ_DMA_CH0 = 0,
  37. IRQ_DMA_CH1 = 1,
  38. IRQ_DMA_CH2 = 2,
  39. IRQ_DMA_CH3 = 3,
  40. IRQ_DMA_ERROR = 4,
  41. IRQ_FTFL_COMPLETE = 6,
  42. IRQ_FTFL_COLLISION = 7,
  43. IRQ_LOW_VOLTAGE = 8,
  44. IRQ_LLWU = 9,
  45. IRQ_WDOG = 10,
  46. IRQ_I2C0 = 11,
  47. IRQ_SPI0 = 12,
  48. IRQ_I2S0_TX = 13,
  49. IRQ_I2S0_RX = 14,
  50. IRQ_UART0_LON = 15,
  51. IRQ_UART0_STATUS = 16,
  52. IRQ_UART0_ERROR = 17,
  53. IRQ_UART1_STATUS = 18,
  54. IRQ_UART1_ERROR = 19,
  55. IRQ_UART2_STATUS = 20,
  56. IRQ_UART2_ERROR = 21,
  57. IRQ_ADC0 = 22,
  58. IRQ_CMP0 = 23,
  59. IRQ_CMP1 = 24,
  60. IRQ_FTM0 = 25,
  61. IRQ_FTM1 = 26,
  62. IRQ_CMT = 27,
  63. IRQ_RTC_ALARM = 28,
  64. IRQ_RTC_SECOND = 29,
  65. IRQ_PIT_CH0 = 30,
  66. IRQ_PIT_CH1 = 31,
  67. IRQ_PIT_CH2 = 32,
  68. IRQ_PIT_CH3 = 33,
  69. IRQ_PDB = 34,
  70. IRQ_USBOTG = 35,
  71. IRQ_USBDCD = 36,
  72. IRQ_TSI = 37,
  73. IRQ_MCG = 38,
  74. IRQ_LPTMR = 39,
  75. IRQ_PORTA = 40,
  76. IRQ_PORTB = 41,
  77. IRQ_PORTC = 42,
  78. IRQ_PORTD = 43,
  79. IRQ_PORTE = 44,
  80. IRQ_SOFTWARE = 45
  81. };
  82. #define NVIC_NUM_INTERRUPTS 46
  83. #define DMA_NUM_CHANNELS 4
  84. #define KINETISK
  85. #define KINETISK_UART0
  86. #define KINETISK_UART0_FIFO
  87. #define KINETISK_UART1
  88. #define KINETISK_UART2
  89. // Teensy 3.1
  90. #elif defined(__MK20DX256__)
  91. enum IRQ_NUMBER_t {
  92. IRQ_DMA_CH0 = 0,
  93. IRQ_DMA_CH1 = 1,
  94. IRQ_DMA_CH2 = 2,
  95. IRQ_DMA_CH3 = 3,
  96. IRQ_DMA_CH4 = 4,
  97. IRQ_DMA_CH5 = 5,
  98. IRQ_DMA_CH6 = 6,
  99. IRQ_DMA_CH7 = 7,
  100. IRQ_DMA_CH8 = 8,
  101. IRQ_DMA_CH9 = 9,
  102. IRQ_DMA_CH10 = 10,
  103. IRQ_DMA_CH11 = 11,
  104. IRQ_DMA_CH12 = 12,
  105. IRQ_DMA_CH13 = 13,
  106. IRQ_DMA_CH14 = 14,
  107. IRQ_DMA_CH15 = 15,
  108. IRQ_DMA_ERROR = 16,
  109. IRQ_FTFL_COMPLETE = 18,
  110. IRQ_FTFL_COLLISION = 19,
  111. IRQ_LOW_VOLTAGE = 20,
  112. IRQ_LLWU = 21,
  113. IRQ_WDOG = 22,
  114. IRQ_I2C0 = 24,
  115. IRQ_I2C1 = 25,
  116. IRQ_SPI0 = 26,
  117. IRQ_SPI1 = 27,
  118. IRQ_CAN_MESSAGE = 29,
  119. IRQ_CAN_BUS_OFF = 30,
  120. IRQ_CAN_ERROR = 31,
  121. IRQ_CAN_TX_WARN = 32,
  122. IRQ_CAN_RX_WARN = 33,
  123. IRQ_CAN_WAKEUP = 34,
  124. IRQ_I2S0_TX = 35,
  125. IRQ_I2S0_RX = 36,
  126. IRQ_UART0_LON = 44,
  127. IRQ_UART0_STATUS = 45,
  128. IRQ_UART0_ERROR = 46,
  129. IRQ_UART1_STATUS = 47,
  130. IRQ_UART1_ERROR = 48,
  131. IRQ_UART2_STATUS = 49,
  132. IRQ_UART2_ERROR = 50,
  133. IRQ_ADC0 = 57,
  134. IRQ_ADC1 = 58,
  135. IRQ_CMP0 = 59,
  136. IRQ_CMP1 = 60,
  137. IRQ_CMP2 = 61,
  138. IRQ_FTM0 = 62,
  139. IRQ_FTM1 = 63,
  140. IRQ_FTM2 = 64,
  141. IRQ_CMT = 65,
  142. IRQ_RTC_ALARM = 66,
  143. IRQ_RTC_SECOND = 67,
  144. IRQ_PIT_CH0 = 68,
  145. IRQ_PIT_CH1 = 69,
  146. IRQ_PIT_CH2 = 70,
  147. IRQ_PIT_CH3 = 71,
  148. IRQ_PDB = 72,
  149. IRQ_USBOTG = 73,
  150. IRQ_USBDCD = 74,
  151. IRQ_DAC0 = 81,
  152. IRQ_TSI = 83,
  153. IRQ_MCG = 84,
  154. IRQ_LPTMR = 85,
  155. IRQ_PORTA = 87,
  156. IRQ_PORTB = 88,
  157. IRQ_PORTC = 89,
  158. IRQ_PORTD = 90,
  159. IRQ_PORTE = 91,
  160. IRQ_SOFTWARE = 94
  161. };
  162. #define NVIC_NUM_INTERRUPTS 95
  163. #define DMA_NUM_CHANNELS 16
  164. #define KINETISK
  165. #define KINETISK_UART0
  166. #define KINETISK_UART0_FIFO
  167. #define KINETISK_UART1
  168. #define KINETISK_UART1_FIFO
  169. #define KINETISK_UART2
  170. #elif defined(__MKL26Z64__)
  171. enum IRQ_NUMBER_t {
  172. IRQ_DMA_CH0 = 0,
  173. IRQ_DMA_CH1 = 1,
  174. IRQ_DMA_CH2 = 2,
  175. IRQ_DMA_CH3 = 3,
  176. IRQ_FTFA = 5,
  177. IRQ_LOW_VOLTAGE = 6,
  178. IRQ_LLWU = 7,
  179. IRQ_I2C0 = 8,
  180. IRQ_I2C1 = 9,
  181. IRQ_SPI0 = 10,
  182. IRQ_SPI1 = 11,
  183. IRQ_UART0_STATUS = 12,
  184. IRQ_UART1_STATUS = 13,
  185. IRQ_UART2_STATUS = 14,
  186. IRQ_ADC0 = 15,
  187. IRQ_CMP0 = 16,
  188. IRQ_FTM0 = 17,
  189. IRQ_FTM1 = 18,
  190. IRQ_FTM2 = 19,
  191. IRQ_RTC_ALARM = 20,
  192. IRQ_RTC_SECOND = 21,
  193. IRQ_PIT = 22,
  194. IRQ_I2S0 = 23,
  195. IRQ_USBOTG = 24,
  196. IRQ_DAC0 = 25,
  197. IRQ_TSI = 26,
  198. IRQ_MCG = 27,
  199. IRQ_LPTMR = 28,
  200. IRQ_SOFTWARE = 29, // TODO: verify this works
  201. IRQ_PORTA = 30,
  202. IRQ_PORTCD = 31
  203. };
  204. #define NVIC_NUM_INTERRUPTS 32
  205. #define DMA_NUM_CHANNELS 4
  206. #define KINETISL
  207. #define KINETISL_UART0
  208. #define KINETISL_UART1
  209. #define KINETISL_UART2
  210. #endif // end of board-specific definitions
  211. #if (F_CPU == 168000000)
  212. #define F_PLL 168000000
  213. #define F_BUS 56000000
  214. #define F_MEM 33600000
  215. #elif (F_CPU == 144000000)
  216. #define F_PLL 144000000
  217. #define F_BUS 48000000
  218. #define F_MEM 28800000
  219. #elif (F_CPU == 120000000)
  220. #define F_PLL 120000000
  221. #define F_BUS 60000000
  222. #define F_MEM 24000000
  223. #elif (F_CPU == 96000000)
  224. #define F_PLL 96000000
  225. #define F_BUS 48000000
  226. #define F_MEM 24000000
  227. #elif (F_CPU == 72000000)
  228. #define F_PLL 72000000
  229. #define F_BUS 36000000
  230. #define F_MEM 24000000
  231. #elif (F_CPU == 48000000)
  232. #define F_PLL 96000000
  233. #if defined(KINETISK)
  234. #define F_BUS 48000000
  235. #elif defined(KINETISL)
  236. #define F_BUS 24000000
  237. #endif
  238. #define F_MEM 24000000
  239. #elif (F_CPU == 24000000)
  240. #define F_PLL 96000000
  241. #define F_BUS 24000000
  242. #define F_MEM 24000000
  243. #elif (F_CPU == 16000000)
  244. #define F_PLL 96000000
  245. #define F_BUS 16000000
  246. #define F_MEM 16000000
  247. #elif (F_CPU == 8000000)
  248. #define F_PLL 96000000
  249. #define F_BUS 8000000
  250. #define F_MEM 8000000
  251. #elif (F_CPU == 4000000)
  252. #define F_PLL 96000000
  253. #define F_BUS 4000000
  254. #define F_MEM 4000000
  255. #elif (F_CPU == 2000000)
  256. #define F_PLL 2000000
  257. #define F_BUS 2000000
  258. #define F_MEM 1000000
  259. #endif
  260. #ifndef NULL
  261. #define NULL ((void *)0)
  262. #endif
  263. // chapter 11: Port control and interrupts (PORT)
  264. #define PORTA_PCR0 (*(volatile uint32_t *)0x40049000) // Pin Control Register n
  265. #define PORT_PCR_ISF ((uint32_t)0x01000000) // Interrupt Status Flag
  266. #define PORT_PCR_IRQC(n) ((uint32_t)(((n) & 15) << 16)) // Interrupt Configuration
  267. #define PORT_PCR_IRQC_MASK ((uint32_t)0x000F0000)
  268. #define PORT_PCR_LK ((uint32_t)0x00008000) // Lock Register
  269. #define PORT_PCR_MUX(n) ((uint32_t)(((n) & 7) << 8)) // Pin Mux Control
  270. #define PORT_PCR_MUX_MASK ((uint32_t)0x00000700)
  271. #define PORT_PCR_DSE ((uint32_t)0x00000040) // Drive Strength Enable
  272. #define PORT_PCR_ODE ((uint32_t)0x00000020) // Open Drain Enable
  273. #define PORT_PCR_PFE ((uint32_t)0x00000010) // Passive Filter Enable
  274. #define PORT_PCR_SRE ((uint32_t)0x00000004) // Slew Rate Enable
  275. #define PORT_PCR_PE ((uint32_t)0x00000002) // Pull Enable
  276. #define PORT_PCR_PS ((uint32_t)0x00000001) // Pull Select
  277. #define PORTA_PCR1 (*(volatile uint32_t *)0x40049004) // Pin Control Register n
  278. #define PORTA_PCR2 (*(volatile uint32_t *)0x40049008) // Pin Control Register n
  279. #define PORTA_PCR3 (*(volatile uint32_t *)0x4004900C) // Pin Control Register n
  280. #define PORTA_PCR4 (*(volatile uint32_t *)0x40049010) // Pin Control Register n
  281. #define PORTA_PCR5 (*(volatile uint32_t *)0x40049014) // Pin Control Register n
  282. #define PORTA_PCR6 (*(volatile uint32_t *)0x40049018) // Pin Control Register n
  283. #define PORTA_PCR7 (*(volatile uint32_t *)0x4004901C) // Pin Control Register n
  284. #define PORTA_PCR8 (*(volatile uint32_t *)0x40049020) // Pin Control Register n
  285. #define PORTA_PCR9 (*(volatile uint32_t *)0x40049024) // Pin Control Register n
  286. #define PORTA_PCR10 (*(volatile uint32_t *)0x40049028) // Pin Control Register n
  287. #define PORTA_PCR11 (*(volatile uint32_t *)0x4004902C) // Pin Control Register n
  288. #define PORTA_PCR12 (*(volatile uint32_t *)0x40049030) // Pin Control Register n
  289. #define PORTA_PCR13 (*(volatile uint32_t *)0x40049034) // Pin Control Register n
  290. #define PORTA_PCR14 (*(volatile uint32_t *)0x40049038) // Pin Control Register n
  291. #define PORTA_PCR15 (*(volatile uint32_t *)0x4004903C) // Pin Control Register n
  292. #define PORTA_PCR16 (*(volatile uint32_t *)0x40049040) // Pin Control Register n
  293. #define PORTA_PCR17 (*(volatile uint32_t *)0x40049044) // Pin Control Register n
  294. #define PORTA_PCR18 (*(volatile uint32_t *)0x40049048) // Pin Control Register n
  295. #define PORTA_PCR19 (*(volatile uint32_t *)0x4004904C) // Pin Control Register n
  296. #define PORTA_PCR20 (*(volatile uint32_t *)0x40049050) // Pin Control Register n
  297. #define PORTA_PCR21 (*(volatile uint32_t *)0x40049054) // Pin Control Register n
  298. #define PORTA_PCR22 (*(volatile uint32_t *)0x40049058) // Pin Control Register n
  299. #define PORTA_PCR23 (*(volatile uint32_t *)0x4004905C) // Pin Control Register n
  300. #define PORTA_PCR24 (*(volatile uint32_t *)0x40049060) // Pin Control Register n
  301. #define PORTA_PCR25 (*(volatile uint32_t *)0x40049064) // Pin Control Register n
  302. #define PORTA_PCR26 (*(volatile uint32_t *)0x40049068) // Pin Control Register n
  303. #define PORTA_PCR27 (*(volatile uint32_t *)0x4004906C) // Pin Control Register n
  304. #define PORTA_PCR28 (*(volatile uint32_t *)0x40049070) // Pin Control Register n
  305. #define PORTA_PCR29 (*(volatile uint32_t *)0x40049074) // Pin Control Register n
  306. #define PORTA_PCR30 (*(volatile uint32_t *)0x40049078) // Pin Control Register n
  307. #define PORTA_PCR31 (*(volatile uint32_t *)0x4004907C) // Pin Control Register n
  308. #define PORTA_GPCLR (*(volatile uint32_t *)0x40049080) // Global Pin Control Low Register
  309. #define PORTA_GPCHR (*(volatile uint32_t *)0x40049084) // Global Pin Control High Register
  310. #define PORTA_ISFR (*(volatile uint32_t *)0x400490A0) // Interrupt Status Flag Register
  311. #define PORTB_PCR0 (*(volatile uint32_t *)0x4004A000) // Pin Control Register n
  312. #define PORTB_PCR1 (*(volatile uint32_t *)0x4004A004) // Pin Control Register n
  313. #define PORTB_PCR2 (*(volatile uint32_t *)0x4004A008) // Pin Control Register n
  314. #define PORTB_PCR3 (*(volatile uint32_t *)0x4004A00C) // Pin Control Register n
  315. #define PORTB_PCR4 (*(volatile uint32_t *)0x4004A010) // Pin Control Register n
  316. #define PORTB_PCR5 (*(volatile uint32_t *)0x4004A014) // Pin Control Register n
  317. #define PORTB_PCR6 (*(volatile uint32_t *)0x4004A018) // Pin Control Register n
  318. #define PORTB_PCR7 (*(volatile uint32_t *)0x4004A01C) // Pin Control Register n
  319. #define PORTB_PCR8 (*(volatile uint32_t *)0x4004A020) // Pin Control Register n
  320. #define PORTB_PCR9 (*(volatile uint32_t *)0x4004A024) // Pin Control Register n
  321. #define PORTB_PCR10 (*(volatile uint32_t *)0x4004A028) // Pin Control Register n
  322. #define PORTB_PCR11 (*(volatile uint32_t *)0x4004A02C) // Pin Control Register n
  323. #define PORTB_PCR12 (*(volatile uint32_t *)0x4004A030) // Pin Control Register n
  324. #define PORTB_PCR13 (*(volatile uint32_t *)0x4004A034) // Pin Control Register n
  325. #define PORTB_PCR14 (*(volatile uint32_t *)0x4004A038) // Pin Control Register n
  326. #define PORTB_PCR15 (*(volatile uint32_t *)0x4004A03C) // Pin Control Register n
  327. #define PORTB_PCR16 (*(volatile uint32_t *)0x4004A040) // Pin Control Register n
  328. #define PORTB_PCR17 (*(volatile uint32_t *)0x4004A044) // Pin Control Register n
  329. #define PORTB_PCR18 (*(volatile uint32_t *)0x4004A048) // Pin Control Register n
  330. #define PORTB_PCR19 (*(volatile uint32_t *)0x4004A04C) // Pin Control Register n
  331. #define PORTB_PCR20 (*(volatile uint32_t *)0x4004A050) // Pin Control Register n
  332. #define PORTB_PCR21 (*(volatile uint32_t *)0x4004A054) // Pin Control Register n
  333. #define PORTB_PCR22 (*(volatile uint32_t *)0x4004A058) // Pin Control Register n
  334. #define PORTB_PCR23 (*(volatile uint32_t *)0x4004A05C) // Pin Control Register n
  335. #define PORTB_PCR24 (*(volatile uint32_t *)0x4004A060) // Pin Control Register n
  336. #define PORTB_PCR25 (*(volatile uint32_t *)0x4004A064) // Pin Control Register n
  337. #define PORTB_PCR26 (*(volatile uint32_t *)0x4004A068) // Pin Control Register n
  338. #define PORTB_PCR27 (*(volatile uint32_t *)0x4004A06C) // Pin Control Register n
  339. #define PORTB_PCR28 (*(volatile uint32_t *)0x4004A070) // Pin Control Register n
  340. #define PORTB_PCR29 (*(volatile uint32_t *)0x4004A074) // Pin Control Register n
  341. #define PORTB_PCR30 (*(volatile uint32_t *)0x4004A078) // Pin Control Register n
  342. #define PORTB_PCR31 (*(volatile uint32_t *)0x4004A07C) // Pin Control Register n
  343. #define PORTB_GPCLR (*(volatile uint32_t *)0x4004A080) // Global Pin Control Low Register
  344. #define PORTB_GPCHR (*(volatile uint32_t *)0x4004A084) // Global Pin Control High Register
  345. #define PORTB_ISFR (*(volatile uint32_t *)0x4004A0A0) // Interrupt Status Flag Register
  346. #define PORTC_PCR0 (*(volatile uint32_t *)0x4004B000) // Pin Control Register n
  347. #define PORTC_PCR1 (*(volatile uint32_t *)0x4004B004) // Pin Control Register n
  348. #define PORTC_PCR2 (*(volatile uint32_t *)0x4004B008) // Pin Control Register n
  349. #define PORTC_PCR3 (*(volatile uint32_t *)0x4004B00C) // Pin Control Register n
  350. #define PORTC_PCR4 (*(volatile uint32_t *)0x4004B010) // Pin Control Register n
  351. #define PORTC_PCR5 (*(volatile uint32_t *)0x4004B014) // Pin Control Register n
  352. #define PORTC_PCR6 (*(volatile uint32_t *)0x4004B018) // Pin Control Register n
  353. #define PORTC_PCR7 (*(volatile uint32_t *)0x4004B01C) // Pin Control Register n
  354. #define PORTC_PCR8 (*(volatile uint32_t *)0x4004B020) // Pin Control Register n
  355. #define PORTC_PCR9 (*(volatile uint32_t *)0x4004B024) // Pin Control Register n
  356. #define PORTC_PCR10 (*(volatile uint32_t *)0x4004B028) // Pin Control Register n
  357. #define PORTC_PCR11 (*(volatile uint32_t *)0x4004B02C) // Pin Control Register n
  358. #define PORTC_PCR12 (*(volatile uint32_t *)0x4004B030) // Pin Control Register n
  359. #define PORTC_PCR13 (*(volatile uint32_t *)0x4004B034) // Pin Control Register n
  360. #define PORTC_PCR14 (*(volatile uint32_t *)0x4004B038) // Pin Control Register n
  361. #define PORTC_PCR15 (*(volatile uint32_t *)0x4004B03C) // Pin Control Register n
  362. #define PORTC_PCR16 (*(volatile uint32_t *)0x4004B040) // Pin Control Register n
  363. #define PORTC_PCR17 (*(volatile uint32_t *)0x4004B044) // Pin Control Register n
  364. #define PORTC_PCR18 (*(volatile uint32_t *)0x4004B048) // Pin Control Register n
  365. #define PORTC_PCR19 (*(volatile uint32_t *)0x4004B04C) // Pin Control Register n
  366. #define PORTC_PCR20 (*(volatile uint32_t *)0x4004B050) // Pin Control Register n
  367. #define PORTC_PCR21 (*(volatile uint32_t *)0x4004B054) // Pin Control Register n
  368. #define PORTC_PCR22 (*(volatile uint32_t *)0x4004B058) // Pin Control Register n
  369. #define PORTC_PCR23 (*(volatile uint32_t *)0x4004B05C) // Pin Control Register n
  370. #define PORTC_PCR24 (*(volatile uint32_t *)0x4004B060) // Pin Control Register n
  371. #define PORTC_PCR25 (*(volatile uint32_t *)0x4004B064) // Pin Control Register n
  372. #define PORTC_PCR26 (*(volatile uint32_t *)0x4004B068) // Pin Control Register n
  373. #define PORTC_PCR27 (*(volatile uint32_t *)0x4004B06C) // Pin Control Register n
  374. #define PORTC_PCR28 (*(volatile uint32_t *)0x4004B070) // Pin Control Register n
  375. #define PORTC_PCR29 (*(volatile uint32_t *)0x4004B074) // Pin Control Register n
  376. #define PORTC_PCR30 (*(volatile uint32_t *)0x4004B078) // Pin Control Register n
  377. #define PORTC_PCR31 (*(volatile uint32_t *)0x4004B07C) // Pin Control Register n
  378. #define PORTC_GPCLR (*(volatile uint32_t *)0x4004B080) // Global Pin Control Low Register
  379. #define PORTC_GPCHR (*(volatile uint32_t *)0x4004B084) // Global Pin Control High Register
  380. #define PORTC_ISFR (*(volatile uint32_t *)0x4004B0A0) // Interrupt Status Flag Register
  381. #define PORTD_PCR0 (*(volatile uint32_t *)0x4004C000) // Pin Control Register n
  382. #define PORTD_PCR1 (*(volatile uint32_t *)0x4004C004) // Pin Control Register n
  383. #define PORTD_PCR2 (*(volatile uint32_t *)0x4004C008) // Pin Control Register n
  384. #define PORTD_PCR3 (*(volatile uint32_t *)0x4004C00C) // Pin Control Register n
  385. #define PORTD_PCR4 (*(volatile uint32_t *)0x4004C010) // Pin Control Register n
  386. #define PORTD_PCR5 (*(volatile uint32_t *)0x4004C014) // Pin Control Register n
  387. #define PORTD_PCR6 (*(volatile uint32_t *)0x4004C018) // Pin Control Register n
  388. #define PORTD_PCR7 (*(volatile uint32_t *)0x4004C01C) // Pin Control Register n
  389. #define PORTD_PCR8 (*(volatile uint32_t *)0x4004C020) // Pin Control Register n
  390. #define PORTD_PCR9 (*(volatile uint32_t *)0x4004C024) // Pin Control Register n
  391. #define PORTD_PCR10 (*(volatile uint32_t *)0x4004C028) // Pin Control Register n
  392. #define PORTD_PCR11 (*(volatile uint32_t *)0x4004C02C) // Pin Control Register n
  393. #define PORTD_PCR12 (*(volatile uint32_t *)0x4004C030) // Pin Control Register n
  394. #define PORTD_PCR13 (*(volatile uint32_t *)0x4004C034) // Pin Control Register n
  395. #define PORTD_PCR14 (*(volatile uint32_t *)0x4004C038) // Pin Control Register n
  396. #define PORTD_PCR15 (*(volatile uint32_t *)0x4004C03C) // Pin Control Register n
  397. #define PORTD_PCR16 (*(volatile uint32_t *)0x4004C040) // Pin Control Register n
  398. #define PORTD_PCR17 (*(volatile uint32_t *)0x4004C044) // Pin Control Register n
  399. #define PORTD_PCR18 (*(volatile uint32_t *)0x4004C048) // Pin Control Register n
  400. #define PORTD_PCR19 (*(volatile uint32_t *)0x4004C04C) // Pin Control Register n
  401. #define PORTD_PCR20 (*(volatile uint32_t *)0x4004C050) // Pin Control Register n
  402. #define PORTD_PCR21 (*(volatile uint32_t *)0x4004C054) // Pin Control Register n
  403. #define PORTD_PCR22 (*(volatile uint32_t *)0x4004C058) // Pin Control Register n
  404. #define PORTD_PCR23 (*(volatile uint32_t *)0x4004C05C) // Pin Control Register n
  405. #define PORTD_PCR24 (*(volatile uint32_t *)0x4004C060) // Pin Control Register n
  406. #define PORTD_PCR25 (*(volatile uint32_t *)0x4004C064) // Pin Control Register n
  407. #define PORTD_PCR26 (*(volatile uint32_t *)0x4004C068) // Pin Control Register n
  408. #define PORTD_PCR27 (*(volatile uint32_t *)0x4004C06C) // Pin Control Register n
  409. #define PORTD_PCR28 (*(volatile uint32_t *)0x4004C070) // Pin Control Register n
  410. #define PORTD_PCR29 (*(volatile uint32_t *)0x4004C074) // Pin Control Register n
  411. #define PORTD_PCR30 (*(volatile uint32_t *)0x4004C078) // Pin Control Register n
  412. #define PORTD_PCR31 (*(volatile uint32_t *)0x4004C07C) // Pin Control Register n
  413. #define PORTD_GPCLR (*(volatile uint32_t *)0x4004C080) // Global Pin Control Low Register
  414. #define PORTD_GPCHR (*(volatile uint32_t *)0x4004C084) // Global Pin Control High Register
  415. #define PORTD_ISFR (*(volatile uint32_t *)0x4004C0A0) // Interrupt Status Flag Register
  416. #define PORTE_PCR0 (*(volatile uint32_t *)0x4004D000) // Pin Control Register n
  417. #define PORTE_PCR1 (*(volatile uint32_t *)0x4004D004) // Pin Control Register n
  418. #define PORTE_PCR2 (*(volatile uint32_t *)0x4004D008) // Pin Control Register n
  419. #define PORTE_PCR3 (*(volatile uint32_t *)0x4004D00C) // Pin Control Register n
  420. #define PORTE_PCR4 (*(volatile uint32_t *)0x4004D010) // Pin Control Register n
  421. #define PORTE_PCR5 (*(volatile uint32_t *)0x4004D014) // Pin Control Register n
  422. #define PORTE_PCR6 (*(volatile uint32_t *)0x4004D018) // Pin Control Register n
  423. #define PORTE_PCR7 (*(volatile uint32_t *)0x4004D01C) // Pin Control Register n
  424. #define PORTE_PCR8 (*(volatile uint32_t *)0x4004D020) // Pin Control Register n
  425. #define PORTE_PCR9 (*(volatile uint32_t *)0x4004D024) // Pin Control Register n
  426. #define PORTE_PCR10 (*(volatile uint32_t *)0x4004D028) // Pin Control Register n
  427. #define PORTE_PCR11 (*(volatile uint32_t *)0x4004D02C) // Pin Control Register n
  428. #define PORTE_PCR12 (*(volatile uint32_t *)0x4004D030) // Pin Control Register n
  429. #define PORTE_PCR13 (*(volatile uint32_t *)0x4004D034) // Pin Control Register n
  430. #define PORTE_PCR14 (*(volatile uint32_t *)0x4004D038) // Pin Control Register n
  431. #define PORTE_PCR15 (*(volatile uint32_t *)0x4004D03C) // Pin Control Register n
  432. #define PORTE_PCR16 (*(volatile uint32_t *)0x4004D040) // Pin Control Register n
  433. #define PORTE_PCR17 (*(volatile uint32_t *)0x4004D044) // Pin Control Register n
  434. #define PORTE_PCR18 (*(volatile uint32_t *)0x4004D048) // Pin Control Register n
  435. #define PORTE_PCR19 (*(volatile uint32_t *)0x4004D04C) // Pin Control Register n
  436. #define PORTE_PCR20 (*(volatile uint32_t *)0x4004D050) // Pin Control Register n
  437. #define PORTE_PCR21 (*(volatile uint32_t *)0x4004D054) // Pin Control Register n
  438. #define PORTE_PCR22 (*(volatile uint32_t *)0x4004D058) // Pin Control Register n
  439. #define PORTE_PCR23 (*(volatile uint32_t *)0x4004D05C) // Pin Control Register n
  440. #define PORTE_PCR24 (*(volatile uint32_t *)0x4004D060) // Pin Control Register n
  441. #define PORTE_PCR25 (*(volatile uint32_t *)0x4004D064) // Pin Control Register n
  442. #define PORTE_PCR26 (*(volatile uint32_t *)0x4004D068) // Pin Control Register n
  443. #define PORTE_PCR27 (*(volatile uint32_t *)0x4004D06C) // Pin Control Register n
  444. #define PORTE_PCR28 (*(volatile uint32_t *)0x4004D070) // Pin Control Register n
  445. #define PORTE_PCR29 (*(volatile uint32_t *)0x4004D074) // Pin Control Register n
  446. #define PORTE_PCR30 (*(volatile uint32_t *)0x4004D078) // Pin Control Register n
  447. #define PORTE_PCR31 (*(volatile uint32_t *)0x4004D07C) // Pin Control Register n
  448. #define PORTE_GPCLR (*(volatile uint32_t *)0x4004D080) // Global Pin Control Low Register
  449. #define PORTE_GPCHR (*(volatile uint32_t *)0x4004D084) // Global Pin Control High Register
  450. #define PORTE_ISFR (*(volatile uint32_t *)0x4004D0A0) // Interrupt Status Flag Register
  451. // Chapter 12: System Integration Module (SIM)
  452. #define SIM_SOPT1 (*(volatile uint32_t *)0x40047000) // System Options Register 1
  453. #define SIM_SOPT1CFG (*(volatile uint32_t *)0x40047004) // SOPT1 Configuration Register
  454. #define SIM_SOPT2 (*(volatile uint32_t *)0x40048004) // System Options Register 2
  455. #define SIM_SOPT2_UART0SRC(n) (uint32_t)(((n) & 3) << 26) // UART0 Clock Source, 0=off, 1=FLL/PLL, 2=OSCERCLK, 3=MCGIRCLK
  456. #define SIM_SOPT2_TPMSRC(n) (uint32_t)(((n) & 3) << 24) // TPM Clock Source, 0=off, 1=FLL/PLL, 2=OSCERCLK, 3=MCGIRCLK
  457. #define SIM_SOPT2_USBSRC ((uint32_t)0x00040000) // 0=USB_CLKIN, 1=FFL/PLL
  458. #define SIM_SOPT2_PLLFLLSEL ((uint32_t)0x00010000) // 0=FLL, 1=PLL
  459. #define SIM_SOPT2_TRACECLKSEL ((uint32_t)0x00001000) // 0=MCGOUTCLK, 1=CPU
  460. #define SIM_SOPT2_PTD7PAD ((uint32_t)0x00000800) // 0=normal, 1=double drive PTD7
  461. #define SIM_SOPT2_CLKOUTSEL(n) ((uint32_t)(((n) & 7) << 5)) // Selects the clock to output on the CLKOUT pin.
  462. #define SIM_SOPT2_RTCCLKOUTSEL ((uint32_t)0x00000010) // RTC clock out select
  463. #define SIM_SOPT4 (*(volatile uint32_t *)0x4004800C) // System Options Register 4
  464. #define SIM_SOPT5 (*(volatile uint32_t *)0x40048010) // System Options Register 5
  465. #define SIM_SOPT7 (*(volatile uint32_t *)0x40048018) // System Options Register 7
  466. #define SIM_SDID (*(const uint32_t *)0x40048024) // System Device Identification Register
  467. #define SIM_SCGC2 (*(volatile uint32_t *)0x4004802C) // System Clock Gating Control Register 2
  468. #define SIM_SCGC2_DAC0 ((uint32_t)0x00001000) // DAC0 Clock Gate Control
  469. #define SIM_SCGC3 (*(volatile uint32_t *)0x40048030) // System Clock Gating Control Register 3
  470. #define SIM_SCGC3_ADC1 ((uint32_t)0x08000000) // ADC1 Clock Gate Control
  471. #define SIM_SCGC3_FTM2 ((uint32_t)0x01000000) // FTM2 Clock Gate Control
  472. #define SIM_SCGC4 (*(volatile uint32_t *)0x40048034) // System Clock Gating Control Register 4
  473. #define SIM_SCGC4_VREF ((uint32_t)0x00100000) // VREF Clock Gate Control
  474. #define SIM_SCGC4_CMP ((uint32_t)0x00080000) // Comparator Clock Gate Control
  475. #define SIM_SCGC4_USBOTG ((uint32_t)0x00040000) // USB Clock Gate Control
  476. #define SIM_SCGC4_UART2 ((uint32_t)0x00001000) // UART2 Clock Gate Control
  477. #define SIM_SCGC4_UART1 ((uint32_t)0x00000800) // UART1 Clock Gate Control
  478. #define SIM_SCGC4_UART0 ((uint32_t)0x00000400) // UART0 Clock Gate Control
  479. #define SIM_SCGC4_I2C1 ((uint32_t)0x00000080) // I2C1 Clock Gate Control
  480. #define SIM_SCGC4_I2C0 ((uint32_t)0x00000040) // I2C0 Clock Gate Control
  481. #define SIM_SCGC4_CMT ((uint32_t)0x00000004) // CMT Clock Gate Control
  482. #define SIM_SCGC4_EWM ((uint32_t)0x00000002) // EWM Clock Gate Control
  483. #ifdef KINETISL
  484. #define SIM_SCGC4_SPI1 ((uint32_t)0x00800000) //
  485. #define SIM_SCGC4_SPI0 ((uint32_t)0x00400000) //
  486. #endif
  487. #define SIM_SCGC5 (*(volatile uint32_t *)0x40048038) // System Clock Gating Control Register 5
  488. #define SIM_SCGC5_PORTE ((uint32_t)0x00002000) // Port E Clock Gate Control
  489. #define SIM_SCGC5_PORTD ((uint32_t)0x00001000) // Port D Clock Gate Control
  490. #define SIM_SCGC5_PORTC ((uint32_t)0x00000800) // Port C Clock Gate Control
  491. #define SIM_SCGC5_PORTB ((uint32_t)0x00000400) // Port B Clock Gate Control
  492. #define SIM_SCGC5_PORTA ((uint32_t)0x00000200) // Port A Clock Gate Control
  493. #define SIM_SCGC5_TSI ((uint32_t)0x00000020) // Touch Sense Input TSI Clock Gate Control
  494. #define SIM_SCGC5_LPTIMER ((uint32_t)0x00000001) // Low Power Timer Access Control
  495. #define SIM_SCGC6 (*(volatile uint32_t *)0x4004803C) // System Clock Gating Control Register 6
  496. #define SIM_SCGC6_DAC0 ((uint32_t)0x80000000) // DAC on Kinetis-L
  497. #define SIM_SCGC6_RTC ((uint32_t)0x20000000) // RTC Access
  498. #define SIM_SCGC6_ADC0 ((uint32_t)0x08000000) // ADC0 Clock Gate Control
  499. #define SIM_SCGC6_FTM1 ((uint32_t)0x02000000) // FTM1 Clock Gate Control
  500. #define SIM_SCGC6_FTM0 ((uint32_t)0x01000000) // FTM0 Clock Gate Control
  501. #define SIM_SCGC6_TPM2 ((uint32_t)0x04000000) // FTM1 Clock Gate Control
  502. #define SIM_SCGC6_TPM1 ((uint32_t)0x02000000) // FTM1 Clock Gate Control
  503. #define SIM_SCGC6_TPM0 ((uint32_t)0x01000000) // FTM0 Clock Gate Control
  504. #define SIM_SCGC6_PIT ((uint32_t)0x00800000) // PIT Clock Gate Control
  505. #define SIM_SCGC6_PDB ((uint32_t)0x00400000) // PDB Clock Gate Control
  506. #define SIM_SCGC6_USBDCD ((uint32_t)0x00200000) // USB DCD Clock Gate Control
  507. #define SIM_SCGC6_CRC ((uint32_t)0x00040000) // CRC Clock Gate Control
  508. #define SIM_SCGC6_I2S ((uint32_t)0x00008000) // I2S Clock Gate Control
  509. #ifdef KINETISK
  510. #define SIM_SCGC6_SPI1 ((uint32_t)0x00002000) // SPI1 Clock Gate Control
  511. #define SIM_SCGC6_SPI0 ((uint32_t)0x00001000) // SPI0 Clock Gate Control
  512. #endif
  513. #define SIM_SCGC6_FLEXCAN0 ((uint32_t)0x00000010) // FlexCAN0 Clock Gate Control
  514. #define SIM_SCGC6_DMAMUX ((uint32_t)0x00000002) // DMA Mux Clock Gate Control
  515. #define SIM_SCGC6_FTFL ((uint32_t)0x00000001) // Flash Memory Clock Gate Control
  516. #define SIM_SCGC7 (*(volatile uint32_t *)0x40048040) // System Clock Gating Control Register 7
  517. #if defined(KINETISK)
  518. #define SIM_SCGC7_DMA ((uint32_t)0x00000002) // DMA Clock Gate Control
  519. #elif defined(KINETISL)
  520. #define SIM_SCGC7_DMA ((uint32_t)0x00000100) // DMA Clock Gate Control
  521. #endif
  522. #define SIM_CLKDIV1 (*(volatile uint32_t *)0x40048044) // System Clock Divider Register 1
  523. #define SIM_CLKDIV1_OUTDIV1(n) ((uint32_t)(((n) & 0x0F) << 28)) // divide value for the core/system clock
  524. #define SIM_CLKDIV1_OUTDIV2(n) ((uint32_t)(((n) & 0x0F) << 24)) // divide value for the peripheral clock
  525. #define SIM_CLKDIV1_OUTDIV4(n) ((uint32_t)(((n) & 0x0F) << 16)) // divide value for the flash clock
  526. #define SIM_CLKDIV2 (*(volatile uint32_t *)0x40048048) // System Clock Divider Register 2
  527. #define SIM_CLKDIV2_USBDIV(n) ((uint32_t)(((n) & 0x07) << 1))
  528. #define SIM_CLKDIV2_USBFRAC ((uint32_t)0x01)
  529. #define SIM_FCFG1 (*(const uint32_t *)0x4004804C) // Flash Configuration Register 1
  530. #define SIM_FCFG2 (*(const uint32_t *)0x40048050) // Flash Configuration Register 2
  531. #define SIM_UIDH (*(const uint32_t *)0x40048054) // Unique Identification Register High
  532. #define SIM_UIDMH (*(const uint32_t *)0x40048058) // Unique Identification Register Mid-High
  533. #define SIM_UIDML (*(const uint32_t *)0x4004805C) // Unique Identification Register Mid Low
  534. #define SIM_UIDL (*(const uint32_t *)0x40048060) // Unique Identification Register Low
  535. #define SIM_COPC (*(volatile uint32_t *)0x40048100) // COP Control Register (SIM_COPC)
  536. #define SIM_SRVCOP (*(volatile uint32_t *)0x40048104) // Service COP Register (SIM_SRVCOP)
  537. // Chapter 13: Reset Control Module (RCM)
  538. #define RCM_SRS0 (*(volatile uint8_t *)0x4007F000) // System Reset Status Register 0
  539. #define RCM_SRS1 (*(volatile uint8_t *)0x4007F001) // System Reset Status Register 1
  540. #define RCM_RPFC (*(volatile uint8_t *)0x4007F004) // Reset Pin Filter Control Register
  541. #define RCM_RPFW (*(volatile uint8_t *)0x4007F005) // Reset Pin Filter Width Register
  542. #define RCM_MR (*(volatile uint8_t *)0x4007F007) // Mode Register
  543. // Chapter 14: System Mode Controller
  544. #define SMC_PMPROT (*(volatile uint8_t *)0x4007E000) // Power Mode Protection Register
  545. #define SMC_PMPROT_AVLP ((uint8_t)0x20) // Allow very low power modes
  546. #define SMC_PMPROT_ALLS ((uint8_t)0x08) // Allow low leakage stop mode
  547. #define SMC_PMPROT_AVLLS ((uint8_t)0x02) // Allow very low leakage stop mode
  548. #define SMC_PMCTRL (*(volatile uint8_t *)0x4007E001) // Power Mode Control Register
  549. #define SMC_PMCTRL_LPWUI ((uint8_t)0x80) // Low Power Wake Up on Interrupt
  550. #define SMC_PMCTRL_RUNM(n) ((uint8_t)(((n) & 0x03) << 5)) // Run Mode Control
  551. #define SMC_PMCTRL_STOPA ((uint8_t)0x08) // Stop Aborted
  552. #define SMC_PMCTRL_STOPM(n) ((uint8_t)((n) & 0x07)) // Stop Mode Control
  553. #define SMC_VLLSCTRL (*(volatile uint8_t *)0x4007E002) // VLLS Control Register
  554. #define SMC_VLLSCTRL_PORPO ((uint8_t)0x20) // POR Power Option
  555. #define SMC_VLLSCTRL_VLLSM(n) ((uint8_t)((n) & 0x07)) // VLLS Mode Control
  556. #define SMC_PMSTAT (*(volatile uint8_t *)0x4007E003) // Power Mode Status Register
  557. #define SMC_PMSTAT_RUN ((uint8_t)0x01) // Current power mode is RUN
  558. #define SMC_PMSTAT_STOP ((uint8_t)0x02) // Current power mode is STOP
  559. #define SMC_PMSTAT_VLPR ((uint8_t)0x04) // Current power mode is VLPR
  560. #define SMC_PMSTAT_VLPW ((uint8_t)0x08) // Current power mode is VLPW
  561. #define SMC_PMSTAT_VLPS ((uint8_t)0x10) // Current power mode is VLPS
  562. #define SMC_PMSTAT_LLS ((uint8_t)0x20) // Current power mode is LLS
  563. #define SMC_PMSTAT_VLLS ((uint8_t)0x40) // Current power mode is VLLS
  564. // Chapter 15: Power Management Controller
  565. #define PMC_LVDSC1 (*(volatile uint8_t *)0x4007D000) // Low Voltage Detect Status And Control 1 register
  566. #define PMC_LVDSC1_LVDF ((uint8_t)0x80) // Low-Voltage Detect Flag
  567. #define PMC_LVDSC1_LVDACK ((uint8_t)0x40) // Low-Voltage Detect Acknowledge
  568. #define PMC_LVDSC1_LVDIE ((uint8_t)0x20) // Low-Voltage Detect Interrupt Enable
  569. #define PMC_LVDSC1_LVDRE ((uint8_t)0x10) // Low-Voltage Detect Reset Enable
  570. #define PMC_LVDSC1_LVDV(n) ((uint8_t)((n) & 0x03)) // Low-Voltage Detect Voltage Select
  571. #define PMC_LVDSC2 (*(volatile uint8_t *)0x4007D001) // Low Voltage Detect Status And Control 2 register
  572. #define PMC_LVDSC2_LVWF ((uint8_t)0x80) // Low-Voltage Warning Flag
  573. #define PMC_LVDSC2_LVWACK ((uint8_t)0x40) // Low-Voltage Warning Acknowledge
  574. #define PMC_LVDSC2_LVWIE ((uint8_t)0x20) // Low-Voltage Warning Interrupt Enable
  575. #define PMC_LVDSC2_LVWV(n) ((uint8_t)((n) & 0x03)) // Low-Voltage Warning Voltage Select
  576. #define PMC_REGSC (*(volatile uint8_t *)0x4007D002) // Regulator Status And Control register
  577. #define PMC_REGSC_BGEN ((uint8_t)0x10) // Bandgap Enable In VLPx Operation
  578. #define PMC_REGSC_ACKISO ((uint8_t)0x08) // Acknowledge Isolation
  579. #define PMC_REGSC_REGONS ((uint8_t)0x04) // Regulator In Run Regulation Status
  580. #define PMC_REGSC_BGBE ((uint8_t)0x01) // Bandgap Buffer Enable
  581. // Chapter 16: Low-Leakage Wakeup Unit (LLWU)
  582. #define LLWU_PE1 (*(volatile uint8_t *)0x4007C000) // LLWU Pin Enable 1 register
  583. #define LLWU_PE2 (*(volatile uint8_t *)0x4007C001) // LLWU Pin Enable 2 register
  584. #define LLWU_PE3 (*(volatile uint8_t *)0x4007C002) // LLWU Pin Enable 3 register
  585. #define LLWU_PE4 (*(volatile uint8_t *)0x4007C003) // LLWU Pin Enable 4 register
  586. #define LLWU_ME (*(volatile uint8_t *)0x4007C004) // LLWU Module Enable register
  587. #define LLWU_F1 (*(volatile uint8_t *)0x4007C005) // LLWU Flag 1 register
  588. #define LLWU_F2 (*(volatile uint8_t *)0x4007C006) // LLWU Flag 2 register
  589. #define LLWU_F3 (*(volatile uint8_t *)0x4007C007) // LLWU Flag 3 register
  590. #define LLWU_FILT1 (*(volatile uint8_t *)0x4007C008) // LLWU Pin Filter 1 register
  591. #define LLWU_FILT2 (*(volatile uint8_t *)0x4007C009) // LLWU Pin Filter 2 register
  592. #define LLWU_RST (*(volatile uint8_t *)0x4007C00A) // LLWU Reset Enable register
  593. // Chapter 17: Miscellaneous Control Module (MCM)
  594. #if defined(KINETISK)
  595. #define MCM_PLASC (*(volatile uint16_t *)0xE0080008) // Crossbar Switch (AXBS) Slave Configuration
  596. #define MCM_PLAMC (*(volatile uint16_t *)0xE008000A) // Crossbar Switch (AXBS) Master Configuration
  597. #define MCM_PLACR (*(volatile uint32_t *)0xE008000C) // Crossbar Switch (AXBS) Control Register (MK20DX128)
  598. #define MCM_PLACR_ARG ((uint32_t)0x00000200) // Arbitration select, 0=fixed, 1=round-robin
  599. #define MCM_CR (*(volatile uint32_t *)0xE008000C) // RAM arbitration control register (MK20DX256)
  600. #define MCM_CR_SRAMLWP ((uint32_t)0x40000000) // SRAM_L write protect
  601. #define MCM_CR_SRAMLAP(n) ((uint32_t)(((n) & 0x03) << 28)) // SRAM_L priority, 0=RR, 1=favor DMA, 2=CPU, 3=DMA
  602. #define MCM_CR_SRAMUWP ((uint32_t)0x04000000) // SRAM_U write protect
  603. #define MCM_CR_SRAMUAP(n) ((uint32_t)(((n) & 0x03) << 24)) // SRAM_U priority, 0=RR, 1=favor DMA, 2=CPU, 3=DMA
  604. #elif defined(KINETISL)
  605. #define MCM_PLASC (*(volatile uint16_t *)0xF0003008) // Crossbar Switch (AXBS) Slave Configuration
  606. #define MCM_PLAMC (*(volatile uint16_t *)0xF000300A) // Crossbar Switch (AXBS) Master Configuration
  607. #define MCM_PLACR (*(volatile uint32_t *)0xF000300C) // Platform Control Register
  608. #define MCM_PLACR_ESFC ((uint32_t)0x00010000) // Enable Stalling Flash Controller
  609. #define MCM_PLACR_DFCS ((uint32_t)0x00008000) // Disable Flash Controller Speculation
  610. #define MCM_PLACR_EFDS ((uint32_t)0x00004000) // Enable Flash Data Speculation
  611. #define MCM_PLACR_DFCC ((uint32_t)0x00002000) // Disable Flash Controller Cache
  612. #define MCM_PLACR_DFCIC ((uint32_t)0x00001000) // Disable Flash Controller Instruction Caching
  613. #define MCM_PLACR_DFCDA ((uint32_t)0x00000800) // Disable Flash Controller Data Caching
  614. #define MCM_PLACR_CFCC ((uint32_t)0x00000400) // Clear Flash Controller Cache
  615. #define MCM_PLACR_ARB ((uint32_t)0x00000200) // Arbitration select
  616. #define MCM_CPO (*(volatile uint32_t *)0xF0003040) // Compute Operation Control Register
  617. #endif
  618. // Crossbar Switch (AXBS) - only programmable on MK20DX256
  619. #define AXBS_PRS0 (*(volatile uint32_t *)0x40004000) // Priority Registers Slave 0
  620. #define AXBS_CRS0 (*(volatile uint32_t *)0x40004010) // Control Register 0
  621. #define AXBS_PRS1 (*(volatile uint32_t *)0x40004100) // Priority Registers Slave 1
  622. #define AXBS_CRS1 (*(volatile uint32_t *)0x40004110) // Control Register 1
  623. #define AXBS_PRS2 (*(volatile uint32_t *)0x40004200) // Priority Registers Slave 2
  624. #define AXBS_CRS2 (*(volatile uint32_t *)0x40004210) // Control Register 2
  625. #define AXBS_PRS3 (*(volatile uint32_t *)0x40004300) // Priority Registers Slave 3
  626. #define AXBS_CRS3 (*(volatile uint32_t *)0x40004310) // Control Register 3
  627. #define AXBS_PRS4 (*(volatile uint32_t *)0x40004400) // Priority Registers Slave 4
  628. #define AXBS_CRS4 (*(volatile uint32_t *)0x40004410) // Control Register 4
  629. #define AXBS_PRS5 (*(volatile uint32_t *)0x40004500) // Priority Registers Slave 5
  630. #define AXBS_CRS5 (*(volatile uint32_t *)0x40004510) // Control Register 5
  631. #define AXBS_PRS6 (*(volatile uint32_t *)0x40004600) // Priority Registers Slave 6
  632. #define AXBS_CRS6 (*(volatile uint32_t *)0x40004610) // Control Register 6
  633. #define AXBS_PRS7 (*(volatile uint32_t *)0x40004700) // Priority Registers Slave 7
  634. #define AXBS_CRS7 (*(volatile uint32_t *)0x40004710) // Control Register 7
  635. #define AXBS_MGPCR0 (*(volatile uint32_t *)0x40004800) // Master 0 General Purpose Control Register
  636. #define AXBS_MGPCR1 (*(volatile uint32_t *)0x40004900) // Master 1 General Purpose Control Register
  637. #define AXBS_MGPCR2 (*(volatile uint32_t *)0x40004A00) // Master 2 General Purpose Control Register
  638. #define AXBS_MGPCR3 (*(volatile uint32_t *)0x40004B00) // Master 3 General Purpose Control Register
  639. #define AXBS_MGPCR4 (*(volatile uint32_t *)0x40004C00) // Master 4 General Purpose Control Register
  640. #define AXBS_MGPCR5 (*(volatile uint32_t *)0x40004D00) // Master 5 General Purpose Control Register
  641. #define AXBS_MGPCR6 (*(volatile uint32_t *)0x40004E00) // Master 6 General Purpose Control Register
  642. #define AXBS_MGPCR7 (*(volatile uint32_t *)0x40004F00) // Master 7 General Purpose Control Register
  643. #define AXBS_CRS_READONLY ((uint32_t)0x80000000)
  644. #define AXBS_CRS_HALTLOWPRIORITY ((uint32_t)0x40000000)
  645. #define AXBS_CRS_ARB_FIXED ((uint32_t)0x00000000)
  646. #define AXBS_CRS_ARB_ROUNDROBIN ((uint32_t)0x00010000)
  647. #define AXBS_CRS_PARK_FIXED ((uint32_t)0x00000000)
  648. #define AXBS_CRS_PARK_PREVIOUS ((uint32_t)0x00000010)
  649. #define AXBS_CRS_PARK_NONE ((uint32_t)0x00000020)
  650. #define AXBS_CRS_PARK(n) ((uint32_t)(((n) & 7) << 0))
  651. // Chapter 20: Direct Memory Access Multiplexer (DMAMUX)
  652. #define DMAMUX0_CHCFG0 (*(volatile uint8_t *)0x40021000) // Channel Configuration register
  653. #define DMAMUX0_CHCFG1 (*(volatile uint8_t *)0x40021001) // Channel Configuration register
  654. #define DMAMUX0_CHCFG2 (*(volatile uint8_t *)0x40021002) // Channel Configuration register
  655. #define DMAMUX0_CHCFG3 (*(volatile uint8_t *)0x40021003) // Channel Configuration register
  656. #define DMAMUX0_CHCFG4 (*(volatile uint8_t *)0x40021004) // Channel Configuration register
  657. #define DMAMUX0_CHCFG5 (*(volatile uint8_t *)0x40021005) // Channel Configuration register
  658. #define DMAMUX0_CHCFG6 (*(volatile uint8_t *)0x40021006) // Channel Configuration register
  659. #define DMAMUX0_CHCFG7 (*(volatile uint8_t *)0x40021007) // Channel Configuration register
  660. #define DMAMUX0_CHCFG8 (*(volatile uint8_t *)0x40021008) // Channel Configuration register
  661. #define DMAMUX0_CHCFG9 (*(volatile uint8_t *)0x40021009) // Channel Configuration register
  662. #define DMAMUX0_CHCFG10 (*(volatile uint8_t *)0x4002100A) // Channel Configuration register
  663. #define DMAMUX0_CHCFG11 (*(volatile uint8_t *)0x4002100B) // Channel Configuration register
  664. #define DMAMUX0_CHCFG12 (*(volatile uint8_t *)0x4002100C) // Channel Configuration register
  665. #define DMAMUX0_CHCFG13 (*(volatile uint8_t *)0x4002100D) // Channel Configuration register
  666. #define DMAMUX0_CHCFG14 (*(volatile uint8_t *)0x4002100E) // Channel Configuration register
  667. #define DMAMUX0_CHCFG15 (*(volatile uint8_t *)0x4002100F) // Channel Configuration register
  668. #define DMAMUX_DISABLE 0
  669. #define DMAMUX_TRIG 64
  670. #define DMAMUX_ENABLE 128
  671. #define DMAMUX_SOURCE_UART0_RX 2
  672. #define DMAMUX_SOURCE_UART0_TX 3
  673. #define DMAMUX_SOURCE_UART1_RX 4
  674. #define DMAMUX_SOURCE_UART1_TX 5
  675. #define DMAMUX_SOURCE_UART2_RX 6
  676. #define DMAMUX_SOURCE_UART2_TX 7
  677. #define DMAMUX_SOURCE_I2S0_RX 14
  678. #define DMAMUX_SOURCE_I2S0_TX 15
  679. #define DMAMUX_SOURCE_SPI0_RX 16
  680. #define DMAMUX_SOURCE_SPI0_TX 17
  681. #define DMAMUX_SOURCE_SPI1_RX 18
  682. #define DMAMUX_SOURCE_SPI1_TX 19
  683. #define DMAMUX_SOURCE_I2C0 22
  684. #define DMAMUX_SOURCE_I2C1 23
  685. #define DMAMUX_SOURCE_FTM0_CH0 24
  686. #define DMAMUX_SOURCE_FTM0_CH1 25
  687. #define DMAMUX_SOURCE_FTM0_CH2 26
  688. #define DMAMUX_SOURCE_FTM0_CH3 27
  689. #define DMAMUX_SOURCE_FTM0_CH4 28
  690. #define DMAMUX_SOURCE_FTM0_CH5 29
  691. #define DMAMUX_SOURCE_FTM0_CH6 30
  692. #define DMAMUX_SOURCE_FTM0_CH7 31
  693. #define DMAMUX_SOURCE_FTM1_CH0 32
  694. #define DMAMUX_SOURCE_FTM1_CH1 33
  695. #define DMAMUX_SOURCE_FTM2_CH0 34
  696. #define DMAMUX_SOURCE_FTM2_CH1 35
  697. #define DMAMUX_SOURCE_ADC0 40
  698. #define DMAMUX_SOURCE_ADC1 41
  699. #define DMAMUX_SOURCE_CMP0 42
  700. #define DMAMUX_SOURCE_CMP1 43
  701. #define DMAMUX_SOURCE_CMP2 44
  702. #define DMAMUX_SOURCE_DAC0 45
  703. #define DMAMUX_SOURCE_CMT 47
  704. #define DMAMUX_SOURCE_PDB 48
  705. #define DMAMUX_SOURCE_PORTA 49
  706. #define DMAMUX_SOURCE_PORTB 50
  707. #define DMAMUX_SOURCE_PORTC 51
  708. #define DMAMUX_SOURCE_PORTD 52
  709. #define DMAMUX_SOURCE_PORTE 53
  710. #if defined(KINETISK)
  711. #define DMAMUX_SOURCE_ALWAYS0 54
  712. #define DMAMUX_SOURCE_ALWAYS1 55
  713. #define DMAMUX_SOURCE_ALWAYS2 56
  714. #define DMAMUX_SOURCE_ALWAYS3 57
  715. #define DMAMUX_SOURCE_ALWAYS4 58
  716. #define DMAMUX_SOURCE_ALWAYS5 59
  717. #define DMAMUX_SOURCE_ALWAYS6 60
  718. #define DMAMUX_SOURCE_ALWAYS7 61
  719. #define DMAMUX_SOURCE_ALWAYS8 62
  720. #define DMAMUX_SOURCE_ALWAYS9 63
  721. #define DMAMUX_NUM_SOURCE_ALWAYS 10
  722. #elif defined(KINETISL)
  723. #define DMAMUX_SOURCE_FTM0_OV 54
  724. #define DMAMUX_SOURCE_FTM1_OV 55
  725. #define DMAMUX_SOURCE_FTM2_OV 56
  726. #define DMAMUX_SOURCE_TSI 57
  727. #define DMAMUX_SOURCE_ALWAYS0 60
  728. #define DMAMUX_SOURCE_ALWAYS1 61
  729. #define DMAMUX_SOURCE_ALWAYS2 62
  730. #define DMAMUX_SOURCE_ALWAYS3 63
  731. #define DMAMUX_NUM_SOURCE_ALWAYS 4
  732. #endif
  733. // Chapter 21: Direct Memory Access Controller (eDMA)
  734. #if defined(KINETISK)
  735. #define DMA_CR (*(volatile uint32_t *)0x40008000) // Control Register
  736. #define DMA_CR_CX ((uint32_t)(1<<17)) // Cancel Transfer
  737. #define DMA_CR_ECX ((uint32_t)(1<<16)) // Error Cancel Transfer
  738. #define DMA_CR_EMLM ((uint32_t)0x80) // Enable Minor Loop Mapping
  739. #define DMA_CR_CLM ((uint32_t)0x40) // Continuous Link Mode
  740. #define DMA_CR_HALT ((uint32_t)0x20) // Halt DMA Operations
  741. #define DMA_CR_HOE ((uint32_t)0x10) // Halt On Error
  742. #define DMA_CR_ERCA ((uint32_t)0x04) // Enable Round Robin Channel Arbitration
  743. #define DMA_CR_EDBG ((uint32_t)0x02) // Enable Debug
  744. #define DMA_ES (*(volatile uint32_t *)0x40008004) // Error Status Register
  745. #define DMA_ERQ (*(volatile uint32_t *)0x4000800C) // Enable Request Register
  746. #define DMA_ERQ_ERQ0 ((uint32_t)1<<0) // Enable DMA Request 0
  747. #define DMA_ERQ_ERQ1 ((uint32_t)1<<1) // Enable DMA Request 1
  748. #define DMA_ERQ_ERQ2 ((uint32_t)1<<2) // Enable DMA Request 2
  749. #define DMA_ERQ_ERQ3 ((uint32_t)1<<3) // Enable DMA Request 3
  750. #define DMA_ERQ_ERQ4 ((uint32_t)1<<4) // Enable DMA Request 4
  751. #define DMA_ERQ_ERQ5 ((uint32_t)1<<5) // Enable DMA Request 5
  752. #define DMA_ERQ_ERQ6 ((uint32_t)1<<6) // Enable DMA Request 6
  753. #define DMA_ERQ_ERQ7 ((uint32_t)1<<7) // Enable DMA Request 7
  754. #define DMA_ERQ_ERQ8 ((uint32_t)1<<8) // Enable DMA Request 8
  755. #define DMA_ERQ_ERQ9 ((uint32_t)1<<9) // Enable DMA Request 9
  756. #define DMA_ERQ_ERQ10 ((uint32_t)1<<10) // Enable DMA Request 10
  757. #define DMA_ERQ_ERQ11 ((uint32_t)1<<11) // Enable DMA Request 11
  758. #define DMA_ERQ_ERQ12 ((uint32_t)1<<12) // Enable DMA Request 12
  759. #define DMA_ERQ_ERQ13 ((uint32_t)1<<13) // Enable DMA Request 13
  760. #define DMA_ERQ_ERQ14 ((uint32_t)1<<14) // Enable DMA Request 14
  761. #define DMA_ERQ_ERQ15 ((uint32_t)1<<15) // Enable DMA Request 15
  762. #define DMA_EEI (*(volatile uint32_t *)0x40008014) // Enable Error Interrupt Register
  763. #define DMA_EEI_EEI0 ((uint32_t)1<<0) // Enable Error Interrupt 0
  764. #define DMA_EEI_EEI1 ((uint32_t)1<<1) // Enable Error Interrupt 1
  765. #define DMA_EEI_EEI2 ((uint32_t)1<<2) // Enable Error Interrupt 2
  766. #define DMA_EEI_EEI3 ((uint32_t)1<<3) // Enable Error Interrupt 3
  767. #define DMA_EEI_EEI4 ((uint32_t)1<<4) // Enable Error Interrupt 4
  768. #define DMA_EEI_EEI5 ((uint32_t)1<<5) // Enable Error Interrupt 5
  769. #define DMA_EEI_EEI6 ((uint32_t)1<<6) // Enable Error Interrupt 6
  770. #define DMA_EEI_EEI7 ((uint32_t)1<<7) // Enable Error Interrupt 7
  771. #define DMA_EEI_EEI8 ((uint32_t)1<<8) // Enable Error Interrupt 8
  772. #define DMA_EEI_EEI9 ((uint32_t)1<<9) // Enable Error Interrupt 9
  773. #define DMA_EEI_EEI10 ((uint32_t)1<<10) // Enable Error Interrupt 10
  774. #define DMA_EEI_EEI11 ((uint32_t)1<<11) // Enable Error Interrupt 11
  775. #define DMA_EEI_EEI12 ((uint32_t)1<<12) // Enable Error Interrupt 12
  776. #define DMA_EEI_EEI13 ((uint32_t)1<<13) // Enable Error Interrupt 13
  777. #define DMA_EEI_EEI14 ((uint32_t)1<<14) // Enable Error Interrupt 14
  778. #define DMA_EEI_EEI15 ((uint32_t)1<<15) // Enable Error Interrupt 15
  779. #define DMA_CEEI (*(volatile uint8_t *)0x40008018) // Clear Enable Error Interrupt Register
  780. #define DMA_CEEI_CEEI(n) ((uint8_t)(n & 15)<<0) // Clear Enable Error Interrupt
  781. #define DMA_CEEI_CAEE ((uint8_t)1<<6) // Clear All Enable Error Interrupts
  782. #define DMA_CEEI_NOP ((uint8_t)1<<7) // NOP
  783. #define DMA_SEEI (*(volatile uint8_t *)0x40008019) // Set Enable Error Interrupt Register
  784. #define DMA_SEEI_SEEI(n) ((uint8_t)(n & 15)<<0) // Set Enable Error Interrupt
  785. #define DMA_SEEI_SAEE ((uint8_t)1<<6) // Set All Enable Error Interrupts
  786. #define DMA_SEEI_NOP ((uint8_t)1<<7) // NOP
  787. #define DMA_CERQ (*(volatile uint8_t *)0x4000801A) // Clear Enable Request Register
  788. #define DMA_CERQ_CERQ(n) ((uint8_t)(n & 15)<<0) // Clear Enable Request
  789. #define DMA_CERQ_CAER ((uint8_t)1<<6) // Clear All Enable Requests
  790. #define DMA_CERQ_NOP ((uint8_t)1<<7) // NOP
  791. #define DMA_SERQ (*(volatile uint8_t *)0x4000801B) // Set Enable Request Register
  792. #define DMA_SERQ_SERQ(n) ((uint8_t)(n & 15)<<0) // Set Enable Request
  793. #define DMA_SERQ_SAER ((uint8_t)1<<6) // Set All Enable Requests
  794. #define DMA_SERQ_NOP ((uint8_t)1<<7) // NOP
  795. #define DMA_CDNE (*(volatile uint8_t *)0x4000801C) // Clear DONE Status Bit Register
  796. #define DMA_CDNE_CDNE(n) ((uint8_t)(n & 15)<<0) // Clear Done Bit
  797. #define DMA_CDNE_CADN ((uint8_t)1<<6) // Clear All Done Bits
  798. #define DMA_CDNE_NOP ((uint8_t)1<<7) // NOP
  799. #define DMA_SSRT (*(volatile uint8_t *)0x4000801D) // Set START Bit Register
  800. #define DMA_SSRT_SSRT(n) ((uint8_t)(n & 15)<<0) // Set Start Bit
  801. #define DMA_SSRT_SAST ((uint8_t)1<<6) // Set All Start Bits
  802. #define DMA_SSRT_NOP ((uint8_t)1<<7) // NOP
  803. #define DMA_CERR (*(volatile uint8_t *)0x4000801E) // Clear Error Register
  804. #define DMA_CERR_CERR(n) ((uint8_t)(n & 15)<<0) // Clear Error Indicator
  805. #define DMA_CERR_CAEI ((uint8_t)1<<6) // Clear All Error Indicators
  806. #define DMA_CERR_NOP ((uint8_t)1<<7) // NOP
  807. #define DMA_CINT (*(volatile uint8_t *)0x4000801F) // Clear Interrupt Request Register
  808. #define DMA_CINT_CINT(n) ((uint8_t)(n & 15)<<0) // Clear Interrupt Request
  809. #define DMA_CINT_CAIR ((uint8_t)1<<6) // Clear All Interrupt Requests
  810. #define DMA_CINT_NOP ((uint8_t)1<<7) // NOP
  811. #define DMA_INT (*(volatile uint32_t *)0x40008024) // Interrupt Request Register
  812. #define DMA_INT_INT0 ((uint32_t)1<<0) // Interrupt Request 0
  813. #define DMA_INT_INT1 ((uint32_t)1<<1) // Interrupt Request 1
  814. #define DMA_INT_INT2 ((uint32_t)1<<2) // Interrupt Request 2
  815. #define DMA_INT_INT3 ((uint32_t)1<<3) // Interrupt Request 3
  816. #define DMA_INT_INT4 ((uint32_t)1<<4) // Interrupt Request 4
  817. #define DMA_INT_INT5 ((uint32_t)1<<5) // Interrupt Request 5
  818. #define DMA_INT_INT6 ((uint32_t)1<<6) // Interrupt Request 6
  819. #define DMA_INT_INT7 ((uint32_t)1<<7) // Interrupt Request 7
  820. #define DMA_INT_INT8 ((uint32_t)1<<8) // Interrupt Request 8
  821. #define DMA_INT_INT9 ((uint32_t)1<<9) // Interrupt Request 9
  822. #define DMA_INT_INT10 ((uint32_t)1<<10) // Interrupt Request 10
  823. #define DMA_INT_INT11 ((uint32_t)1<<11) // Interrupt Request 11
  824. #define DMA_INT_INT12 ((uint32_t)1<<12) // Interrupt Request 12
  825. #define DMA_INT_INT13 ((uint32_t)1<<13) // Interrupt Request 13
  826. #define DMA_INT_INT14 ((uint32_t)1<<14) // Interrupt Request 14
  827. #define DMA_INT_INT15 ((uint32_t)1<<15) // Interrupt Request 15
  828. #define DMA_ERR (*(volatile uint32_t *)0x4000802C) // Error Register
  829. #define DMA_ERR_ERR0 ((uint32_t)1<<0) // Error in Channel 0
  830. #define DMA_ERR_ERR1 ((uint32_t)1<<1) // Error in Channel 1
  831. #define DMA_ERR_ERR2 ((uint32_t)1<<2) // Error in Channel 2
  832. #define DMA_ERR_ERR3 ((uint32_t)1<<3) // Error in Channel 3
  833. #define DMA_ERR_ERR4 ((uint32_t)1<<4) // Error in Channel 4
  834. #define DMA_ERR_ERR5 ((uint32_t)1<<5) // Error in Channel 5
  835. #define DMA_ERR_ERR6 ((uint32_t)1<<6) // Error in Channel 6
  836. #define DMA_ERR_ERR7 ((uint32_t)1<<7) // Error in Channel 7
  837. #define DMA_ERR_ERR8 ((uint32_t)1<<8) // Error in Channel 8
  838. #define DMA_ERR_ERR9 ((uint32_t)1<<9) // Error in Channel 9
  839. #define DMA_ERR_ERR10 ((uint32_t)1<<10) // Error in Channel 10
  840. #define DMA_ERR_ERR11 ((uint32_t)1<<11) // Error in Channel 11
  841. #define DMA_ERR_ERR12 ((uint32_t)1<<12) // Error in Channel 12
  842. #define DMA_ERR_ERR13 ((uint32_t)1<<13) // Error in Channel 13
  843. #define DMA_ERR_ERR14 ((uint32_t)1<<14) // Error in Channel 14
  844. #define DMA_ERR_ERR15 ((uint32_t)1<<15) // Error in Channel 15
  845. #define DMA_HRS (*(volatile uint32_t *)0x40008034) // Hardware Request Status Register
  846. #define DMA_HRS_HRS0 ((uint32_t)1<<0) // Hardware Request Status Channel 0
  847. #define DMA_HRS_HRS1 ((uint32_t)1<<1) // Hardware Request Status Channel 1
  848. #define DMA_HRS_HRS2 ((uint32_t)1<<2) // Hardware Request Status Channel 2
  849. #define DMA_HRS_HRS3 ((uint32_t)1<<3) // Hardware Request Status Channel 3
  850. #define DMA_HRS_HRS4 ((uint32_t)1<<4) // Hardware Request Status Channel 4
  851. #define DMA_HRS_HRS5 ((uint32_t)1<<5) // Hardware Request Status Channel 5
  852. #define DMA_HRS_HRS6 ((uint32_t)1<<6) // Hardware Request Status Channel 6
  853. #define DMA_HRS_HRS7 ((uint32_t)1<<7) // Hardware Request Status Channel 7
  854. #define DMA_HRS_HRS8 ((uint32_t)1<<8) // Hardware Request Status Channel 8
  855. #define DMA_HRS_HRS9 ((uint32_t)1<<9) // Hardware Request Status Channel 9
  856. #define DMA_HRS_HRS10 ((uint32_t)1<<10) // Hardware Request Status Channel 10
  857. #define DMA_HRS_HRS11 ((uint32_t)1<<11) // Hardware Request Status Channel 11
  858. #define DMA_HRS_HRS12 ((uint32_t)1<<12) // Hardware Request Status Channel 12
  859. #define DMA_HRS_HRS13 ((uint32_t)1<<13) // Hardware Request Status Channel 13
  860. #define DMA_HRS_HRS14 ((uint32_t)1<<14) // Hardware Request Status Channel 14
  861. #define DMA_HRS_HRS15 ((uint32_t)1<<15) // Hardware Request Status Channel 15
  862. #define DMA_DCHPRI3 (*(volatile uint8_t *)0x40008100) // Channel n Priority Register
  863. #define DMA_DCHPRI2 (*(volatile uint8_t *)0x40008101) // Channel n Priority Register
  864. #define DMA_DCHPRI1 (*(volatile uint8_t *)0x40008102) // Channel n Priority Register
  865. #define DMA_DCHPRI0 (*(volatile uint8_t *)0x40008103) // Channel n Priority Register
  866. #define DMA_DCHPRI_CHPRI(n) ((uint8_t)(n & 15)<<0) // Channel Arbitration Priority
  867. #define DMA_DCHPRI_DPA ((uint8_t)1<<6) // Disable PreEmpt Ability
  868. #define DMA_DCHPRI_ECP ((uint8_t)1<<7) // Enable PreEmption
  869. #define DMA_DCHPRI7 (*(volatile uint8_t *)0x40008104) // Channel n Priority Register
  870. #define DMA_DCHPRI6 (*(volatile uint8_t *)0x40008105) // Channel n Priority Register
  871. #define DMA_DCHPRI5 (*(volatile uint8_t *)0x40008106) // Channel n Priority Register
  872. #define DMA_DCHPRI4 (*(volatile uint8_t *)0x40008107) // Channel n Priority Register
  873. #define DMA_DCHPRI11 (*(volatile uint8_t *)0x40008108) // Channel n Priority Register
  874. #define DMA_DCHPRI10 (*(volatile uint8_t *)0x40008109) // Channel n Priority Register
  875. #define DMA_DCHPRI9 (*(volatile uint8_t *)0x4000810A) // Channel n Priority Register
  876. #define DMA_DCHPRI8 (*(volatile uint8_t *)0x4000810B) // Channel n Priority Register
  877. #define DMA_DCHPRI15 (*(volatile uint8_t *)0x4000810C) // Channel n Priority Register
  878. #define DMA_DCHPRI14 (*(volatile uint8_t *)0x4000810D) // Channel n Priority Register
  879. #define DMA_DCHPRI13 (*(volatile uint8_t *)0x4000810E) // Channel n Priority Register
  880. #define DMA_DCHPRI12 (*(volatile uint8_t *)0x4000810F) // Channel n Priority Register
  881. #define DMA_TCD_ATTR_SMOD(n) (((n) & 0x1F) << 11)
  882. #define DMA_TCD_ATTR_SSIZE(n) (((n) & 0x7) << 8)
  883. #define DMA_TCD_ATTR_DMOD(n) (((n) & 0x1F) << 3)
  884. #define DMA_TCD_ATTR_DSIZE(n) (((n) & 0x7) << 0)
  885. #define DMA_TCD_ATTR_SIZE_8BIT 0
  886. #define DMA_TCD_ATTR_SIZE_16BIT 1
  887. #define DMA_TCD_ATTR_SIZE_32BIT 2
  888. #define DMA_TCD_ATTR_SIZE_16BYTE 4
  889. #define DMA_TCD_ATTR_SIZE_32BYTE 5 // caution: this might not be supported in newer chips?
  890. #define DMA_TCD_CSR_BWC(n) (((n) & 0x3) << 14)
  891. #define DMA_TCD_CSR_BWC_MASK 0xC000
  892. #define DMA_TCD_CSR_MAJORLINKCH(n) (((n) & 0xF) << 8)
  893. #define DMA_TCD_CSR_MAJORLINKCH_MASK 0x0F00
  894. #define DMA_TCD_CSR_DONE 0x0080
  895. #define DMA_TCD_CSR_ACTIVE 0x0040
  896. #define DMA_TCD_CSR_MAJORELINK 0x0020
  897. #define DMA_TCD_CSR_ESG 0x0010
  898. #define DMA_TCD_CSR_DREQ 0x0008
  899. #define DMA_TCD_CSR_INTHALF 0x0004
  900. #define DMA_TCD_CSR_INTMAJOR 0x0002
  901. #define DMA_TCD_CSR_START 0x0001
  902. #define DMA_TCD_CITER_MASK ((uint16_t)0x7FFF) // Loop count mask
  903. #define DMA_TCD_CITER_ELINK ((uint16_t)1<<15) // Enable channel linking on minor-loop complete
  904. #define DMA_TCD_BITER_MASK ((uint16_t)0x7FFF) // Loop count mask
  905. #define DMA_TCD_BITER_ELINK ((uint16_t)1<<15) // Enable channel linking on minor-loop complete
  906. #define DMA_TCD_BITER_ELINKYES_ELINK 0x8000
  907. #define DMA_TCD_BITER_ELINKYES_LINKCH(n) (((n) & 0xF) << 9)
  908. #define DMA_TCD_BITER_ELINKYES_LINKCH_MASK 0x1E00
  909. #define DMA_TCD_BITER_ELINKYES_BITER(n) (((n) & 0x1FF) << 0)
  910. #define DMA_TCD_BITER_ELINKYES_BITER_MASK 0x01FF
  911. #define DMA_TCD_CITER_ELINKYES_ELINK 0x8000
  912. #define DMA_TCD_CITER_ELINKYES_LINKCH(n) (((n) & 0xF) << 9)
  913. #define DMA_TCD_CITER_ELINKYES_LINKCH_MASK 0x1E00
  914. #define DMA_TCD_CITER_ELINKYES_CITER(n) (((n) & 0x1FF) << 0)
  915. #define DMA_TCD_CITER_ELINKYES_CITER_MASK 0x01FF
  916. #define DMA_TCD_NBYTES_SMLOE ((uint32_t)1<<31) // Source Minor Loop Offset Enable
  917. #define DMA_TCD_NBYTES_DMLOE ((uint32_t)1<<30) // Destination Minor Loop Offset Enable
  918. #define DMA_TCD_NBYTES_MLOFFNO_NBYTES(n) ((uint32_t)(n)) // NBytes transfer count when minor loop disabled
  919. #define DMA_TCD_NBYTES_MLOFFYES_NBYTES(n) ((uint32_t)(n & 0x1F)) // NBytes transfer count when minor loop enabled
  920. #define DMA_TCD_NBYTES_MLOFFYES_MLOFF(n) ((uint32_t)(n & 0xFFFFF)<<10) // Offset
  921. #define DMA_TCD0_SADDR (*(volatile const void * volatile *)0x40009000) // TCD Source Address
  922. #define DMA_TCD0_SOFF (*(volatile int16_t *)0x40009004) // TCD Signed Source Address Offset
  923. #define DMA_TCD0_ATTR (*(volatile uint16_t *)0x40009006) // TCD Transfer Attributes
  924. #define DMA_TCD0_NBYTES_MLNO (*(volatile uint32_t *)0x40009008) // TCD Minor Byte Count (Minor Loop Disabled)
  925. #define DMA_TCD0_NBYTES_MLOFFNO (*(volatile uint32_t *)0x40009008) // TCD Signed Minor Loop Offset (Minor Loop Enabled and Offset Disabled)
  926. #define DMA_TCD0_NBYTES_MLOFFYES (*(volatile uint32_t *)0x40009008) // TCD Signed Minor Loop Offset (Minor Loop and Offset Enabled)
  927. #define DMA_TCD0_SLAST (*(volatile int32_t *)0x4000900C) // TCD Last Source Address Adjustment
  928. #define DMA_TCD0_DADDR (*(volatile void * volatile *)0x40009010) // TCD Destination Address
  929. #define DMA_TCD0_DOFF (*(volatile int16_t *)0x40009014) // TCD Signed Destination Address Offset
  930. #define DMA_TCD0_CITER_ELINKYES (*(volatile uint16_t *)0x40009016) // TCD Current Minor Loop Link, Major Loop Count, Channel Linking Enabled
  931. #define DMA_TCD0_CITER_ELINKNO (*(volatile uint16_t *)0x40009016) // ??
  932. #define DMA_TCD0_DLASTSGA (*(volatile int32_t *)0x40009018) // TCD Last Destination Address Adjustment/Scatter Gather Address
  933. #define DMA_TCD0_CSR (*(volatile uint16_t *)0x4000901C) // TCD Control and Status
  934. #define DMA_TCD0_BITER_ELINKYES (*(volatile uint16_t *)0x4000901E) // TCD Beginning Minor Loop Link, Major Loop Count, Channel Linking Enabled
  935. #define DMA_TCD0_BITER_ELINKNO (*(volatile uint16_t *)0x4000901E) // TCD Beginning Minor Loop Link, Major Loop Count, Channel Linking Disabled
  936. #define DMA_TCD1_SADDR (*(volatile const void * volatile *)0x40009020) // TCD Source Address
  937. #define DMA_TCD1_SOFF (*(volatile int16_t *)0x40009024) // TCD Signed Source Address Offset
  938. #define DMA_TCD1_ATTR (*(volatile uint16_t *)0x40009026) // TCD Transfer Attributes
  939. #define DMA_TCD1_NBYTES_MLNO (*(volatile uint32_t *)0x40009028) // TCD Minor Byte Count, Minor Loop Disabled
  940. #define DMA_TCD1_NBYTES_MLOFFNO (*(volatile uint32_t *)0x40009028) // TCD Signed Minor Loop Offset, Minor Loop Enabled and Offset Disabled
  941. #define DMA_TCD1_NBYTES_MLOFFYES (*(volatile uint32_t *)0x40009028) // TCD Signed Minor Loop Offset, Minor Loop and Offset Enabled
  942. #define DMA_TCD1_SLAST (*(volatile int32_t *)0x4000902C) // TCD Last Source Address Adjustment
  943. #define DMA_TCD1_DADDR (*(volatile void * volatile *)0x40009030) // TCD Destination Address
  944. #define DMA_TCD1_DOFF (*(volatile int16_t *)0x40009034) // TCD Signed Destination Address Offset
  945. #define DMA_TCD1_CITER_ELINKYES (*(volatile uint16_t *)0x40009036) // TCD Current Minor Loop Link, Major Loop Count, Channel Linking Enabled
  946. #define DMA_TCD1_CITER_ELINKNO (*(volatile uint16_t *)0x40009036) // ??
  947. #define DMA_TCD1_DLASTSGA (*(volatile int32_t *)0x40009038) // TCD Last Destination Address Adjustment/Scatter Gather Address
  948. #define DMA_TCD1_CSR (*(volatile uint16_t *)0x4000903C) // TCD Control and Status
  949. #define DMA_TCD1_BITER_ELINKYES (*(volatile uint16_t *)0x4000903E) // TCD Beginning Minor Loop Link, Major Loop Count Channel Linking Enabled
  950. #define DMA_TCD1_BITER_ELINKNO (*(volatile uint16_t *)0x4000903E) // TCD Beginning Minor Loop Link, Major Loop Count, Channel Linking Disabled
  951. #define DMA_TCD2_SADDR (*(volatile const void * volatile *)0x40009040) // TCD Source Address
  952. #define DMA_TCD2_SOFF (*(volatile int16_t *)0x40009044) // TCD Signed Source Address Offset
  953. #define DMA_TCD2_ATTR (*(volatile uint16_t *)0x40009046) // TCD Transfer Attributes
  954. #define DMA_TCD2_NBYTES_MLNO (*(volatile uint32_t *)0x40009048) // TCD Minor Byte Count, Minor Loop Disabled
  955. #define DMA_TCD2_NBYTES_MLOFFNO (*(volatile uint32_t *)0x40009048) // TCD Signed Minor Loop Offset, Minor Loop Enabled and Offset Disabled
  956. #define DMA_TCD2_NBYTES_MLOFFYES (*(volatile uint32_t *)0x40009048) // TCD Signed Minor Loop Offset, Minor Loop and Offset Enabled
  957. #define DMA_TCD2_SLAST (*(volatile int32_t *)0x4000904C) // TCD Last Source Address Adjustment
  958. #define DMA_TCD2_DADDR (*(volatile void * volatile *)0x40009050) // TCD Destination Address
  959. #define DMA_TCD2_DOFF (*(volatile int16_t *)0x40009054) // TCD Signed Destination Address Offset
  960. #define DMA_TCD2_CITER_ELINKYES (*(volatile uint16_t *)0x40009056) // TCD Current Minor Loop Link, Major Loop Count, Channel Linking Enabled
  961. #define DMA_TCD2_CITER_ELINKNO (*(volatile uint16_t *)0x40009056) // ??
  962. #define DMA_TCD2_DLASTSGA (*(volatile int32_t *)0x40009058) // TCD Last Destination Address Adjustment/Scatter Gather Address
  963. #define DMA_TCD2_CSR (*(volatile uint16_t *)0x4000905C) // TCD Control and Status
  964. #define DMA_TCD2_BITER_ELINKYES (*(volatile uint16_t *)0x4000905E) // TCD Beginning Minor Loop Link, Major Loop Count, Channel Linking Enabled
  965. #define DMA_TCD2_BITER_ELINKNO (*(volatile uint16_t *)0x4000905E) // TCD Beginning Minor Loop Link, Major Loop Count, Channel Linking Disabled
  966. #define DMA_TCD3_SADDR (*(volatile const void * volatile *)0x40009060) // TCD Source Address
  967. #define DMA_TCD3_SOFF (*(volatile int16_t *)0x40009064) // TCD Signed Source Address Offset
  968. #define DMA_TCD3_ATTR (*(volatile uint16_t *)0x40009066) // TCD Transfer Attributes
  969. #define DMA_TCD3_NBYTES_MLNO (*(volatile uint32_t *)0x40009068) // TCD Minor Byte Count, Minor Loop Disabled
  970. #define DMA_TCD3_NBYTES_MLOFFNO (*(volatile uint32_t *)0x40009068) // TCD Signed Minor Loop Offset, Minor Loop Enabled and Offset Disabled
  971. #define DMA_TCD3_NBYTES_MLOFFYES (*(volatile uint32_t *)0x40009068) // TCD Signed Minor Loop Offset, Minor Loop and Offset Enabled
  972. #define DMA_TCD3_SLAST (*(volatile int32_t *)0x4000906C) // TCD Last Source Address Adjustment
  973. #define DMA_TCD3_DADDR (*(volatile void * volatile *)0x40009070) // TCD Destination Address
  974. #define DMA_TCD3_DOFF (*(volatile int16_t *)0x40009074) // TCD Signed Destination Address Offset
  975. #define DMA_TCD3_CITER_ELINKYES (*(volatile uint16_t *)0x40009076) // TCD Current Minor Loop Link, Major Loop Count, Channel Linking Enabled
  976. #define DMA_TCD3_CITER_ELINKNO (*(volatile uint16_t *)0x40009076) // ??
  977. #define DMA_TCD3_DLASTSGA (*(volatile int32_t *)0x40009078) // TCD Last Destination Address Adjustment/Scatter Gather Address
  978. #define DMA_TCD3_CSR (*(volatile uint16_t *)0x4000907C) // TCD Control and Status
  979. #define DMA_TCD3_BITER_ELINKYES (*(volatile uint16_t *)0x4000907E) // TCD Beginning Minor Loop Link, Major Loop Count ,Channel Linking Enabled
  980. #define DMA_TCD3_BITER_ELINKNO (*(volatile uint16_t *)0x4000907E) // TCD Beginning Minor Loop Link, Major Loop Count ,Channel Linking Disabled
  981. #define DMA_TCD4_SADDR (*(volatile const void * volatile *)0x40009080) // TCD Source Addr
  982. #define DMA_TCD4_SOFF (*(volatile int16_t *)0x40009084) // TCD Signed Source Address Offset
  983. #define DMA_TCD4_ATTR (*(volatile uint16_t *)0x40009086) // TCD Transfer Attributes
  984. #define DMA_TCD4_NBYTES_MLNO (*(volatile uint32_t *)0x40009088) // TCD Minor Byte Count
  985. #define DMA_TCD4_NBYTES_MLOFFNO (*(volatile uint32_t *)0x40009088) // TCD Signed Minor Loop Offset
  986. #define DMA_TCD4_NBYTES_MLOFFYES (*(volatile uint32_t *)0x40009088) // TCD Signed Minor Loop Offset
  987. #define DMA_TCD4_SLAST (*(volatile int32_t *)0x4000908C) // TCD Last Source Addr Adj.
  988. #define DMA_TCD4_DADDR (*(volatile void * volatile *)0x40009090) // TCD Destination Address
  989. #define DMA_TCD4_DOFF (*(volatile int16_t *)0x40009094) // TCD Signed Dest Address Offset
  990. #define DMA_TCD4_CITER_ELINKYES (*(volatile uint16_t *)0x40009096) // TCD Current Minor Loop Link
  991. #define DMA_TCD4_CITER_ELINKNO (*(volatile uint16_t *)0x40009096) // ??
  992. #define DMA_TCD4_DLASTSGA (*(volatile int32_t *)0x40009098) // TCD Last Destination Addr Adj
  993. #define DMA_TCD4_CSR (*(volatile uint16_t *)0x4000909C) // TCD Control and Status
  994. #define DMA_TCD4_BITER_ELINKYES (*(volatile uint16_t *)0x4000909E) // TCD Beginning Minor Loop Link
  995. #define DMA_TCD4_BITER_ELINKNO (*(volatile uint16_t *)0x4000909E) // TCD Beginning Minor Loop Link
  996. #define DMA_TCD5_SADDR (*(volatile const void * volatile *)0x400090A0) // TCD Source Addr
  997. #define DMA_TCD5_SOFF (*(volatile int16_t *)0x400090A4) // TCD Signed Source Address Offset
  998. #define DMA_TCD5_ATTR (*(volatile uint16_t *)0x400090A6) // TCD Transfer Attributes
  999. #define DMA_TCD5_NBYTES_MLNO (*(volatile uint32_t *)0x400090A8) // TCD Minor Byte Count
  1000. #define DMA_TCD5_NBYTES_MLOFFNO (*(volatile uint32_t *)0x400090A8) // TCD Signed Minor Loop Offset
  1001. #define DMA_TCD5_NBYTES_MLOFFYES (*(volatile uint32_t *)0x400090A8) // TCD Signed Minor Loop Offset
  1002. #define DMA_TCD5_SLAST (*(volatile int32_t *)0x400090AC) // TCD Last Source Addr Adj.
  1003. #define DMA_TCD5_DADDR (*(volatile void * volatile *)0x400090B0) // TCD Destination Address
  1004. #define DMA_TCD5_DOFF (*(volatile int16_t *)0x400090B4) // TCD Signed Dest Address Offset
  1005. #define DMA_TCD5_CITER_ELINKYES (*(volatile uint16_t *)0x400090B6) // TCD Current Minor Loop Link
  1006. #define DMA_TCD5_CITER_ELINKNO (*(volatile uint16_t *)0x400090B6) // ??
  1007. #define DMA_TCD5_DLASTSGA (*(volatile int32_t *)0x400090B8) // TCD Last Destination Addr Adj
  1008. #define DMA_TCD5_CSR (*(volatile uint16_t *)0x400090BC) // TCD Control and Status
  1009. #define DMA_TCD5_BITER_ELINKYES (*(volatile uint16_t *)0x400090BE) // TCD Beginning Minor Loop Link
  1010. #define DMA_TCD5_BITER_ELINKNO (*(volatile uint16_t *)0x400090BE) // TCD Beginning Minor Loop Link
  1011. #define DMA_TCD6_SADDR (*(volatile const void * volatile *)0x400090C0) // TCD Source Addr
  1012. #define DMA_TCD6_SOFF (*(volatile int16_t *)0x400090C4) // TCD Signed Source Address Offset
  1013. #define DMA_TCD6_ATTR (*(volatile uint16_t *)0x400090C6) // TCD Transfer Attributes
  1014. #define DMA_TCD6_NBYTES_MLNO (*(volatile uint32_t *)0x400090C8) // TCD Minor Byte Count
  1015. #define DMA_TCD6_NBYTES_MLOFFNO (*(volatile uint32_t *)0x400090C8) // TCD Signed Minor Loop Offset
  1016. #define DMA_TCD6_NBYTES_MLOFFYES (*(volatile uint32_t *)0x400090C8) // TCD Signed Minor Loop Offset
  1017. #define DMA_TCD6_SLAST (*(volatile int32_t *)0x400090CC) // TCD Last Source Addr Adj.
  1018. #define DMA_TCD6_DADDR (*(volatile void * volatile *)0x400090D0) // TCD Destination Address
  1019. #define DMA_TCD6_DOFF (*(volatile int16_t *)0x400090D4) // TCD Signed Dest Address Offset
  1020. #define DMA_TCD6_CITER_ELINKYES (*(volatile uint16_t *)0x400090D6) // TCD Current Minor Loop Link
  1021. #define DMA_TCD6_CITER_ELINKNO (*(volatile uint16_t *)0x400090D6) // ??
  1022. #define DMA_TCD6_DLASTSGA (*(volatile int32_t *)0x400090D8) // TCD Last Destination Addr Adj
  1023. #define DMA_TCD6_CSR (*(volatile uint16_t *)0x400090DC) // TCD Control and Status
  1024. #define DMA_TCD6_BITER_ELINKYES (*(volatile uint16_t *)0x400090DE) // TCD Beginning Minor Loop Link
  1025. #define DMA_TCD6_BITER_ELINKNO (*(volatile uint16_t *)0x400090DE) // TCD Beginning Minor Loop Link
  1026. #define DMA_TCD7_SADDR (*(volatile const void * volatile *)0x400090E0) // TCD Source Addr
  1027. #define DMA_TCD7_SOFF (*(volatile int16_t *)0x400090E4) // TCD Signed Source Address Offset
  1028. #define DMA_TCD7_ATTR (*(volatile uint16_t *)0x400090E6) // TCD Transfer Attributes
  1029. #define DMA_TCD7_NBYTES_MLNO (*(volatile uint32_t *)0x400090E8) // TCD Minor Byte Count
  1030. #define DMA_TCD7_NBYTES_MLOFFNO (*(volatile uint32_t *)0x400090E8) // TCD Signed Minor Loop Offset
  1031. #define DMA_TCD7_NBYTES_MLOFFYES (*(volatile uint32_t *)0x400090E8) // TCD Signed Minor Loop Offset
  1032. #define DMA_TCD7_SLAST (*(volatile int32_t *)0x400090EC) // TCD Last Source Addr Adj.
  1033. #define DMA_TCD7_DADDR (*(volatile void * volatile *)0x400090F0) // TCD Destination Address
  1034. #define DMA_TCD7_DOFF (*(volatile int16_t *)0x400090F4) // TCD Signed Dest Address Offset
  1035. #define DMA_TCD7_CITER_ELINKYES (*(volatile uint16_t *)0x400090F6) // TCD Current Minor Loop Link
  1036. #define DMA_TCD7_CITER_ELINKNO (*(volatile uint16_t *)0x400090F6) // ??
  1037. #define DMA_TCD7_DLASTSGA (*(volatile int32_t *)0x400090F8) // TCD Last Destination Addr Adj
  1038. #define DMA_TCD7_CSR (*(volatile uint16_t *)0x400090FC) // TCD Control and Status
  1039. #define DMA_TCD7_BITER_ELINKYES (*(volatile uint16_t *)0x400090FE) // TCD Beginning Minor Loop Link
  1040. #define DMA_TCD7_BITER_ELINKNO (*(volatile uint16_t *)0x400090FE) // TCD Beginning Minor Loop Link
  1041. #define DMA_TCD8_SADDR (*(volatile const void * volatile *)0x40009100) // TCD Source Addr
  1042. #define DMA_TCD8_SOFF (*(volatile int16_t *)0x40009104) // TCD Signed Source Address Offset
  1043. #define DMA_TCD8_ATTR (*(volatile uint16_t *)0x40009106) // TCD Transfer Attributes
  1044. #define DMA_TCD8_NBYTES_MLNO (*(volatile uint32_t *)0x40009108) // TCD Minor Byte Count
  1045. #define DMA_TCD8_NBYTES_MLOFFNO (*(volatile uint32_t *)0x40009108) // TCD Signed Minor Loop Offset
  1046. #define DMA_TCD8_NBYTES_MLOFFYES (*(volatile uint32_t *)0x40009108) // TCD Signed Minor Loop Offset
  1047. #define DMA_TCD8_SLAST (*(volatile int32_t *)0x4000910C) // TCD Last Source Addr Adj.
  1048. #define DMA_TCD8_DADDR (*(volatile void * volatile *)0x40009110) // TCD Destination Address
  1049. #define DMA_TCD8_DOFF (*(volatile int16_t *)0x40009114) // TCD Signed Dest Address Offset
  1050. #define DMA_TCD8_CITER_ELINKYES (*(volatile uint16_t *)0x40009116) // TCD Current Minor Loop Link
  1051. #define DMA_TCD8_CITER_ELINKNO (*(volatile uint16_t *)0x40009116) // ??
  1052. #define DMA_TCD8_DLASTSGA (*(volatile int32_t *)0x40009118) // TCD Last Destination Addr Adj
  1053. #define DMA_TCD8_CSR (*(volatile uint16_t *)0x4000911C) // TCD Control and Status
  1054. #define DMA_TCD8_BITER_ELINKYES (*(volatile uint16_t *)0x4000911E) // TCD Beginning Minor Loop Link
  1055. #define DMA_TCD8_BITER_ELINKNO (*(volatile uint16_t *)0x4000911E) // TCD Beginning Minor Loop Link
  1056. #define DMA_TCD9_SADDR (*(volatile const void * volatile *)0x40009120) // TCD Source Addr
  1057. #define DMA_TCD9_SOFF (*(volatile int16_t *)0x40009124) // TCD Signed Source Address Offset
  1058. #define DMA_TCD9_ATTR (*(volatile uint16_t *)0x40009126) // TCD Transfer Attributes
  1059. #define DMA_TCD9_NBYTES_MLNO (*(volatile uint32_t *)0x40009128) // TCD Minor Byte Count
  1060. #define DMA_TCD9_NBYTES_MLOFFNO (*(volatile uint32_t *)0x40009128) // TCD Signed Minor Loop Offset
  1061. #define DMA_TCD9_NBYTES_MLOFFYES (*(volatile uint32_t *)0x40009128) // TCD Signed Minor Loop Offset
  1062. #define DMA_TCD9_SLAST (*(volatile int32_t *)0x4000912C) // TCD Last Source Addr Adj.
  1063. #define DMA_TCD9_DADDR (*(volatile void * volatile *)0x40009130) // TCD Destination Address
  1064. #define DMA_TCD9_DOFF (*(volatile int16_t *)0x40009134) // TCD Signed Dest Address Offset
  1065. #define DMA_TCD9_CITER_ELINKYES (*(volatile uint16_t *)0x40009136) // TCD Current Minor Loop Link
  1066. #define DMA_TCD9_CITER_ELINKNO (*(volatile uint16_t *)0x40009136) // ??
  1067. #define DMA_TCD9_DLASTSGA (*(volatile int32_t *)0x40009138) // TCD Last Destination Addr Adj
  1068. #define DMA_TCD9_CSR (*(volatile uint16_t *)0x4000913C) // TCD Control and Status
  1069. #define DMA_TCD9_BITER_ELINKYES (*(volatile uint16_t *)0x4000913E) // TCD Beginning Minor Loop Link
  1070. #define DMA_TCD9_BITER_ELINKNO (*(volatile uint16_t *)0x4000913E) // TCD Beginning Minor Loop Link
  1071. #define DMA_TCD10_SADDR (*(volatile const void * volatile *)0x40009140) // TCD Source Addr
  1072. #define DMA_TCD10_SOFF (*(volatile int16_t *)0x40009144) // TCD Signed Source Address Offset
  1073. #define DMA_TCD10_ATTR (*(volatile uint16_t *)0x40009146) // TCD Transfer Attributes
  1074. #define DMA_TCD10_NBYTES_MLNO (*(volatile uint32_t *)0x40009148) // TCD Minor Byte Count
  1075. #define DMA_TCD10_NBYTES_MLOFFNO (*(volatile uint32_t *)0x40009148) // TCD Signed Minor Loop Offset
  1076. #define DMA_TCD10_NBYTES_MLOFFYES (*(volatile uint32_t *)0x40009148) // TCD Signed Minor Loop Offset
  1077. #define DMA_TCD10_SLAST (*(volatile int32_t *)0x4000914C) // TCD Last Source Addr Adj.
  1078. #define DMA_TCD10_DADDR (*(volatile void * volatile *)0x40009150) // TCD Destination Address
  1079. #define DMA_TCD10_DOFF (*(volatile int16_t *)0x40009154) // TCD Signed Dest Address Offset
  1080. #define DMA_TCD10_CITER_ELINKYES (*(volatile uint16_t *)0x40009156) // TCD Current Minor Loop Link
  1081. #define DMA_TCD10_CITER_ELINKNO (*(volatile uint16_t *)0x40009156) // ??
  1082. #define DMA_TCD10_DLASTSGA (*(volatile int32_t *)0x40009158) // TCD Last Destination Addr Adj
  1083. #define DMA_TCD10_CSR (*(volatile uint16_t *)0x4000915C) // TCD Control and Status
  1084. #define DMA_TCD10_BITER_ELINKYES (*(volatile uint16_t *)0x4000915E) // TCD Beginning Minor Loop Link
  1085. #define DMA_TCD10_BITER_ELINKNO (*(volatile uint16_t *)0x4000915E) // TCD Beginning Minor Loop Link
  1086. #define DMA_TCD11_SADDR (*(volatile const void * volatile *)0x40009160) // TCD Source Addr
  1087. #define DMA_TCD11_SOFF (*(volatile int16_t *)0x40009164) // TCD Signed Source Address Offset
  1088. #define DMA_TCD11_ATTR (*(volatile uint16_t *)0x40009166) // TCD Transfer Attributes
  1089. #define DMA_TCD11_NBYTES_MLNO (*(volatile uint32_t *)0x40009168) // TCD Minor Byte Count
  1090. #define DMA_TCD11_NBYTES_MLOFFNO (*(volatile uint32_t *)0x40009168) // TCD Signed Minor Loop Offset
  1091. #define DMA_TCD11_NBYTES_MLOFFYES (*(volatile uint32_t *)0x40009168) // TCD Signed Minor Loop Offset
  1092. #define DMA_TCD11_SLAST (*(volatile int32_t *)0x4000916C) // TCD Last Source Addr Adj.
  1093. #define DMA_TCD11_DADDR (*(volatile void * volatile *)0x40009170) // TCD Destination Address
  1094. #define DMA_TCD11_DOFF (*(volatile int16_t *)0x40009174) // TCD Signed Dest Address Offset
  1095. #define DMA_TCD11_CITER_ELINKYES (*(volatile uint16_t *)0x40009176) // TCD Current Minor Loop Link
  1096. #define DMA_TCD11_CITER_ELINKNO (*(volatile uint16_t *)0x40009176) // ??
  1097. #define DMA_TCD11_DLASTSGA (*(volatile int32_t *)0x40009178) // TCD Last Destination Addr Adj
  1098. #define DMA_TCD11_CSR (*(volatile uint16_t *)0x4000917C) // TCD Control and Status
  1099. #define DMA_TCD11_BITER_ELINKYES (*(volatile uint16_t *)0x4000917E) // TCD Beginning Minor Loop Link
  1100. #define DMA_TCD11_BITER_ELINKNO (*(volatile uint16_t *)0x4000917E) // TCD Beginning Minor Loop Link
  1101. #define DMA_TCD12_SADDR (*(volatile const void * volatile *)0x40009180) // TCD Source Addr
  1102. #define DMA_TCD12_SOFF (*(volatile int16_t *)0x40009184) // TCD Signed Source Address Offset
  1103. #define DMA_TCD12_ATTR (*(volatile uint16_t *)0x40009186) // TCD Transfer Attributes
  1104. #define DMA_TCD12_NBYTES_MLNO (*(volatile uint32_t *)0x40009188) // TCD Minor Byte Count
  1105. #define DMA_TCD12_NBYTES_MLOFFNO (*(volatile uint32_t *)0x40009188) // TCD Signed Minor Loop Offset
  1106. #define DMA_TCD12_NBYTES_MLOFFYES (*(volatile uint32_t *)0x40009188) // TCD Signed Minor Loop Offset
  1107. #define DMA_TCD12_SLAST (*(volatile int32_t *)0x4000918C) // TCD Last Source Addr Adj.
  1108. #define DMA_TCD12_DADDR (*(volatile void * volatile *)0x40009190) // TCD Destination Address
  1109. #define DMA_TCD12_DOFF (*(volatile int16_t *)0x40009194) // TCD Signed Dest Address Offset
  1110. #define DMA_TCD12_CITER_ELINKYES (*(volatile uint16_t *)0x40009196) // TCD Current Minor Loop Link
  1111. #define DMA_TCD12_CITER_ELINKNO (*(volatile uint16_t *)0x40009196) // ??
  1112. #define DMA_TCD12_DLASTSGA (*(volatile int32_t *)0x40009198) // TCD Last Destination Addr Adj
  1113. #define DMA_TCD12_CSR (*(volatile uint16_t *)0x4000919C) // TCD Control and Status
  1114. #define DMA_TCD12_BITER_ELINKYES (*(volatile uint16_t *)0x4000919E) // TCD Beginning Minor Loop Link
  1115. #define DMA_TCD12_BITER_ELINKNO (*(volatile uint16_t *)0x4000919E) // TCD Beginning Minor Loop Link
  1116. #define DMA_TCD13_SADDR (*(volatile const void * volatile *)0x400091A0) // TCD Source Addr
  1117. #define DMA_TCD13_SOFF (*(volatile int16_t *)0x400091A4) // TCD Signed Source Address Offset
  1118. #define DMA_TCD13_ATTR (*(volatile uint16_t *)0x400091A6) // TCD Transfer Attributes
  1119. #define DMA_TCD13_NBYTES_MLNO (*(volatile uint32_t *)0x400091A8) // TCD Minor Byte Count
  1120. #define DMA_TCD13_NBYTES_MLOFFNO (*(volatile uint32_t *)0x400091A8) // TCD Signed Minor Loop Offset
  1121. #define DMA_TCD13_NBYTES_MLOFFYES (*(volatile uint32_t *)0x400091A8) // TCD Signed Minor Loop Offset
  1122. #define DMA_TCD13_SLAST (*(volatile int32_t *)0x400091AC) // TCD Last Source Addr Adj.
  1123. #define DMA_TCD13_DADDR (*(volatile void * volatile *)0x400091B0) // TCD Destination Address
  1124. #define DMA_TCD13_DOFF (*(volatile int16_t *)0x400091B4) // TCD Signed Dest Address Offset
  1125. #define DMA_TCD13_CITER_ELINKYES (*(volatile uint16_t *)0x400091B6) // TCD Current Minor Loop Link
  1126. #define DMA_TCD13_CITER_ELINKNO (*(volatile uint16_t *)0x400091B6) // ??
  1127. #define DMA_TCD13_DLASTSGA (*(volatile int32_t *)0x400091B8) // TCD Last Destination Addr Adj
  1128. #define DMA_TCD13_CSR (*(volatile uint16_t *)0x400091BC) // TCD Control and Status
  1129. #define DMA_TCD13_BITER_ELINKYES (*(volatile uint16_t *)0x400091BE) // TCD Beginning Minor Loop Link
  1130. #define DMA_TCD13_BITER_ELINKNO (*(volatile uint16_t *)0x400091BE) // TCD Beginning Minor Loop Link
  1131. #define DMA_TCD14_SADDR (*(volatile const void * volatile *)0x400091C0) // TCD Source Addr
  1132. #define DMA_TCD14_SOFF (*(volatile int16_t *)0x400091C4) // TCD Signed Source Address Offset
  1133. #define DMA_TCD14_ATTR (*(volatile uint16_t *)0x400091C6) // TCD Transfer Attributes
  1134. #define DMA_TCD14_NBYTES_MLNO (*(volatile uint32_t *)0x400091C8) // TCD Minor Byte Count
  1135. #define DMA_TCD14_NBYTES_MLOFFNO (*(volatile uint32_t *)0x400091C8) // TCD Signed Minor Loop Offset
  1136. #define DMA_TCD14_NBYTES_MLOFFYES (*(volatile uint32_t *)0x400091C8) // TCD Signed Minor Loop Offset
  1137. #define DMA_TCD14_SLAST (*(volatile int32_t *)0x400091CC) // TCD Last Source Addr Adj.
  1138. #define DMA_TCD14_DADDR (*(volatile void * volatile *)0x400091D0) // TCD Destination Address
  1139. #define DMA_TCD14_DOFF (*(volatile int16_t *)0x400091D4) // TCD Signed Dest Address Offset
  1140. #define DMA_TCD14_CITER_ELINKYES (*(volatile uint16_t *)0x400091D6) // TCD Current Minor Loop Link
  1141. #define DMA_TCD14_CITER_ELINKNO (*(volatile uint16_t *)0x400091D6) // ??
  1142. #define DMA_TCD14_DLASTSGA (*(volatile int32_t *)0x400091D8) // TCD Last Destination Addr Adj
  1143. #define DMA_TCD14_CSR (*(volatile uint16_t *)0x400091DC) // TCD Control and Status
  1144. #define DMA_TCD14_BITER_ELINKYES (*(volatile uint16_t *)0x400091DE) // TCD Beginning Minor Loop Link
  1145. #define DMA_TCD14_BITER_ELINKNO (*(volatile uint16_t *)0x400091DE) // TCD Beginning Minor Loop Link
  1146. #define DMA_TCD15_SADDR (*(volatile const void * volatile *)0x400091E0) // TCD Source Addr
  1147. #define DMA_TCD15_SOFF (*(volatile int16_t *)0x400091E4) // TCD Signed Source Address Offset
  1148. #define DMA_TCD15_ATTR (*(volatile uint16_t *)0x400091E6) // TCD Transfer Attributes
  1149. #define DMA_TCD15_NBYTES_MLNO (*(volatile uint32_t *)0x400091E8) // TCD Minor Byte Count
  1150. #define DMA_TCD15_NBYTES_MLOFFNO (*(volatile uint32_t *)0x400091E8) // TCD Signed Minor Loop Offset
  1151. #define DMA_TCD15_NBYTES_MLOFFYES (*(volatile uint32_t *)0x400091E8) // TCD Signed Minor Loop Offset
  1152. #define DMA_TCD15_SLAST (*(volatile int32_t *)0x400091EC) // TCD Last Source Addr Adj.
  1153. #define DMA_TCD15_DADDR (*(volatile void * volatile *)0x400091F0) // TCD Destination Address
  1154. #define DMA_TCD15_DOFF (*(volatile int16_t *)0x400091F4) // TCD Signed Dest Address Offset
  1155. #define DMA_TCD15_CITER_ELINKYES (*(volatile uint16_t *)0x400091F6) // TCD Current Minor Loop Link
  1156. #define DMA_TCD15_CITER_ELINKNO (*(volatile uint16_t *)0x400091F6) // ??
  1157. #define DMA_TCD15_DLASTSGA (*(volatile int32_t *)0x400091F8) // TCD Last Destination Addr Adj
  1158. #define DMA_TCD15_CSR (*(volatile uint16_t *)0x400091FC) // TCD Control and Status
  1159. #define DMA_TCD15_BITER_ELINKYES (*(volatile uint16_t *)0x400091FE) // TCD Beginning Minor Loop Link
  1160. #define DMA_TCD15_BITER_ELINKNO (*(volatile uint16_t *)0x400091FE) // TCD Beginning Minor Loop Link
  1161. #elif defined(KINETISL)
  1162. #define DMA_SAR0 (*(volatile const void * volatile *)0x40008100) // Source Address
  1163. #define DMA_DAR0 (*(volatile void * volatile *)0x40008104) // Destination Address
  1164. #define DMA_DSR_BCR0 (*(volatile uint32_t *)0x40008108) // Status / Byte Count
  1165. #define DMA_DCR0 (*(volatile uint32_t *)0x4000810C) // Control
  1166. #define DMA_SAR1 (*(volatile const void * volatile *)0x40008110) // Source Address
  1167. #define DMA_DAR1 (*(volatile void * volatile *)0x40008114) // Destination Address
  1168. #define DMA_DSR_BCR1 (*(volatile uint32_t *)0x40008118) // Status / Byte Count
  1169. #define DMA_DCR1 (*(volatile uint32_t *)0x4000811C) // Control
  1170. #define DMA_SAR2 (*(volatile const void * volatile *)0x40008120) // Source Address
  1171. #define DMA_DAR2 (*(volatile void * volatile *)0x40008124) // Destination Address
  1172. #define DMA_DSR_BCR2 (*(volatile uint32_t *)0x40008128) // Status / Byte Count
  1173. #define DMA_DCR2 (*(volatile uint32_t *)0x4000812C) // Control
  1174. #define DMA_SAR3 (*(volatile const void * volatile *)0x40008130) // Source Address
  1175. #define DMA_DAR3 (*(volatile void * volatile *)0x40008134) // Destination Address
  1176. #define DMA_DSR_BCR3 (*(volatile uint32_t *)0x40008138) // Status / Byte Count
  1177. #define DMA_DCR3 (*(volatile uint32_t *)0x4000813C) // Control
  1178. #define DMA_DSR_BCR_CE ((uint32_t)0x40000000) // Configuration Error
  1179. #define DMA_DSR_BCR_BES ((uint32_t)0x20000000) // Bus Error on Source
  1180. #define DMA_DSR_BCR_BED ((uint32_t)0x10000000) // Bus Error on Destination
  1181. #define DMA_DSR_BCR_REQ ((uint32_t)0x04000000) // Request
  1182. #define DMA_DSR_BCR_BSY ((uint32_t)0x02000000) // Busy
  1183. #define DMA_DSR_BCR_DONE ((uint32_t)0x01000000) // Transactions Done
  1184. #define DMA_DSR_BCR_BCR(n) ((n) & 0x00FFFFFF) // Byte Count Remaining
  1185. #define DMA_DCR_EINT ((uint32_t)0x80000000) // Enable Interrupt on Completion
  1186. #define DMA_DCR_ERQ ((uint32_t)0x40000000) // Enable Peripheral Request
  1187. #define DMA_DCR_CS ((uint32_t)0x20000000) // Cycle Steal
  1188. #define DMA_DCR_AA ((uint32_t)0x10000000) // Auto-align
  1189. #define DMA_DCR_EADREQ ((uint32_t)0x00800000) // Enable asynchronous DMA requests
  1190. #define DMA_DCR_SINC ((uint32_t)0x00400000) // Source Increment
  1191. #define DMA_DCR_SSIZE(n) (((n) & 3) << 20) // Source Size, 0=32, 1=8, 2=16
  1192. #define DMA_DCR_DINC ((uint32_t)0x00080000) // Destination Increment
  1193. #define DMA_DCR_DSIZE(n) (((n) & 3) << 17) // Dest Size, 0=32, 1=8, 2=16
  1194. #define DMA_DCR_START ((uint32_t)0x00010000) // Start Transfer
  1195. #define DMA_DCR_SMOD(n) (((n) & 15) << 12) // Source Address Modulo
  1196. #define DMA_DCR_DMOD(n) (((n) & 15) << 8) // Destination Address Modulo
  1197. #define DMA_DCR_D_REQ ((uint32_t)0x00000080) // Disable Request
  1198. #define DMA_DCR_LINKCC(n) (((n) & 3) << 4) // Link Channel Control
  1199. #define DMA_DCR_LCH1(n) (((n) & 3) << 2) // Link Channel 1
  1200. #define DMA_DCR_LCH2(n) (((n) & 3) << 0) // Link Channel 2
  1201. #endif
  1202. // Chapter 22: External Watchdog Monitor (EWM)
  1203. #define EWM_CTRL (*(volatile uint8_t *)0x40061000) // Control Register
  1204. #define EWM_SERV (*(volatile uint8_t *)0x40061001) // Service Register
  1205. #define EWM_CMPL (*(volatile uint8_t *)0x40061002) // Compare Low Register
  1206. #define EWM_CMPH (*(volatile uint8_t *)0x40061003) // Compare High Register
  1207. // Chapter 23: Watchdog Timer (WDOG)
  1208. #define WDOG_STCTRLH (*(volatile uint16_t *)0x40052000) // Watchdog Status and Control Register High
  1209. #define WDOG_STCTRLH_DISTESTWDOG ((uint16_t)0x4000) // Allows the WDOG's functional test mode to be disabled permanently.
  1210. #define WDOG_STCTRLH_BYTESEL(n) ((uint16_t)(((n) & 3) << 12)) // selects the byte to be tested when the watchdog is in the byte test mode.
  1211. #define WDOG_STCTRLH_TESTSEL ((uint16_t)0x0800)
  1212. #define WDOG_STCTRLH_TESTWDOG ((uint16_t)0x0400)
  1213. #define WDOG_STCTRLH_WAITEN ((uint16_t)0x0080)
  1214. #define WDOG_STCTRLH_STOPEN ((uint16_t)0x0040)
  1215. #define WDOG_STCTRLH_DBGEN ((uint16_t)0x0020)
  1216. #define WDOG_STCTRLH_ALLOWUPDATE ((uint16_t)0x0010)
  1217. #define WDOG_STCTRLH_WINEN ((uint16_t)0x0008)
  1218. #define WDOG_STCTRLH_IRQRSTEN ((uint16_t)0x0004)
  1219. #define WDOG_STCTRLH_CLKSRC ((uint16_t)0x0002)
  1220. #define WDOG_STCTRLH_WDOGEN ((uint16_t)0x0001)
  1221. #define WDOG_STCTRLL (*(volatile uint16_t *)0x40052002) // Watchdog Status and Control Register Low
  1222. #define WDOG_TOVALH (*(volatile uint16_t *)0x40052004) // Watchdog Time-out Value Register High
  1223. #define WDOG_TOVALL (*(volatile uint16_t *)0x40052006) // Watchdog Time-out Value Register Low
  1224. #define WDOG_WINH (*(volatile uint16_t *)0x40052008) // Watchdog Window Register High
  1225. #define WDOG_WINL (*(volatile uint16_t *)0x4005200A) // Watchdog Window Register Low
  1226. #define WDOG_REFRESH (*(volatile uint16_t *)0x4005200C) // Watchdog Refresh register
  1227. #define WDOG_UNLOCK (*(volatile uint16_t *)0x4005200E) // Watchdog Unlock register
  1228. #define WDOG_UNLOCK_SEQ1 ((uint16_t)0xC520)
  1229. #define WDOG_UNLOCK_SEQ2 ((uint16_t)0xD928)
  1230. #define WDOG_TMROUTH (*(volatile uint16_t *)0x40052010) // Watchdog Timer Output Register High
  1231. #define WDOG_TMROUTL (*(volatile uint16_t *)0x40052012) // Watchdog Timer Output Register Low
  1232. #define WDOG_RSTCNT (*(volatile uint16_t *)0x40052014) // Watchdog Reset Count register
  1233. #define WDOG_PRESC (*(volatile uint16_t *)0x40052016) // Watchdog Prescaler register
  1234. // Chapter 24: Multipurpose Clock Generator (MCG)
  1235. #define MCG_C1 (*(volatile uint8_t *)0x40064000) // MCG Control 1 Register
  1236. #define MCG_C1_IREFSTEN ((uint8_t)0x01) // Internal Reference Stop Enable, Controls whether or not the internal reference clock remains enabled when the MCG enters Stop mode.
  1237. #define MCG_C1_IRCLKEN ((uint8_t)0x02) // Internal Reference Clock Enable, Enables the internal reference clock for use as MCGIRCLK.
  1238. #define MCG_C1_IREFS ((uint8_t)0x04) // Internal Reference Select, Selects the reference clock source for the FLL.
  1239. #define MCG_C1_FRDIV(n) ((uint8_t)(((n) & 0x07) << 3)) // FLL External Reference Divider, Selects the amount to divide down the external reference clock for the FLL
  1240. #define MCG_C1_CLKS(n) ((uint8_t)(((n) & 0x03) << 6)) // Clock Source Select, Selects the clock source for MCGOUTCLK
  1241. #define MCG_C2 (*(volatile uint8_t *)0x40064001) // MCG Control 2 Register
  1242. #define MCG_C2_IRCS ((uint8_t)0x01) // Internal Reference Clock Select, Selects between the fast or slow internal reference clock source.
  1243. #define MCG_C2_LP ((uint8_t)0x02) // Low Power Select, Controls whether the FLL or PLL is disabled in BLPI and BLPE modes.
  1244. #define MCG_C2_EREFS ((uint8_t)0x04) // External Reference Select, Selects the source for the external reference clock.
  1245. #define MCG_C2_HGO0 ((uint8_t)0x08) // High Gain Oscillator Select, Controls the crystal oscillator mode of operation
  1246. #define MCG_C2_RANGE0(n) ((uint8_t)(((n) & 0x03) << 4)) // Frequency Range Select, Selects the frequency range for the crystal oscillator
  1247. #define MCG_C2_LOCRE0 ((uint8_t)0x80) // Loss of Clock Reset Enable, Determines whether an interrupt or a reset request is made following a loss of OSC0
  1248. #define MCG_C3 (*(volatile uint8_t *)0x40064002) // MCG Control 3 Register
  1249. #define MCG_C3_SCTRIM(n) ((uint8_t)(n)) // Slow Internal Reference Clock Trim Setting
  1250. #define MCG_C4 (*(volatile uint8_t *)0x40064003) // MCG Control 4 Register
  1251. #define MCG_C4_SCFTRIM ((uint8_t)0x01) // Slow Internal Reference Clock Fine Trim
  1252. #define MCG_C4_FCTRIM(n) ((uint8_t)(((n) & 0x0F) << 1)) // Fast Internal Reference Clock Trim Setting
  1253. #define MCG_C4_DRST_DRS(n) ((uint8_t)(((n) & 0x03) << 5)) // DCO Range Select
  1254. #define MCG_C4_DMX32 ((uint8_t)0x80) // DCO Maximum Frequency with 32.768 kHz Reference, controls whether the DCO frequency range is narrowed
  1255. #define MCG_C5 (*(volatile uint8_t *)0x40064004) // MCG Control 5 Register
  1256. #define MCG_C5_PRDIV0(n) ((uint8_t)((n) & 0x1F)) // PLL External Reference Divider
  1257. #define MCG_C5_PLLSTEN0 ((uint8_t)0x20) // PLL Stop Enable
  1258. #define MCG_C5_PLLCLKEN0 ((uint8_t)0x40) // PLL Clock Enable
  1259. #define MCG_C6 (*(volatile uint8_t *)0x40064005) // MCG Control 6 Register
  1260. #define MCG_C6_VDIV0(n) ((uint8_t)((n) & 0x1F)) // VCO 0 Divider
  1261. #define MCG_C6_CME0 ((uint8_t)0x20) // Clock Monitor Enable
  1262. #define MCG_C6_PLLS ((uint8_t)0x40) // PLL Select, Controls whether the PLL or FLL output is selected as the MCG source when CLKS[1:0]=00.
  1263. #define MCG_C6_LOLIE0 ((uint8_t)0x80) // Loss of Lock Interrrupt Enable
  1264. #define MCG_S (*(volatile uint8_t *)0x40064006) // MCG Status Register
  1265. #define MCG_S_IRCST ((uint8_t)0x01) // Internal Reference Clock Status
  1266. #define MCG_S_OSCINIT0 ((uint8_t)0x02) // OSC Initialization, resets to 0, is set to 1 after the initialization cycles of the crystal oscillator
  1267. #define MCG_S_CLKST(n) ((uint8_t)(((n) & 0x03) << 2)) // Clock Mode Status, 0=FLL is selected, 1= Internal ref, 2=External ref, 3=PLL
  1268. #define MCG_S_CLKST_MASK ((uint8_t)0x0C)
  1269. #define MCG_S_IREFST ((uint8_t)0x10) // Internal Reference Status
  1270. #define MCG_S_PLLST ((uint8_t)0x20) // PLL Select Status
  1271. #define MCG_S_LOCK0 ((uint8_t)0x40) // Lock Status, 0=PLL Unlocked, 1=PLL Locked
  1272. #define MCG_S_LOLS0 ((uint8_t)0x80) // Loss of Lock Status
  1273. #define MCG_SC (*(volatile uint8_t *)0x40064008) // MCG Status and Control Register
  1274. #define MCG_SC_LOCS0 ((uint8_t)0x01) // OSC0 Loss of Clock Status
  1275. #define MCG_SC_FCRDIV(n) ((uint8_t)(((n) & 0x07) << 1)) // Fast Clock Internal Reference Divider
  1276. #define MCG_SC_FLTPRSRV ((uint8_t)0x10) // FLL Filter Preserve Enable
  1277. #define MCG_SC_ATMF ((uint8_t)0x20) // Automatic Trim Machine Fail Flag
  1278. #define MCG_SC_ATMS ((uint8_t)0x40) // Automatic Trim Machine Select
  1279. #define MCG_SC_ATME ((uint8_t)0x80) // Automatic Trim Machine Enable
  1280. #define MCG_ATCVH (*(volatile uint8_t *)0x4006400A) // MCG Auto Trim Compare Value High Register
  1281. #define MCG_ATCVL (*(volatile uint8_t *)0x4006400B) // MCG Auto Trim Compare Value Low Register
  1282. #define MCG_C7 (*(volatile uint8_t *)0x4006400C) // MCG Control 7 Register
  1283. #define MCG_C8 (*(volatile uint8_t *)0x4006400D) // MCG Control 8 Register
  1284. // Chapter 25: Oscillator (OSC)
  1285. #define OSC0_CR (*(volatile uint8_t *)0x40065000) // OSC Control Register
  1286. #define OSC_SC16P ((uint8_t)0x01) // Oscillator 16 pF Capacitor Load Configure
  1287. #define OSC_SC8P ((uint8_t)0x02) // Oscillator 8 pF Capacitor Load Configure
  1288. #define OSC_SC4P ((uint8_t)0x04) // Oscillator 4 pF Capacitor Load Configure
  1289. #define OSC_SC2P ((uint8_t)0x08) // Oscillator 2 pF Capacitor Load Configure
  1290. #define OSC_EREFSTEN ((uint8_t)0x20) // External Reference Stop Enable, Controls whether or not the external reference clock (OSCERCLK) remains enabled when MCU enters Stop mode.
  1291. #define OSC_ERCLKEN ((uint8_t)0x80) // External Reference Enable, Enables external reference clock (OSCERCLK).
  1292. // Chapter 27: Flash Memory Controller (FMC)
  1293. #define FMC_PFAPR (*(volatile uint32_t *)0x4001F000) // Flash Access Protection
  1294. #define FMC_PFB0CR (*(volatile uint32_t *)0x4001F004) // Flash Control
  1295. #define FMC_TAGVDW0S0 (*(volatile uint32_t *)0x4001F100) // Cache Tag Storage
  1296. #define FMC_TAGVDW0S1 (*(volatile uint32_t *)0x4001F104) // Cache Tag Storage
  1297. #define FMC_TAGVDW1S0 (*(volatile uint32_t *)0x4001F108)// Cache Tag Storage
  1298. #define FMC_TAGVDW1S1 (*(volatile uint32_t *)0x4001F10C)// Cache Tag Storage
  1299. #define FMC_TAGVDW2S0 (*(volatile uint32_t *)0x4001F110)// Cache Tag Storage
  1300. #define FMC_TAGVDW2S1 (*(volatile uint32_t *)0x4001F114)// Cache Tag Storage
  1301. #define FMC_TAGVDW3S0 (*(volatile uint32_t *)0x4001F118)// Cache Tag Storage
  1302. #define FMC_TAGVDW3S1 (*(volatile uint32_t *)0x4001F11C)// Cache Tag Storage
  1303. #define FMC_DATAW0S0 (*(volatile uint32_t *)0x4001F200)// Cache Data Storage
  1304. #define FMC_DATAW0S1 (*(volatile uint32_t *)0x4001F204)// Cache Data Storage
  1305. #define FMC_DATAW1S0 (*(volatile uint32_t *)0x4001F208)// Cache Data Storage
  1306. #define FMC_DATAW1S1 (*(volatile uint32_t *)0x4001F20C)// Cache Data Storage
  1307. #define FMC_DATAW2S0 (*(volatile uint32_t *)0x4001F210)// Cache Data Storage
  1308. #define FMC_DATAW2S1 (*(volatile uint32_t *)0x4001F214)// Cache Data Storage
  1309. #define FMC_DATAW3S0 (*(volatile uint32_t *)0x4001F218)// Cache Data Storage
  1310. #define FMC_DATAW3S1 (*(volatile uint32_t *)0x4001F21C)// Cache Data Storage
  1311. // Chapter 28: Flash Memory Module (FTFL)
  1312. #define FTFL_FSTAT (*(volatile uint8_t *)0x40020000) // Flash Status Register
  1313. #define FTFL_FSTAT_CCIF ((uint8_t)0x80) // Command Complete Interrupt Flag
  1314. #define FTFL_FSTAT_RDCOLERR ((uint8_t)0x40) // Flash Read Collision Error Flag
  1315. #define FTFL_FSTAT_ACCERR ((uint8_t)0x20) // Flash Access Error Flag
  1316. #define FTFL_FSTAT_FPVIOL ((uint8_t)0x10) // Flash Protection Violation Flag
  1317. #define FTFL_FSTAT_MGSTAT0 ((uint8_t)0x01) // Memory Controller Command Completion Status Flag
  1318. #define FTFL_FCNFG (*(volatile uint8_t *)0x40020001) // Flash Configuration Register
  1319. #define FTFL_FCNFG_CCIE ((uint8_t)0x80) // Command Complete Interrupt Enable
  1320. #define FTFL_FCNFG_RDCOLLIE ((uint8_t)0x40) // Read Collision Error Interrupt Enable
  1321. #define FTFL_FCNFG_ERSAREQ ((uint8_t)0x20) // Erase All Request
  1322. #define FTFL_FCNFG_ERSSUSP ((uint8_t)0x10) // Erase Suspend
  1323. #define FTFL_FCNFG_PFLSH ((uint8_t)0x04) // Flash memory configuration
  1324. #define FTFL_FCNFG_RAMRDY ((uint8_t)0x02) // RAM Ready
  1325. #define FTFL_FCNFG_EEERDY ((uint8_t)0x01) // EEPROM Ready
  1326. #define FTFL_FSEC (*(const uint8_t *)0x40020002) // Flash Security Register
  1327. #define FTFL_FOPT (*(const uint8_t *)0x40020003) // Flash Option Register
  1328. #define FTFL_FCCOB3 (*(volatile uint8_t *)0x40020004) // Flash Common Command Object Registers
  1329. #define FTFL_FCCOB2 (*(volatile uint8_t *)0x40020005)
  1330. #define FTFL_FCCOB1 (*(volatile uint8_t *)0x40020006)
  1331. #define FTFL_FCCOB0 (*(volatile uint8_t *)0x40020007)
  1332. #define FTFL_FCCOB7 (*(volatile uint8_t *)0x40020008)
  1333. #define FTFL_FCCOB6 (*(volatile uint8_t *)0x40020009)
  1334. #define FTFL_FCCOB5 (*(volatile uint8_t *)0x4002000A)
  1335. #define FTFL_FCCOB4 (*(volatile uint8_t *)0x4002000B)
  1336. #define FTFL_FCCOBB (*(volatile uint8_t *)0x4002000C)
  1337. #define FTFL_FCCOBA (*(volatile uint8_t *)0x4002000D)
  1338. #define FTFL_FCCOB9 (*(volatile uint8_t *)0x4002000E)
  1339. #define FTFL_FCCOB8 (*(volatile uint8_t *)0x4002000F)
  1340. #define FTFL_FPROT3 (*(volatile uint8_t *)0x40020010) // Program Flash Protection Registers
  1341. #define FTFL_FPROT2 (*(volatile uint8_t *)0x40020011) // Program Flash Protection Registers
  1342. #define FTFL_FPROT1 (*(volatile uint8_t *)0x40020012) // Program Flash Protection Registers
  1343. #define FTFL_FPROT0 (*(volatile uint8_t *)0x40020013) // Program Flash Protection Registers
  1344. #define FTFL_FEPROT (*(volatile uint8_t *)0x40020016) // EEPROM Protection Register
  1345. #define FTFL_FDPROT (*(volatile uint8_t *)0x40020017) // Data Flash Protection Register
  1346. // Chapter 30: Cyclic Redundancy Check (CRC)
  1347. #define CRC_CRC (*(volatile uint32_t *)0x40032000) // CRC Data register
  1348. #define CRC_GPOLY (*(volatile uint32_t *)0x40032004) // CRC Polynomial register
  1349. #define CRC_CTRL (*(volatile uint32_t *)0x40032008) // CRC Control register
  1350. // Chapter 31: Analog-to-Digital Converter (ADC)
  1351. #define ADC0_SC1A (*(volatile uint32_t *)0x4003B000) // ADC status and control registers 1
  1352. #define ADC0_SC1B (*(volatile uint32_t *)0x4003B004) // ADC status and control registers 1
  1353. #define ADC_SC1_COCO ((uint32_t)0x80) // Conversion complete flag
  1354. #define ADC_SC1_AIEN ((uint32_t)0x40) // Interrupt enable
  1355. #define ADC_SC1_DIFF ((uint32_t)0x20) // Differential mode enable
  1356. #define ADC_SC1_ADCH(n) ((uint32_t)((n) & 0x1F)) // Input channel select
  1357. #define ADC0_CFG1 (*(volatile uint32_t *)0x4003B008) // ADC configuration register 1
  1358. #define ADC_CFG1_ADLPC ((uint32_t)0x80) // Low-power configuration
  1359. #define ADC_CFG1_ADIV(n) ((uint32_t)(((n) & 3) << 5)) // Clock divide select, 0=direct, 1=div2, 2=div4, 3=div8
  1360. #define ADC_CFG1_ADLSMP ((uint32_t)0x10) // Sample time configuration, 0=Short, 1=Long
  1361. #define ADC_CFG1_MODE(n) ((uint32_t)(((n) & 3) << 2)) // Conversion mode, 0=8 bit, 1=12 bit, 2=10 bit, 3=16 bit
  1362. #define ADC_CFG1_ADICLK(n) ((uint32_t)(((n) & 3) << 0)) // Input clock, 0=bus, 1=bus/2, 2=OSCERCLK, 3=async
  1363. #define ADC0_CFG2 (*(volatile uint32_t *)0x4003B00C) // Configuration register 2
  1364. #define ADC_CFG2_MUXSEL ((uint32_t)0x10) // 0=a channels, 1=b channels
  1365. #define ADC_CFG2_ADACKEN ((uint32_t)0x08) // async clock enable
  1366. #define ADC_CFG2_ADHSC ((uint32_t)0x04) // High speed configuration
  1367. #define ADC_CFG2_ADLSTS(n) ((uint32_t)(((n) & 3) << 0)) // Sample time, 0=24 cycles, 1=12 cycles, 2=6 cycles, 3=2 cycles
  1368. #define ADC0_RA (*(volatile uint32_t *)0x4003B010) // ADC data result register
  1369. #define ADC0_RB (*(volatile uint32_t *)0x4003B014) // ADC data result register
  1370. #define ADC0_CV1 (*(volatile uint32_t *)0x4003B018) // Compare value registers
  1371. #define ADC0_CV2 (*(volatile uint32_t *)0x4003B01C) // Compare value registers
  1372. #define ADC0_SC2 (*(volatile uint32_t *)0x4003B020) // Status and control register 2
  1373. #define ADC_SC2_ADACT ((uint32_t)0x80) // Conversion active
  1374. #define ADC_SC2_ADTRG ((uint32_t)0x40) // Conversion trigger select, 0=software, 1=hardware
  1375. #define ADC_SC2_ACFE ((uint32_t)0x20) // Compare function enable
  1376. #define ADC_SC2_ACFGT ((uint32_t)0x10) // Compare function greater than enable
  1377. #define ADC_SC2_ACREN ((uint32_t)0x08) // Compare function range enable
  1378. #define ADC_SC2_DMAEN ((uint32_t)0x04) // DMA enable
  1379. #define ADC_SC2_REFSEL(n) ((uint32_t)(((n) & 3) << 0)) // Voltage reference, 0=vcc/external, 1=1.2 volts
  1380. #define ADC0_SC3 (*(volatile uint32_t *)0x4003B024) // Status and control register 3
  1381. #define ADC_SC3_CAL ((uint32_t)0x80) // Calibration, 1=begin, stays set while cal in progress
  1382. #define ADC_SC3_CALF ((uint32_t)0x40) // Calibration failed flag
  1383. #define ADC_SC3_ADCO ((uint32_t)0x08) // Continuous conversion enable
  1384. #define ADC_SC3_AVGE ((uint32_t)0x04) // Hardware average enable
  1385. #define ADC_SC3_AVGS(n) ((uint32_t)(((n) & 3) << 0)) // avg select, 0=4 samples, 1=8 samples, 2=16 samples, 3=32 samples
  1386. #define ADC0_OFS (*(volatile uint32_t *)0x4003B028) // ADC offset correction register
  1387. #define ADC0_PG (*(volatile uint32_t *)0x4003B02C) // ADC plus-side gain register
  1388. #define ADC0_MG (*(volatile uint32_t *)0x4003B030) // ADC minus-side gain register
  1389. #define ADC0_CLPD (*(volatile uint32_t *)0x4003B034) // ADC plus-side general calibration value register
  1390. #define ADC0_CLPS (*(volatile uint32_t *)0x4003B038) // ADC plus-side general calibration value register
  1391. #define ADC0_CLP4 (*(volatile uint32_t *)0x4003B03C) // ADC plus-side general calibration value register
  1392. #define ADC0_CLP3 (*(volatile uint32_t *)0x4003B040) // ADC plus-side general calibration value register
  1393. #define ADC0_CLP2 (*(volatile uint32_t *)0x4003B044) // ADC plus-side general calibration value register
  1394. #define ADC0_CLP1 (*(volatile uint32_t *)0x4003B048) // ADC plus-side general calibration value register
  1395. #define ADC0_CLP0 (*(volatile uint32_t *)0x4003B04C) // ADC plus-side general calibration value register
  1396. #define ADC0_PGA (*(volatile uint32_t *)0x4003B050) // ADC Programmable Gain Amplifier
  1397. #define ADC_PGA_PGAEN ((uint32_t)0x00800000) // Enable
  1398. #define ADC_PGA_PGALPB ((uint32_t)0x00100000) // Low-Power Mode Control, 0=low power, 1=normal
  1399. #define ADC_PGA_PGAG(n) ((uint32_t)(((n) & 15) << 16)) // Gain, 0=1X, 1=2X, 2=4X, 3=8X, 4=16X, 5=32X, 6=64X
  1400. #define ADC0_CLMD (*(volatile uint32_t *)0x4003B054) // ADC minus-side general calibration value register
  1401. #define ADC0_CLMS (*(volatile uint32_t *)0x4003B058) // ADC minus-side general calibration value register
  1402. #define ADC0_CLM4 (*(volatile uint32_t *)0x4003B05C) // ADC minus-side general calibration value register
  1403. #define ADC0_CLM3 (*(volatile uint32_t *)0x4003B060) // ADC minus-side general calibration value register
  1404. #define ADC0_CLM2 (*(volatile uint32_t *)0x4003B064) // ADC minus-side general calibration value register
  1405. #define ADC0_CLM1 (*(volatile uint32_t *)0x4003B068) // ADC minus-side general calibration value register
  1406. #define ADC0_CLM0 (*(volatile uint32_t *)0x4003B06C) // ADC minus-side general calibration value register
  1407. #define ADC1_SC1A (*(volatile uint32_t *)0x400BB000) // ADC status and control registers 1
  1408. #define ADC1_SC1B (*(volatile uint32_t *)0x400BB004) // ADC status and control registers 1
  1409. #define ADC1_CFG1 (*(volatile uint32_t *)0x400BB008) // ADC configuration register 1
  1410. #define ADC1_CFG2 (*(volatile uint32_t *)0x400BB00C) // Configuration register 2
  1411. #define ADC1_RA (*(volatile uint32_t *)0x400BB010) // ADC data result register
  1412. #define ADC1_RB (*(volatile uint32_t *)0x400BB014) // ADC data result register
  1413. #define ADC1_CV1 (*(volatile uint32_t *)0x400BB018) // Compare value registers
  1414. #define ADC1_CV2 (*(volatile uint32_t *)0x400BB01C) // Compare value registers
  1415. #define ADC1_SC2 (*(volatile uint32_t *)0x400BB020) // Status and control register 2
  1416. #define ADC1_SC3 (*(volatile uint32_t *)0x400BB024) // Status and control register 3
  1417. #define ADC1_OFS (*(volatile uint32_t *)0x400BB028) // ADC offset correction register
  1418. #define ADC1_PG (*(volatile uint32_t *)0x400BB02C) // ADC plus-side gain register
  1419. #define ADC1_MG (*(volatile uint32_t *)0x400BB030) // ADC minus-side gain register
  1420. #define ADC1_CLPD (*(volatile uint32_t *)0x400BB034) // ADC plus-side general calibration value register
  1421. #define ADC1_CLPS (*(volatile uint32_t *)0x400BB038) // ADC plus-side general calibration value register
  1422. #define ADC1_CLP4 (*(volatile uint32_t *)0x400BB03C) // ADC plus-side general calibration value register
  1423. #define ADC1_CLP3 (*(volatile uint32_t *)0x400BB040) // ADC plus-side general calibration value register
  1424. #define ADC1_CLP2 (*(volatile uint32_t *)0x400BB044) // ADC plus-side general calibration value register
  1425. #define ADC1_CLP1 (*(volatile uint32_t *)0x400BB048) // ADC plus-side general calibration value register
  1426. #define ADC1_CLP0 (*(volatile uint32_t *)0x400BB04C) // ADC plus-side general calibration value register
  1427. #define ADC1_PGA (*(volatile uint32_t *)0x400BB050) // ADC Programmable Gain Amplifier
  1428. #define ADC1_CLMD (*(volatile uint32_t *)0x400BB054) // ADC minus-side general calibration value register
  1429. #define ADC1_CLMS (*(volatile uint32_t *)0x400BB058) // ADC minus-side general calibration value register
  1430. #define ADC1_CLM4 (*(volatile uint32_t *)0x400BB05C) // ADC minus-side general calibration value register
  1431. #define ADC1_CLM3 (*(volatile uint32_t *)0x400BB060) // ADC minus-side general calibration value register
  1432. #define ADC1_CLM2 (*(volatile uint32_t *)0x400BB064) // ADC minus-side general calibration value register
  1433. #define ADC1_CLM1 (*(volatile uint32_t *)0x400BB068) // ADC minus-side general calibration value register
  1434. #define ADC1_CLM0 (*(volatile uint32_t *)0x400BB06C) // ADC minus-side general calibration value register
  1435. #if defined(KINETISK)
  1436. #define DAC0_DAT0L (*(volatile uint8_t *)0x400CC000) // DAC Data Low Register
  1437. #define DAC0_DATH (*(volatile uint8_t *)0x400CC001) // DAC Data High Register
  1438. #define DAC0_DAT1L (*(volatile uint8_t *)0x400CC002) // DAC Data Low Register
  1439. #define DAC0_DAT2L (*(volatile uint8_t *)0x400CC004) // DAC Data Low Register
  1440. #define DAC0_DAT3L (*(volatile uint8_t *)0x400CC006) // DAC Data Low Register
  1441. #define DAC0_DAT4L (*(volatile uint8_t *)0x400CC008) // DAC Data Low Register
  1442. #define DAC0_DAT5L (*(volatile uint8_t *)0x400CC00A) // DAC Data Low Register
  1443. #define DAC0_DAT6L (*(volatile uint8_t *)0x400CC00C) // DAC Data Low Register
  1444. #define DAC0_DAT7L (*(volatile uint8_t *)0x400CC00E) // DAC Data Low Register
  1445. #define DAC0_DAT8L (*(volatile uint8_t *)0x400CC010) // DAC Data Low Register
  1446. #define DAC0_DAT9L (*(volatile uint8_t *)0x400CC012) // DAC Data Low Register
  1447. #define DAC0_DAT10L (*(volatile uint8_t *)0x400CC014) // DAC Data Low Register
  1448. #define DAC0_DAT11L (*(volatile uint8_t *)0x400CC016) // DAC Data Low Register
  1449. #define DAC0_DAT12L (*(volatile uint8_t *)0x400CC018) // DAC Data Low Register
  1450. #define DAC0_DAT13L (*(volatile uint8_t *)0x400CC01A) // DAC Data Low Register
  1451. #define DAC0_DAT14L (*(volatile uint8_t *)0x400CC01C) // DAC Data Low Register
  1452. #define DAC0_DAT15L (*(volatile uint8_t *)0x400CC01E) // DAC Data Low Register
  1453. #define DAC0_SR (*(volatile uint8_t *)0x400CC020) // DAC Status Register
  1454. #define DAC0_C0 (*(volatile uint8_t *)0x400CC021) // DAC Control Register
  1455. #define DAC_C0_DACEN 0x80 // DAC Enable
  1456. #define DAC_C0_DACRFS 0x40 // DAC Reference Select
  1457. #define DAC_C0_DACTRGSEL 0x20 // DAC Trigger Select
  1458. #define DAC_C0_DACSWTRG 0x10 // DAC Software Trigger
  1459. #define DAC_C0_LPEN 0x08 // DAC Low Power Control
  1460. #define DAC_C0_DACBWIEN 0x04 // DAC Buffer Watermark Interrupt Enable
  1461. #define DAC_C0_DACBTIEN 0x02 // DAC Buffer Read Pointer Top Flag Interrupt Enable
  1462. #define DAC_C0_DACBBIEN 0x01 // DAC Buffer Read Pointer Bottom Flag Interrupt Enable
  1463. #define DAC0_C1 (*(volatile uint8_t *)0x400CC022) // DAC Control Register 1
  1464. #define DAC_C1_DMAEN 0x80 // DMA Enable Select
  1465. #define DAC_C1_DACBFWM(n) ((((n) & 3) << 3)) // DAC Buffer Watermark Select
  1466. #define DAC_C1_DACBFMD(n) ((((n) & 3) << 1)) // DAC Buffer Work Mode Select
  1467. #define DAC_C1_DACBFEN 0x01 // DAC Buffer Enable
  1468. #define DAC0_C2 (*(volatile uint8_t *)0x400CC023) // DAC Control Register 2
  1469. #define DAC_C2_DACBFRP(n) ((((n) & 15) << 4)) // DAC Buffer Read Pointer
  1470. #define DAC_C2_DACBFUP(n) ((((n) & 15) << 0)) // DAC Buffer Upper Limit
  1471. #elif defined(KINETISL)
  1472. #define DAC0_DAT0L (*(volatile uint8_t *)0x4003F000) // Data Low
  1473. #define DAC0_DAT0H (*(volatile uint8_t *)0x4003F001) // Data High
  1474. #define DAC0_DAT1L (*(volatile uint8_t *)0x4003F002) // Data Low
  1475. #define DAC0_DAT1H (*(volatile uint8_t *)0x4003F003) // Data High
  1476. #define DAC0_SR (*(volatile uint8_t *)0x4003F020) // Status
  1477. #define DAC0_C0 (*(volatile uint8_t *)0x4003F021) // Control Register
  1478. #define DAC0_C1 (*(volatile uint8_t *)0x4003F022) // Control Register 1
  1479. #define DAC0_C2 (*(volatile uint8_t *)0x4003F023) // Control Register 2
  1480. #define DAC_SR_DACBFRPTF ((uint8_t)0x02) // Read Pointer Top Position Flag
  1481. #define DAC_SR_DACBFRPBF ((uint8_t)0x01) // Read Pointer Bottom Position Flag
  1482. #define DAC_C0_DACEN ((uint8_t)0x80) // Enable
  1483. #define DAC_C0_DACRFS ((uint8_t)0x40) // Reference, 0=AREF pin, 1=VCC
  1484. #define DAC_C0_DACTRGSEL ((uint8_t)0x20) // Trigger Select
  1485. #define DAC_C0_DACSWTRG ((uint8_t)0x10) // Software Trigger
  1486. #define DAC_C0_LPEN ((uint8_t)0x08) // Low Power Control
  1487. #define DAC_C0_DACBTIEN ((uint8_t)0x02) // Top Flag Interrupt Enable
  1488. #define DAC_C0_DACBBIEN ((uint8_t)0x01) // Bottom Flag Interrupt Enable
  1489. #define DAC_C1_DMAEN ((uint8_t)0x80) // DMA Enable
  1490. #define DAC_C1_DACBFMD ((uint8_t)0x04) // Work Mode Select
  1491. #define DAC_C1_DACBFEN ((uint8_t)0x01) // Buffer Enable
  1492. #define DAC_C2_DACBFRP ((uint8_t)0x10) // Buffer Read Pointer
  1493. #define DAC_C2_DACBFUP ((uint8_t)0x01) // Buffer Upper Limit
  1494. #endif
  1495. //#define MCG_C2_RANGE0(n) (uint8_t)(((n) & 0x03) << 4) // Frequency Range Select, Selects the frequency range for the crystal oscillator
  1496. //#define MCG_C2_LOCRE0 (uint8_t)0x80 // Loss of Clock Reset Enable, Determines whether an interrupt or a reset request is made following a loss of OSC0
  1497. // Chapter 32: Comparator (CMP)
  1498. #define CMP0_CR0 (*(volatile uint8_t *)0x40073000) // CMP Control Register 0
  1499. #define CMP0_CR1 (*(volatile uint8_t *)0x40073001) // CMP Control Register 1
  1500. #define CMP0_FPR (*(volatile uint8_t *)0x40073002) // CMP Filter Period Register
  1501. #define CMP0_SCR (*(volatile uint8_t *)0x40073003) // CMP Status and Control Register
  1502. #define CMP0_DACCR (*(volatile uint8_t *)0x40073004) // DAC Control Register
  1503. #define CMP0_MUXCR (*(volatile uint8_t *)0x40073005) // MUX Control Register
  1504. #define CMP1_CR0 (*(volatile uint8_t *)0x40073008) // CMP Control Register 0
  1505. #define CMP1_CR1 (*(volatile uint8_t *)0x40073009) // CMP Control Register 1
  1506. #define CMP1_FPR (*(volatile uint8_t *)0x4007300A) // CMP Filter Period Register
  1507. #define CMP1_SCR (*(volatile uint8_t *)0x4007300B) // CMP Status and Control Register
  1508. #define CMP1_DACCR (*(volatile uint8_t *)0x4007300C) // DAC Control Register
  1509. #define CMP1_MUXCR (*(volatile uint8_t *)0x4007300D) // MUX Control Register
  1510. #define CMP2_CR0 (*(volatile uint8_t *)0x40073010) // CMP Control Register 0
  1511. #define CMP2_CR1 (*(volatile uint8_t *)0x40073011) // CMP Control Register 1
  1512. #define CMP2_FPR (*(volatile uint8_t *)0x40073012) // CMP Filter Period Register
  1513. #define CMP2_SCR (*(volatile uint8_t *)0x40073013) // CMP Status and Control Register
  1514. #define CMP2_DACCR (*(volatile uint8_t *)0x40073014) // DAC Control Register
  1515. #define CMP2_MUXCR (*(volatile uint8_t *)0x40073015) // MUX Control Register
  1516. // Chapter 33: Voltage Reference (VREFV1)
  1517. #define VREF_TRM (*(volatile uint8_t *)0x40074000) // VREF Trim Register
  1518. #define VREF_TRM_CHOPEN ((uint8_t)0x40) // Chop oscillator enable
  1519. #define VREF_TRM_TRIM(n) ((n) & 0x3F) // Trim bits
  1520. #define VREF_SC (*(volatile uint8_t *)0x40074001) // VREF Status and Control Register
  1521. #define VREF_SC_VREFEN ((uint8_t)0x80) // Internal Voltage Reference enable
  1522. #define VREF_SC_REGEN ((uint8_t)0x40) // Regulator enable
  1523. #define VREF_SC_ICOMPEN ((uint8_t)0x20) // Second order curvature compensation enable
  1524. #define VREF_SC_VREFST ((uint8_t)0x04) // Internal Voltage Reference stable flag
  1525. #define VREF_SC_MODE_LV(n) (uint8_t)(((n) & 3) << 0) // Buffer Mode selection: 0=Bandgap on only
  1526. // 1=High power buffer mode,
  1527. // 2=Low-power buffer mode
  1528. // Chapter 34: Programmable Delay Block (PDB)
  1529. #define PDB0_SC (*(volatile uint32_t *)0x40036000) // Status and Control Register
  1530. #define PDB_SC_LDMOD(n) (((n) & 3) << 18) // Load Mode Select
  1531. #define PDB_SC_PDBEIE 0x00020000 // Sequence Error Interrupt Enable
  1532. #define PDB_SC_SWTRIG 0x00010000 // Software Trigger
  1533. #define PDB_SC_DMAEN 0x00008000 // DMA Enable
  1534. #define PDB_SC_PRESCALER(n) (((n) & 7) << 12) // Prescaler Divider Select
  1535. #define PDB_SC_TRGSEL(n) (((n) & 15) << 8) // Trigger Input Source Select
  1536. #define PDB_SC_PDBEN 0x00000080 // PDB Enable
  1537. #define PDB_SC_PDBIF 0x00000040 // PDB Interrupt Flag
  1538. #define PDB_SC_PDBIE 0x00000020 // PDB Interrupt Enable.
  1539. #define PDB_SC_MULT(n) (((n) & 3) << 2) // Multiplication Factor
  1540. #define PDB_SC_CONT 0x00000002 // Continuous Mode Enable
  1541. #define PDB_SC_LDOK 0x00000001 // Load OK
  1542. #define PDB0_MOD (*(volatile uint32_t *)0x40036004) // Modulus Register
  1543. #define PDB0_CNT (*(volatile uint32_t *)0x40036008) // Counter Register
  1544. #define PDB0_IDLY (*(volatile uint32_t *)0x4003600C) // Interrupt Delay Register
  1545. #define PDB0_CH0C1 (*(volatile uint32_t *)0x40036010) // Channel n Control Register 1
  1546. #define PDB0_CH0S (*(volatile uint32_t *)0x40036014) // Channel n Status Register
  1547. #define PDB0_CH0DLY0 (*(volatile uint32_t *)0x40036018) // Channel n Delay 0 Register
  1548. #define PDB0_CH0DLY1 (*(volatile uint32_t *)0x4003601C) // Channel n Delay 1 Register
  1549. #define PDB0_POEN (*(volatile uint32_t *)0x40036190) // Pulse-Out n Enable Register
  1550. #define PDB0_PO0DLY (*(volatile uint32_t *)0x40036194) // Pulse-Out n Delay Register
  1551. #define PDB0_PO1DLY (*(volatile uint32_t *)0x40036198) // Pulse-Out n Delay Register
  1552. // Chapter 35: FlexTimer Module (FTM)
  1553. #define FTM0_SC (*(volatile uint32_t *)0x40038000) // Status And Control
  1554. #define FTM_SC_TOF 0x80 // Timer Overflow Flag
  1555. #define FTM_SC_TOIE 0x40 // Timer Overflow Interrupt Enable
  1556. #define FTM_SC_CPWMS 0x20 // Center-Aligned PWM Select
  1557. #define FTM_SC_CLKS(n) (((n) & 3) << 3) // Clock Source Selection
  1558. #define FTM_SC_CLKS_MASK 0x18
  1559. #define FTM_SC_PS(n) (((n) & 7) << 0) // Prescale Factor Selection
  1560. #define FTM_SC_PS_MASK 0x07
  1561. #define FTM0_CNT (*(volatile uint32_t *)0x40038004) // Counter
  1562. #define FTM0_MOD (*(volatile uint32_t *)0x40038008) // Modulo
  1563. #define FTM0_C0SC (*(volatile uint32_t *)0x4003800C) // Channel 0 Status And Control
  1564. #define FTM_CSC_CHF 0x80 // Channel Flag
  1565. #define FTM_CSC_CHIE 0x40 // Channel Interrupt Enable
  1566. #define FTM_CSC_MSB 0x20 // Channel Mode Select
  1567. #define FTM_CSC_MSA 0x10 // Channel Mode Select
  1568. #define FTM_CSC_ELSB 0x08 // Edge or Level Select
  1569. #define FTM_CSC_ELSA 0x04 // Edge or Level Select
  1570. #define FTM_CSC_DMA 0x01 // DMA Enable
  1571. #define FTM0_C0V (*(volatile uint32_t *)0x40038010) // Channel 0 Value
  1572. #define FTM0_C1SC (*(volatile uint32_t *)0x40038014) // Channel 1 Status And Control
  1573. #define FTM0_C1V (*(volatile uint32_t *)0x40038018) // Channel 1 Value
  1574. #define FTM0_C2SC (*(volatile uint32_t *)0x4003801C) // Channel 2 Status And Control
  1575. #define FTM0_C2V (*(volatile uint32_t *)0x40038020) // Channel 2 Value
  1576. #define FTM0_C3SC (*(volatile uint32_t *)0x40038024) // Channel 3 Status And Control
  1577. #define FTM0_C3V (*(volatile uint32_t *)0x40038028) // Channel 3 Value
  1578. #define FTM0_C4SC (*(volatile uint32_t *)0x4003802C) // Channel 4 Status And Control
  1579. #define FTM0_C4V (*(volatile uint32_t *)0x40038030) // Channel 4 Value
  1580. #define FTM0_C5SC (*(volatile uint32_t *)0x40038034) // Channel 5 Status And Control
  1581. #define FTM0_C5V (*(volatile uint32_t *)0x40038038) // Channel 5 Value
  1582. #define FTM0_C6SC (*(volatile uint32_t *)0x4003803C) // Channel 6 Status And Control
  1583. #define FTM0_C6V (*(volatile uint32_t *)0x40038040) // Channel 6 Value
  1584. #define FTM0_C7SC (*(volatile uint32_t *)0x40038044) // Channel 7 Status And Control
  1585. #define FTM0_C7V (*(volatile uint32_t *)0x40038048) // Channel 7 Value
  1586. #define FTM0_CNTIN (*(volatile uint32_t *)0x4003804C) // Counter Initial Value
  1587. #define FTM0_STATUS (*(volatile uint32_t *)0x40038050) // Capture And Compare Status
  1588. #define FTM_STATUS_CH7F 0x80 //
  1589. #define FTM_STATUS_CH6F 0x40 //
  1590. #define FTM_STATUS_CH5F 0x20 //
  1591. #define FTM_STATUS_CH4F 0x10 //
  1592. #define FTM_STATUS_CH3F 0x08 //
  1593. #define FTM_STATUS_CH2F 0x04 //
  1594. #define FTM_STATUS_CH1F 0x02 //
  1595. #define FTM_STATUS_CH0F 0x01 //
  1596. #define FTM0_MODE (*(volatile uint32_t *)0x40038054) // Features Mode Selection
  1597. #define FTM_MODE_FAULTIE 0x80 // Fault Interrupt Enable
  1598. #define FTM_MODE_FAULTM(n) (((n) & 3) << 5) // Fault Control Mode
  1599. #define FTM_MODE_FAULTM_MASK 0x60
  1600. #define FTM_MODE_CAPTEST 0x10 // Capture Test Mode Enable
  1601. #define FTM_MODE_PWMSYNC 0x08 // PWM Synchronization Mode
  1602. #define FTM_MODE_WPDIS 0x04 // Write Protection Disable
  1603. #define FTM_MODE_INIT 0x02 // Initialize The Channels Output
  1604. #define FTM_MODE_FTMEN 0x01 // FTM Enable
  1605. #define FTM0_SYNC (*(volatile uint32_t *)0x40038058) // Synchronization
  1606. #define FTM_SYNC_SWSYNC 0x80 //
  1607. #define FTM_SYNC_TRIG2 0x40 //
  1608. #define FTM_SYNC_TRIG1 0x20 //
  1609. #define FTM_SYNC_TRIG0 0x10 //
  1610. #define FTM_SYNC_SYNCHOM 0x08 //
  1611. #define FTM_SYNC_REINIT 0x04 //
  1612. #define FTM_SYNC_CNTMAX 0x02 //
  1613. #define FTM_SYNC_CNTMIN 0x01 //
  1614. #define FTM0_OUTINIT (*(volatile uint32_t *)0x4003805C) // Initial State For Channels Output
  1615. #define FTM_OUTINIT_CH7OI 0x80 //
  1616. #define FTM_OUTINIT_CH6OI 0x40 //
  1617. #define FTM_OUTINIT_CH5OI 0x20 //
  1618. #define FTM_OUTINIT_CH4OI 0x10 //
  1619. #define FTM_OUTINIT_CH3OI 0x08 //
  1620. #define FTM_OUTINIT_CH2OI 0x04 //
  1621. #define FTM_OUTINIT_CH1OI 0x02 //
  1622. #define FTM_OUTINIT_CH0OI 0x01 //
  1623. #define FTM0_OUTMASK (*(volatile uint32_t *)0x40038060) // Output Mask
  1624. #define FTM_OUTMASK_CH7OM 0x80 //
  1625. #define FTM_OUTMASK_CH6OM 0x40 //
  1626. #define FTM_OUTMASK_CH5OM 0x20 //
  1627. #define FTM_OUTMASK_CH4OM 0x10 //
  1628. #define FTM_OUTMASK_CH3OM 0x08 //
  1629. #define FTM_OUTMASK_CH2OM 0x04 //
  1630. #define FTM_OUTMASK_CH1OM 0x02 //
  1631. #define FTM_OUTMASK_CH0OM 0x01 //
  1632. #define FTM0_COMBINE (*(volatile uint32_t *)0x40038064) // Function For Linked Channels
  1633. #define FTM_COMBINE_FAULTEN3 0x40000000 // Enable the fault control, ch #6 & #7
  1634. #define FTM_COMBINE_SYNCEN3 0x20000000 // Enable PWM sync of C6V & C7V
  1635. #define FTM_COMBINE_DTEN3 0x10000000 // Enable deadtime insertion, ch #6 & #7
  1636. #define FTM_COMBINE_DECAP3 0x08000000 // Dual Edge Capture Mode
  1637. #define FTM_COMBINE_DECAPEN3 0x04000000 // Dual Edge Capture Mode Enable
  1638. #define FTM_COMBINE_COMP3 0x02000000 // Complement Of Channel #6 & #7
  1639. #define FTM_COMBINE_COMBINE3 0x01000000 // Combine Channels #6 & #7
  1640. #define FTM_COMBINE_FAULTEN2 0x00400000 // Enable the fault control, ch #4 & #5
  1641. #define FTM_COMBINE_SYNCEN2 0x00200000 // Enable PWM sync of C4V & C5V
  1642. #define FTM_COMBINE_DTEN2 0x00100000 // Enable deadtime insertion, ch #4 & #5
  1643. #define FTM_COMBINE_DECAP2 0x00080000 // Dual Edge Capture Mode
  1644. #define FTM_COMBINE_DECAPEN2 0x00040000 // Dual Edge Capture Mode Enable
  1645. #define FTM_COMBINE_COMP2 0x00020000 // Complement Of Channel #4 & #5
  1646. #define FTM_COMBINE_COMBINE2 0x00010000 // Combine Channels #4 & #5
  1647. #define FTM_COMBINE_FAULTEN1 0x00004000 // Enable the fault control, ch #2 & #3
  1648. #define FTM_COMBINE_SYNCEN1 0x00002000 // Enable PWM sync of C2V & C3V
  1649. #define FTM_COMBINE_DTEN1 0x00001000 // Enable deadtime insertion, ch #2 & #3
  1650. #define FTM_COMBINE_DECAP1 0x00000800 // Dual Edge Capture Mode
  1651. #define FTM_COMBINE_DECAPEN1 0x00000400 // Dual Edge Capture Mode Enable
  1652. #define FTM_COMBINE_COMP1 0x00000200 // Complement Of Channel #2 & #3
  1653. #define FTM_COMBINE_COMBINE1 0x00000100 // Combine Channels #2 & #3
  1654. #define FTM_COMBINE_FAULTEN0 0x00000040 // Enable the fault control, ch #0 & #1
  1655. #define FTM_COMBINE_SYNCEN0 0x00000020 // Enable PWM sync of C0V & C1V
  1656. #define FTM_COMBINE_DTEN0 0x00000010 // Enable deadtime insertion, ch #0 & #1
  1657. #define FTM_COMBINE_DECAP0 0x00000008 // Dual Edge Capture Mode
  1658. #define FTM_COMBINE_DECAPEN0 0x00000004 // Dual Edge Capture Mode Enable
  1659. #define FTM_COMBINE_COMP0 0x00000002 // Complement Of Channel #0 & #1
  1660. #define FTM_COMBINE_COMBINE0 0x00000001 // Combine Channels #0 & #1
  1661. #define FTM0_DEADTIME (*(volatile uint32_t *)0x40038068) // Deadtime Insertion Control
  1662. #define FTM_DEADTIME_DTPS(n) (((n) & 3) << 6) // Prescaler Value, 0=1x, 2=4x, 3=16x
  1663. #define FTM_DEADTIME_DTPS_MASK 0xC0
  1664. #define FTM_DEADTIME_DTVAL(n) (((n) & 63) << 0) // Deadtime Value
  1665. #define FTM_DEADTIME_DTVAL_MASK 0x3F
  1666. #define FTM0_EXTTRIG (*(volatile uint32_t *)0x4003806C) // FTM External Trigger
  1667. #define FTM_EXTTRIG_TRIGF 0x80 // Channel Trigger Flag
  1668. #define FTM_EXTTRIG_INITTRIGEN 0x40 // Initialization Trigger Enable
  1669. #define FTM_EXTTRIG_CH1TRIG 0x20 // Channel 1 Trigger Enable
  1670. #define FTM_EXTTRIG_CH0TRIG 0x10 // Channel 0 Trigger Enable
  1671. #define FTM_EXTTRIG_CH5TRIG 0x08 // Channel 5 Trigger Enable
  1672. #define FTM_EXTTRIG_CH4TRIG 0x04 // Channel 4 Trigger Enable
  1673. #define FTM_EXTTRIG_CH3TRIG 0x02 // Channel 3 Trigger Enable
  1674. #define FTM_EXTTRIG_CH2TRIG 0x01 // Channel 2 Trigger Enable
  1675. #define FTM0_POL (*(volatile uint32_t *)0x40038070) // Channels Polarity
  1676. #define FTM_POL_POL7 0x80 // Channel 7 Polarity, 0=active high, 1=active low
  1677. #define FTM_POL_POL6 0x40 // Channel 6 Polarity, 0=active high, 1=active low
  1678. #define FTM_POL_POL5 0x20 // Channel 5 Polarity, 0=active high, 1=active low
  1679. #define FTM_POL_POL4 0x10 // Channel 4 Polarity, 0=active high, 1=active low
  1680. #define FTM_POL_POL3 0x08 // Channel 3 Polarity, 0=active high, 1=active low
  1681. #define FTM_POL_POL2 0x04 // Channel 2 Polarity, 0=active high, 1=active low
  1682. #define FTM_POL_POL1 0x02 // Channel 1 Polarity, 0=active high, 1=active low
  1683. #define FTM_POL_POL0 0x01 // Channel 0 Polarity, 0=active high, 1=active low
  1684. #define FTM0_FMS (*(volatile uint32_t *)0x40038074) // Fault Mode Status
  1685. #define FTM_FMS_FAULTF 0x80 // Fault Detection Flag
  1686. #define FTM_FMS_WPEN 0x40 // Write Protection Enable
  1687. #define FTM_FMS_FAULTIN 0x20 // Fault Inputs
  1688. #define FTM_FMS_FAULTF3 0x08 // Fault Detection Flag 3
  1689. #define FTM_FMS_FAULTF2 0x04 // Fault Detection Flag 2
  1690. #define FTM_FMS_FAULTF1 0x02 // Fault Detection Flag 1
  1691. #define FTM_FMS_FAULTF0 0x01 // Fault Detection Flag 0
  1692. #define FTM0_FILTER (*(volatile uint32_t *)0x40038078) // Input Capture Filter Control
  1693. #define FTM_FILTER_CH3FVAL(n) (((n) & 15) << 12) // Channel 3 Input Filter
  1694. #define FTM_FILTER_CH2FVAL(n) (((n) & 15) << 8) // Channel 2 Input Filter
  1695. #define FTM_FILTER_CH1FVAL(n) (((n) & 15) << 4) // Channel 1 Input Filter
  1696. #define FTM_FILTER_CH0FVAL(n) (((n) & 15) << 0) // Channel 0 Input Filter
  1697. #define FTM_FILTER_CH3FVAL_MASK 0xF000
  1698. #define FTM_FILTER_CH2FVAL_MASK 0x0F00
  1699. #define FTM_FILTER_CH1FVAL_MASK 0x00F0
  1700. #define FTM_FILTER_CH0FVAL_MASK 0x000F
  1701. #define FTM0_FLTCTRL (*(volatile uint32_t *)0x4003807C) // Fault Control
  1702. #define FTM_FLTCTRL_FFVAL(n) (((n) & 15) << 8) // Fault Input Filter Value, 0=disable
  1703. #define FTM_FLTCTRL_FFVAL_MASK 0xF00
  1704. #define FTM_FLTCTRL_FFLTR3EN 0x80 // Fault Input 3 Filter Enable
  1705. #define FTM_FLTCTRL_FFLTR2EN 0x40 // Fault Input 2 Filter Enable
  1706. #define FTM_FLTCTRL_FFLTR1EN 0x20 // Fault Input 1 Filter Enable
  1707. #define FTM_FLTCTRL_FFLTR0EN 0x10 // Fault Input 0 Filter Enable
  1708. #define FTM_FLTCTRL_FAULT3EN 0x08 // Fault Input 3 Enable
  1709. #define FTM_FLTCTRL_FAULT2EN 0x04 // Fault Input 2 Enable
  1710. #define FTM_FLTCTRL_FAULT1EN 0x02 // Fault Input 1 Enable
  1711. #define FTM_FLTCTRL_FAULT0EN 0x01 // Fault Input 0 Enable
  1712. #define FTM0_QDCTRL (*(volatile uint32_t *)0x40038080) // Quadrature Decoder Control And Status
  1713. #define FTM_QDCTRL_PHAFLTREN 0x80 // Phase A Input Filter Enable
  1714. #define FTM_QDCTRL_PHBFLTREN 0x40 // Phase B Input Filter Enable
  1715. #define FTM_QDCTRL_PHAPOL 0x20 // Phase A Input Polarity
  1716. #define FTM_QDCTRL_PHBPOL 0x10 // Phase B Input Polarity
  1717. #define FTM_QDCTRL_QUADMODE 0x08 // Quadrature Decoder Mode
  1718. #define FTM_QDCTRL_QUADIR 0x04 // FTM Counter Direction In Quadrature Decoder Mode
  1719. #define FTM_QDCTRL_TOFDIR 0x02 // Timer Overflow Direction In Quadrature Decoder Mode
  1720. #define FTM_QDCTRL_QUADEN 0x01 // Quadrature Decoder Mode Enable
  1721. #define FTM0_CONF (*(volatile uint32_t *)0x40038084) // Configuration
  1722. #define FTM_CONF_GTBEOUT 0x400 // Global Time Base Output
  1723. #define FTM_CONF_GTBEEN 0x200 // Global Time Base Enable
  1724. #define FTM_CONF_BDMMODE (((n) & 3) << 6) // Behavior when in debug mode
  1725. #define FTM_CONF_NUMTOF (((n) & 31) << 0) // ratio of counter overflows to TOF bit set
  1726. #define FTM0_FLTPOL (*(volatile uint32_t *)0x40038088) // FTM Fault Input Polarity
  1727. #define FTM_FLTPOL_FLT3POL 0x08 // Fault Input 3 Polarity
  1728. #define FTM_FLTPOL_FLT2POL 0x04 // Fault Input 2 Polarity
  1729. #define FTM_FLTPOL_FLT1POL 0x02 // Fault Input 1 Polarity
  1730. #define FTM_FLTPOL_FLT0POL 0x01 // Fault Input 0 Polarity
  1731. #define FTM0_SYNCONF (*(volatile uint32_t *)0x4003808C) // Synchronization Configuration
  1732. #define FTM_SYNCONF_HWSOC 0x100000 // Software output control synchronization is activated by a hardware trigger.
  1733. #define FTM_SYNCONF_HWINVC 0x080000 // Inverting control synchronization is activated by a hardware trigger.
  1734. #define FTM_SYNCONF_HWOM 0x040000 // Output mask synchronization is activated by a hardware trigger.
  1735. #define FTM_SYNCONF_HWWRBUF 0x020000 // MOD, CNTIN, and CV registers synchronization is activated by a hardware trigger.
  1736. #define FTM_SYNCONF_HWRSTCNT 0x010000 // FTM counter synchronization is activated by a hardware trigger.
  1737. #define FTM_SYNCONF_SWSOC 0x001000 // Software output control synchronization is activated by the software trigger.
  1738. #define FTM_SYNCONF_SWINVC 0x000800 // Inverting control synchronization is activated by the software trigger.
  1739. #define FTM_SYNCONF_SWOM 0x000400 // Output mask synchronization is activated by the software trigger.
  1740. #define FTM_SYNCONF_SWWRBUF 0x000200 // MOD, CNTIN, and CV registers synchronization is activated by the software trigger.
  1741. #define FTM_SYNCONF_SWRSTCNT 0x000100 // FTM counter synchronization is activated by the software trigger.
  1742. #define FTM_SYNCONF_SYNCMODE 0x000080 // Synchronization Mode, 0=Legacy, 1=Enhanced PWM
  1743. #define FTM_SYNCONF_SWOC 0x000020 // SWOCTRL Register Synchronization
  1744. #define FTM_SYNCONF_INVC 0x000010 // INVCTRL Register Synchronization
  1745. #define FTM_SYNCONF_CNTINC 0x000004 // CNTIN Register Synchronization
  1746. #define FTM_SYNCONF_HWTRIGMODE 0x000001 // Hardware Trigger Mode
  1747. #define FTM0_INVCTRL (*(volatile uint32_t *)0x40038090) // FTM Inverting Control
  1748. #define FTM_INVCTRL_INV3EN 0x08 // Pair Channels 3 Inverting Enable
  1749. #define FTM_INVCTRL_INV2EN 0x04 // Pair Channels 2 Inverting Enable
  1750. #define FTM_INVCTRL_INV1EN 0x02 // Pair Channels 1 Inverting Enable
  1751. #define FTM_INVCTRL_INV0EN 0x01 // Pair Channels 0 Inverting Enable
  1752. #define FTM0_SWOCTRL (*(volatile uint32_t *)0x40038094) // FTM Software Output Control
  1753. #define FTM_SWOCTRL_CH7OCV 0x8000 // Channel 7 Software Output Control Value
  1754. #define FTM_SWOCTRL_CH6OCV 0x4000 // Channel 6 Software Output Control Value
  1755. #define FTM_SWOCTRL_CH5OCV 0x2000 // Channel 5 Software Output Control Value
  1756. #define FTM_SWOCTRL_CH4OCV 0x1000 // Channel 4 Software Output Control Value
  1757. #define FTM_SWOCTRL_CH3OCV 0x0800 // Channel 3 Software Output Control Value
  1758. #define FTM_SWOCTRL_CH2OCV 0x0400 // Channel 2 Software Output Control Value
  1759. #define FTM_SWOCTRL_CH1OCV 0x0200 // Channel 1 Software Output Control Value
  1760. #define FTM_SWOCTRL_CH0OCV 0x0100 // Channel 0 Software Output Control Value
  1761. #define FTM_SWOCTRL_CH7OC 0x0080 // Channel 7 Software Output Control Enable
  1762. #define FTM_SWOCTRL_CH6OC 0x0040 // Channel 6 Software Output Control Enable
  1763. #define FTM_SWOCTRL_CH5OC 0x0020 // Channel 5 Software Output Control Enable
  1764. #define FTM_SWOCTRL_CH4OC 0x0010 // Channel 4 Software Output Control Enable
  1765. #define FTM_SWOCTRL_CH3OC 0x0008 // Channel 3 Software Output Control Enable
  1766. #define FTM_SWOCTRL_CH2OC 0x0004 // Channel 2 Software Output Control Enable
  1767. #define FTM_SWOCTRL_CH1OC 0x0002 // Channel 1 Software Output Control Enable
  1768. #define FTM_SWOCTRL_CH0OC 0x0001 // Channel 0 Software Output Control Enable
  1769. #define FTM0_PWMLOAD (*(volatile uint32_t *)0x40038098) // FTM PWM Load
  1770. #define FTM_PWMLOAD_LDOK 0x200 // Enables the loading of the MOD, CNTIN, and CV registers with the values of their write buffers
  1771. #define FTM_PWMLOAD_CH7SEL 0x80 // Channel 7 Select
  1772. #define FTM_PWMLOAD_CH6SEL 0x40 // Channel 6 Select
  1773. #define FTM_PWMLOAD_CH5SEL 0x20 // Channel 5 Select
  1774. #define FTM_PWMLOAD_CH4SEL 0x10 // Channel 4 Select
  1775. #define FTM_PWMLOAD_CH3SEL 0x08 // Channel 4 Select
  1776. #define FTM_PWMLOAD_CH2SEL 0x04 // Channel 3 Select
  1777. #define FTM_PWMLOAD_CH1SEL 0x02 // Channel 2 Select
  1778. #define FTM_PWMLOAD_CH0SEL 0x01 // Channel 1 Select
  1779. #define FTM1_SC (*(volatile uint32_t *)0x40039000) // Status And Control
  1780. #define FTM1_CNT (*(volatile uint32_t *)0x40039004) // Counter
  1781. #define FTM1_MOD (*(volatile uint32_t *)0x40039008) // Modulo
  1782. #define FTM1_C0SC (*(volatile uint32_t *)0x4003900C) // Channel 0 Status And Control
  1783. #define FTM1_C0V (*(volatile uint32_t *)0x40039010) // Channel 0 Value
  1784. #define FTM1_C1SC (*(volatile uint32_t *)0x40039014) // Channel 1 Status And Control
  1785. #define FTM1_C1V (*(volatile uint32_t *)0x40039018) // Channel 1 Value
  1786. #define FTM1_CNTIN (*(volatile uint32_t *)0x4003904C) // Counter Initial Value
  1787. #define FTM1_STATUS (*(volatile uint32_t *)0x40039050) // Capture And Compare Status
  1788. #define FTM1_MODE (*(volatile uint32_t *)0x40039054) // Features Mode Selection
  1789. #define FTM1_SYNC (*(volatile uint32_t *)0x40039058) // Synchronization
  1790. #define FTM1_OUTINIT (*(volatile uint32_t *)0x4003905C) // Initial State For Channels Output
  1791. #define FTM1_OUTMASK (*(volatile uint32_t *)0x40039060) // Output Mask
  1792. #define FTM1_COMBINE (*(volatile uint32_t *)0x40039064) // Function For Linked Channels
  1793. #define FTM1_DEADTIME (*(volatile uint32_t *)0x40039068) // Deadtime Insertion Control
  1794. #define FTM1_EXTTRIG (*(volatile uint32_t *)0x4003906C) // FTM External Trigger
  1795. #define FTM1_POL (*(volatile uint32_t *)0x40039070) // Channels Polarity
  1796. #define FTM1_FMS (*(volatile uint32_t *)0x40039074) // Fault Mode Status
  1797. #define FTM1_FILTER (*(volatile uint32_t *)0x40039078) // Input Capture Filter Control
  1798. #define FTM1_FLTCTRL (*(volatile uint32_t *)0x4003907C) // Fault Control
  1799. #define FTM1_QDCTRL (*(volatile uint32_t *)0x40039080) // Quadrature Decoder Control And Status
  1800. #define FTM1_CONF (*(volatile uint32_t *)0x40039084) // Configuration
  1801. #define FTM1_FLTPOL (*(volatile uint32_t *)0x40039088) // FTM Fault Input Polarity
  1802. #define FTM1_SYNCONF (*(volatile uint32_t *)0x4003908C) // Synchronization Configuration
  1803. #define FTM1_INVCTRL (*(volatile uint32_t *)0x40039090) // FTM Inverting Control
  1804. #define FTM1_SWOCTRL (*(volatile uint32_t *)0x40039094) // FTM Software Output Control
  1805. #define FTM1_PWMLOAD (*(volatile uint32_t *)0x40039098) // FTM PWM Load
  1806. #if defined(KINETISK)
  1807. #define FTM2_SC (*(volatile uint32_t *)0x400B8000) // Status And Control
  1808. #define FTM2_CNT (*(volatile uint32_t *)0x400B8004) // Counter
  1809. #define FTM2_MOD (*(volatile uint32_t *)0x400B8008) // Modulo
  1810. #define FTM2_C0SC (*(volatile uint32_t *)0x400B800C) // Channel 0 Status And Control
  1811. #define FTM2_C0V (*(volatile uint32_t *)0x400B8010) // Channel 0 Value
  1812. #define FTM2_C1SC (*(volatile uint32_t *)0x400B8014) // Channel 1 Status And Control
  1813. #define FTM2_C1V (*(volatile uint32_t *)0x400B8018) // Channel 1 Value
  1814. #define FTM2_CNTIN (*(volatile uint32_t *)0x400B804C) // Counter Initial Value
  1815. #define FTM2_STATUS (*(volatile uint32_t *)0x400B8050) // Capture And Compare Status
  1816. #define FTM2_MODE (*(volatile uint32_t *)0x400B8054) // Features Mode Selection
  1817. #define FTM2_SYNC (*(volatile uint32_t *)0x400B8058) // Synchronization
  1818. #define FTM2_OUTINIT (*(volatile uint32_t *)0x400B805C) // Initial State For Channels Output
  1819. #define FTM2_OUTMASK (*(volatile uint32_t *)0x400B8060) // Output Mask
  1820. #define FTM2_COMBINE (*(volatile uint32_t *)0x400B8064) // Function For Linked Channels
  1821. #define FTM2_DEADTIME (*(volatile uint32_t *)0x400B8068) // Deadtime Insertion Control
  1822. #define FTM2_EXTTRIG (*(volatile uint32_t *)0x400B806C) // FTM External Trigger
  1823. #define FTM2_POL (*(volatile uint32_t *)0x400B8070) // Channels Polarity
  1824. #define FTM2_FMS (*(volatile uint32_t *)0x400B8074) // Fault Mode Status
  1825. #define FTM2_FILTER (*(volatile uint32_t *)0x400B8078) // Input Capture Filter Control
  1826. #define FTM2_FLTCTRL (*(volatile uint32_t *)0x400B807C) // Fault Control
  1827. #define FTM2_QDCTRL (*(volatile uint32_t *)0x400B8080) // Quadrature Decoder Control And Status
  1828. #define FTM2_CONF (*(volatile uint32_t *)0x400B8084) // Configuration
  1829. #define FTM2_FLTPOL (*(volatile uint32_t *)0x400B8088) // FTM Fault Input Polarity
  1830. #define FTM2_SYNCONF (*(volatile uint32_t *)0x400B808C) // Synchronization Configuration
  1831. #define FTM2_INVCTRL (*(volatile uint32_t *)0x400B8090) // FTM Inverting Control
  1832. #define FTM2_SWOCTRL (*(volatile uint32_t *)0x400B8094) // FTM Software Output Control
  1833. #define FTM2_PWMLOAD (*(volatile uint32_t *)0x400B8098) // FTM PWM Load
  1834. #elif defined(KINETISL)
  1835. #define FTM2_SC (*(volatile uint32_t *)0x4003A000) // Status And Control
  1836. #define FTM2_CNT (*(volatile uint32_t *)0x4003A004) // Counter
  1837. #define FTM2_MOD (*(volatile uint32_t *)0x4003A008) // Modulo
  1838. #define FTM2_C0SC (*(volatile uint32_t *)0x4003A00C) // Channel 0 Status And Control
  1839. #define FTM2_C0V (*(volatile uint32_t *)0x4003A010) // Channel 0 Value
  1840. #define FTM2_C1SC (*(volatile uint32_t *)0x4003A014) // Channel 1 Status And Control
  1841. #define FTM2_C1V (*(volatile uint32_t *)0x4003A018) // Channel 1 Value
  1842. #define FTM2_STATUS (*(volatile uint32_t *)0x4003A050) // Capture And Compare Status
  1843. #define FTM2_CONF (*(volatile uint32_t *)0x4003A084) // Configuration
  1844. #endif
  1845. // Chapter 36: Periodic Interrupt Timer (PIT)
  1846. #define PIT_MCR (*(volatile uint32_t *)0x40037000) // PIT Module Control Register
  1847. #define PIT_LDVAL0 (*(volatile uint32_t *)0x40037100) // Timer Load Value Register
  1848. #define PIT_CVAL0 (*(volatile uint32_t *)0x40037104) // Current Timer Value Register
  1849. #define PIT_TCTRL0 (*(volatile uint32_t *)0x40037108) // Timer Control Register
  1850. #define PIT_TFLG0 (*(volatile uint32_t *)0x4003710C) // Timer Flag Register
  1851. #define PIT_LDVAL1 (*(volatile uint32_t *)0x40037110) // Timer Load Value Register
  1852. #define PIT_CVAL1 (*(volatile uint32_t *)0x40037114) // Current Timer Value Register
  1853. #define PIT_TCTRL1 (*(volatile uint32_t *)0x40037118) // Timer Control Register
  1854. #define PIT_TFLG1 (*(volatile uint32_t *)0x4003711C) // Timer Flag Register
  1855. #define PIT_LDVAL2 (*(volatile uint32_t *)0x40037120) // Timer Load Value Register
  1856. #define PIT_CVAL2 (*(volatile uint32_t *)0x40037124) // Current Timer Value Register
  1857. #define PIT_TCTRL2 (*(volatile uint32_t *)0x40037128) // Timer Control Register
  1858. #define PIT_TFLG2 (*(volatile uint32_t *)0x4003712C) // Timer Flag Register
  1859. #define PIT_LDVAL3 (*(volatile uint32_t *)0x40037130) // Timer Load Value Register
  1860. #define PIT_CVAL3 (*(volatile uint32_t *)0x40037134) // Current Timer Value Register
  1861. #define PIT_TCTRL3 (*(volatile uint32_t *)0x40037138) // Timer Control Register
  1862. #define PIT_TFLG3 (*(volatile uint32_t *)0x4003713C) // Timer Flag Register
  1863. // Chapter 37: Low-Power Timer (LPTMR)
  1864. #define LPTMR0_CSR (*(volatile uint32_t *)0x40040000) // Low Power Timer Control Status Register
  1865. #define LPTMR_CSR_TCF 0x80 // Compare Flag
  1866. #define LPTMR_CSR_TIE 0x40 // Interrupt Enable
  1867. #define LPTMR_CSR_TPS(n) (((n) & 3) << 4) // Pin: 0=CMP0, 1=xtal, 2=pin13
  1868. #define LPTMR_CSR_TPP 0x08 // Pin Polarity
  1869. #define LPTMR_CSR_TFC 0x04 // Free-Running Counter
  1870. #define LPTMR_CSR_TMS 0x02 // Mode Select, 0=timer, 1=counter
  1871. #define LPTMR_CSR_TEN 0x01 // Enable
  1872. #define LPTMR0_PSR (*(volatile uint32_t *)0x40040004) // Low Power Timer Prescale Register
  1873. #define LPTMR_PSR_PRESCALE(n) (((n) & 15) << 3) // Prescaler value
  1874. #define LPTMR_PSR_PBYP 0x04 // Prescaler bypass
  1875. #define LPTMR_PSR_PCS(n) (((n) & 3) << 0) // Clock: 0=MCGIRCLK, 1=LPO(1kHz), 2=ERCLK32K, 3=OSCERCLK
  1876. #define LPTMR0_CMR (*(volatile uint32_t *)0x40040008) // Low Power Timer Compare Register
  1877. #define LPTMR0_CNR (*(volatile uint32_t *)0x4004000C) // Low Power Timer Counter Register
  1878. // Chapter 38: Carrier Modulator Transmitter (CMT)
  1879. #define CMT_CGH1 (*(volatile uint8_t *)0x40062000) // CMT Carrier Generator High Data Register 1
  1880. #define CMT_CGL1 (*(volatile uint8_t *)0x40062001) // CMT Carrier Generator Low Data Register 1
  1881. #define CMT_CGH2 (*(volatile uint8_t *)0x40062002) // CMT Carrier Generator High Data Register 2
  1882. #define CMT_CGL2 (*(volatile uint8_t *)0x40062003) // CMT Carrier Generator Low Data Register 2
  1883. #define CMT_OC (*(volatile uint8_t *)0x40062004) // CMT Output Control Register
  1884. #define CMT_MSC (*(volatile uint8_t *)0x40062005) // CMT Modulator Status and Control Register
  1885. #define CMT_CMD1 (*(volatile uint8_t *)0x40062006) // CMT Modulator Data Register Mark High
  1886. #define CMT_CMD2 (*(volatile uint8_t *)0x40062007) // CMT Modulator Data Register Mark Low
  1887. #define CMT_CMD3 (*(volatile uint8_t *)0x40062008) // CMT Modulator Data Register Space High
  1888. #define CMT_CMD4 (*(volatile uint8_t *)0x40062009) // CMT Modulator Data Register Space Low
  1889. #define CMT_PPS (*(volatile uint8_t *)0x4006200A) // CMT Primary Prescaler Register
  1890. #define CMT_DMA (*(volatile uint8_t *)0x4006200B) // CMT Direct Memory Access Register
  1891. // Chapter 39: Real Time Clock (RTC)
  1892. #define RTC_TSR (*(volatile uint32_t *)0x4003D000) // RTC Time Seconds Register
  1893. #define RTC_TPR (*(volatile uint32_t *)0x4003D004) // RTC Time Prescaler Register
  1894. #define RTC_TAR (*(volatile uint32_t *)0x4003D008) // RTC Time Alarm Register
  1895. #define RTC_TCR (*(volatile uint32_t *)0x4003D00C) // RTC Time Compensation Register
  1896. #define RTC_TCR_CIC(n) (((n) & 255) << 24) // Compensation Interval Counter
  1897. #define RTC_TCR_TCV(n) (((n) & 255) << 16) // Time Compensation Value
  1898. #define RTC_TCR_CIR(n) (((n) & 255) << 8) // Compensation Interval Register
  1899. #define RTC_TCR_TCR(n) (((n) & 255) << 0) // Time Compensation Register
  1900. #define RTC_CR (*(volatile uint32_t *)0x4003D010) // RTC Control Register
  1901. #define RTC_CR_SC2P ((uint32_t)0x00002000) //
  1902. #define RTC_CR_SC4P ((uint32_t)0x00001000) //
  1903. #define RTC_CR_SC8P ((uint32_t)0x00000800) //
  1904. #define RTC_CR_SC16P ((uint32_t)0x00000400) //
  1905. #define RTC_CR_CLKO ((uint32_t)0x00000200) //
  1906. #define RTC_CR_OSCE ((uint32_t)0x00000100) //
  1907. #define RTC_CR_UM ((uint32_t)0x00000008) //
  1908. #define RTC_CR_SUP ((uint32_t)0x00000004) //
  1909. #define RTC_CR_WPE ((uint32_t)0x00000002) //
  1910. #define RTC_CR_SWR ((uint32_t)0x00000001) //
  1911. #define RTC_SR (*(volatile uint32_t *)0x4003D014) // RTC Status Register
  1912. #define RTC_SR_TCE ((uint32_t)0x00000010) //
  1913. #define RTC_SR_TAF ((uint32_t)0x00000004) //
  1914. #define RTC_SR_TOF ((uint32_t)0x00000002) //
  1915. #define RTC_SR_TIF ((uint32_t)0x00000001) //
  1916. #define RTC_LR (*(volatile uint32_t *)0x4003D018) // RTC Lock Register
  1917. #define RTC_IER (*(volatile uint32_t *)0x4003D01C) // RTC Interrupt Enable Register
  1918. #define RTC_WAR (*(volatile uint32_t *)0x4003D800) // RTC Write Access Register
  1919. #define RTC_RAR (*(volatile uint32_t *)0x4003D804) // RTC Read Access Register
  1920. // Chapter 40: Universal Serial Bus OTG Controller (USBOTG)
  1921. #define USB0_PERID (*(const uint8_t *)0x40072000) // Peripheral ID register
  1922. #define USB0_IDCOMP (*(const uint8_t *)0x40072004) // Peripheral ID Complement register
  1923. #define USB0_REV (*(const uint8_t *)0x40072008) // Peripheral Revision register
  1924. #define USB0_ADDINFO (*(volatile uint8_t *)0x4007200C) // Peripheral Additional Info register
  1925. #define USB0_OTGISTAT (*(volatile uint8_t *)0x40072010) // OTG Interrupt Status register
  1926. #define USB_OTGISTAT_IDCHG ((uint8_t)0x80) //
  1927. #define USB_OTGISTAT_ONEMSEC ((uint8_t)0x40) //
  1928. #define USB_OTGISTAT_LINE_STATE_CHG ((uint8_t)0x20) //
  1929. #define USB_OTGISTAT_SESSVLDCHG ((uint8_t)0x08) //
  1930. #define USB_OTGISTAT_B_SESS_CHG ((uint8_t)0x04) //
  1931. #define USB_OTGISTAT_AVBUSCHG ((uint8_t)0x01) //
  1932. #define USB0_OTGICR (*(volatile uint8_t *)0x40072014) // OTG Interrupt Control Register
  1933. #define USB_OTGICR_IDEN ((uint8_t)0x80) //
  1934. #define USB_OTGICR_ONEMSECEN ((uint8_t)0x40) //
  1935. #define USB_OTGICR_LINESTATEEN ((uint8_t)0x20) //
  1936. #define USB_OTGICR_SESSVLDEN ((uint8_t)0x08) //
  1937. #define USB_OTGICR_BSESSEN ((uint8_t)0x04) //
  1938. #define USB_OTGICR_AVBUSEN ((uint8_t)0x01) //
  1939. #define USB0_OTGSTAT (*(volatile uint8_t *)0x40072018) // OTG Status register
  1940. #define USB_OTGSTAT_ID ((uint8_t)0x80) //
  1941. #define USB_OTGSTAT_ONEMSECEN ((uint8_t)0x40) //
  1942. #define USB_OTGSTAT_LINESTATESTABLE ((uint8_t)0x20) //
  1943. #define USB_OTGSTAT_SESS_VLD ((uint8_t)0x08) //
  1944. #define USB_OTGSTAT_BSESSEND ((uint8_t)0x04) //
  1945. #define USB_OTGSTAT_AVBUSVLD ((uint8_t)0x01) //
  1946. #define USB0_OTGCTL (*(volatile uint8_t *)0x4007201C) // OTG Control Register
  1947. #define USB_OTGCTL_DPHIGH ((uint8_t)0x80) //
  1948. #define USB_OTGCTL_DPLOW ((uint8_t)0x20) //
  1949. #define USB_OTGCTL_DMLOW ((uint8_t)0x10) //
  1950. #define USB_OTGCTL_OTGEN ((uint8_t)0x04) //
  1951. #define USB0_ISTAT (*(volatile uint8_t *)0x40072080) // Interrupt Status Register
  1952. #define USB_ISTAT_STALL ((uint8_t)0x80) //
  1953. #define USB_ISTAT_ATTACH ((uint8_t)0x40) //
  1954. #define USB_ISTAT_RESUME ((uint8_t)0x20) //
  1955. #define USB_ISTAT_SLEEP ((uint8_t)0x10) //
  1956. #define USB_ISTAT_TOKDNE ((uint8_t)0x08) //
  1957. #define USB_ISTAT_SOFTOK ((uint8_t)0x04) //
  1958. #define USB_ISTAT_ERROR ((uint8_t)0x02) //
  1959. #define USB_ISTAT_USBRST ((uint8_t)0x01) //
  1960. #define USB0_INTEN (*(volatile uint8_t *)0x40072084) // Interrupt Enable Register
  1961. #define USB_INTEN_STALLEN ((uint8_t)0x80) //
  1962. #define USB_INTEN_ATTACHEN ((uint8_t)0x40) //
  1963. #define USB_INTEN_RESUMEEN ((uint8_t)0x20) //
  1964. #define USB_INTEN_SLEEPEN ((uint8_t)0x10) //
  1965. #define USB_INTEN_TOKDNEEN ((uint8_t)0x08) //
  1966. #define USB_INTEN_SOFTOKEN ((uint8_t)0x04) //
  1967. #define USB_INTEN_ERROREN ((uint8_t)0x02) //
  1968. #define USB_INTEN_USBRSTEN ((uint8_t)0x01) //
  1969. #define USB0_ERRSTAT (*(volatile uint8_t *)0x40072088) // Error Interrupt Status Register
  1970. #define USB_ERRSTAT_BTSERR ((uint8_t)0x80) //
  1971. #define USB_ERRSTAT_DMAERR ((uint8_t)0x20) //
  1972. #define USB_ERRSTAT_BTOERR ((uint8_t)0x10) //
  1973. #define USB_ERRSTAT_DFN8 ((uint8_t)0x08) //
  1974. #define USB_ERRSTAT_CRC16 ((uint8_t)0x04) //
  1975. #define USB_ERRSTAT_CRC5EOF ((uint8_t)0x02) //
  1976. #define USB_ERRSTAT_PIDERR ((uint8_t)0x01) //
  1977. #define USB0_ERREN (*(volatile uint8_t *)0x4007208C) // Error Interrupt Enable Register
  1978. #define USB_ERREN_BTSERREN ((uint8_t)0x80) //
  1979. #define USB_ERREN_DMAERREN ((uint8_t)0x20) //
  1980. #define USB_ERREN_BTOERREN ((uint8_t)0x10) //
  1981. #define USB_ERREN_DFN8EN ((uint8_t)0x08) //
  1982. #define USB_ERREN_CRC16EN ((uint8_t)0x04) //
  1983. #define USB_ERREN_CRC5EOFEN ((uint8_t)0x02) //
  1984. #define USB_ERREN_PIDERREN ((uint8_t)0x01) //
  1985. #define USB0_STAT (*(volatile uint8_t *)0x40072090) // Status Register
  1986. #define USB_STAT_TX ((uint8_t)0x08) //
  1987. #define USB_STAT_ODD ((uint8_t)0x04) //
  1988. #define USB_STAT_ENDP(n) ((uint8_t)((n) >> 4)) //
  1989. #define USB0_CTL (*(volatile uint8_t *)0x40072094) // Control Register
  1990. #define USB_CTL_JSTATE ((uint8_t)0x80) //
  1991. #define USB_CTL_SE0 ((uint8_t)0x40) //
  1992. #define USB_CTL_TXSUSPENDTOKENBUSY ((uint8_t)0x20) //
  1993. #define USB_CTL_RESET ((uint8_t)0x10) //
  1994. #define USB_CTL_HOSTMODEEN ((uint8_t)0x08) //
  1995. #define USB_CTL_RESUME ((uint8_t)0x04) //
  1996. #define USB_CTL_ODDRST ((uint8_t)0x02) //
  1997. #define USB_CTL_USBENSOFEN ((uint8_t)0x01) //
  1998. #define USB0_ADDR (*(volatile uint8_t *)0x40072098) // Address Register
  1999. #define USB0_BDTPAGE1 (*(volatile uint8_t *)0x4007209C) // BDT Page Register 1
  2000. #define USB0_FRMNUML (*(volatile uint8_t *)0x400720A0) // Frame Number Register Low
  2001. #define USB0_FRMNUMH (*(volatile uint8_t *)0x400720A4) // Frame Number Register High
  2002. #define USB0_TOKEN (*(volatile uint8_t *)0x400720A8) // Token Register
  2003. #define USB0_SOFTHLD (*(volatile uint8_t *)0x400720AC) // SOF Threshold Register
  2004. #define USB0_BDTPAGE2 (*(volatile uint8_t *)0x400720B0) // BDT Page Register 2
  2005. #define USB0_BDTPAGE3 (*(volatile uint8_t *)0x400720B4) // BDT Page Register 3
  2006. #define USB0_ENDPT0 (*(volatile uint8_t *)0x400720C0) // Endpoint Control Register
  2007. #define USB_ENDPT_HOSTWOHUB ((uint8_t)0x80) // host only, enable low speed
  2008. #define USB_ENDPT_RETRYDIS ((uint8_t)0x40) // host only, set to disable NAK retry
  2009. #define USB_ENDPT_EPCTLDIS ((uint8_t)0x10) // 0=control, 1=bulk, interrupt, isync
  2010. #define USB_ENDPT_EPRXEN ((uint8_t)0x08) // enables the endpoint for RX transfers.
  2011. #define USB_ENDPT_EPTXEN ((uint8_t)0x04) // enables the endpoint for TX transfers.
  2012. #define USB_ENDPT_EPSTALL ((uint8_t)0x02) // set to stall endpoint
  2013. #define USB_ENDPT_EPHSHK ((uint8_t)0x01) // enable handshaking during a transaction, generally set unless Isochronous
  2014. #define USB0_ENDPT1 (*(volatile uint8_t *)0x400720C4) // Endpoint Control Register
  2015. #define USB0_ENDPT2 (*(volatile uint8_t *)0x400720C8) // Endpoint Control Register
  2016. #define USB0_ENDPT3 (*(volatile uint8_t *)0x400720CC) // Endpoint Control Register
  2017. #define USB0_ENDPT4 (*(volatile uint8_t *)0x400720D0) // Endpoint Control Register
  2018. #define USB0_ENDPT5 (*(volatile uint8_t *)0x400720D4) // Endpoint Control Register
  2019. #define USB0_ENDPT6 (*(volatile uint8_t *)0x400720D8) // Endpoint Control Register
  2020. #define USB0_ENDPT7 (*(volatile uint8_t *)0x400720DC) // Endpoint Control Register
  2021. #define USB0_ENDPT8 (*(volatile uint8_t *)0x400720E0) // Endpoint Control Register
  2022. #define USB0_ENDPT9 (*(volatile uint8_t *)0x400720E4) // Endpoint Control Register
  2023. #define USB0_ENDPT10 (*(volatile uint8_t *)0x400720E8) // Endpoint Control Register
  2024. #define USB0_ENDPT11 (*(volatile uint8_t *)0x400720EC) // Endpoint Control Register
  2025. #define USB0_ENDPT12 (*(volatile uint8_t *)0x400720F0) // Endpoint Control Register
  2026. #define USB0_ENDPT13 (*(volatile uint8_t *)0x400720F4) // Endpoint Control Register
  2027. #define USB0_ENDPT14 (*(volatile uint8_t *)0x400720F8) // Endpoint Control Register
  2028. #define USB0_ENDPT15 (*(volatile uint8_t *)0x400720FC) // Endpoint Control Register
  2029. #define USB0_USBCTRL (*(volatile uint8_t *)0x40072100) // USB Control Register
  2030. #define USB_USBCTRL_SUSP ((uint8_t)0x80) // Places the USB transceiver into the suspend state.
  2031. #define USB_USBCTRL_PDE ((uint8_t)0x40) // Enables the weak pulldowns on the USB transceiver.
  2032. #define USB0_OBSERVE (*(volatile uint8_t *)0x40072104) // USB OTG Observe Register
  2033. #define USB_OBSERVE_DPPU ((uint8_t)0x80) //
  2034. #define USB_OBSERVE_DPPD ((uint8_t)0x40) //
  2035. #define USB_OBSERVE_DMPD ((uint8_t)0x10) //
  2036. #define USB0_CONTROL (*(volatile uint8_t *)0x40072108) // USB OTG Control Register
  2037. #define USB_CONTROL_DPPULLUPNONOTG ((uint8_t)0x10) // Provides control of the DP PULLUP in the USB OTG module, if USB is configured in non-OTG device mode.
  2038. #define USB0_USBTRC0 (*(volatile uint8_t *)0x4007210C) // USB Transceiver Control Register 0
  2039. #define USB_USBTRC_USBRESET ((uint8_t)0x80) //
  2040. #define USB_USBTRC_USBRESMEN ((uint8_t)0x20) //
  2041. #define USB_USBTRC_SYNC_DET ((uint8_t)0x02) //
  2042. #define USB_USBTRC_USB_RESUME_INT ((uint8_t)0x01) //
  2043. #define USB0_USBFRMADJUST (*(volatile uint8_t *)0x40072114) // Frame Adjust Register
  2044. // Chapter 41: USB Device Charger Detection Module (USBDCD)
  2045. #define USBDCD_CONTROL (*(volatile uint32_t *)0x40035000) // Control register
  2046. #define USBDCD_CLOCK (*(volatile uint32_t *)0x40035004) // Clock register
  2047. #define USBDCD_STATUS (*(volatile uint32_t *)0x40035008) // Status register
  2048. #define USBDCD_TIMER0 (*(volatile uint32_t *)0x40035010) // TIMER0 register
  2049. #define USBDCD_TIMER1 (*(volatile uint32_t *)0x40035014) // TIMER1 register
  2050. #define USBDCD_TIMER2 (*(volatile uint32_t *)0x40035018) // TIMER2 register
  2051. #if defined(KINETISK)
  2052. // Chapter 43: SPI (DSPI)
  2053. typedef struct __attribute__((packed)) {
  2054. volatile uint32_t MCR; // 0
  2055. volatile uint32_t unused1;// 4
  2056. volatile uint32_t TCR; // 8
  2057. volatile uint32_t CTAR0; // c
  2058. volatile uint32_t CTAR1; // 10
  2059. volatile uint32_t CTAR2; // 14
  2060. volatile uint32_t CTAR3; // 18
  2061. volatile uint32_t CTAR4; // 1c
  2062. volatile uint32_t CTAR5; // 20
  2063. volatile uint32_t CTAR6; // 24
  2064. volatile uint32_t CTAR7; // 28
  2065. volatile uint32_t SR; // 2c
  2066. volatile uint32_t RSER; // 30
  2067. volatile uint32_t PUSHR; // 34
  2068. volatile uint32_t POPR; // 38
  2069. volatile uint32_t TXFR[16]; // 3c
  2070. volatile uint32_t RXFR[16]; // 7c
  2071. } KINETISK_SPI_t;
  2072. #define SPI0 (*(KINETISK_SPI_t *)0x4002C000)
  2073. #define SPI0_MCR (*(volatile uint32_t *)0x4002C000) // DSPI Module Configuration Register
  2074. #define SPI_MCR_MSTR ((uint32_t)0x80000000) // Master/Slave Mode Select
  2075. #define SPI_MCR_CONT_SCKE ((uint32_t)0x40000000) //
  2076. #define SPI_MCR_DCONF(n) (((n) & 3) << 28) //
  2077. #define SPI_MCR_FRZ ((uint32_t)0x08000000) //
  2078. #define SPI_MCR_MTFE ((uint32_t)0x04000000) //
  2079. #define SPI_MCR_ROOE ((uint32_t)0x01000000) //
  2080. #define SPI_MCR_PCSIS(n) (((n) & 0x1F) << 16) //
  2081. #define SPI_MCR_DOZE ((uint32_t)0x00008000) //
  2082. #define SPI_MCR_MDIS ((uint32_t)0x00004000) //
  2083. #define SPI_MCR_DIS_TXF ((uint32_t)0x00002000) //
  2084. #define SPI_MCR_DIS_RXF ((uint32_t)0x00001000) //
  2085. #define SPI_MCR_CLR_TXF ((uint32_t)0x00000800) //
  2086. #define SPI_MCR_CLR_RXF ((uint32_t)0x00000400) //
  2087. #define SPI_MCR_SMPL_PT(n) (((n) & 3) << 8) //
  2088. #define SPI_MCR_HALT ((uint32_t)0x00000001) //
  2089. #define SPI0_TCR (*(volatile uint32_t *)0x4002C008) // DSPI Transfer Count Register
  2090. #define SPI0_CTAR0 (*(volatile uint32_t *)0x4002C00C) // DSPI Clock and Transfer Attributes Register, In Master Mode
  2091. #define SPI_CTAR_DBR ((uint32_t)0x80000000) // Double Baud Rate
  2092. #define SPI_CTAR_FMSZ(n) (((n) & 15) << 27) // Frame Size (+1)
  2093. #define SPI_CTAR_CPOL ((uint32_t)0x04000000) // Clock Polarity
  2094. #define SPI_CTAR_CPHA ((uint32_t)0x02000000) // Clock Phase
  2095. #define SPI_CTAR_LSBFE ((uint32_t)0x01000000) // LSB First
  2096. #define SPI_CTAR_PCSSCK(n) (((n) & 3) << 22) // PCS to SCK Delay Prescaler
  2097. #define SPI_CTAR_PASC(n) (((n) & 3) << 20) // After SCK Delay Prescaler
  2098. #define SPI_CTAR_PDT(n) (((n) & 3) << 18) // Delay after Transfer Prescaler
  2099. #define SPI_CTAR_PBR(n) (((n) & 3) << 16) // Baud Rate Prescaler
  2100. #define SPI_CTAR_CSSCK(n) (((n) & 15) << 12) // PCS to SCK Delay Scaler
  2101. #define SPI_CTAR_ASC(n) (((n) & 15) << 8) // After SCK Delay Scaler
  2102. #define SPI_CTAR_DT(n) (((n) & 15) << 4) // Delay After Transfer Scaler
  2103. #define SPI_CTAR_BR(n) (((n) & 15) << 0) // Baud Rate Scaler
  2104. #define SPI0_CTAR0_SLAVE (*(volatile uint32_t *)0x4002C00C) // DSPI Clock and Transfer Attributes Register, In Slave Mode
  2105. #define SPI0_CTAR1 (*(volatile uint32_t *)0x4002C010) // DSPI Clock and Transfer Attributes Register, In Master Mode
  2106. #define SPI0_SR (*(volatile uint32_t *)0x4002C02C) // DSPI Status Register
  2107. #define SPI_SR_TCF ((uint32_t)0x80000000) // Transfer Complete Flag
  2108. #define SPI_SR_TXRXS ((uint32_t)0x40000000) // TX and RX Status
  2109. #define SPI_SR_EOQF ((uint32_t)0x10000000) // End of Queue Flag
  2110. #define SPI_SR_TFUF ((uint32_t)0x08000000) // Transmit FIFO Underflow Flag
  2111. #define SPI_SR_TFFF ((uint32_t)0x02000000) // Transmit FIFO Fill Flag
  2112. #define SPI_SR_RFOF ((uint32_t)0x00080000) // Receive FIFO Overflow Flag
  2113. #define SPI_SR_RFDF ((uint32_t)0x00020000) // Receive FIFO Drain Flag
  2114. #define SPI0_RSER (*(volatile uint32_t *)0x4002C030) // DSPI DMA/Interrupt Request Select and Enable Register
  2115. #define SPI_RSER_TCF_RE ((uint32_t)0x80000000) // Transmission Complete Request Enable
  2116. #define SPI_RSER_EOQF_RE ((uint32_t)0x10000000) // DSPI Finished Request Request Enable
  2117. #define SPI_RSER_TFUF_RE ((uint32_t)0x08000000) // Transmit FIFO Underflow Request Enable
  2118. #define SPI_RSER_TFFF_RE ((uint32_t)0x02000000) // Transmit FIFO Fill Request Enable
  2119. #define SPI_RSER_TFFF_DIRS ((uint32_t)0x01000000) // Transmit FIFO FIll Dma or Interrupt Request Select
  2120. #define SPI_RSER_RFOF_RE ((uint32_t)0x00080000) // Receive FIFO Overflow Request Enable
  2121. #define SPI_RSER_RFDF_RE ((uint32_t)0x00020000) // Receive FIFO Drain Request Enable
  2122. #define SPI_RSER_RFDF_DIRS ((uint32_t)0x00010000) // Receive FIFO Drain DMA or Interrupt Request Select
  2123. #define SPI0_PUSHR (*(volatile uint32_t *)0x4002C034) // DSPI PUSH TX FIFO Register In Master Mode
  2124. #define SPI_PUSHR_CONT ((uint32_t)0x80000000) //
  2125. #define SPI_PUSHR_CTAS(n) (((n) & 7) << 28) //
  2126. #define SPI_PUSHR_EOQ ((uint32_t)0x08000000) //
  2127. #define SPI_PUSHR_CTCNT ((uint32_t)0x04000000) //
  2128. #define SPI_PUSHR_PCS(n) (((n) & 31) << 16) //
  2129. #define SPI0_PUSHR_SLAVE (*(volatile uint32_t *)0x4002C034) // DSPI PUSH TX FIFO Register In Slave Mode
  2130. #define SPI0_POPR (*(volatile uint32_t *)0x4002C038) // DSPI POP RX FIFO Register
  2131. #define SPI0_TXFR0 (*(volatile uint32_t *)0x4002C03C) // DSPI Transmit FIFO Registers
  2132. #define SPI0_TXFR1 (*(volatile uint32_t *)0x4002C040) // DSPI Transmit FIFO Registers
  2133. #define SPI0_TXFR2 (*(volatile uint32_t *)0x4002C044) // DSPI Transmit FIFO Registers
  2134. #define SPI0_TXFR3 (*(volatile uint32_t *)0x4002C048) // DSPI Transmit FIFO Registers
  2135. #define SPI0_RXFR0 (*(volatile uint32_t *)0x4002C07C) // DSPI Receive FIFO Registers
  2136. #define SPI0_RXFR1 (*(volatile uint32_t *)0x4002C080) // DSPI Receive FIFO Registers
  2137. #define SPI0_RXFR2 (*(volatile uint32_t *)0x4002C084) // DSPI Receive FIFO Registers
  2138. #define SPI0_RXFR3 (*(volatile uint32_t *)0x4002C088) // DSPI Receive FIFO Registers
  2139. #elif defined(KINETISL)
  2140. typedef struct __attribute__((packed)) {
  2141. volatile uint8_t S;
  2142. volatile uint8_t BR;
  2143. volatile uint8_t C2;
  2144. volatile uint8_t C1;
  2145. volatile uint8_t ML;
  2146. volatile uint8_t MH;
  2147. volatile uint8_t DL;
  2148. volatile uint8_t DH;
  2149. volatile uint8_t unused1;
  2150. volatile uint8_t unused2;
  2151. volatile uint8_t CI;
  2152. volatile uint8_t C3;
  2153. } KINETISL_SPI_t;
  2154. #define SPI0 (*(KINETISL_SPI_t *)0x40076000)
  2155. #define SPI1 (*(KINETISL_SPI_t *)0x40077000)
  2156. #define SPI0_S (*(volatile uint8_t *)0x40076000) // Status
  2157. #define SPI_S_SPRF ((uint8_t)0x80) // Read Buffer Full Flag
  2158. #define SPI_S_SPMF ((uint8_t)0x40) // Match Flag
  2159. #define SPI_S_SPTEF ((uint8_t)0x20) // Transmit Buffer Empty Flag
  2160. #define SPI_S_MODF ((uint8_t)0x10) // Fault Flag
  2161. #define SPI_S_RNFULLF ((uint8_t)0x08) // Receive FIFO nearly full flag
  2162. #define SPI_S_TNEAREF ((uint8_t)0x04) // Transmit FIFO nearly empty flag
  2163. #define SPI_S_TXFULLF ((uint8_t)0x02) // Transmit FIFO full flag
  2164. #define SPI_S_RFIFOEF ((uint8_t)0x01) // Read FIFO empty flag
  2165. #define SPI0_BR (*(volatile uint8_t *)0x40076001) // Baud Rate
  2166. #define SPI_BR_SPPR(n) (((n) & 7) << 4) // Prescale = N+1
  2167. #define SPI_BR_SPR(n) (((n) & 15) << 0) // Baud Rate Divisor = 2^(N+1) : 0-8 -> 2 to 512
  2168. #define SPI0_C2 (*(volatile uint8_t *)0x40076002) // Control Register 2
  2169. #define SPI_C2_SPMIE ((uint8_t)0x80) // Match Interrupt Enable
  2170. #define SPI_C2_SPIMODE ((uint8_t)0x40) // 0 = 8 bit mode, 1 = 16 bit mode
  2171. #define SPI_C2_TXDMAE ((uint8_t)0x20) // Transmit DMA enable
  2172. #define SPI_C2_MODFEN ((uint8_t)0x10) // Master Mode-Fault Function Enable
  2173. #define SPI_C2_BIDIROE ((uint8_t)0x08) // Bidirectional Mode Output Enable
  2174. #define SPI_C2_RXDMAE ((uint8_t)0x04) // Receive DMA enable
  2175. #define SPI_C2_SPISWAI ((uint8_t)0x02) // SPI Stop in Wait Mode
  2176. #define SPI_C2_SPC0 ((uint8_t)0x01) // SPI Pin Control, 0=normal, 1=single bidirectional
  2177. #define SPI0_C1 (*(volatile uint8_t *)0x40076003) // Control Register 1
  2178. #define SPI_C1_SPIE ((uint8_t)0x80) // Interrupt Enable
  2179. #define SPI_C1_SPE ((uint8_t)0x40) // SPI System Enable
  2180. #define SPI_C1_SPTIE ((uint8_t)0x20) // Transmit Interrupt Enable
  2181. #define SPI_C1_MSTR ((uint8_t)0x10) // Master/Slave Mode: 0=slave, 1=master
  2182. #define SPI_C1_CPOL ((uint8_t)0x08) // Clock Polarity
  2183. #define SPI_C1_CPHA ((uint8_t)0x04) // Clock Phase
  2184. #define SPI_C1_SSOE ((uint8_t)0x02) // Slave Select Output Enable
  2185. #define SPI_C1_LSBFE ((uint8_t)0x01) // LSB First: 0=MSB First, 1=LSB First
  2186. #define SPI0_ML (*(volatile uint8_t *)0x40076004) // Match Low
  2187. #define SPI0_MH (*(volatile uint8_t *)0x40076005) // Match High
  2188. #define SPI0_DL (*(volatile uint8_t *)0x40076006) // Data Low
  2189. #define SPI0_DH (*(volatile uint8_t *)0x40076007) // Data High
  2190. #define SPI0_CI (*(volatile uint8_t *)0x4007600A) // clear interrupt
  2191. #define SPI_CI_TXFERR ((uint8_t)0x80) // Transmit FIFO error flag
  2192. #define SPI_CI_RXFERR ((uint8_t)0x40) // Receive FIFO error flag
  2193. #define SPI_CI_TXFOF ((uint8_t)0x20) // Transmit FIFO overflow flag
  2194. #define SPI_CI_RXFOF ((uint8_t)0x10) // Receive FIFO overflow flag
  2195. #define SPI_CI_TNEAREFCI ((uint8_t)0x08) // Transmit FIFO nearly empty flag clear interrupt
  2196. #define SPI_CI_RNFULLFCI ((uint8_t)0x04) // Receive FIFO nearly full flag clear interrupt
  2197. #define SPI_CI_SPTEFCI ((uint8_t)0x02) // Transmit FIFO empty flag clear interrupt
  2198. #define SPI_CI_SPRFCI ((uint8_t)0x01) // Receive FIFO full flag clear interrupt
  2199. #define SPI0_C3 (*(volatile uint8_t *)0x4007600B) // Control Register 3
  2200. #define SPI_C3_TNEAREF_MARK ((uint8_t)0x20) // Transmit FIFO nearly empty watermark
  2201. #define SPI_C3_RNFULLF_MARK ((uint8_t)0x10) // Receive FIFO nearly full watermark
  2202. #define SPI_C3_INTCLR ((uint8_t)0x08) // Interrupt clearing mechanism select
  2203. #define SPI_C3_TNEARIEN ((uint8_t)0x04) // Transmit FIFO nearly empty interrupt enable
  2204. #define SPI_C3_RNFULLIEN ((uint8_t)0x02) // Receive FIFO nearly full interrupt enable
  2205. #define SPI_C3_FIFOMODE ((uint8_t)0x01) // FIFO mode enable
  2206. #define SPI1_S (*(volatile uint8_t *)0x40077000) // Status
  2207. #define SPI1_BR (*(volatile uint8_t *)0x40077001) // Baud Rate
  2208. #define SPI1_C2 (*(volatile uint8_t *)0x40077002) // Control Register 2
  2209. #define SPI1_C1 (*(volatile uint8_t *)0x40077003) // Control Register 1
  2210. #define SPI1_ML (*(volatile uint8_t *)0x40077004) // Match Low
  2211. #define SPI1_MH (*(volatile uint8_t *)0x40077005) // Match High
  2212. #define SPI1_DL (*(volatile uint8_t *)0x40077006) // Data Low
  2213. #define SPI1_DH (*(volatile uint8_t *)0x40077007) // Data High
  2214. #define SPI1_CI (*(volatile uint8_t *)0x4007700A) // clear interrupt
  2215. #define SPI1_C3 (*(volatile uint8_t *)0x4007700B) // Control Register 3
  2216. #endif
  2217. // Chapter 44: Inter-Integrated Circuit (I2C)
  2218. #define I2C0_A1 (*(volatile uint8_t *)0x40066000) // I2C Address Register 1
  2219. #define I2C0_F (*(volatile uint8_t *)0x40066001) // I2C Frequency Divider register
  2220. #define I2C0_C1 (*(volatile uint8_t *)0x40066002) // I2C Control Register 1
  2221. #define I2C_C1_IICEN ((uint8_t)0x80) // I2C Enable
  2222. #define I2C_C1_IICIE ((uint8_t)0x40) // I2C Interrupt Enable
  2223. #define I2C_C1_MST ((uint8_t)0x20) // Master Mode Select
  2224. #define I2C_C1_TX ((uint8_t)0x10) // Transmit Mode Select
  2225. #define I2C_C1_TXAK ((uint8_t)0x08) // Transmit Acknowledge Enable
  2226. #define I2C_C1_RSTA ((uint8_t)0x04) // Repeat START
  2227. #define I2C_C1_WUEN ((uint8_t)0x02) // Wakeup Enable
  2228. #define I2C_C1_DMAEN ((uint8_t)0x01) // DMA Enable
  2229. #define I2C0_S (*(volatile uint8_t *)0x40066003) // I2C Status register
  2230. #define I2C_S_TCF ((uint8_t)0x80) // Transfer Complete Flag
  2231. #define I2C_S_IAAS ((uint8_t)0x40) // Addressed As A Slave
  2232. #define I2C_S_BUSY ((uint8_t)0x20) // Bus Busy
  2233. #define I2C_S_ARBL ((uint8_t)0x10) // Arbitration Lost
  2234. #define I2C_S_RAM ((uint8_t)0x08) // Range Address Match
  2235. #define I2C_S_SRW ((uint8_t)0x04) // Slave Read/Write
  2236. #define I2C_S_IICIF ((uint8_t)0x02) // Interrupt Flag
  2237. #define I2C_S_RXAK ((uint8_t)0x01) // Receive Acknowledge
  2238. #define I2C0_D (*(volatile uint8_t *)0x40066004) // I2C Data I/O register
  2239. #define I2C0_C2 (*(volatile uint8_t *)0x40066005) // I2C Control Register 2
  2240. #define I2C_C2_GCAEN ((uint8_t)0x80) // General Call Address Enable
  2241. #define I2C_C2_ADEXT ((uint8_t)0x40) // Address Extension
  2242. #define I2C_C2_HDRS ((uint8_t)0x20) // High Drive Select
  2243. #define I2C_C2_SBRC ((uint8_t)0x10) // Slave Baud Rate Control
  2244. #define I2C_C2_RMEN ((uint8_t)0x08) // Range Address Matching Enable
  2245. #define I2C_C2_AD(n) ((n) & 7) // Slave Address, upper 3 bits
  2246. #define I2C0_FLT (*(volatile uint8_t *)0x40066006) // I2C Programmable Input Glitch Filter register
  2247. #define I2C0_RA (*(volatile uint8_t *)0x40066007) // I2C Range Address register
  2248. #define I2C0_SMB (*(volatile uint8_t *)0x40066008) // I2C SMBus Control and Status register
  2249. #define I2C0_A2 (*(volatile uint8_t *)0x40066009) // I2C Address Register 2
  2250. #define I2C0_SLTH (*(volatile uint8_t *)0x4006600A) // I2C SCL Low Timeout Register High
  2251. #define I2C0_SLTL (*(volatile uint8_t *)0x4006600B) // I2C SCL Low Timeout Register Low
  2252. #define I2C1_A1 (*(volatile uint8_t *)0x40067000) // I2C Address Register 1
  2253. #define I2C1_F (*(volatile uint8_t *)0x40067001) // I2C Frequency Divider register
  2254. #define I2C1_C1 (*(volatile uint8_t *)0x40067002) // I2C Control Register 1
  2255. #define I2C1_S (*(volatile uint8_t *)0x40067003) // I2C Status register
  2256. #define I2C1_D (*(volatile uint8_t *)0x40067004) // I2C Data I/O register
  2257. #define I2C1_C2 (*(volatile uint8_t *)0x40067005) // I2C Control Register 2
  2258. #define I2C1_FLT (*(volatile uint8_t *)0x40067006) // I2C Programmable Input Glitch Filter register
  2259. #define I2C1_RA (*(volatile uint8_t *)0x40067007) // I2C Range Address register
  2260. #define I2C1_SMB (*(volatile uint8_t *)0x40067008) // I2C SMBus Control and Status register
  2261. #define I2C1_A2 (*(volatile uint8_t *)0x40067009) // I2C Address Register 2
  2262. #define I2C1_SLTH (*(volatile uint8_t *)0x4006700A) // I2C SCL Low Timeout Register High
  2263. #define I2C1_SLTL (*(volatile uint8_t *)0x4006700B) // I2C SCL Low Timeout Register Low
  2264. // Chapter 45: Universal Asynchronous Receiver/Transmitter (UART)
  2265. typedef struct __attribute__((packed)) {
  2266. volatile uint8_t BDH;
  2267. volatile uint8_t BDL;
  2268. volatile uint8_t C1;
  2269. volatile uint8_t C2;
  2270. volatile uint8_t S1;
  2271. volatile uint8_t S2;
  2272. volatile uint8_t C3;
  2273. volatile uint8_t D;
  2274. volatile uint8_t MA1;
  2275. volatile uint8_t MA2;
  2276. volatile uint8_t C4;
  2277. volatile uint8_t C5;
  2278. volatile uint8_t ED;
  2279. volatile uint8_t MODEM;
  2280. volatile uint8_t IR;
  2281. volatile uint8_t unused1;
  2282. volatile uint8_t PFIFO;
  2283. volatile uint8_t CFIFO;
  2284. volatile uint8_t SFIFO;
  2285. volatile uint8_t TWFIFO;
  2286. volatile uint8_t TCFIFO;
  2287. volatile uint8_t RWFIFO;
  2288. volatile uint8_t RCFIFO;
  2289. volatile uint8_t unused2;
  2290. volatile uint8_t C7816;
  2291. volatile uint8_t IE7816;
  2292. volatile uint8_t IS7816;
  2293. union { volatile uint8_t WP7816T0; volatile uint8_t WP7816T1; };
  2294. volatile uint8_t WN7816;
  2295. volatile uint8_t WF7816;
  2296. volatile uint8_t ET7816;
  2297. volatile uint8_t TL7816;
  2298. volatile uint8_t unused3;
  2299. volatile uint8_t C6;
  2300. volatile uint8_t PCTH;
  2301. volatile uint8_t PCTL;
  2302. volatile uint8_t B1T;
  2303. volatile uint8_t SDTH;
  2304. volatile uint8_t SDTL;
  2305. volatile uint8_t PRE;
  2306. volatile uint8_t TPL;
  2307. volatile uint8_t IE;
  2308. volatile uint8_t WB;
  2309. volatile uint8_t S3;
  2310. volatile uint8_t S4;
  2311. volatile uint8_t RPL;
  2312. volatile uint8_t RPREL;
  2313. volatile uint8_t CPW;
  2314. volatile uint8_t RIDT;
  2315. volatile uint8_t TIDT;
  2316. } KINETISK_UART_t;
  2317. #define UART0 (*(KINETISK_UART_t *)0x4006A000)
  2318. #define UART0_BDH (UART0.BDH) // UART Baud Rate Registers: High
  2319. #define UART0_BDL (UART0.BDL) // UART Baud Rate Registers: Low
  2320. #define UART0_C1 (UART0.C1) // UART Control Register 1
  2321. #define UART_C1_LOOPS 0x80 // When LOOPS is set, the RxD pin is disconnected from the UART and the transmitter output is internally connected to the receiver input
  2322. #define UART_C1_UARTSWAI 0x40 // UART Stops in Wait Mode
  2323. #define UART_C1_RSRC 0x20 // When LOOPS is set, the RSRC field determines the source for the receiver shift register input
  2324. #define UART_C1_M 0x10 // 9-bit or 8-bit Mode Select
  2325. #define UART_C1_WAKE 0x08 // Determines which condition wakes the UART
  2326. #define UART_C1_ILT 0x04 // Idle Line Type Select
  2327. #define UART_C1_PE 0x02 // Parity Enable
  2328. #define UART_C1_PT 0x01 // Parity Type, 0=even, 1=odd
  2329. #define UART0_C2 (UART0.C2) // UART Control Register 2
  2330. #define UART_C2_TIE 0x80 // Transmitter Interrupt or DMA Transfer Enable.
  2331. #define UART_C2_TCIE 0x40 // Transmission Complete Interrupt Enable
  2332. #define UART_C2_RIE 0x20 // Receiver Full Interrupt or DMA Transfer Enable
  2333. #define UART_C2_ILIE 0x10 // Idle Line Interrupt Enable
  2334. #define UART_C2_TE 0x08 // Transmitter Enable
  2335. #define UART_C2_RE 0x04 // Receiver Enable
  2336. #define UART_C2_RWU 0x02 // Receiver Wakeup Control
  2337. #define UART_C2_SBK 0x01 // Send Break
  2338. #define UART0_S1 (UART0.S1) // UART Status Register 1
  2339. #define UART_S1_TDRE 0x80 // Transmit Data Register Empty Flag
  2340. #define UART_S1_TC 0x40 // Transmit Complete Flag
  2341. #define UART_S1_RDRF 0x20 // Receive Data Register Full Flag
  2342. #define UART_S1_IDLE 0x10 // Idle Line Flag
  2343. #define UART_S1_OR 0x08 // Receiver Overrun Flag
  2344. #define UART_S1_NF 0x04 // Noise Flag
  2345. #define UART_S1_FE 0x02 // Framing Error Flag
  2346. #define UART_S1_PF 0x01 // Parity Error Flag
  2347. #define UART0_S2 (UART0.S2) // UART Status Register 2
  2348. #define UART0_C3 (UART0.C3) // UART Control Register 3
  2349. #define UART0_D (UART0.D) // UART Data Register
  2350. #define UART0_MA1 (UART0.MA1) // UART Match Address Registers 1
  2351. #define UART0_MA2 (UART0.MA2) // UART Match Address Registers 2
  2352. #define UART0_C4 (UART0.C4) // UART Control Register 4
  2353. #define UART0_C5 (UART0.C5) // UART Control Register 5
  2354. #define UART0_ED (UART0.ED) // UART Extended Data Register
  2355. #define UART0_MODEM (UART0.MODEM) // UART Modem Register
  2356. #define UART0_IR (UART0.IR) // UART Infrared Register
  2357. #define UART0_PFIFO (UART0.PFIFO) // UART FIFO Parameters
  2358. #define UART_PFIFO_TXFE 0x80 // Transmit FIFO Enable
  2359. #define UART_PFIFO_TXFIFOSIZE(n) (((n) & 7) << 4) // Transmit FIFO Size, 0=1, 1=4, 2=8, 3=16, 4=32, 5=64, 6=128
  2360. #define UART_PFIFO_RXFE 0x08 // Receive FIFO Enable
  2361. #define UART_PFIFO_RXFIFOSIZE(n) (((n) & 7) << 0) // Transmit FIFO Size, 0=1, 1=4, 2=8, 3=16, 4=32, 5=64, 6=128
  2362. #define UART0_CFIFO (UART0.CFIFO) // UART FIFO Control Register
  2363. #define UART_CFIFO_TXFLUSH 0x80 // Transmit FIFO/Buffer Flush
  2364. #define UART_CFIFO_RXFLUSH 0x40 // Receive FIFO/Buffer Flush
  2365. #define UART_CFIFO_RXOFE 0x04 // Receive FIFO Overflow Interrupt Enable
  2366. #define UART_CFIFO_TXOFE 0x02 // Transmit FIFO Overflow Interrupt Enable
  2367. #define UART_CFIFO_RXUFE 0x01 // Receive FIFO Underflow Interrupt Enable
  2368. #define UART0_SFIFO (UART0.SFIFO) // UART FIFO Status Register
  2369. #define UART_SFIFO_TXEMPT 0x80 // Transmit Buffer/FIFO Empty
  2370. #define UART_SFIFO_RXEMPT 0x40 // Receive Buffer/FIFO Empty
  2371. #define UART_SFIFO_RXOF 0x04 // Receiver Buffer Overflow Flag
  2372. #define UART_SFIFO_TXOF 0x02 // Transmitter Buffer Overflow Flag
  2373. #define UART_SFIFO_RXUF 0x01 // Receiver Buffer Underflow Flag
  2374. #define UART0_TWFIFO (UART0.TWFIFO) // UART FIFO Transmit Watermark
  2375. #define UART0_TCFIFO (UART0.TCFIFO) // UART FIFO Transmit Count
  2376. #define UART0_RWFIFO (UART0.RWFIFO) // UART FIFO Receive Watermark
  2377. #define UART0_RCFIFO (UART0.RCFIFO) // UART FIFO Receive Count
  2378. #define UART0_C7816 (UART0.C7816) // UART 7816 Control Register
  2379. #define UART_C7816_ONACK 0x10 // Generate NACK on Overflow
  2380. #define UART_C7816_ANACK 0x08 // Generate NACK on Error
  2381. #define UART_C7816_INIT 0x04 // Detect Initial Character
  2382. #define UART_C7816_TTYPE 0x02 // Transfer Type
  2383. #define UART_C7816_ISO_7816E 0x01 // ISO-7816 Functionality Enabled
  2384. #define UART0_IE7816 (UART0.IE7816) // UART 7816 Interrupt Enable Register
  2385. #define UART_IE7816_WTE 0x80 // Wait Timer Interrupt Enable
  2386. #define UART_IE7816_CWTE 0x40 // Character Wait Timer Interrupt Enable
  2387. #define UART_IE7816_BWTE 0x20 // Block Wait Timer Interrupt Enable
  2388. #define UART_IE7816_INITDE 0x10 // Initial Character Detected Interrupt Enable
  2389. #define UART_IE7816_GTVE 0x04 // Guard Timer Violated Interrupt Enable
  2390. #define UART_IE7816_TXTE 0x02 // Transmit Threshold Exceeded Interrupt Enable
  2391. #define UART_IE7816_RXTE 0x01 // Receive Threshold Exceeded Interrupt Enable
  2392. #define UART0_IS7816 (UART0.IS7816) // UART 7816 Interrupt Status Register
  2393. #define UART_IS7816_WT 0x80 // Wait Timer Interrupt
  2394. #define UART_IS7816_CWT 0x40 // Character Wait Timer Interrupt
  2395. #define UART_IS7816_BWT 0x20 // Block Wait Timer Interrupt
  2396. #define UART_IS7816_INITD 0x10 // Initial Character Detected Interrupt
  2397. #define UART_IS7816_GTV 0x04 // Guard Timer Violated Interrupt
  2398. #define UART_IS7816_TXT 0x02 // Transmit Threshold Exceeded Interrupt
  2399. #define UART_IS7816_RXT 0x01 // Receive Threshold Exceeded Interrupt
  2400. #define UART0_WP7816T0 (UART0.WP7816T0) // UART 7816 Wait Parameter Register
  2401. #define UART0_WP7816T1 (UART0.WP7816T1) // UART 7816 Wait Parameter Register
  2402. #define UART_WP7816T1_CWI(n) (((n) & 15) << 4) // Character Wait Time Integer (C7816[TTYPE] = 1)
  2403. #define UART_WP7816T1_BWI(n) (((n) & 15) << 0) // Block Wait Time Integer(C7816[TTYPE] = 1)
  2404. #define UART0_WN7816 (UART0.WN7816) // UART 7816 Wait N Register
  2405. #define UART0_WF7816 (UART0.WF7816) // UART 7816 Wait FD Register
  2406. #define UART0_ET7816 (UART0.ET7816) // UART 7816 Error Threshold Register
  2407. #define UART_ET7816_TXTHRESHOLD(n) (((n) & 15) << 4) // Transmit NACK Threshold
  2408. #define UART_ET7816_RXTHRESHOLD(n) (((n) & 15) << 0) // Receive NACK Threshold
  2409. #define UART0_TL7816 (UART0.TL7816) // UART 7816 Transmit Length Register
  2410. #define UART0_C6 (UART0.C6) // UART CEA709.1-B Control Register 6
  2411. #define UART_C6_EN709 0x80 // Enables the CEA709.1-B feature.
  2412. #define UART_C6_TX709 0x40 // Starts CEA709.1-B transmission.
  2413. #define UART_C6_CE 0x20 // Collision Enable
  2414. #define UART_C6_CP 0x10 // Collision Signal Polarity
  2415. #define UART0_PCTH (UART0.PCTH) // UART CEA709.1-B Packet Cycle Time Counter High
  2416. #define UART0_PCTL (UART0.PCTL) // UART CEA709.1-B Packet Cycle Time Counter Low
  2417. #define UART0_B1T (UART0.B1T) // UART CEA709.1-B Beta1 Timer
  2418. #define UART0_SDTH (UART0.SDTH) // UART CEA709.1-B Secondary Delay Timer High
  2419. #define UART0_SDTL (UART0.SDTL) // UART CEA709.1-B Secondary Delay Timer Low
  2420. #define UART0_PRE (UART0.PRE) // UART CEA709.1-B Preamble
  2421. #define UART0_TPL (UART0.TPL) // UART CEA709.1-B Transmit Packet Length
  2422. #define UART0_IE (UART0.IE) // UART CEA709.1-B Interrupt Enable Register
  2423. #define UART_IE_WBEIE 0x40 // WBASE Expired Interrupt Enable
  2424. #define UART_IE_ISDIE 0x20 // Initial Sync Detection Interrupt Enable
  2425. #define UART_IE_PRXIE 0x10 // Packet Received Interrupt Enable
  2426. #define UART_IE_PTXIE 0x08 // Packet Transmitted Interrupt Enable
  2427. #define UART_IE_PCTEIE 0x04 // Packet Cycle Timer Interrupt Enable
  2428. #define UART_IE_PSIE 0x02 // Preamble Start Interrupt Enable
  2429. #define UART_IE_TXFIE 0x01 // Transmission Fail Interrupt Enable
  2430. #define UART0_WB (UART0.WB) // UART CEA709.1-B WBASE
  2431. #define UART0_S3 (UART0.S3) // UART CEA709.1-B Status Register
  2432. #define UART_S3_PEF 0x80 // Preamble Error Flag
  2433. #define UART_S3_WBEF 0x40 // Wbase Expired Flag
  2434. #define UART_S3_ISD 0x20 // Initial Sync Detect
  2435. #define UART_S3_PRXF 0x10 // Packet Received Flag
  2436. #define UART_S3_PTXF 0x08 // Packet Transmitted Flag
  2437. #define UART_S3_PCTEF 0x04 // Packet Cycle Timer Expired Flag
  2438. #define UART_S3_PSF 0x02 // Preamble Start Flag
  2439. #define UART_S3_TXFF 0x01 // Transmission Fail Flag
  2440. #define UART0_S4 (UART0.S4) // UART CEA709.1-B Status Register
  2441. #define UART_S4_INITF 0x10 // Initial Synchronization Fail Flag
  2442. #define UART_S4_CDET(n) (((n) & 3) << 2) // Indicates collision: 0=none, 1=preamble, 2=data, 3=line code violation
  2443. #define UART_S4_ILCV 0x02 // Improper Line Code Violation
  2444. #define UART_S4_FE 0x01 // Framing Error
  2445. #define UART0_RPL (UART0.RPL) // UART CEA709.1-B Received Packet Length
  2446. #define UART0_RPREL (UART0.RPREL) // UART CEA709.1-B Received Preamble Length
  2447. #define UART0_CPW (UART0.CPW) // UART CEA709.1-B Collision Pulse Width
  2448. #define UART0_RIDT (UART0.RIDT) // UART CEA709.1-B Receive Indeterminate Time
  2449. #define UART0_TIDT (UART0.TIDT) // UART CEA709.1-B Transmit Indeterminate Time
  2450. #define UART1 (*(KINETISK_UART_t *)0x4006B000)
  2451. #define UART1_BDH (UART1.BDH) // UART Baud Rate Registers: High
  2452. #define UART1_BDL (UART1.BDL) // UART Baud Rate Registers: Low
  2453. #define UART1_C1 (UART1.C1) // UART Control Register 1
  2454. #define UART1_C2 (UART1.C2) // UART Control Register 2
  2455. #define UART1_S1 (UART1.S1) // UART Status Register 1
  2456. #define UART1_S2 (UART1.S2) // UART Status Register 2
  2457. #define UART1_C3 (UART1.C3) // UART Control Register 3
  2458. #define UART1_D (UART1.D) // UART Data Register
  2459. #define UART1_MA1 (UART1.MA1) // UART Match Address Registers 1
  2460. #define UART1_MA2 (UART1.MA2) // UART Match Address Registers 2
  2461. #define UART1_C4 (UART1.C4) // UART Control Register 4
  2462. #define UART1_C5 (UART1.C5) // UART Control Register 5
  2463. #define UART1_ED (UART1.ED) // UART Extended Data Register
  2464. #define UART1_MODEM (UART1.MODEM) // UART Modem Register
  2465. #define UART1_IR (UART1.IR) // UART Infrared Register
  2466. #define UART1_PFIFO (UART1.PFIFO) // UART FIFO Parameters
  2467. #define UART1_CFIFO (UART1.CFIFO) // UART FIFO Control Register
  2468. #define UART1_SFIFO (UART1.SFIFO) // UART FIFO Status Register
  2469. #define UART1_TWFIFO (UART1.TWFIFO) // UART FIFO Transmit Watermark
  2470. #define UART1_TCFIFO (UART1.TCFIFO) // UART FIFO Transmit Count
  2471. #define UART1_RWFIFO (UART1.RWFIFO) // UART FIFO Receive Watermark
  2472. #define UART1_RCFIFO (UART1.RCFIFO) // UART FIFO Receive Count
  2473. #define UART1_C7816 (UART1.C7816) // UART 7816 Control Register
  2474. #define UART1_IE7816 (UART1.IE7816) // UART 7816 Interrupt Enable Register
  2475. #define UART1_IS7816 (UART1.IS7816) // UART 7816 Interrupt Status Register
  2476. #define UART1_WP7816T0 (UART1.WP7816T0) // UART 7816 Wait Parameter Register
  2477. #define UART1_WP7816T1 (UART1.WP7816T1) // UART 7816 Wait Parameter Register
  2478. #define UART1_WN7816 (UART1.WN7816) // UART 7816 Wait N Register
  2479. #define UART1_WF7816 (UART1.WF7816) // UART 7816 Wait FD Register
  2480. #define UART1_ET7816 (UART1.ET7816) // UART 7816 Error Threshold Register
  2481. #define UART1_TL7816 (UART1.TL7816) // UART 7816 Transmit Length Register
  2482. #define UART1_C6 (UART1.C6) // UART CEA709.1-B Control Register 6
  2483. #define UART1_PCTH (UART1.PCTH) // UART CEA709.1-B Packet Cycle Time Counter High
  2484. #define UART1_PCTL (UART1.PCTL) // UART CEA709.1-B Packet Cycle Time Counter Low
  2485. #define UART1_B1T (UART1.B1T) // UART CEA709.1-B Beta1 Timer
  2486. #define UART1_SDTH (UART1.SDTH) // UART CEA709.1-B Secondary Delay Timer High
  2487. #define UART1_SDTL (UART1.SDTL) // UART CEA709.1-B Secondary Delay Timer Low
  2488. #define UART1_PRE (UART1.PRE) // UART CEA709.1-B Preamble
  2489. #define UART1_TPL (UART1.TPL) // UART CEA709.1-B Transmit Packet Length
  2490. #define UART1_IE (UART1.IE) // UART CEA709.1-B Interrupt Enable Register
  2491. #define UART1_WB (UART1.WB) // UART CEA709.1-B WBASE
  2492. #define UART1_S3 (UART1.S3) // UART CEA709.1-B Status Register
  2493. #define UART1_S4 (UART1.S4) // UART CEA709.1-B Status Register
  2494. #define UART1_RPL (UART1.RPL) // UART CEA709.1-B Received Packet Length
  2495. #define UART1_RPREL (UART1.RPREL) // UART CEA709.1-B Received Preamble Length
  2496. #define UART1_CPW (UART1.CPW) // UART CEA709.1-B Collision Pulse Width
  2497. #define UART1_RIDT (UART1.RIDT) // UART CEA709.1-B Receive Indeterminate Time
  2498. #define UART1_TIDT (UART1.TIDT) // UART CEA709.1-B Transmit Indeterminate Time
  2499. #define UART2 (*(KINETISK_UART_t *)0x4006C000)
  2500. #define UART2_BDH (UART2.BDH) // UART Baud Rate Registers: High
  2501. #define UART2_BDL (UART2.BDL) // UART Baud Rate Registers: Low
  2502. #define UART2_C1 (UART2.C1) // UART Control Register 1
  2503. #define UART2_C2 (UART2.C2) // UART Control Register 2
  2504. #define UART2_S1 (UART2.S1) // UART Status Register 1
  2505. #define UART2_S2 (UART2.S2) // UART Status Register 2
  2506. #define UART2_C3 (UART2.C3) // UART Control Register 3
  2507. #define UART2_D (UART2.D) // UART Data Register
  2508. #define UART2_MA1 (UART2.MA1) // UART Match Address Registers 1
  2509. #define UART2_MA2 (UART2.MA2) // UART Match Address Registers 2
  2510. #define UART2_C4 (UART2.C4) // UART Control Register 4
  2511. #define UART2_C5 (UART2.C5) // UART Control Register 5
  2512. #define UART2_ED (UART2.ED) // UART Extended Data Register
  2513. #define UART2_MODEM (UART2.MODEM) // UART Modem Register
  2514. #define UART2_IR (UART2.IR) // UART Infrared Register
  2515. #define UART2_PFIFO (UART2.PFIFO) // UART FIFO Parameters
  2516. #define UART2_CFIFO (UART2.CFIFO) // UART FIFO Control Register
  2517. #define UART2_SFIFO (UART2.SFIFO) // UART FIFO Status Register
  2518. #define UART2_TWFIFO (UART2.TWFIFO) // UART FIFO Transmit Watermark
  2519. #define UART2_TCFIFO (UART2.TCFIFO) // UART FIFO Transmit Count
  2520. #define UART2_RWFIFO (UART2.RWFIFO) // UART FIFO Receive Watermark
  2521. #define UART2_RCFIFO (UART2.RCFIFO) // UART FIFO Receive Count
  2522. #define UART2_C7816 (UART2.C7816) // UART 7816 Control Register
  2523. #define UART2_IE7816 (UART2.IE7816) // UART 7816 Interrupt Enable Register
  2524. #define UART2_IS7816 (UART2.IS7816) // UART 7816 Interrupt Status Register
  2525. #define UART2_WP7816T0 (UART2.WP7816T0) // UART 7816 Wait Parameter Register
  2526. #define UART2_WP7816T1 (UART2.WP7816T1) // UART 7816 Wait Parameter Register
  2527. #define UART2_WN7816 (UART2.WN7816) // UART 7816 Wait N Register
  2528. #define UART2_WF7816 (UART2.WF7816) // UART 7816 Wait FD Register
  2529. #define UART2_ET7816 (UART2.ET7816) // UART 7816 Error Threshold Register
  2530. #define UART2_TL7816 (UART2.TL7816) // UART 7816 Transmit Length Register
  2531. #define UART2_C6 (UART2.C6) // UART CEA709.1-B Control Register 6
  2532. #define UART2_PCTH (UART2.PCTH) // UART CEA709.1-B Packet Cycle Time Counter High
  2533. #define UART2_PCTL (UART2.PCTL) // UART CEA709.1-B Packet Cycle Time Counter Low
  2534. #define UART2_B1T (UART2.B1T) // UART CEA709.1-B Beta1 Timer
  2535. #define UART2_SDTH (UART2.SDTH) // UART CEA709.1-B Secondary Delay Timer High
  2536. #define UART2_SDTL (UART2.SDTL) // UART CEA709.1-B Secondary Delay Timer Low
  2537. #define UART2_PRE (UART2.PRE) // UART CEA709.1-B Preamble
  2538. #define UART2_TPL (UART2.TPL) // UART CEA709.1-B Transmit Packet Length
  2539. #define UART2_IE (UART2.IE) // UART CEA709.1-B Interrupt Enable Register
  2540. #define UART2_WB (UART2.WB) // UART CEA709.1-B WBASE
  2541. #define UART2_S3 (UART2.S3) // UART CEA709.1-B Status Register
  2542. #define UART2_S4 (UART2.S4) // UART CEA709.1-B Status Register
  2543. #define UART2_RPL (UART2.RPL) // UART CEA709.1-B Received Packet Length
  2544. #define UART2_RPREL (UART2.RPREL) // UART CEA709.1-B Received Preamble Length
  2545. #define UART2_CPW (UART2.CPW) // UART CEA709.1-B Collision Pulse Width
  2546. #define UART2_RIDT (UART2.RIDT) // UART CEA709.1-B Receive Indeterminate Time
  2547. #define UART2_TIDT (UART2.TIDT) // UART CEA709.1-B Transmit Indeterminate Time
  2548. // Chapter 46: Synchronous Audio Interface (SAI)
  2549. #define I2S0_TCSR (*(volatile uint32_t *)0x4002F000) // SAI Transmit Control Register
  2550. #define I2S_TCSR_TE ((uint32_t)0x80000000) // Transmitter Enable
  2551. #define I2S_TCSR_STOPE ((uint32_t)0x40000000) // Transmitter Enable in Stop mode
  2552. #define I2S_TCSR_DBGE ((uint32_t)0x20000000) // Transmitter Enable in Debug mode
  2553. #define I2S_TCSR_BCE ((uint32_t)0x10000000) // Bit Clock Enable
  2554. #define I2S_TCSR_FR ((uint32_t)0x02000000) // FIFO Reset
  2555. #define I2S_TCSR_SR ((uint32_t)0x01000000) // Software Reset
  2556. #define I2S_TCSR_WSF ((uint32_t)0x00100000) // Word Start Flag
  2557. #define I2S_TCSR_SEF ((uint32_t)0x00080000) // Sync Error Flag
  2558. #define I2S_TCSR_FEF ((uint32_t)0x00040000) // FIFO Error Flag (underrun)
  2559. #define I2S_TCSR_FWF ((uint32_t)0x00020000) // FIFO Warning Flag (empty)
  2560. #define I2S_TCSR_FRF ((uint32_t)0x00010000) // FIFO Request Flag (Data Ready)
  2561. #define I2S_TCSR_WSIE ((uint32_t)0x00001000) // Word Start Interrupt Enable
  2562. #define I2S_TCSR_SEIE ((uint32_t)0x00000800) // Sync Error Interrupt Enable
  2563. #define I2S_TCSR_FEIE ((uint32_t)0x00000400) // FIFO Error Interrupt Enable
  2564. #define I2S_TCSR_FWIE ((uint32_t)0x00000200) // FIFO Warning Interrupt Enable
  2565. #define I2S_TCSR_FRIE ((uint32_t)0x00000100) // FIFO Request Interrupt Enable
  2566. #define I2S_TCSR_FWDE ((uint32_t)0x00000002) // FIFO Warning DMA Enable
  2567. #define I2S_TCSR_FRDE ((uint32_t)0x00000001) // FIFO Request DMA Enable
  2568. #define I2S0_TCR1 (*(volatile uint32_t *)0x4002F004) // SAI Transmit Configuration 1 Register
  2569. #define I2S_TCR1_TFW(n) ((uint32_t)n & 0x03) // Transmit FIFO watermark
  2570. #define I2S0_TCR2 (*(volatile uint32_t *)0x4002F008) // SAI Transmit Configuration 2 Register
  2571. #define I2S_TCR2_DIV(n) ((uint32_t)n & 0xff) // Bit clock divide by (DIV+1)*2
  2572. #define I2S_TCR2_BCD ((uint32_t)1<<24) // Bit clock direction
  2573. #define I2S_TCR2_BCP ((uint32_t)1<<25) // Bit clock polarity
  2574. #define I2S_TCR2_MSEL(n) ((uint32_t)(n & 3)<<26) // MCLK select, 0=bus clock, 1=I2S0_MCLK
  2575. #define I2S_TCR2_BCI ((uint32_t)1<<28) // Bit clock input
  2576. #define I2S_TCR2_BCS ((uint32_t)1<<29) // Bit clock swap
  2577. #define I2S_TCR2_SYNC(n) ((uint32_t)(n & 3)<<30) // 0=async 1=sync with receiver
  2578. #define I2S0_TCR3 (*(volatile uint32_t *)0x4002F00C) // SAI Transmit Configuration 3 Register
  2579. #define I2S_TCR3_WDFL(n) ((uint32_t)n & 0x0f) // word flag configuration
  2580. #define I2S_TCR3_TCE ((uint32_t)0x10000) // transmit channel enable
  2581. #define I2S0_TCR4 (*(volatile uint32_t *)0x4002F010) // SAI Transmit Configuration 4 Register
  2582. #define I2S_TCR4_FSD ((uint32_t)1) // Frame Sync Direction
  2583. #define I2S_TCR4_FSP ((uint32_t)2) // Frame Sync Polarity
  2584. #define I2S_TCR4_FSE ((uint32_t)8) // Frame Sync Early
  2585. #define I2S_TCR4_MF ((uint32_t)0x10) // MSB First
  2586. #define I2S_TCR4_SYWD(n) ((uint32_t)(n & 0x1f)<<8) // Sync Width
  2587. #define I2S_TCR4_FRSZ(n) ((uint32_t)(n & 0x0f)<<16) // Frame Size
  2588. #define I2S0_TCR5 (*(volatile uint32_t *)0x4002F014) // SAI Transmit Configuration 5 Register
  2589. #define I2S_TCR5_FBT(n) ((uint32_t)(n & 0x1f)<<8) // First Bit Shifted
  2590. #define I2S_TCR5_W0W(n) ((uint32_t)(n & 0x1f)<<16) // Word 0 Width
  2591. #define I2S_TCR5_WNW(n) ((uint32_t)(n & 0x1f)<<24) // Word N Width
  2592. #define I2S0_TDR0 (*(volatile uint32_t *)0x4002F020) // SAI Transmit Data Register
  2593. #define I2S0_TDR1 (*(volatile uint32_t *)0x4002F024) // SAI Transmit Data Register
  2594. #define I2S0_TFR0 (*(volatile uint32_t *)0x4002F040) // SAI Transmit FIFO Register
  2595. #define I2S0_TFR1 (*(volatile uint32_t *)0x4002F044) // SAI Transmit FIFO Register
  2596. #define I2S_TFR_RFP(n) ((uint32_t)n & 7) // read FIFO pointer
  2597. #define I2S_TFR_WFP(n) ((uint32_t)(n & 7)<<16) // write FIFO pointer
  2598. #define I2S0_TMR (*(volatile uint32_t *)0x4002F060) // SAI Transmit Mask Register
  2599. #define I2S_TMR_TWM(n) ((uint32_t)n & 0xFFFFFFFF) //
  2600. #define I2S0_RCSR (*(volatile uint32_t *)0x4002F080) // SAI Receive Control Register
  2601. #define I2S_RCSR_RE ((uint32_t)0x80000000) // Receiver Enable
  2602. #define I2S_RCSR_STOPE ((uint32_t)0x40000000) // Receiver Enable in Stop mode
  2603. #define I2S_RCSR_DBGE ((uint32_t)0x20000000) // Receiver Enable in Debug mode
  2604. #define I2S_RCSR_BCE ((uint32_t)0x10000000) // Bit Clock Enable
  2605. #define I2S_RCSR_FR ((uint32_t)0x02000000) // FIFO Reset
  2606. #define I2S_RCSR_SR ((uint32_t)0x01000000) // Software Reset
  2607. #define I2S_RCSR_WSF ((uint32_t)0x00100000) // Word Start Flag
  2608. #define I2S_RCSR_SEF ((uint32_t)0x00080000) // Sync Error Flag
  2609. #define I2S_RCSR_FEF ((uint32_t)0x00040000) // FIFO Error Flag (underrun)
  2610. #define I2S_RCSR_FWF ((uint32_t)0x00020000) // FIFO Warning Flag (empty)
  2611. #define I2S_RCSR_FRF ((uint32_t)0x00010000) // FIFO Request Flag (Data Ready)
  2612. #define I2S_RCSR_WSIE ((uint32_t)0x00001000) // Word Start Interrupt Enable
  2613. #define I2S_RCSR_SEIE ((uint32_t)0x00000800) // Sync Error Interrupt Enable
  2614. #define I2S_RCSR_FEIE ((uint32_t)0x00000400) // FIFO Error Interrupt Enable
  2615. #define I2S_RCSR_FWIE ((uint32_t)0x00000200) // FIFO Warning Interrupt Enable
  2616. #define I2S_RCSR_FRIE ((uint32_t)0x00000100) // FIFO Request Interrupt Enable
  2617. #define I2S_RCSR_FWDE ((uint32_t)0x00000002) // FIFO Warning DMA Enable
  2618. #define I2S_RCSR_FRDE ((uint32_t)0x00000001) // FIFO Request DMA Enable
  2619. #define I2S0_RCR1 (*(volatile uint32_t *)0x4002F084) // SAI Receive Configuration 1 Register
  2620. #define I2S_RCR1_RFW(n) ((uint32_t)n & 0x03) // Receive FIFO watermark
  2621. #define I2S0_RCR2 (*(volatile uint32_t *)0x4002F088) // SAI Receive Configuration 2 Register
  2622. #define I2S_RCR2_DIV(n) ((uint32_t)n & 0xff) // Bit clock divide by (DIV+1)*2
  2623. #define I2S_RCR2_BCD ((uint32_t)1<<24) // Bit clock direction
  2624. #define I2S_RCR2_BCP ((uint32_t)1<<25) // Bit clock polarity
  2625. #define I2S_RCR2_MSEL(n) ((uint32_t)(n & 3)<<26) // MCLK select, 0=bus clock, 1=I2S0_MCLK
  2626. #define I2S_RCR2_BCI ((uint32_t)1<<28) // Bit clock input
  2627. #define I2S_RCR2_BCS ((uint32_t)1<<29) // Bit clock swap
  2628. #define I2S_RCR2_SYNC(n) ((uint32_t)(n & 3)<<30) // 0=async 1=sync with receiver
  2629. #define I2S0_RCR3 (*(volatile uint32_t *)0x4002F08C) // SAI Receive Configuration 3 Register
  2630. #define I2S_RCR3_WDFL(n) ((uint32_t)n & 0x0f) // word flag configuration
  2631. #define I2S_RCR3_RCE ((uint32_t)0x10000) // receive channel enable
  2632. #define I2S0_RCR4 (*(volatile uint32_t *)0x4002F090) // SAI Receive Configuration 4 Register
  2633. #define I2S_RCR4_FSD ((uint32_t)1) // Frame Sync Direction
  2634. #define I2S_RCR4_FSP ((uint32_t)2) // Frame Sync Polarity
  2635. #define I2S_RCR4_FSE ((uint32_t)8) // Frame Sync Early
  2636. #define I2S_RCR4_MF ((uint32_t)0x10) // MSB First
  2637. #define I2S_RCR4_SYWD(n) ((uint32_t)(n & 0x1f)<<8) // Sync Width
  2638. #define I2S_RCR4_FRSZ(n) ((uint32_t)(n & 0x0f)<<16) // Frame Size
  2639. #define I2S0_RCR5 (*(volatile uint32_t *)0x4002F094) // SAI Receive Configuration 5 Register
  2640. #define I2S_RCR5_FBT(n) ((uint32_t)(n & 0x1f)<<8) // First Bit Shifted
  2641. #define I2S_RCR5_W0W(n) ((uint32_t)(n & 0x1f)<<16) // Word 0 Width
  2642. #define I2S_RCR5_WNW(n) ((uint32_t)(n & 0x1f)<<24) // Word N Width
  2643. #define I2S0_RDR0 (*(volatile uint32_t *)0x4002F0A0) // SAI Receive Data Register
  2644. #define I2S0_RDR1 (*(volatile uint32_t *)0x4002F0A4) // SAI Receive Data Register
  2645. #define I2S0_RFR0 (*(volatile uint32_t *)0x4002F0C0) // SAI Receive FIFO Register
  2646. #define I2S0_RFR1 (*(volatile uint32_t *)0x4002F0C4) // SAI Receive FIFO Register
  2647. #define I2S_RFR_RFP(n) ((uint32_t)n & 7) // read FIFO pointer
  2648. #define I2S_RFR_WFP(n) ((uint32_t)(n & 7)<<16) // write FIFO pointer
  2649. #define I2S0_RMR (*(volatile uint32_t *)0x4002F0E0) // SAI Receive Mask Register
  2650. #define I2S_RMR_RWM(n) ((uint32_t)n & 0xFFFFFFFF) //
  2651. #define I2S0_MCR (*(volatile uint32_t *)0x4002F100) // SAI MCLK Control Register
  2652. #define I2S_MCR_DUF ((uint32_t)1<<31) // Divider Update Flag
  2653. #define I2S_MCR_MOE ((uint32_t)1<<30) // MCLK Output Enable
  2654. #define I2S_MCR_MICS(n) ((uint32_t)(n & 3)<<24) // MCLK Input Clock Select
  2655. #define I2S0_MDR (*(volatile uint32_t *)0x4002F104) // SAI MCLK Divide Register
  2656. #define I2S_MDR_FRACT(n) ((uint32_t)(n & 0xff)<<12) // MCLK Fraction
  2657. #define I2S_MDR_DIVIDE(n) ((uint32_t)(n & 0xfff)) // MCLK Divide
  2658. // Chapter 47: General-Purpose Input/Output (GPIO)
  2659. #define GPIOA_PDOR (*(volatile uint32_t *)0x400FF000) // Port Data Output Register
  2660. #define GPIOA_PSOR (*(volatile uint32_t *)0x400FF004) // Port Set Output Register
  2661. #define GPIOA_PCOR (*(volatile uint32_t *)0x400FF008) // Port Clear Output Register
  2662. #define GPIOA_PTOR (*(volatile uint32_t *)0x400FF00C) // Port Toggle Output Register
  2663. #define GPIOA_PDIR (*(volatile uint32_t *)0x400FF010) // Port Data Input Register
  2664. #define GPIOA_PDDR (*(volatile uint32_t *)0x400FF014) // Port Data Direction Register
  2665. #define GPIOB_PDOR (*(volatile uint32_t *)0x400FF040) // Port Data Output Register
  2666. #define GPIOB_PSOR (*(volatile uint32_t *)0x400FF044) // Port Set Output Register
  2667. #define GPIOB_PCOR (*(volatile uint32_t *)0x400FF048) // Port Clear Output Register
  2668. #define GPIOB_PTOR (*(volatile uint32_t *)0x400FF04C) // Port Toggle Output Register
  2669. #define GPIOB_PDIR (*(volatile uint32_t *)0x400FF050) // Port Data Input Register
  2670. #define GPIOB_PDDR (*(volatile uint32_t *)0x400FF054) // Port Data Direction Register
  2671. #define GPIOC_PDOR (*(volatile uint32_t *)0x400FF080) // Port Data Output Register
  2672. #define GPIOC_PSOR (*(volatile uint32_t *)0x400FF084) // Port Set Output Register
  2673. #define GPIOC_PCOR (*(volatile uint32_t *)0x400FF088) // Port Clear Output Register
  2674. #define GPIOC_PTOR (*(volatile uint32_t *)0x400FF08C) // Port Toggle Output Register
  2675. #define GPIOC_PDIR (*(volatile uint32_t *)0x400FF090) // Port Data Input Register
  2676. #define GPIOC_PDDR (*(volatile uint32_t *)0x400FF094) // Port Data Direction Register
  2677. #define GPIOD_PDOR (*(volatile uint32_t *)0x400FF0C0) // Port Data Output Register
  2678. #define GPIOD_PSOR (*(volatile uint32_t *)0x400FF0C4) // Port Set Output Register
  2679. #define GPIOD_PCOR (*(volatile uint32_t *)0x400FF0C8) // Port Clear Output Register
  2680. #define GPIOD_PTOR (*(volatile uint32_t *)0x400FF0CC) // Port Toggle Output Register
  2681. #define GPIOD_PDIR (*(volatile uint32_t *)0x400FF0D0) // Port Data Input Register
  2682. #define GPIOD_PDDR (*(volatile uint32_t *)0x400FF0D4) // Port Data Direction Register
  2683. #define GPIOE_PDOR (*(volatile uint32_t *)0x400FF100) // Port Data Output Register
  2684. #define GPIOE_PSOR (*(volatile uint32_t *)0x400FF104) // Port Set Output Register
  2685. #define GPIOE_PCOR (*(volatile uint32_t *)0x400FF108) // Port Clear Output Register
  2686. #define GPIOE_PTOR (*(volatile uint32_t *)0x400FF10C) // Port Toggle Output Register
  2687. #define GPIOE_PDIR (*(volatile uint32_t *)0x400FF110) // Port Data Input Register
  2688. #define GPIOE_PDDR (*(volatile uint32_t *)0x400FF114) // Port Data Direction Register
  2689. #if defined(KINETISL)
  2690. #define FGPIOA_PDOR (*(volatile uint32_t *)0xF8000000) // Port Data Output Register
  2691. #define FGPIOA_PSOR (*(volatile uint32_t *)0xF8000004) // Port Set Output Register
  2692. #define FGPIOA_PCOR (*(volatile uint32_t *)0xF8000008) // Port Clear Output Register
  2693. #define FGPIOA_PTOR (*(volatile uint32_t *)0xF800000C) // Port Toggle Output Register
  2694. #define FGPIOA_PDIR (*(volatile uint32_t *)0xF8000010) // Port Data Input Register
  2695. #define FGPIOA_PDDR (*(volatile uint32_t *)0xF8000014) // Port Data Direction Register
  2696. #define FGPIOB_PDOR (*(volatile uint32_t *)0xF8000040) // Port Data Output Register
  2697. #define FGPIOB_PSOR (*(volatile uint32_t *)0xF8000044) // Port Set Output Register
  2698. #define FGPIOB_PCOR (*(volatile uint32_t *)0xF8000048) // Port Clear Output Register
  2699. #define FGPIOB_PTOR (*(volatile uint32_t *)0xF800004C) // Port Toggle Output Register
  2700. #define FGPIOB_PDIR (*(volatile uint32_t *)0xF8000050) // Port Data Input Register
  2701. #define FGPIOB_PDDR (*(volatile uint32_t *)0xF8000054) // Port Data Direction Register
  2702. #define FGPIOC_PDOR (*(volatile uint32_t *)0xF8000080) // Port Data Output Register
  2703. #define FGPIOC_PSOR (*(volatile uint32_t *)0xF8000084) // Port Set Output Register
  2704. #define FGPIOC_PCOR (*(volatile uint32_t *)0xF8000088) // Port Clear Output Register
  2705. #define FGPIOC_PTOR (*(volatile uint32_t *)0xF800008C) // Port Toggle Output Register
  2706. #define FGPIOC_PDIR (*(volatile uint32_t *)0xF8000090) // Port Data Input Register
  2707. #define FGPIOC_PDDR (*(volatile uint32_t *)0xF8000094) // Port Data Direction Register
  2708. #define FGPIOD_PDOR (*(volatile uint32_t *)0xF80000C0) // Port Data Output Register
  2709. #define FGPIOD_PSOR (*(volatile uint32_t *)0xF80000C4) // Port Set Output Register
  2710. #define FGPIOD_PCOR (*(volatile uint32_t *)0xF80000C8) // Port Clear Output Register
  2711. #define FGPIOD_PTOR (*(volatile uint32_t *)0xF80000CC) // Port Toggle Output Register
  2712. #define FGPIOD_PDIR (*(volatile uint32_t *)0xF80000D0) // Port Data Input Register
  2713. #define FGPIOD_PDDR (*(volatile uint32_t *)0xF80000D4) // Port Data Direction Register
  2714. #define FGPIOE_PDOR (*(volatile uint32_t *)0xF8000100) // Port Data Output Register
  2715. #define FGPIOE_PSOR (*(volatile uint32_t *)0xF8000104) // Port Set Output Register
  2716. #define FGPIOE_PCOR (*(volatile uint32_t *)0xF8000108) // Port Clear Output Register
  2717. #define FGPIOE_PTOR (*(volatile uint32_t *)0xF800010C) // Port Toggle Output Register
  2718. #define FGPIOE_PDIR (*(volatile uint32_t *)0xF8000110) // Port Data Input Register
  2719. #define FGPIOE_PDDR (*(volatile uint32_t *)0xF8000114) // Port Data Direction Register
  2720. #endif
  2721. // Chapter 48: Touch sense input (TSI)
  2722. #if defined(KINETISK)
  2723. #define TSI0_GENCS (*(volatile uint32_t *)0x40045000) // General Control and Status Register
  2724. #define TSI_GENCS_LPCLKS ((uint32_t)0x10000000) //
  2725. #define TSI_GENCS_LPSCNITV(n) (((n) & 15) << 24) //
  2726. #define TSI_GENCS_NSCN(n) (((n) & 31) << 19) //
  2727. #define TSI_GENCS_PS(n) (((n) & 7) << 16) //
  2728. #define TSI_GENCS_EOSF ((uint32_t)0x00008000) //
  2729. #define TSI_GENCS_OUTRGF ((uint32_t)0x00004000) //
  2730. #define TSI_GENCS_EXTERF ((uint32_t)0x00002000) //
  2731. #define TSI_GENCS_OVRF ((uint32_t)0x00001000) //
  2732. #define TSI_GENCS_SCNIP ((uint32_t)0x00000200) //
  2733. #define TSI_GENCS_SWTS ((uint32_t)0x00000100) //
  2734. #define TSI_GENCS_TSIEN ((uint32_t)0x00000080) //
  2735. #define TSI_GENCS_TSIIE ((uint32_t)0x00000040) //
  2736. #define TSI_GENCS_ERIE ((uint32_t)0x00000020) //
  2737. #define TSI_GENCS_ESOR ((uint32_t)0x00000010) //
  2738. #define TSI_GENCS_STM ((uint32_t)0x00000002) //
  2739. #define TSI_GENCS_STPE ((uint32_t)0x00000001) //
  2740. #define TSI0_SCANC (*(volatile uint32_t *)0x40045004) // SCAN Control Register
  2741. #define TSI_SCANC_REFCHRG(n) (((n) & 15) << 24) //
  2742. #define TSI_SCANC_EXTCHRG(n) (((n) & 7) << 16) //
  2743. #define TSI_SCANC_SMOD(n) (((n) & 255) << 8) //
  2744. #define TSI_SCANC_AMCLKS(n) (((n) & 3) << 3) //
  2745. #define TSI_SCANC_AMPSC(n) (((n) & 7) << 0) //
  2746. #define TSI0_PEN (*(volatile uint32_t *)0x40045008) // Pin Enable Register
  2747. #define TSI0_WUCNTR (*(volatile uint32_t *)0x4004500C) // Wake-Up Channel Counter Register
  2748. #define TSI0_CNTR1 (*(volatile uint32_t *)0x40045100) // Counter Register
  2749. #define TSI0_CNTR3 (*(volatile uint32_t *)0x40045104) // Counter Register
  2750. #define TSI0_CNTR5 (*(volatile uint32_t *)0x40045108) // Counter Register
  2751. #define TSI0_CNTR7 (*(volatile uint32_t *)0x4004510C) // Counter Register
  2752. #define TSI0_CNTR9 (*(volatile uint32_t *)0x40045110) // Counter Register
  2753. #define TSI0_CNTR11 (*(volatile uint32_t *)0x40045114) // Counter Register
  2754. #define TSI0_CNTR13 (*(volatile uint32_t *)0x40045118) // Counter Register
  2755. #define TSI0_CNTR15 (*(volatile uint32_t *)0x4004511C) // Counter Register
  2756. #define TSI0_THRESHOLD (*(volatile uint32_t *)0x40045120) // Low Power Channel Threshold Register
  2757. #elif defined(KINETISL)
  2758. #define TSI0_GENCS (*(volatile uint32_t *)0x40045000) // General Control and Status
  2759. #define TSI_GENCS_OUTRGF ((uint32_t)0x80000000) // Out of Range Flag
  2760. #define TSI_GENCS_ESOR ((uint32_t)0x10000000) // End-of-scan or Out-of-Range Interrupt Selection
  2761. #define TSI_GENCS_MODE(n) (((n) & 15) << 24) // analog modes & status
  2762. #define TSI_GENCS_REFCHRG(n) (((n) & 7) << 21) // reference charge and discharge current
  2763. #define TSI_GENCS_DVOLT(n) (((n) & 3) << 19) // voltage rails
  2764. #define TSI_GENCS_EXTCHRG(n) (((n) & 7) << 16) // electrode charge and discharge current
  2765. #define TSI_GENCS_PS(n) (((n) & 7) << 13) // prescaler
  2766. #define TSI_GENCS_NSCN(n) (((n) & 31) << 8) // scan number
  2767. #define TSI_GENCS_TSIEN ((uint32_t)0x00000080) // Enable
  2768. #define TSI_GENCS_TSIIEN ((uint32_t)0x00000040) // Interrupt Enable
  2769. #define TSI_GENCS_STPE ((uint32_t)0x00000020) // STOP Enable
  2770. #define TSI_GENCS_STM ((uint32_t)0x00000010) // Trigger Mode
  2771. #define TSI_GENCS_SCNIP ((uint32_t)0x00000008) // Scan In Progress Status
  2772. #define TSI_GENCS_EOSF ((uint32_t)0x00000004) // End of Scan Flag
  2773. #define TSI_GENCS_CURSW ((uint32_t)0x00000002) // current sources swapped
  2774. #define TSI0_DATA (*(volatile uint32_t *)0x40045004) // Data
  2775. #define TSI_DATA_TSICH(n) (((n) & 15) << 28) // channel
  2776. #define TSI_DATA_DMAEN ((uint32_t)0x00800000) // DMA Transfer Enabled
  2777. #define TSI_DATA_SWTS ((uint32_t)0x00400000) // Software Trigger Start
  2778. #define TSI_DATA_TSICNT(n) (((n) & 65535) << 0) // Conversion Counter Value
  2779. #define TSI0_TSHD (*(volatile uint32_t *)0x40045008) // Threshold
  2780. #define TSI_TSHD_THRESH(n) (((n) & 65535) << 16) // High wakeup threshold
  2781. #define TSI_TSHD_THRESL(n) (((n) & 65535) << 0) // Low wakeup threshold
  2782. #endif
  2783. // Nested Vectored Interrupt Controller, Table 3-4 & ARMv7 ref, appendix B3.4 (page 750)
  2784. #define NVIC_ENABLE_IRQ(n) (*((volatile uint32_t *)0xE000E100 + ((n) >> 5)) = (1 << ((n) & 31)))
  2785. #define NVIC_DISABLE_IRQ(n) (*((volatile uint32_t *)0xE000E180 + ((n) >> 5)) = (1 << ((n) & 31)))
  2786. #define NVIC_SET_PENDING(n) (*((volatile uint32_t *)0xE000E200 + ((n) >> 5)) = (1 << ((n) & 31)))
  2787. #define NVIC_CLEAR_PENDING(n) (*((volatile uint32_t *)0xE000E280 + ((n) >> 5)) = (1 << ((n) & 31)))
  2788. #define NVIC_ISER0 (*(volatile uint32_t *)0xE000E100)
  2789. #define NVIC_ISER1 (*(volatile uint32_t *)0xE000E104)
  2790. #define NVIC_ISER2 (*(volatile uint32_t *)0xE000E108)
  2791. #define NVIC_ISER3 (*(volatile uint32_t *)0xE000E10C)
  2792. #define NVIC_ICER0 (*(volatile uint32_t *)0xE000E180)
  2793. #define NVIC_ICER1 (*(volatile uint32_t *)0xE000E184)
  2794. #define NVIC_ICER2 (*(volatile uint32_t *)0xE000E188)
  2795. #define NVIC_ICER3 (*(volatile uint32_t *)0xE000E18C)
  2796. // 0 = highest priority
  2797. // Cortex-M4: 0,16,32,48,64,80,96,112,128,144,160,176,192,208,224,240
  2798. // Cortex-M0: 0,64,128,192
  2799. #ifdef KINETISK
  2800. #define NVIC_SET_PRIORITY(irqnum, priority) (*((volatile uint8_t *)0xE000E400 + (irqnum)) = (uint8_t)(priority))
  2801. #define NVIC_GET_PRIORITY(irqnum) (*((uint8_t *)0xE000E400 + (irqnum)))
  2802. #else
  2803. #define NVIC_SET_PRIORITY(irqnum, priority) (*((uint32_t *)0xE000E400 + ((irqnum) >> 2)) = (*((uint32_t *)0xE000E400 + ((irqnum) >> 2)) & (~(0xFF << (8 * ((irqnum) & 3))))) | (((priority) & 0xFF) << (8 * ((irqnum) & 3))))
  2804. #define NVIC_GET_PRIORITY(irqnum) (*((uint32_t *)0xE000E400 + ((irqnum) >> 2)) >> (8 * ((irqnum) & 3)) & 255)
  2805. #endif
  2806. #define __disable_irq() __asm__ volatile("CPSID i");
  2807. #define __enable_irq() __asm__ volatile("CPSIE i");
  2808. // System Control Space (SCS), ARMv7 ref manual, B3.2, page 708
  2809. #define SCB_CPUID (*(const uint32_t *)0xE000ED00) // CPUID Base Register
  2810. #define SCB_ICSR (*(volatile uint32_t *)0xE000ED04) // Interrupt Control and State
  2811. #define SCB_ICSR_PENDSTSET ((uint32_t)0x04000000)
  2812. #define SCB_VTOR (*(volatile uint32_t *)0xE000ED08) // Vector Table Offset
  2813. #define SCB_AIRCR (*(volatile uint32_t *)0xE000ED0C) // Application Interrupt and Reset Control
  2814. #define SCB_SCR (*(volatile uint32_t *)0xE000ED10) // System Control Register
  2815. #define SCB_CCR (*(volatile uint32_t *)0xE000ED14) // Configuration and Control
  2816. #define SCB_SHPR1 (*(volatile uint32_t *)0xE000ED18) // System Handler Priority Register 1
  2817. #define SCB_SHPR2 (*(volatile uint32_t *)0xE000ED1C) // System Handler Priority Register 2
  2818. #define SCB_SHPR3 (*(volatile uint32_t *)0xE000ED20) // System Handler Priority Register 3
  2819. #define SCB_SHCSR (*(volatile uint32_t *)0xE000ED24) // System Handler Control and State
  2820. #define SCB_CFSR (*(volatile uint32_t *)0xE000ED28) // Configurable Fault Status Register
  2821. #define SCB_HFSR (*(volatile uint32_t *)0xE000ED2C) // HardFault Status
  2822. #define SCB_DFSR (*(volatile uint32_t *)0xE000ED30) // Debug Fault Status
  2823. #define SCB_MMFAR (*(volatile uint32_t *)0xE000ED34) // MemManage Fault Address
  2824. #define SYST_CSR (*(volatile uint32_t *)0xE000E010) // SysTick Control and Status
  2825. #define SYST_CSR_COUNTFLAG ((uint32_t)0x00010000)
  2826. #define SYST_CSR_CLKSOURCE ((uint32_t)0x00000004)
  2827. #define SYST_CSR_TICKINT ((uint32_t)0x00000002)
  2828. #define SYST_CSR_ENABLE ((uint32_t)0x00000001)
  2829. #define SYST_RVR (*(volatile uint32_t *)0xE000E014) // SysTick Reload Value Register
  2830. #define SYST_CVR (*(volatile uint32_t *)0xE000E018) // SysTick Current Value Register
  2831. #define SYST_CALIB (*(const uint32_t *)0xE000E01C) // SysTick Calibration Value
  2832. #define ARM_DEMCR (*(volatile uint32_t *)0xE000EDFC) // Debug Exception and Monitor Control
  2833. #define ARM_DEMCR_TRCENA (1 << 24) // Enable debugging & monitoring blocks
  2834. #define ARM_DWT_CTRL (*(volatile uint32_t *)0xE0001000) // DWT control register
  2835. #define ARM_DWT_CTRL_CYCCNTENA (1 << 0) // Enable cycle count
  2836. #define ARM_DWT_CYCCNT (*(volatile uint32_t *)0xE0001004) // Cycle count register
  2837. #ifdef __cplusplus
  2838. extern "C" {
  2839. #endif
  2840. extern int nvic_execution_priority(void);
  2841. extern void nmi_isr(void);
  2842. extern void hard_fault_isr(void);
  2843. extern void memmanage_fault_isr(void);
  2844. extern void bus_fault_isr(void);
  2845. extern void usage_fault_isr(void);
  2846. extern void svcall_isr(void);
  2847. extern void debugmonitor_isr(void);
  2848. extern void pendablesrvreq_isr(void);
  2849. extern void systick_isr(void);
  2850. extern void dma_ch0_isr(void);
  2851. extern void dma_ch1_isr(void);
  2852. extern void dma_ch2_isr(void);
  2853. extern void dma_ch3_isr(void);
  2854. extern void dma_ch4_isr(void);
  2855. extern void dma_ch5_isr(void);
  2856. extern void dma_ch6_isr(void);
  2857. extern void dma_ch7_isr(void);
  2858. extern void dma_ch8_isr(void);
  2859. extern void dma_ch9_isr(void);
  2860. extern void dma_ch10_isr(void);
  2861. extern void dma_ch11_isr(void);
  2862. extern void dma_ch12_isr(void);
  2863. extern void dma_ch13_isr(void);
  2864. extern void dma_ch14_isr(void);
  2865. extern void dma_ch15_isr(void);
  2866. extern void dma_error_isr(void);
  2867. extern void mcm_isr(void);
  2868. extern void flash_cmd_isr(void);
  2869. extern void flash_error_isr(void);
  2870. extern void low_voltage_isr(void);
  2871. extern void wakeup_isr(void);
  2872. extern void watchdog_isr(void);
  2873. extern void i2c0_isr(void);
  2874. extern void i2c1_isr(void);
  2875. extern void i2c2_isr(void);
  2876. extern void spi0_isr(void);
  2877. extern void spi1_isr(void);
  2878. extern void spi2_isr(void);
  2879. extern void sdhc_isr(void);
  2880. extern void can0_message_isr(void);
  2881. extern void can0_bus_off_isr(void);
  2882. extern void can0_error_isr(void);
  2883. extern void can0_tx_warn_isr(void);
  2884. extern void can0_rx_warn_isr(void);
  2885. extern void can0_wakeup_isr(void);
  2886. extern void i2s0_tx_isr(void);
  2887. extern void i2s0_rx_isr(void);
  2888. extern void i2s0_isr(void);
  2889. extern void uart0_lon_isr(void);
  2890. extern void uart0_status_isr(void);
  2891. extern void uart0_error_isr(void);
  2892. extern void uart1_status_isr(void);
  2893. extern void uart1_error_isr(void);
  2894. extern void uart2_status_isr(void);
  2895. extern void uart2_error_isr(void);
  2896. extern void uart3_status_isr(void);
  2897. extern void uart3_error_isr(void);
  2898. extern void uart4_status_isr(void);
  2899. extern void uart4_error_isr(void);
  2900. extern void uart5_status_isr(void);
  2901. extern void uart5_error_isr(void);
  2902. extern void adc0_isr(void);
  2903. extern void adc1_isr(void);
  2904. extern void cmp0_isr(void);
  2905. extern void cmp1_isr(void);
  2906. extern void cmp2_isr(void);
  2907. extern void ftm0_isr(void);
  2908. extern void ftm1_isr(void);
  2909. extern void ftm2_isr(void);
  2910. extern void ftm3_isr(void);
  2911. extern void cmt_isr(void);
  2912. extern void rtc_alarm_isr(void);
  2913. extern void rtc_seconds_isr(void);
  2914. extern void pit0_isr(void);
  2915. extern void pit1_isr(void);
  2916. extern void pit2_isr(void);
  2917. extern void pit3_isr(void);
  2918. extern void pit_isr(void);
  2919. extern void pdb_isr(void);
  2920. extern void usb_isr(void);
  2921. extern void usb_charge_isr(void);
  2922. extern void dac0_isr(void);
  2923. extern void dac1_isr(void);
  2924. extern void tsi0_isr(void);
  2925. extern void mcg_isr(void);
  2926. extern void lptmr_isr(void);
  2927. extern void porta_isr(void);
  2928. extern void portb_isr(void);
  2929. extern void portc_isr(void);
  2930. extern void portd_isr(void);
  2931. extern void porte_isr(void);
  2932. extern void portcd_isr(void);
  2933. extern void software_isr(void);
  2934. extern void (* _VectorsRam[NVIC_NUM_INTERRUPTS+16])(void);
  2935. extern void (* const _VectorsFlash[NVIC_NUM_INTERRUPTS+16])(void);
  2936. #ifdef __cplusplus
  2937. }
  2938. #endif
  2939. #undef BEGIN_ENUM
  2940. #undef END_ENUM
  2941. #endif