Вы не можете выбрать более 25 тем Темы должны начинаться с буквы или цифры, могут содержать дефисы(-) и должны содержать не более 35 символов.

10 лет назад
10 лет назад
10 лет назад
10 лет назад
9 лет назад
9 лет назад
8 лет назад
8 лет назад
10 лет назад
10 лет назад
9 лет назад
9 лет назад
8 лет назад
8 лет назад
9 лет назад
9 лет назад
9 лет назад
8 лет назад
8 лет назад
9 лет назад
8 лет назад
9 лет назад
9 лет назад
8 лет назад
9 лет назад
8 лет назад
9 лет назад
8 лет назад
9 лет назад
8 лет назад
8 лет назад
8 лет назад
9 лет назад
8 лет назад
8 лет назад
8 лет назад
8 лет назад
8 лет назад
8 лет назад
8 лет назад
9 лет назад
8 лет назад
9 лет назад
8 лет назад
9 лет назад
8 лет назад
8 лет назад
8 лет назад
8 лет назад
8 лет назад
8 лет назад
8 лет назад
8 лет назад
9 лет назад
9 лет назад
9 лет назад
9 лет назад
9 лет назад
9 лет назад
9 лет назад
9 лет назад
9 лет назад
9 лет назад
9 лет назад
9 лет назад
9 лет назад
9 лет назад
9 лет назад
9 лет назад
9 лет назад
9 лет назад
9 лет назад
9 лет назад
9 лет назад
9 лет назад
9 лет назад
9 лет назад
9 лет назад
9 лет назад
9 лет назад
9 лет назад
9 лет назад
8 лет назад
9 лет назад
9 лет назад
9 лет назад
9 лет назад
9 лет назад
9 лет назад
9 лет назад
10 лет назад
9 лет назад
8 лет назад
9 лет назад
8 лет назад
9 лет назад
8 лет назад
9 лет назад
8 лет назад
9 лет назад
8 лет назад
9 лет назад
8 лет назад
9 лет назад
8 лет назад
9 лет назад
8 лет назад
9 лет назад
8 лет назад
9 лет назад
8 лет назад
9 лет назад
8 лет назад
9 лет назад
8 лет назад
9 лет назад
8 лет назад
9 лет назад
8 лет назад
9 лет назад
9 лет назад
9 лет назад
9 лет назад
9 лет назад
9 лет назад
9 лет назад
9 лет назад
9 лет назад
9 лет назад
11 лет назад
10 лет назад
11 лет назад
10 лет назад
11 лет назад
10 лет назад
11 лет назад
10 лет назад
11 лет назад
10 лет назад
11 лет назад
10 лет назад
11 лет назад
10 лет назад
11 лет назад
10 лет назад
11 лет назад
9 лет назад
11 лет назад
9 лет назад
10 лет назад
9 лет назад
9 лет назад
11 лет назад
9 лет назад
9 лет назад
8 лет назад
9 лет назад
11 лет назад
9 лет назад
9 лет назад
9 лет назад
9 лет назад
9 лет назад
9 лет назад
9 лет назад
9 лет назад
9 лет назад
9 лет назад
9 лет назад
9 лет назад
9 лет назад
9 лет назад
9 лет назад
9 лет назад
9 лет назад
9 лет назад
11 лет назад
11 лет назад
9 лет назад
11 лет назад
11 лет назад
9 лет назад
9 лет назад
9 лет назад
9 лет назад
9 лет назад
10 лет назад
9 лет назад
9 лет назад
8 лет назад
9 лет назад
10 лет назад
10 лет назад
9 лет назад
9 лет назад
9 лет назад
9 лет назад
9 лет назад
9 лет назад
9 лет назад
9 лет назад
9 лет назад
9 лет назад
9 лет назад
9 лет назад
9 лет назад
9 лет назад
9 лет назад
9 лет назад
9 лет назад
9 лет назад
9 лет назад
9 лет назад
9 лет назад
9 лет назад
8 лет назад
8 лет назад
8 лет назад
8 лет назад
9 лет назад
9 лет назад
8 лет назад
9 лет назад
8 лет назад
9 лет назад
8 лет назад
9 лет назад
8 лет назад
9 лет назад
8 лет назад
9 лет назад
8 лет назад
9 лет назад
8 лет назад
9 лет назад
8 лет назад
9 лет назад
9 лет назад
8 лет назад
9 лет назад
8 лет назад
9 лет назад
8 лет назад
9 лет назад
8 лет назад
9 лет назад
9 лет назад
8 лет назад
9 лет назад
8 лет назад
9 лет назад
8 лет назад
9 лет назад
8 лет назад
9 лет назад
8 лет назад
9 лет назад
8 лет назад
9 лет назад
8 лет назад
9 лет назад
10 лет назад
10 лет назад
9 лет назад
9 лет назад
8 лет назад
9 лет назад
9 лет назад
9 лет назад
8 лет назад
9 лет назад
8 лет назад
8 лет назад
8 лет назад
9 лет назад
8 лет назад
9 лет назад
8 лет назад
8 лет назад
9 лет назад
8 лет назад
8 лет назад
8 лет назад
8 лет назад
9 лет назад
8 лет назад
9 лет назад
8 лет назад
9 лет назад
8 лет назад
9 лет назад
8 лет назад
9 лет назад
8 лет назад
9 лет назад
8 лет назад
9 лет назад
8 лет назад
9 лет назад
8 лет назад
9 лет назад
8 лет назад
9 лет назад
9 лет назад
9 лет назад
9 лет назад
8 лет назад
10 лет назад
10 лет назад
10 лет назад
8 лет назад
8 лет назад
10 лет назад
10 лет назад
11 лет назад
11 лет назад
11 лет назад
11 лет назад
8 лет назад
8 лет назад
11 лет назад
11 лет назад
9 лет назад
11 лет назад
9 лет назад
11 лет назад
9 лет назад
11 лет назад
9 лет назад
11 лет назад
9 лет назад
11 лет назад
11 лет назад
9 лет назад
11 лет назад
9 лет назад
9 лет назад
11 лет назад
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783178417851786178717881789179017911792179317941795179617971798179918001801180218031804180518061807180818091810181118121813181418151816181718181819182018211822182318241825182618271828182918301831183218331834183518361837183818391840184118421843184418451846184718481849185018511852185318541855185618571858185918601861186218631864186518661867186818691870187118721873187418751876187718781879188018811882188318841885188618871888188918901891189218931894189518961897189818991900190119021903190419051906190719081909191019111912191319141915191619171918191919201921192219231924192519261927192819291930193119321933193419351936193719381939194019411942194319441945194619471948194919501951195219531954195519561957195819591960196119621963196419651966196719681969197019711972197319741975197619771978197919801981198219831984198519861987198819891990199119921993199419951996199719981999200020012002200320042005200620072008200920102011201220132014201520162017201820192020202120222023202420252026202720282029203020312032203320342035203620372038203920402041204220432044204520462047204820492050205120522053205420552056205720582059206020612062206320642065206620672068206920702071207220732074207520762077207820792080208120822083208420852086208720882089209020912092209320942095209620972098209921002101210221032104210521062107210821092110211121122113211421152116211721182119212021212122212321242125212621272128212921302131213221332134213521362137213821392140214121422143214421452146214721482149215021512152215321542155215621572158215921602161216221632164216521662167216821692170217121722173217421752176217721782179218021812182218321842185218621872188218921902191219221932194219521962197219821992200220122022203220422052206220722082209221022112212221322142215221622172218221922202221222222232224222522262227222822292230223122322233223422352236223722382239224022412242224322442245224622472248224922502251225222532254225522562257225822592260226122622263226422652266226722682269227022712272227322742275227622772278227922802281228222832284228522862287228822892290229122922293229422952296229722982299230023012302230323042305230623072308230923102311231223132314231523162317231823192320232123222323232423252326232723282329233023312332233323342335233623372338233923402341234223432344234523462347234823492350235123522353235423552356235723582359236023612362236323642365236623672368236923702371237223732374237523762377237823792380238123822383238423852386238723882389239023912392239323942395239623972398239924002401240224032404240524062407240824092410241124122413241424152416241724182419242024212422242324242425242624272428242924302431243224332434243524362437243824392440244124422443244424452446244724482449245024512452245324542455245624572458245924602461246224632464246524662467246824692470247124722473247424752476247724782479248024812482248324842485248624872488248924902491249224932494249524962497249824992500250125022503250425052506250725082509251025112512251325142515251625172518251925202521252225232524252525262527252825292530253125322533253425352536253725382539254025412542254325442545254625472548254925502551255225532554255525562557255825592560256125622563256425652566256725682569257025712572257325742575257625772578257925802581258225832584258525862587258825892590259125922593259425952596259725982599260026012602260326042605260626072608260926102611261226132614261526162617261826192620262126222623262426252626262726282629263026312632263326342635263626372638263926402641264226432644264526462647264826492650265126522653265426552656265726582659266026612662266326642665266626672668266926702671267226732674267526762677267826792680268126822683268426852686268726882689269026912692269326942695269626972698269927002701270227032704270527062707270827092710271127122713271427152716271727182719272027212722272327242725272627272728272927302731273227332734273527362737273827392740274127422743274427452746274727482749275027512752275327542755275627572758275927602761276227632764276527662767276827692770277127722773277427752776277727782779278027812782278327842785278627872788278927902791279227932794279527962797279827992800280128022803280428052806280728082809281028112812281328142815281628172818281928202821282228232824282528262827282828292830283128322833283428352836283728382839284028412842284328442845284628472848284928502851285228532854285528562857285828592860286128622863286428652866286728682869287028712872287328742875287628772878287928802881288228832884288528862887288828892890289128922893289428952896289728982899290029012902290329042905290629072908290929102911291229132914291529162917291829192920292129222923292429252926292729282929293029312932293329342935293629372938293929402941294229432944294529462947294829492950295129522953295429552956295729582959296029612962296329642965296629672968296929702971297229732974297529762977297829792980298129822983298429852986298729882989299029912992299329942995299629972998299930003001300230033004300530063007300830093010301130123013301430153016301730183019302030213022302330243025302630273028302930303031303230333034303530363037303830393040304130423043304430453046304730483049305030513052305330543055305630573058305930603061306230633064306530663067306830693070307130723073307430753076307730783079308030813082308330843085308630873088308930903091309230933094309530963097309830993100310131023103310431053106310731083109311031113112311331143115311631173118311931203121312231233124312531263127312831293130313131323133313431353136313731383139314031413142314331443145314631473148314931503151315231533154315531563157315831593160316131623163316431653166316731683169317031713172317331743175317631773178317931803181318231833184318531863187318831893190319131923193319431953196319731983199320032013202320332043205320632073208320932103211321232133214321532163217321832193220322132223223322432253226322732283229323032313232323332343235323632373238323932403241324232433244324532463247324832493250325132523253325432553256325732583259326032613262326332643265326632673268326932703271327232733274327532763277327832793280328132823283328432853286328732883289329032913292329332943295329632973298329933003301330233033304330533063307330833093310331133123313331433153316331733183319332033213322332333243325332633273328332933303331333233333334333533363337333833393340334133423343334433453346334733483349335033513352335333543355335633573358335933603361336233633364336533663367336833693370337133723373337433753376337733783379338033813382338333843385338633873388338933903391339233933394339533963397339833993400340134023403340434053406340734083409341034113412341334143415341634173418341934203421342234233424342534263427342834293430343134323433343434353436343734383439344034413442344334443445344634473448344934503451345234533454345534563457345834593460346134623463346434653466346734683469347034713472347334743475347634773478347934803481348234833484348534863487348834893490349134923493349434953496349734983499350035013502350335043505350635073508350935103511351235133514351535163517351835193520352135223523352435253526352735283529353035313532353335343535353635373538353935403541354235433544354535463547354835493550355135523553355435553556355735583559356035613562356335643565356635673568356935703571357235733574357535763577357835793580358135823583358435853586358735883589359035913592359335943595359635973598359936003601360236033604360536063607360836093610361136123613361436153616361736183619362036213622362336243625362636273628362936303631363236333634363536363637363836393640364136423643364436453646364736483649365036513652365336543655365636573658365936603661366236633664366536663667366836693670367136723673367436753676367736783679368036813682368336843685368636873688368936903691369236933694369536963697369836993700370137023703370437053706370737083709371037113712371337143715371637173718371937203721372237233724372537263727372837293730373137323733373437353736373737383739374037413742374337443745374637473748374937503751375237533754375537563757375837593760376137623763376437653766376737683769377037713772377337743775377637773778377937803781378237833784378537863787378837893790379137923793379437953796379737983799380038013802380338043805380638073808380938103811381238133814381538163817381838193820382138223823382438253826382738283829383038313832383338343835383638373838383938403841384238433844384538463847384838493850385138523853385438553856385738583859386038613862386338643865386638673868386938703871387238733874387538763877387838793880388138823883388438853886388738883889389038913892389338943895389638973898389939003901390239033904390539063907390839093910391139123913391439153916391739183919392039213922392339243925392639273928392939303931393239333934393539363937393839393940394139423943394439453946394739483949395039513952395339543955395639573958395939603961396239633964396539663967396839693970397139723973397439753976397739783979398039813982398339843985398639873988398939903991399239933994399539963997399839994000400140024003400440054006400740084009401040114012401340144015401640174018401940204021402240234024402540264027402840294030403140324033403440354036403740384039404040414042404340444045404640474048404940504051405240534054405540564057405840594060406140624063406440654066406740684069407040714072407340744075407640774078407940804081408240834084408540864087408840894090409140924093409440954096409740984099410041014102410341044105410641074108410941104111411241134114411541164117411841194120412141224123412441254126412741284129413041314132413341344135413641374138413941404141414241434144414541464147414841494150415141524153415441554156415741584159416041614162416341644165416641674168416941704171417241734174417541764177417841794180418141824183418441854186418741884189419041914192419341944195419641974198419942004201420242034204420542064207420842094210421142124213421442154216421742184219422042214222422342244225422642274228422942304231423242334234423542364237423842394240424142424243424442454246424742484249425042514252425342544255425642574258425942604261426242634264426542664267426842694270427142724273427442754276427742784279428042814282428342844285428642874288428942904291429242934294429542964297429842994300430143024303430443054306430743084309431043114312431343144315431643174318431943204321432243234324432543264327432843294330433143324333433443354336433743384339434043414342434343444345434643474348434943504351435243534354435543564357435843594360436143624363436443654366436743684369437043714372437343744375437643774378437943804381438243834384438543864387438843894390439143924393439443954396439743984399440044014402440344044405440644074408440944104411441244134414441544164417441844194420442144224423442444254426442744284429443044314432443344344435443644374438443944404441444244434444444544464447444844494450445144524453445444554456445744584459446044614462446344644465446644674468446944704471447244734474447544764477447844794480448144824483448444854486448744884489449044914492449344944495449644974498449945004501450245034504450545064507450845094510451145124513451445154516451745184519452045214522452345244525452645274528452945304531453245334534453545364537453845394540454145424543454445454546454745484549455045514552455345544555455645574558455945604561456245634564456545664567456845694570457145724573457445754576457745784579458045814582458345844585458645874588458945904591459245934594459545964597459845994600460146024603460446054606460746084609461046114612461346144615461646174618461946204621462246234624462546264627462846294630463146324633463446354636463746384639464046414642464346444645464646474648464946504651465246534654465546564657465846594660466146624663466446654666466746684669467046714672467346744675467646774678467946804681468246834684468546864687468846894690469146924693469446954696469746984699470047014702470347044705470647074708470947104711471247134714471547164717471847194720472147224723472447254726472747284729473047314732473347344735473647374738473947404741474247434744474547464747474847494750475147524753475447554756475747584759476047614762476347644765476647674768476947704771477247734774477547764777477847794780478147824783478447854786478747884789479047914792479347944795479647974798479948004801480248034804480548064807480848094810481148124813481448154816481748184819482048214822482348244825482648274828482948304831483248334834483548364837483848394840484148424843484448454846484748484849485048514852485348544855485648574858485948604861486248634864486548664867486848694870487148724873487448754876487748784879488048814882488348844885488648874888488948904891489248934894489548964897489848994900490149024903490449054906490749084909491049114912491349144915491649174918491949204921492249234924492549264927492849294930493149324933493449354936493749384939494049414942494349444945494649474948494949504951495249534954495549564957495849594960496149624963496449654966496749684969497049714972497349744975497649774978497949804981498249834984498549864987498849894990499149924993499449954996499749984999500050015002500350045005500650075008500950105011501250135014501550165017501850195020502150225023502450255026502750285029503050315032503350345035503650375038503950405041504250435044504550465047504850495050505150525053505450555056505750585059506050615062506350645065506650675068506950705071507250735074507550765077507850795080508150825083508450855086508750885089509050915092509350945095509650975098509951005101510251035104510551065107510851095110511151125113511451155116511751185119512051215122512351245125512651275128512951305131513251335134513551365137513851395140514151425143514451455146514751485149515051515152515351545155515651575158515951605161516251635164516551665167516851695170517151725173517451755176517751785179518051815182518351845185518651875188518951905191519251935194519551965197519851995200520152025203520452055206520752085209521052115212521352145215521652175218521952205221522252235224522552265227522852295230523152325233523452355236523752385239524052415242524352445245524652475248524952505251525252535254525552565257525852595260526152625263526452655266526752685269527052715272527352745275527652775278527952805281528252835284528552865287528852895290529152925293529452955296529752985299530053015302530353045305530653075308530953105311531253135314531553165317531853195320532153225323532453255326532753285329533053315332533353345335533653375338533953405341534253435344534553465347534853495350535153525353535453555356535753585359536053615362536353645365536653675368536953705371537253735374537553765377537853795380538153825383538453855386538753885389539053915392539353945395539653975398539954005401540254035404540554065407540854095410541154125413541454155416541754185419542054215422542354245425542654275428542954305431543254335434543554365437543854395440544154425443544454455446544754485449545054515452545354545455545654575458545954605461546254635464546554665467546854695470547154725473547454755476547754785479548054815482548354845485548654875488548954905491549254935494549554965497549854995500550155025503550455055506550755085509551055115512551355145515551655175518551955205521552255235524552555265527552855295530553155325533553455355536553755385539554055415542554355445545554655475548554955505551555255535554555555565557555855595560556155625563556455655566556755685569557055715572557355745575557655775578557955805581558255835584558555865587558855895590559155925593559455955596559755985599560056015602560356045605560656075608560956105611561256135614561556165617561856195620562156225623562456255626562756285629563056315632563356345635563656375638563956405641564256435644564556465647564856495650565156525653565456555656565756585659566056615662566356645665566656675668566956705671567256735674567556765677567856795680568156825683568456855686568756885689569056915692569356945695569656975698569957005701570257035704570557065707570857095710571157125713571457155716571757185719572057215722572357245725572657275728572957305731573257335734573557365737573857395740574157425743574457455746574757485749575057515752575357545755575657575758575957605761576257635764576557665767576857695770577157725773577457755776577757785779578057815782578357845785578657875788578957905791579257935794579557965797579857995800580158025803580458055806580758085809581058115812581358145815581658175818
  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 DMAMUX_SOURCE_UART0_RX 2
  85. #define DMAMUX_SOURCE_UART0_TX 3
  86. #define DMAMUX_SOURCE_UART1_RX 4
  87. #define DMAMUX_SOURCE_UART1_TX 5
  88. #define DMAMUX_SOURCE_UART2_RX 6
  89. #define DMAMUX_SOURCE_UART2_TX 7
  90. #define DMAMUX_SOURCE_I2S0_RX 14
  91. #define DMAMUX_SOURCE_I2S0_TX 15
  92. #define DMAMUX_SOURCE_SPI0_RX 16
  93. #define DMAMUX_SOURCE_SPI0_TX 17
  94. #define DMAMUX_SOURCE_I2C0 22
  95. #define DMAMUX_SOURCE_FTM0_CH0 24
  96. #define DMAMUX_SOURCE_FTM0_CH1 25
  97. #define DMAMUX_SOURCE_FTM0_CH2 26
  98. #define DMAMUX_SOURCE_FTM0_CH3 27
  99. #define DMAMUX_SOURCE_FTM0_CH4 28
  100. #define DMAMUX_SOURCE_FTM0_CH5 29
  101. #define DMAMUX_SOURCE_FTM0_CH6 30
  102. #define DMAMUX_SOURCE_FTM0_CH7 31
  103. #define DMAMUX_SOURCE_FTM1_CH0 32
  104. #define DMAMUX_SOURCE_FTM1_CH1 33
  105. #define DMAMUX_SOURCE_ADC0 40
  106. #define DMAMUX_SOURCE_CMP0 42
  107. #define DMAMUX_SOURCE_CMP1 43
  108. #define DMAMUX_SOURCE_DAC0 45
  109. #define DMAMUX_SOURCE_CMT 47
  110. #define DMAMUX_SOURCE_PDB 48
  111. #define DMAMUX_SOURCE_PORTA 49
  112. #define DMAMUX_SOURCE_PORTB 50
  113. #define DMAMUX_SOURCE_PORTC 51
  114. #define DMAMUX_SOURCE_PORTD 52
  115. #define DMAMUX_SOURCE_PORTE 53
  116. #define DMAMUX_SOURCE_ALWAYS0 54
  117. #define DMAMUX_SOURCE_ALWAYS1 55
  118. #define DMAMUX_SOURCE_ALWAYS2 56
  119. #define DMAMUX_SOURCE_ALWAYS3 57
  120. #define DMAMUX_SOURCE_ALWAYS4 58
  121. #define DMAMUX_SOURCE_ALWAYS5 59
  122. #define DMAMUX_SOURCE_ALWAYS6 60
  123. #define DMAMUX_SOURCE_ALWAYS7 61
  124. #define DMAMUX_SOURCE_ALWAYS8 62
  125. #define DMAMUX_SOURCE_ALWAYS9 63
  126. #define DMAMUX_NUM_SOURCE_ALWAYS 10
  127. #define KINETISK
  128. #define HAS_KINETISK_UART0
  129. #define HAS_KINETISK_UART0_FIFO
  130. #define HAS_KINETISK_UART1
  131. #define HAS_KINETISK_UART2
  132. #define HAS_KINETIS_I2C0
  133. #define HAS_KINETIS_LLWU_16CH
  134. #define HAS_KINETIS_ADC0
  135. #define HAS_KINETIS_TSI
  136. #define HAS_KINETIS_FLASH_FTFL
  137. // Teensy 3.1 & 3.2
  138. #elif defined(__MK20DX256__)
  139. enum IRQ_NUMBER_t {
  140. IRQ_DMA_CH0 = 0,
  141. IRQ_DMA_CH1 = 1,
  142. IRQ_DMA_CH2 = 2,
  143. IRQ_DMA_CH3 = 3,
  144. IRQ_DMA_CH4 = 4,
  145. IRQ_DMA_CH5 = 5,
  146. IRQ_DMA_CH6 = 6,
  147. IRQ_DMA_CH7 = 7,
  148. IRQ_DMA_CH8 = 8,
  149. IRQ_DMA_CH9 = 9,
  150. IRQ_DMA_CH10 = 10,
  151. IRQ_DMA_CH11 = 11,
  152. IRQ_DMA_CH12 = 12,
  153. IRQ_DMA_CH13 = 13,
  154. IRQ_DMA_CH14 = 14,
  155. IRQ_DMA_CH15 = 15,
  156. IRQ_DMA_ERROR = 16,
  157. IRQ_FTFL_COMPLETE = 18,
  158. IRQ_FTFL_COLLISION = 19,
  159. IRQ_LOW_VOLTAGE = 20,
  160. IRQ_LLWU = 21,
  161. IRQ_WDOG = 22,
  162. IRQ_I2C0 = 24,
  163. IRQ_I2C1 = 25,
  164. IRQ_SPI0 = 26,
  165. IRQ_SPI1 = 27,
  166. IRQ_CAN_MESSAGE = 29,
  167. IRQ_CAN_BUS_OFF = 30,
  168. IRQ_CAN_ERROR = 31,
  169. IRQ_CAN_TX_WARN = 32,
  170. IRQ_CAN_RX_WARN = 33,
  171. IRQ_CAN_WAKEUP = 34,
  172. IRQ_I2S0_TX = 35,
  173. IRQ_I2S0_RX = 36,
  174. IRQ_UART0_LON = 44,
  175. IRQ_UART0_STATUS = 45,
  176. IRQ_UART0_ERROR = 46,
  177. IRQ_UART1_STATUS = 47,
  178. IRQ_UART1_ERROR = 48,
  179. IRQ_UART2_STATUS = 49,
  180. IRQ_UART2_ERROR = 50,
  181. IRQ_ADC0 = 57,
  182. IRQ_ADC1 = 58,
  183. IRQ_CMP0 = 59,
  184. IRQ_CMP1 = 60,
  185. IRQ_CMP2 = 61,
  186. IRQ_FTM0 = 62,
  187. IRQ_FTM1 = 63,
  188. IRQ_FTM2 = 64,
  189. IRQ_CMT = 65,
  190. IRQ_RTC_ALARM = 66,
  191. IRQ_RTC_SECOND = 67,
  192. IRQ_PIT_CH0 = 68,
  193. IRQ_PIT_CH1 = 69,
  194. IRQ_PIT_CH2 = 70,
  195. IRQ_PIT_CH3 = 71,
  196. IRQ_PDB = 72,
  197. IRQ_USBOTG = 73,
  198. IRQ_USBDCD = 74,
  199. IRQ_DAC0 = 81,
  200. IRQ_TSI = 83,
  201. IRQ_MCG = 84,
  202. IRQ_LPTMR = 85,
  203. IRQ_PORTA = 87,
  204. IRQ_PORTB = 88,
  205. IRQ_PORTC = 89,
  206. IRQ_PORTD = 90,
  207. IRQ_PORTE = 91,
  208. IRQ_SOFTWARE = 94
  209. };
  210. #define NVIC_NUM_INTERRUPTS 95
  211. #define DMA_NUM_CHANNELS 16
  212. #define DMAMUX_SOURCE_UART0_RX 2
  213. #define DMAMUX_SOURCE_UART0_TX 3
  214. #define DMAMUX_SOURCE_UART1_RX 4
  215. #define DMAMUX_SOURCE_UART1_TX 5
  216. #define DMAMUX_SOURCE_UART2_RX 6
  217. #define DMAMUX_SOURCE_UART2_TX 7
  218. #define DMAMUX_SOURCE_I2S0_RX 14
  219. #define DMAMUX_SOURCE_I2S0_TX 15
  220. #define DMAMUX_SOURCE_SPI0_RX 16
  221. #define DMAMUX_SOURCE_SPI0_TX 17
  222. #define DMAMUX_SOURCE_SPI1_RX 18
  223. #define DMAMUX_SOURCE_SPI1_TX 19
  224. #define DMAMUX_SOURCE_I2C0 22
  225. #define DMAMUX_SOURCE_I2C1 23
  226. #define DMAMUX_SOURCE_FTM0_CH0 24
  227. #define DMAMUX_SOURCE_FTM0_CH1 25
  228. #define DMAMUX_SOURCE_FTM0_CH2 26
  229. #define DMAMUX_SOURCE_FTM0_CH3 27
  230. #define DMAMUX_SOURCE_FTM0_CH4 28
  231. #define DMAMUX_SOURCE_FTM0_CH5 29
  232. #define DMAMUX_SOURCE_FTM0_CH6 30
  233. #define DMAMUX_SOURCE_FTM0_CH7 31
  234. #define DMAMUX_SOURCE_FTM1_CH0 32
  235. #define DMAMUX_SOURCE_FTM1_CH1 33
  236. #define DMAMUX_SOURCE_FTM2_CH0 34
  237. #define DMAMUX_SOURCE_FTM2_CH1 35
  238. #define DMAMUX_SOURCE_ADC0 40
  239. #define DMAMUX_SOURCE_ADC1 41
  240. #define DMAMUX_SOURCE_CMP0 42
  241. #define DMAMUX_SOURCE_CMP1 43
  242. #define DMAMUX_SOURCE_CMP2 44
  243. #define DMAMUX_SOURCE_DAC0 45
  244. #define DMAMUX_SOURCE_CMT 47
  245. #define DMAMUX_SOURCE_PDB 48
  246. #define DMAMUX_SOURCE_PORTA 49
  247. #define DMAMUX_SOURCE_PORTB 50
  248. #define DMAMUX_SOURCE_PORTC 51
  249. #define DMAMUX_SOURCE_PORTD 52
  250. #define DMAMUX_SOURCE_PORTE 53
  251. #define DMAMUX_SOURCE_ALWAYS0 54
  252. #define DMAMUX_SOURCE_ALWAYS1 55
  253. #define DMAMUX_SOURCE_ALWAYS2 56
  254. #define DMAMUX_SOURCE_ALWAYS3 57
  255. #define DMAMUX_SOURCE_ALWAYS4 58
  256. #define DMAMUX_SOURCE_ALWAYS5 59
  257. #define DMAMUX_SOURCE_ALWAYS6 60
  258. #define DMAMUX_SOURCE_ALWAYS7 61
  259. #define DMAMUX_SOURCE_ALWAYS8 62
  260. #define DMAMUX_SOURCE_ALWAYS9 63
  261. #define DMAMUX_NUM_SOURCE_ALWAYS 10
  262. #define KINETISK
  263. #define HAS_KINETISK_UART0
  264. #define HAS_KINETISK_UART0_FIFO
  265. #define HAS_KINETISK_UART1
  266. #define HAS_KINETISK_UART1_FIFO
  267. #define HAS_KINETISK_UART2
  268. #define HAS_KINETIS_I2C0
  269. #define HAS_KINETIS_I2C1
  270. #define HAS_KINETIS_LLWU_16CH
  271. #define HAS_KINETIS_ADC0
  272. #define HAS_KINETIS_ADC1
  273. #define HAS_KINETIS_TSI
  274. #define HAS_KINETIS_FLASH_FTFL
  275. // Teensy-LC
  276. #elif defined(__MKL26Z64__)
  277. enum IRQ_NUMBER_t {
  278. IRQ_DMA_CH0 = 0,
  279. IRQ_DMA_CH1 = 1,
  280. IRQ_DMA_CH2 = 2,
  281. IRQ_DMA_CH3 = 3,
  282. IRQ_FTFA = 5,
  283. IRQ_LOW_VOLTAGE = 6,
  284. IRQ_LLWU = 7,
  285. IRQ_I2C0 = 8,
  286. IRQ_I2C1 = 9,
  287. IRQ_SPI0 = 10,
  288. IRQ_SPI1 = 11,
  289. IRQ_UART0_STATUS = 12,
  290. IRQ_UART1_STATUS = 13,
  291. IRQ_UART2_STATUS = 14,
  292. IRQ_ADC0 = 15,
  293. IRQ_CMP0 = 16,
  294. IRQ_FTM0 = 17,
  295. IRQ_FTM1 = 18,
  296. IRQ_FTM2 = 19,
  297. IRQ_RTC_ALARM = 20,
  298. IRQ_RTC_SECOND = 21,
  299. IRQ_PIT = 22,
  300. IRQ_I2S0 = 23,
  301. IRQ_USBOTG = 24,
  302. IRQ_DAC0 = 25,
  303. IRQ_TSI = 26,
  304. IRQ_MCG = 27,
  305. IRQ_LPTMR = 28,
  306. IRQ_SOFTWARE = 29, // TODO: verify this works
  307. IRQ_PORTA = 30,
  308. IRQ_PORTCD = 31
  309. };
  310. #define NVIC_NUM_INTERRUPTS 32
  311. #define DMA_NUM_CHANNELS 4
  312. #define DMAMUX_SOURCE_UART0_RX 2
  313. #define DMAMUX_SOURCE_UART0_TX 3
  314. #define DMAMUX_SOURCE_UART1_RX 4
  315. #define DMAMUX_SOURCE_UART1_TX 5
  316. #define DMAMUX_SOURCE_UART2_RX 6
  317. #define DMAMUX_SOURCE_UART2_TX 7
  318. #define DMAMUX_SOURCE_I2S0_RX 14
  319. #define DMAMUX_SOURCE_I2S0_TX 15
  320. #define DMAMUX_SOURCE_SPI0_RX 16
  321. #define DMAMUX_SOURCE_SPI0_TX 17
  322. #define DMAMUX_SOURCE_SPI1_RX 18
  323. #define DMAMUX_SOURCE_SPI1_TX 19
  324. #define DMAMUX_SOURCE_I2C0 22
  325. #define DMAMUX_SOURCE_I2C1 23
  326. #define DMAMUX_SOURCE_TPM0_CH0 24
  327. #define DMAMUX_SOURCE_TPM0_CH1 25
  328. #define DMAMUX_SOURCE_TPM0_CH2 26
  329. #define DMAMUX_SOURCE_TPM0_CH3 27
  330. #define DMAMUX_SOURCE_TPM0_CH4 28
  331. #define DMAMUX_SOURCE_TPM0_CH5 29
  332. #define DMAMUX_SOURCE_TPM1_CH0 32
  333. #define DMAMUX_SOURCE_TPM1_CH1 33
  334. #define DMAMUX_SOURCE_TPM2_CH0 34
  335. #define DMAMUX_SOURCE_TPM2_CH1 35
  336. #define DMAMUX_SOURCE_ADC0 40
  337. #define DMAMUX_SOURCE_CMP0 42
  338. #define DMAMUX_SOURCE_DAC0 45
  339. #define DMAMUX_SOURCE_PORTA 49
  340. #define DMAMUX_SOURCE_PORTC 51
  341. #define DMAMUX_SOURCE_PORTD 52
  342. #define DMAMUX_SOURCE_FTM0_OV 54
  343. #define DMAMUX_SOURCE_FTM1_OV 55
  344. #define DMAMUX_SOURCE_FTM2_OV 56
  345. #define DMAMUX_SOURCE_TSI 57
  346. #define DMAMUX_SOURCE_ALWAYS0 60
  347. #define DMAMUX_SOURCE_ALWAYS1 61
  348. #define DMAMUX_SOURCE_ALWAYS2 62
  349. #define DMAMUX_SOURCE_ALWAYS3 63
  350. #define DMAMUX_NUM_SOURCE_ALWAYS 4
  351. #define KINETISL
  352. #define HAS_KINETISL_UART0
  353. #define HAS_KINETISL_UART1
  354. #define HAS_KINETISL_UART2
  355. #define HAS_KINETIS_I2C0
  356. #define HAS_KINETIS_I2C0_STOPF
  357. #define HAS_KINETIS_I2C1
  358. #define HAS_KINETIS_I2C1_STOPF
  359. #define HAS_KINETIS_LLWU_16CH
  360. #define HAS_KINETIS_ADC0
  361. #define HAS_KINETIS_TSI_LITE
  362. #define HAS_KINETIS_FLASH_FTFA
  363. #elif defined(__MK64FX512__)
  364. enum IRQ_NUMBER_t {
  365. IRQ_DMA_CH0 = 0,
  366. IRQ_DMA_CH1 = 1,
  367. IRQ_DMA_CH2 = 2,
  368. IRQ_DMA_CH3 = 3,
  369. IRQ_DMA_CH4 = 4,
  370. IRQ_DMA_CH5 = 5,
  371. IRQ_DMA_CH6 = 6,
  372. IRQ_DMA_CH7 = 7,
  373. IRQ_DMA_CH8 = 8,
  374. IRQ_DMA_CH9 = 9,
  375. IRQ_DMA_CH10 = 10,
  376. IRQ_DMA_CH11 = 11,
  377. IRQ_DMA_CH12 = 12,
  378. IRQ_DMA_CH13 = 13,
  379. IRQ_DMA_CH14 = 14,
  380. IRQ_DMA_CH15 = 15,
  381. IRQ_DMA_ERROR = 16,
  382. IRQ_MCM = 17,
  383. IRQ_FTFL_COMPLETE = 18,
  384. IRQ_FTFL_COLLISION = 19,
  385. IRQ_LOW_VOLTAGE = 20,
  386. IRQ_LLWU = 21,
  387. IRQ_WDOG = 22,
  388. IRQ_RNG = 23,
  389. IRQ_I2C0 = 24,
  390. IRQ_I2C1 = 25,
  391. IRQ_SPI0 = 26,
  392. IRQ_SPI1 = 27,
  393. IRQ_I2S0_TX = 28,
  394. IRQ_I2S0_RX = 29,
  395. IRQ_UART0_STATUS = 31,
  396. IRQ_UART0_ERROR = 32,
  397. IRQ_UART1_STATUS = 33,
  398. IRQ_UART1_ERROR = 34,
  399. IRQ_UART2_STATUS = 35,
  400. IRQ_UART2_ERROR = 36,
  401. IRQ_UART3_STATUS = 37,
  402. IRQ_UART3_ERROR = 38,
  403. IRQ_ADC0 = 39,
  404. IRQ_CMP0 = 40,
  405. IRQ_CMP1 = 41,
  406. IRQ_FTM0 = 42,
  407. IRQ_FTM1 = 43,
  408. IRQ_FTM2 = 44,
  409. IRQ_CMT = 45,
  410. IRQ_RTC_ALARM = 46,
  411. IRQ_RTC_SECOND = 47,
  412. IRQ_PIT_CH0 = 48,
  413. IRQ_PIT_CH1 = 49,
  414. IRQ_PIT_CH2 = 50,
  415. IRQ_PIT_CH3 = 51,
  416. IRQ_PDB = 52,
  417. IRQ_USBOTG = 53,
  418. IRQ_USBDCD = 54,
  419. IRQ_DAC0 = 56,
  420. IRQ_MCG = 57,
  421. IRQ_LPTMR = 58,
  422. IRQ_PORTA = 59,
  423. IRQ_PORTB = 60,
  424. IRQ_PORTC = 61,
  425. IRQ_PORTD = 62,
  426. IRQ_PORTE = 63,
  427. IRQ_SOFTWARE = 64,
  428. IRQ_SPI2 = 65,
  429. IRQ_UART4_STATUS = 66,
  430. IRQ_UART4_ERROR = 67,
  431. IRQ_UART5_STATUS = 68,
  432. IRQ_UART5_ERROR = 69,
  433. IRQ_CMP2 = 70,
  434. IRQ_FTM3 = 71,
  435. IRQ_DAC1 = 72,
  436. IRQ_ADC1 = 73,
  437. IRQ_I2C2 = 74,
  438. IRQ_CAN0_MESSAGE = 75,
  439. IRQ_CAN0_BUS_OFF = 76,
  440. IRQ_CAN0_ERROR = 77,
  441. IRQ_CAN0_TX_WARN = 78,
  442. IRQ_CAN0_RX_WARN = 79,
  443. IRQ_CAN0_WAKEUP = 80,
  444. IRQ_SDHC = 81,
  445. IRQ_ENET_TIMER = 82,
  446. IRQ_ENET_TX = 83,
  447. IRQ_ENET_RX = 84,
  448. IRQ_ENET_ERROR = 85
  449. };
  450. #define NVIC_NUM_INTERRUPTS 86
  451. #define DMA_NUM_CHANNELS 16
  452. #define DMAMUX_SOURCE_TSI 1
  453. #define DMAMUX_SOURCE_UART0_RX 2
  454. #define DMAMUX_SOURCE_UART0_TX 3
  455. #define DMAMUX_SOURCE_UART1_RX 4
  456. #define DMAMUX_SOURCE_UART1_TX 5
  457. #define DMAMUX_SOURCE_UART2_RX 6
  458. #define DMAMUX_SOURCE_UART2_TX 7
  459. #define DMAMUX_SOURCE_UART3_RX 8
  460. #define DMAMUX_SOURCE_UART3_TX 9
  461. #define DMAMUX_SOURCE_UART4_RXTX 10
  462. #define DMAMUX_SOURCE_UART5_RXTX 11
  463. #define DMAMUX_SOURCE_I2S0_RX 12
  464. #define DMAMUX_SOURCE_I2S0_TX 13
  465. #define DMAMUX_SOURCE_SPI0_RX 14
  466. #define DMAMUX_SOURCE_SPI0_TX 15
  467. #define DMAMUX_SOURCE_SPI1_RX 16
  468. #define DMAMUX_SOURCE_SPI1_TX 17
  469. #define DMAMUX_SOURCE_I2C0 18
  470. #define DMAMUX_SOURCE_I2C1 19
  471. #define DMAMUX_SOURCE_I2C2 19
  472. #define DMAMUX_SOURCE_FTM0_CH0 20
  473. #define DMAMUX_SOURCE_FTM0_CH1 21
  474. #define DMAMUX_SOURCE_FTM0_CH2 22
  475. #define DMAMUX_SOURCE_FTM0_CH3 23
  476. #define DMAMUX_SOURCE_FTM0_CH4 24
  477. #define DMAMUX_SOURCE_FTM0_CH5 25
  478. #define DMAMUX_SOURCE_FTM0_CH6 26
  479. #define DMAMUX_SOURCE_FTM0_CH7 27
  480. #define DMAMUX_SOURCE_FTM1_CH0 28
  481. #define DMAMUX_SOURCE_FTM1_CH1 29
  482. #define DMAMUX_SOURCE_FTM2_CH0 30
  483. #define DMAMUX_SOURCE_FTM2_CH1 31
  484. #define DMAMUX_SOURCE_FTM3_CH0 32
  485. #define DMAMUX_SOURCE_FTM3_CH1 33
  486. #define DMAMUX_SOURCE_FTM3_CH2 34
  487. #define DMAMUX_SOURCE_FTM3_CH3 35
  488. #define DMAMUX_SOURCE_FTM3_CH4 36
  489. #define DMAMUX_SOURCE_FTM3_CH5 37
  490. #define DMAMUX_SOURCE_FTM3_CH6 38
  491. #define DMAMUX_SOURCE_FTM3_CH7 39
  492. #define DMAMUX_SOURCE_ADC0 40
  493. #define DMAMUX_SOURCE_ADC1 41
  494. #define DMAMUX_SOURCE_CMP0 42
  495. #define DMAMUX_SOURCE_CMP1 43
  496. #define DMAMUX_SOURCE_CMP2 44
  497. #define DMAMUX_SOURCE_DAC0 45
  498. #define DMAMUX_SOURCE_DAC1 46
  499. #define DMAMUX_SOURCE_CMT 47
  500. #define DMAMUX_SOURCE_PDB 48
  501. #define DMAMUX_SOURCE_PORTA 49
  502. #define DMAMUX_SOURCE_PORTB 50
  503. #define DMAMUX_SOURCE_PORTC 51
  504. #define DMAMUX_SOURCE_PORTD 52
  505. #define DMAMUX_SOURCE_PORTE 53
  506. #define DMAMUX_SOURCE_IEEE1588_T0 54
  507. #define DMAMUX_SOURCE_IEEE1588_T1 55
  508. #define DMAMUX_SOURCE_IEEE1588_T2 56
  509. #define DMAMUX_SOURCE_IEEE1588_T3 57
  510. #define DMAMUX_SOURCE_ALWAYS0 58
  511. #define DMAMUX_SOURCE_ALWAYS1 59
  512. #define DMAMUX_SOURCE_ALWAYS2 60
  513. #define DMAMUX_SOURCE_ALWAYS3 61
  514. #define DMAMUX_SOURCE_ALWAYS4 62
  515. #define DMAMUX_SOURCE_ALWAYS5 63
  516. #define DMAMUX_NUM_SOURCE_ALWAYS 6
  517. #define KINETISK
  518. #define HAS_KINETISK_UART0
  519. #define HAS_KINETISK_UART0_FIFO
  520. #define HAS_KINETISK_UART1
  521. #define HAS_KINETISK_UART1_FIFO
  522. #define HAS_KINETISK_UART2
  523. #define HAS_KINETISK_UART3
  524. #define HAS_KINETISK_UART4
  525. #define HAS_KINETISK_UART5
  526. #define HAS_KINETIS_I2C0
  527. #define HAS_KINETIS_I2C0_STOPF
  528. #define HAS_KINETIS_I2C1
  529. #define HAS_KINETIS_I2C1_STOPF
  530. #define HAS_KINETIS_I2C2
  531. #define HAS_KINETIS_I2C2_STOPF
  532. #define HAS_KINETIS_LLWU_16CH
  533. #define HAS_KINETIS_MPU
  534. #define HAS_KINETIS_ADC0
  535. #define HAS_KINETIS_ADC1
  536. #define HAS_KINETIS_FLASH_FTFE
  537. #define HAS_KINETIS_SDHC
  538. #elif defined(__MK66FX1M0__)
  539. // https://forum.pjrc.com/threads/24633-Any-Chance-of-a-Teensy-3-1?p=78655&viewfull=1#post78655
  540. enum IRQ_NUMBER_t {
  541. IRQ_DMA_CH0 = 0,
  542. IRQ_DMA_CH1 = 1,
  543. IRQ_DMA_CH2 = 2,
  544. IRQ_DMA_CH3 = 3,
  545. IRQ_DMA_CH4 = 4,
  546. IRQ_DMA_CH5 = 5,
  547. IRQ_DMA_CH6 = 6,
  548. IRQ_DMA_CH7 = 7,
  549. IRQ_DMA_CH8 = 8,
  550. IRQ_DMA_CH9 = 9,
  551. IRQ_DMA_CH10 = 10,
  552. IRQ_DMA_CH11 = 11,
  553. IRQ_DMA_CH12 = 12,
  554. IRQ_DMA_CH13 = 13,
  555. IRQ_DMA_CH14 = 14,
  556. IRQ_DMA_CH15 = 15,
  557. IRQ_DMA_ERROR = 16,
  558. IRQ_MCM = 17,
  559. IRQ_FTFL_COMPLETE = 18,
  560. IRQ_FTFL_COLLISION = 19,
  561. IRQ_LOW_VOLTAGE = 20,
  562. IRQ_LLWU = 21,
  563. IRQ_WDOG = 22,
  564. IRQ_RNG = 23,
  565. IRQ_I2C0 = 24,
  566. IRQ_I2C1 = 25,
  567. IRQ_SPI0 = 26,
  568. IRQ_SPI1 = 27,
  569. IRQ_I2S0_TX = 28,
  570. IRQ_I2S0_RX = 29,
  571. IRQ_UART0_STATUS = 31,
  572. IRQ_UART0_ERROR = 32,
  573. IRQ_UART1_STATUS = 33,
  574. IRQ_UART1_ERROR = 34,
  575. IRQ_UART2_STATUS = 35,
  576. IRQ_UART2_ERROR = 36,
  577. IRQ_UART3_STATUS = 37,
  578. IRQ_UART3_ERROR = 38,
  579. IRQ_ADC0 = 39,
  580. IRQ_CMP0 = 40,
  581. IRQ_CMP1 = 41,
  582. IRQ_FTM0 = 42,
  583. IRQ_FTM1 = 43,
  584. IRQ_FTM2 = 44,
  585. IRQ_CMT = 45,
  586. IRQ_RTC_ALARM = 46,
  587. IRQ_RTC_SECOND = 47,
  588. IRQ_PIT_CH0 = 48,
  589. IRQ_PIT_CH1 = 49,
  590. IRQ_PIT_CH2 = 50,
  591. IRQ_PIT_CH3 = 51,
  592. IRQ_PDB = 52,
  593. IRQ_USBOTG = 53,
  594. IRQ_USBDCD = 54,
  595. IRQ_DAC0 = 56,
  596. IRQ_MCG = 57,
  597. IRQ_LPTMR = 58,
  598. IRQ_PORTA = 59,
  599. IRQ_PORTB = 60,
  600. IRQ_PORTC = 61,
  601. IRQ_PORTD = 62,
  602. IRQ_PORTE = 63,
  603. IRQ_SOFTWARE = 64,
  604. IRQ_SPI2 = 65,
  605. IRQ_UART4_STATUS = 66,
  606. IRQ_UART4_ERROR = 67,
  607. IRQ_CMP2 = 70,
  608. IRQ_FTM3 = 71,
  609. IRQ_DAC1 = 72,
  610. IRQ_ADC1 = 73,
  611. IRQ_I2C2 = 74,
  612. IRQ_CAN0_MESSAGE = 75,
  613. IRQ_CAN0_BUS_OFF = 76,
  614. IRQ_CAN0_ERROR = 77,
  615. IRQ_CAN0_TX_WARN = 78,
  616. IRQ_CAN0_RX_WARN = 79,
  617. IRQ_CAN0_WAKEUP = 80,
  618. IRQ_SDHC = 81,
  619. IRQ_ENET_TIMER = 82,
  620. IRQ_ENET_TX = 83,
  621. IRQ_ENET_RX = 84,
  622. IRQ_ENET_ERROR = 85,
  623. IRQ_LPUART0 = 86,
  624. IRQ_TSI = 87,
  625. IRQ_TPM1 = 88,
  626. IRQ_TPM2 = 89,
  627. IRQ_USBHS_PHY = 90,
  628. IRQ_I2C3 = 91,
  629. IRQ_CMP3 = 92,
  630. IRQ_USBHS = 93,
  631. IRQ_CAN1_MESSAGE = 94,
  632. IRQ_CAN1_BUS_OFF = 95,
  633. IRQ_CAN1_ERROR = 96,
  634. IRQ_CAN1_TX_WARN = 97,
  635. IRQ_CAN1_RX_WARN = 98,
  636. IRQ_CAN1_WAKEUP = 99
  637. };
  638. #define NVIC_NUM_INTERRUPTS 100
  639. #define DMA_NUM_CHANNELS 32
  640. #define DMAMUX_SOURCE_TSI 1
  641. #define DMAMUX_SOURCE_UART0_RX 2
  642. #define DMAMUX_SOURCE_UART0_TX 3
  643. #define DMAMUX_SOURCE_UART1_RX 4
  644. #define DMAMUX_SOURCE_UART1_TX 5
  645. #define DMAMUX_SOURCE_UART2_RX 6
  646. #define DMAMUX_SOURCE_UART2_TX 7
  647. #define DMAMUX_SOURCE_UART3_RX 8
  648. #define DMAMUX_SOURCE_UART3_TX 9
  649. #define DMAMUX_SOURCE_UART4_RXTX 10
  650. #define DMAMUX_SOURCE_I2S0_RX 12
  651. #define DMAMUX_SOURCE_I2S0_TX 13
  652. #define DMAMUX_SOURCE_SPI0_RX 14
  653. #define DMAMUX_SOURCE_SPI0_TX 15
  654. #define DMAMUX_SOURCE_SPI1_RX 16
  655. #define DMAMUX_SOURCE_SPI1_TX 17
  656. #define DMAMUX_SOURCE_I2C0 18
  657. #define DMAMUX_SOURCE_I2C3 18
  658. #define DMAMUX_SOURCE_I2C1 19
  659. #define DMAMUX_SOURCE_I2C2 19
  660. #define DMAMUX_SOURCE_FTM0_CH0 20
  661. #define DMAMUX_SOURCE_FTM0_CH1 21
  662. #define DMAMUX_SOURCE_FTM0_CH2 22
  663. #define DMAMUX_SOURCE_FTM0_CH3 23
  664. #define DMAMUX_SOURCE_FTM0_CH4 24
  665. #define DMAMUX_SOURCE_FTM0_CH5 25
  666. #define DMAMUX_SOURCE_FTM0_CH6 26
  667. #define DMAMUX_SOURCE_FTM0_CH7 27
  668. #define DMAMUX_SOURCE_FTM1_CH0 28
  669. #define DMAMUX_SOURCE_TPM1_CH0 28
  670. #define DMAMUX_SOURCE_FTM1_CH1 29
  671. #define DMAMUX_SOURCE_TPM1_CH1 29
  672. #define DMAMUX_SOURCE_FTM2_CH0 30
  673. #define DMAMUX_SOURCE_TPM2_CH0 30
  674. #define DMAMUX_SOURCE_FTM2_CH1 31
  675. #define DMAMUX_SOURCE_TPM2_CH1 31
  676. #define DMAMUX_SOURCE_FTM3_CH0 32
  677. #define DMAMUX_SOURCE_FTM3_CH1 33
  678. #define DMAMUX_SOURCE_FTM3_CH2 34
  679. #define DMAMUX_SOURCE_FTM3_CH3 35
  680. #define DMAMUX_SOURCE_FTM3_CH4 36
  681. #define DMAMUX_SOURCE_FTM3_CH5 37
  682. #define DMAMUX_SOURCE_FTM3_CH6 38
  683. #define DMAMUX_SOURCE_SPI2_RX 38
  684. #define DMAMUX_SOURCE_FTM3_CH7 39
  685. #define DMAMUX_SOURCE_SPI2_TX 39
  686. #define DMAMUX_SOURCE_ADC0 40
  687. #define DMAMUX_SOURCE_ADC1 41
  688. #define DMAMUX_SOURCE_CMP0 42
  689. #define DMAMUX_SOURCE_CMP1 43
  690. #define DMAMUX_SOURCE_CMP2 44
  691. #define DMAMUX_SOURCE_CMP3 44
  692. #define DMAMUX_SOURCE_DAC0 45
  693. #define DMAMUX_SOURCE_DAC1 46
  694. #define DMAMUX_SOURCE_CMT 47
  695. #define DMAMUX_SOURCE_PDB 48
  696. #define DMAMUX_SOURCE_PORTA 49
  697. #define DMAMUX_SOURCE_PORTB 50
  698. #define DMAMUX_SOURCE_PORTC 51
  699. #define DMAMUX_SOURCE_PORTD 52
  700. #define DMAMUX_SOURCE_PORTE 53
  701. #define DMAMUX_SOURCE_IEEE1588_T0 54
  702. #define DMAMUX_SOURCE_IEEE1588_T1 55
  703. #define DMAMUX_SOURCE_FTM1_OV 55
  704. #define DMAMUX_SOURCE_IEEE1588_T2 56
  705. #define DMAMUX_SOURCE_FTM2_OV 56
  706. #define DMAMUX_SOURCE_IEEE1588_T3 57
  707. #define DMAMUX_SOURCE_LPUART0_RX 58
  708. #define DMAMUX_SOURCE_LPUART0_TX 59
  709. #define DMAMUX_SOURCE_ALWAYS0 60
  710. #define DMAMUX_SOURCE_ALWAYS1 61
  711. #define DMAMUX_SOURCE_ALWAYS2 62
  712. #define DMAMUX_SOURCE_ALWAYS3 63
  713. #define DMAMUX_NUM_SOURCE_ALWAYS 4
  714. #define KINETISK
  715. #define HAS_KINETISK_UART0
  716. #define HAS_KINETISK_UART0_FIFO
  717. #define HAS_KINETISK_UART1
  718. #define HAS_KINETISK_UART1_FIFO
  719. #define HAS_KINETISK_UART2
  720. #define HAS_KINETISK_UART3
  721. #define HAS_KINETISK_UART4
  722. #define HAS_KINETISK_LPUART0
  723. #define HAS_KINETIS_I2C0
  724. #define HAS_KINETIS_I2C0_STOPF
  725. #define HAS_KINETIS_I2C1
  726. #define HAS_KINETIS_I2C1_STOPF
  727. #define HAS_KINETIS_I2C2
  728. #define HAS_KINETIS_I2C2_STOPF
  729. #define HAS_KINETIS_I2C3
  730. #define HAS_KINETIS_I2C3_STOPF
  731. #define HAS_KINETIS_LLWU_32CH
  732. #define HAS_KINETIS_MPU
  733. #define HAS_KINETIS_ADC0
  734. #define HAS_KINETIS_ADC1
  735. #define HAS_KINETIS_TSI_LITE
  736. #define HAS_KINETIS_FLASH_FTFE
  737. #define HAS_KINETIS_SDHC
  738. #define HAS_KINETIS_HSRUN
  739. #endif // end of board-specific definitions
  740. #if (F_CPU == 240000000)
  741. #define F_PLL 240000000
  742. #ifndef F_BUS
  743. #define F_BUS 60000000
  744. //#define F_BUS 80000000 // uncomment these to try peripheral overclocking
  745. //#define F_BUS 120000000 // all the usual overclocking caveats apply...
  746. #endif
  747. #define F_MEM 30000000
  748. #elif (F_CPU == 216000000)
  749. #define F_PLL 216000000
  750. #ifndef F_BUS
  751. #define F_BUS 54000000
  752. //#define F_BUS 72000000
  753. //#define F_BUS 108000000
  754. #endif
  755. #define F_MEM 27000000
  756. #elif (F_CPU == 192000000)
  757. #define F_PLL 192000000
  758. #ifndef F_BUS
  759. #define F_BUS 48000000
  760. //#define F_BUS 64000000
  761. //#define F_BUS 96000000
  762. #endif
  763. #define F_MEM 27428571
  764. #elif (F_CPU == 180000000)
  765. #define F_PLL 180000000
  766. #ifndef F_BUS
  767. #define F_BUS 60000000
  768. //#define F_BUS 90000000
  769. #endif
  770. #define F_MEM 25714286
  771. #elif (F_CPU == 168000000)
  772. #define F_PLL 168000000
  773. #define F_BUS 56000000
  774. #define F_MEM 28000000
  775. #elif (F_CPU == 144000000)
  776. #define F_PLL 144000000
  777. #ifndef F_BUS
  778. #define F_BUS 48000000
  779. //#define F_BUS 72000000
  780. #endif
  781. #define F_MEM 28800000
  782. #elif (F_CPU == 120000000)
  783. #define F_PLL 120000000
  784. #ifndef F_BUS
  785. #define F_BUS 60000000
  786. //#define F_BUS 120000000
  787. #endif
  788. #define F_MEM 24000000
  789. #elif (F_CPU == 96000000)
  790. #define F_PLL 96000000
  791. #ifndef F_BUS
  792. #define F_BUS 48000000
  793. //#define F_BUS 96000000
  794. #endif
  795. #define F_MEM 24000000
  796. #elif (F_CPU == 72000000)
  797. #define F_PLL 72000000
  798. #ifndef F_BUS
  799. #define F_BUS 36000000
  800. //#define F_BUS 72000000
  801. #endif
  802. #define F_MEM 24000000
  803. #elif (F_CPU == 48000000)
  804. #define F_PLL 96000000
  805. #if defined(KINETISK)
  806. #define F_BUS 48000000
  807. #elif defined(KINETISL)
  808. #define F_BUS 24000000
  809. #endif
  810. #define F_MEM 24000000
  811. #elif (F_CPU == 24000000)
  812. #define F_PLL 96000000
  813. #define F_BUS 24000000
  814. #define F_MEM 24000000
  815. #elif (F_CPU == 16000000)
  816. #define F_PLL 16000000
  817. #define F_BUS 16000000
  818. #define F_MEM 16000000
  819. #elif (F_CPU == 8000000)
  820. #define F_PLL 8000000
  821. #define F_BUS 8000000
  822. #define F_MEM 8000000
  823. #elif (F_CPU == 4000000)
  824. #define F_PLL 4000000
  825. #define F_BUS 4000000
  826. #define F_MEM 4000000
  827. #elif (F_CPU == 2000000)
  828. #define F_PLL 2000000
  829. #define F_BUS 2000000
  830. #define F_MEM 1000000
  831. #endif
  832. #ifndef NULL
  833. #define NULL (0)
  834. #endif
  835. // Port control and interrupts (PORT)
  836. #define PORTA_PCR0 (*(volatile uint32_t *)0x40049000) // Pin Control Register n
  837. #define PORT_PCR_ISF ((uint32_t)0x01000000) // Interrupt Status Flag
  838. #define PORT_PCR_IRQC(n) ((uint32_t)(((n) & 15) << 16)) // Interrupt Configuration
  839. #define PORT_PCR_IRQC_MASK ((uint32_t)0x000F0000)
  840. #define PORT_PCR_LK ((uint32_t)0x00008000) // Lock Register
  841. #define PORT_PCR_MUX(n) ((uint32_t)(((n) & 7) << 8)) // Pin Mux Control
  842. #define PORT_PCR_MUX_MASK ((uint32_t)0x00000700)
  843. #define PORT_PCR_DSE ((uint32_t)0x00000040) // Drive Strength Enable
  844. #define PORT_PCR_ODE ((uint32_t)0x00000020) // Open Drain Enable
  845. #define PORT_PCR_PFE ((uint32_t)0x00000010) // Passive Filter Enable
  846. #define PORT_PCR_SRE ((uint32_t)0x00000004) // Slew Rate Enable
  847. #define PORT_PCR_PE ((uint32_t)0x00000002) // Pull Enable
  848. #define PORT_PCR_PS ((uint32_t)0x00000001) // Pull Select
  849. #define PORTA_PCR1 (*(volatile uint32_t *)0x40049004) // Pin Control Register n
  850. #define PORTA_PCR2 (*(volatile uint32_t *)0x40049008) // Pin Control Register n
  851. #define PORTA_PCR3 (*(volatile uint32_t *)0x4004900C) // Pin Control Register n
  852. #define PORTA_PCR4 (*(volatile uint32_t *)0x40049010) // Pin Control Register n
  853. #define PORTA_PCR5 (*(volatile uint32_t *)0x40049014) // Pin Control Register n
  854. #define PORTA_PCR6 (*(volatile uint32_t *)0x40049018) // Pin Control Register n
  855. #define PORTA_PCR7 (*(volatile uint32_t *)0x4004901C) // Pin Control Register n
  856. #define PORTA_PCR8 (*(volatile uint32_t *)0x40049020) // Pin Control Register n
  857. #define PORTA_PCR9 (*(volatile uint32_t *)0x40049024) // Pin Control Register n
  858. #define PORTA_PCR10 (*(volatile uint32_t *)0x40049028) // Pin Control Register n
  859. #define PORTA_PCR11 (*(volatile uint32_t *)0x4004902C) // Pin Control Register n
  860. #define PORTA_PCR12 (*(volatile uint32_t *)0x40049030) // Pin Control Register n
  861. #define PORTA_PCR13 (*(volatile uint32_t *)0x40049034) // Pin Control Register n
  862. #define PORTA_PCR14 (*(volatile uint32_t *)0x40049038) // Pin Control Register n
  863. #define PORTA_PCR15 (*(volatile uint32_t *)0x4004903C) // Pin Control Register n
  864. #define PORTA_PCR16 (*(volatile uint32_t *)0x40049040) // Pin Control Register n
  865. #define PORTA_PCR17 (*(volatile uint32_t *)0x40049044) // Pin Control Register n
  866. #define PORTA_PCR18 (*(volatile uint32_t *)0x40049048) // Pin Control Register n
  867. #define PORTA_PCR19 (*(volatile uint32_t *)0x4004904C) // Pin Control Register n
  868. #define PORTA_PCR20 (*(volatile uint32_t *)0x40049050) // Pin Control Register n
  869. #define PORTA_PCR21 (*(volatile uint32_t *)0x40049054) // Pin Control Register n
  870. #define PORTA_PCR22 (*(volatile uint32_t *)0x40049058) // Pin Control Register n
  871. #define PORTA_PCR23 (*(volatile uint32_t *)0x4004905C) // Pin Control Register n
  872. #define PORTA_PCR24 (*(volatile uint32_t *)0x40049060) // Pin Control Register n
  873. #define PORTA_PCR25 (*(volatile uint32_t *)0x40049064) // Pin Control Register n
  874. #define PORTA_PCR26 (*(volatile uint32_t *)0x40049068) // Pin Control Register n
  875. #define PORTA_PCR27 (*(volatile uint32_t *)0x4004906C) // Pin Control Register n
  876. #define PORTA_PCR28 (*(volatile uint32_t *)0x40049070) // Pin Control Register n
  877. #define PORTA_PCR29 (*(volatile uint32_t *)0x40049074) // Pin Control Register n
  878. #define PORTA_PCR30 (*(volatile uint32_t *)0x40049078) // Pin Control Register n
  879. #define PORTA_PCR31 (*(volatile uint32_t *)0x4004907C) // Pin Control Register n
  880. #define PORTA_GPCLR (*(volatile uint32_t *)0x40049080) // Global Pin Control Low Register
  881. #define PORTA_GPCHR (*(volatile uint32_t *)0x40049084) // Global Pin Control High Register
  882. #define PORTA_ISFR (*(volatile uint32_t *)0x400490A0) // Interrupt Status Flag Register
  883. #define PORTA_DFER (*(volatile uint32_t *)0x400490C0) // Digital Filter Enable
  884. #define PORTA_DFCR (*(volatile uint32_t *)0x400490C4) // Digital Filter Clock
  885. #define PORTA_DFWR (*(volatile uint32_t *)0x400490C8) // Digital Filter Width
  886. #define PORTB_PCR0 (*(volatile uint32_t *)0x4004A000) // Pin Control Register n
  887. #define PORTB_PCR1 (*(volatile uint32_t *)0x4004A004) // Pin Control Register n
  888. #define PORTB_PCR2 (*(volatile uint32_t *)0x4004A008) // Pin Control Register n
  889. #define PORTB_PCR3 (*(volatile uint32_t *)0x4004A00C) // Pin Control Register n
  890. #define PORTB_PCR4 (*(volatile uint32_t *)0x4004A010) // Pin Control Register n
  891. #define PORTB_PCR5 (*(volatile uint32_t *)0x4004A014) // Pin Control Register n
  892. #define PORTB_PCR6 (*(volatile uint32_t *)0x4004A018) // Pin Control Register n
  893. #define PORTB_PCR7 (*(volatile uint32_t *)0x4004A01C) // Pin Control Register n
  894. #define PORTB_PCR8 (*(volatile uint32_t *)0x4004A020) // Pin Control Register n
  895. #define PORTB_PCR9 (*(volatile uint32_t *)0x4004A024) // Pin Control Register n
  896. #define PORTB_PCR10 (*(volatile uint32_t *)0x4004A028) // Pin Control Register n
  897. #define PORTB_PCR11 (*(volatile uint32_t *)0x4004A02C) // Pin Control Register n
  898. #define PORTB_PCR12 (*(volatile uint32_t *)0x4004A030) // Pin Control Register n
  899. #define PORTB_PCR13 (*(volatile uint32_t *)0x4004A034) // Pin Control Register n
  900. #define PORTB_PCR14 (*(volatile uint32_t *)0x4004A038) // Pin Control Register n
  901. #define PORTB_PCR15 (*(volatile uint32_t *)0x4004A03C) // Pin Control Register n
  902. #define PORTB_PCR16 (*(volatile uint32_t *)0x4004A040) // Pin Control Register n
  903. #define PORTB_PCR17 (*(volatile uint32_t *)0x4004A044) // Pin Control Register n
  904. #define PORTB_PCR18 (*(volatile uint32_t *)0x4004A048) // Pin Control Register n
  905. #define PORTB_PCR19 (*(volatile uint32_t *)0x4004A04C) // Pin Control Register n
  906. #define PORTB_PCR20 (*(volatile uint32_t *)0x4004A050) // Pin Control Register n
  907. #define PORTB_PCR21 (*(volatile uint32_t *)0x4004A054) // Pin Control Register n
  908. #define PORTB_PCR22 (*(volatile uint32_t *)0x4004A058) // Pin Control Register n
  909. #define PORTB_PCR23 (*(volatile uint32_t *)0x4004A05C) // Pin Control Register n
  910. #define PORTB_PCR24 (*(volatile uint32_t *)0x4004A060) // Pin Control Register n
  911. #define PORTB_PCR25 (*(volatile uint32_t *)0x4004A064) // Pin Control Register n
  912. #define PORTB_PCR26 (*(volatile uint32_t *)0x4004A068) // Pin Control Register n
  913. #define PORTB_PCR27 (*(volatile uint32_t *)0x4004A06C) // Pin Control Register n
  914. #define PORTB_PCR28 (*(volatile uint32_t *)0x4004A070) // Pin Control Register n
  915. #define PORTB_PCR29 (*(volatile uint32_t *)0x4004A074) // Pin Control Register n
  916. #define PORTB_PCR30 (*(volatile uint32_t *)0x4004A078) // Pin Control Register n
  917. #define PORTB_PCR31 (*(volatile uint32_t *)0x4004A07C) // Pin Control Register n
  918. #define PORTB_GPCLR (*(volatile uint32_t *)0x4004A080) // Global Pin Control Low Register
  919. #define PORTB_GPCHR (*(volatile uint32_t *)0x4004A084) // Global Pin Control High Register
  920. #define PORTB_ISFR (*(volatile uint32_t *)0x4004A0A0) // Interrupt Status Flag Register
  921. #define PORTB_DFER (*(volatile uint32_t *)0x4004A0C0) // Digital Filter Enable
  922. #define PORTB_DFCR (*(volatile uint32_t *)0x4004A0C4) // Digital Filter Clock
  923. #define PORTB_DFWR (*(volatile uint32_t *)0x4004A0C8) // Digital Filter Width
  924. #define PORTC_PCR0 (*(volatile uint32_t *)0x4004B000) // Pin Control Register n
  925. #define PORTC_PCR1 (*(volatile uint32_t *)0x4004B004) // Pin Control Register n
  926. #define PORTC_PCR2 (*(volatile uint32_t *)0x4004B008) // Pin Control Register n
  927. #define PORTC_PCR3 (*(volatile uint32_t *)0x4004B00C) // Pin Control Register n
  928. #define PORTC_PCR4 (*(volatile uint32_t *)0x4004B010) // Pin Control Register n
  929. #define PORTC_PCR5 (*(volatile uint32_t *)0x4004B014) // Pin Control Register n
  930. #define PORTC_PCR6 (*(volatile uint32_t *)0x4004B018) // Pin Control Register n
  931. #define PORTC_PCR7 (*(volatile uint32_t *)0x4004B01C) // Pin Control Register n
  932. #define PORTC_PCR8 (*(volatile uint32_t *)0x4004B020) // Pin Control Register n
  933. #define PORTC_PCR9 (*(volatile uint32_t *)0x4004B024) // Pin Control Register n
  934. #define PORTC_PCR10 (*(volatile uint32_t *)0x4004B028) // Pin Control Register n
  935. #define PORTC_PCR11 (*(volatile uint32_t *)0x4004B02C) // Pin Control Register n
  936. #define PORTC_PCR12 (*(volatile uint32_t *)0x4004B030) // Pin Control Register n
  937. #define PORTC_PCR13 (*(volatile uint32_t *)0x4004B034) // Pin Control Register n
  938. #define PORTC_PCR14 (*(volatile uint32_t *)0x4004B038) // Pin Control Register n
  939. #define PORTC_PCR15 (*(volatile uint32_t *)0x4004B03C) // Pin Control Register n
  940. #define PORTC_PCR16 (*(volatile uint32_t *)0x4004B040) // Pin Control Register n
  941. #define PORTC_PCR17 (*(volatile uint32_t *)0x4004B044) // Pin Control Register n
  942. #define PORTC_PCR18 (*(volatile uint32_t *)0x4004B048) // Pin Control Register n
  943. #define PORTC_PCR19 (*(volatile uint32_t *)0x4004B04C) // Pin Control Register n
  944. #define PORTC_PCR20 (*(volatile uint32_t *)0x4004B050) // Pin Control Register n
  945. #define PORTC_PCR21 (*(volatile uint32_t *)0x4004B054) // Pin Control Register n
  946. #define PORTC_PCR22 (*(volatile uint32_t *)0x4004B058) // Pin Control Register n
  947. #define PORTC_PCR23 (*(volatile uint32_t *)0x4004B05C) // Pin Control Register n
  948. #define PORTC_PCR24 (*(volatile uint32_t *)0x4004B060) // Pin Control Register n
  949. #define PORTC_PCR25 (*(volatile uint32_t *)0x4004B064) // Pin Control Register n
  950. #define PORTC_PCR26 (*(volatile uint32_t *)0x4004B068) // Pin Control Register n
  951. #define PORTC_PCR27 (*(volatile uint32_t *)0x4004B06C) // Pin Control Register n
  952. #define PORTC_PCR28 (*(volatile uint32_t *)0x4004B070) // Pin Control Register n
  953. #define PORTC_PCR29 (*(volatile uint32_t *)0x4004B074) // Pin Control Register n
  954. #define PORTC_PCR30 (*(volatile uint32_t *)0x4004B078) // Pin Control Register n
  955. #define PORTC_PCR31 (*(volatile uint32_t *)0x4004B07C) // Pin Control Register n
  956. #define PORTC_GPCLR (*(volatile uint32_t *)0x4004B080) // Global Pin Control Low Register
  957. #define PORTC_GPCHR (*(volatile uint32_t *)0x4004B084) // Global Pin Control High Register
  958. #define PORTC_ISFR (*(volatile uint32_t *)0x4004B0A0) // Interrupt Status Flag Register
  959. #define PORTC_DFER (*(volatile uint32_t *)0x4004B0C0) // Digital Filter Enable
  960. #define PORTC_DFCR (*(volatile uint32_t *)0x4004B0C4) // Digital Filter Clock
  961. #define PORTC_DFWR (*(volatile uint32_t *)0x4004B0C8) // Digital Filter Width
  962. #define PORTD_PCR0 (*(volatile uint32_t *)0x4004C000) // Pin Control Register n
  963. #define PORTD_PCR1 (*(volatile uint32_t *)0x4004C004) // Pin Control Register n
  964. #define PORTD_PCR2 (*(volatile uint32_t *)0x4004C008) // Pin Control Register n
  965. #define PORTD_PCR3 (*(volatile uint32_t *)0x4004C00C) // Pin Control Register n
  966. #define PORTD_PCR4 (*(volatile uint32_t *)0x4004C010) // Pin Control Register n
  967. #define PORTD_PCR5 (*(volatile uint32_t *)0x4004C014) // Pin Control Register n
  968. #define PORTD_PCR6 (*(volatile uint32_t *)0x4004C018) // Pin Control Register n
  969. #define PORTD_PCR7 (*(volatile uint32_t *)0x4004C01C) // Pin Control Register n
  970. #define PORTD_PCR8 (*(volatile uint32_t *)0x4004C020) // Pin Control Register n
  971. #define PORTD_PCR9 (*(volatile uint32_t *)0x4004C024) // Pin Control Register n
  972. #define PORTD_PCR10 (*(volatile uint32_t *)0x4004C028) // Pin Control Register n
  973. #define PORTD_PCR11 (*(volatile uint32_t *)0x4004C02C) // Pin Control Register n
  974. #define PORTD_PCR12 (*(volatile uint32_t *)0x4004C030) // Pin Control Register n
  975. #define PORTD_PCR13 (*(volatile uint32_t *)0x4004C034) // Pin Control Register n
  976. #define PORTD_PCR14 (*(volatile uint32_t *)0x4004C038) // Pin Control Register n
  977. #define PORTD_PCR15 (*(volatile uint32_t *)0x4004C03C) // Pin Control Register n
  978. #define PORTD_PCR16 (*(volatile uint32_t *)0x4004C040) // Pin Control Register n
  979. #define PORTD_PCR17 (*(volatile uint32_t *)0x4004C044) // Pin Control Register n
  980. #define PORTD_PCR18 (*(volatile uint32_t *)0x4004C048) // Pin Control Register n
  981. #define PORTD_PCR19 (*(volatile uint32_t *)0x4004C04C) // Pin Control Register n
  982. #define PORTD_PCR20 (*(volatile uint32_t *)0x4004C050) // Pin Control Register n
  983. #define PORTD_PCR21 (*(volatile uint32_t *)0x4004C054) // Pin Control Register n
  984. #define PORTD_PCR22 (*(volatile uint32_t *)0x4004C058) // Pin Control Register n
  985. #define PORTD_PCR23 (*(volatile uint32_t *)0x4004C05C) // Pin Control Register n
  986. #define PORTD_PCR24 (*(volatile uint32_t *)0x4004C060) // Pin Control Register n
  987. #define PORTD_PCR25 (*(volatile uint32_t *)0x4004C064) // Pin Control Register n
  988. #define PORTD_PCR26 (*(volatile uint32_t *)0x4004C068) // Pin Control Register n
  989. #define PORTD_PCR27 (*(volatile uint32_t *)0x4004C06C) // Pin Control Register n
  990. #define PORTD_PCR28 (*(volatile uint32_t *)0x4004C070) // Pin Control Register n
  991. #define PORTD_PCR29 (*(volatile uint32_t *)0x4004C074) // Pin Control Register n
  992. #define PORTD_PCR30 (*(volatile uint32_t *)0x4004C078) // Pin Control Register n
  993. #define PORTD_PCR31 (*(volatile uint32_t *)0x4004C07C) // Pin Control Register n
  994. #define PORTD_GPCLR (*(volatile uint32_t *)0x4004C080) // Global Pin Control Low Register
  995. #define PORTD_GPCHR (*(volatile uint32_t *)0x4004C084) // Global Pin Control High Register
  996. #define PORTD_ISFR (*(volatile uint32_t *)0x4004C0A0) // Interrupt Status Flag Register
  997. #define PORTD_DFER (*(volatile uint32_t *)0x4004C0C0) // Digital Filter Enable
  998. #define PORTD_DFCR (*(volatile uint32_t *)0x4004C0C4) // Digital Filter Clock
  999. #define PORTD_DFWR (*(volatile uint32_t *)0x4004C0C8) // Digital Filter Width
  1000. #define PORTE_PCR0 (*(volatile uint32_t *)0x4004D000) // Pin Control Register n
  1001. #define PORTE_PCR1 (*(volatile uint32_t *)0x4004D004) // Pin Control Register n
  1002. #define PORTE_PCR2 (*(volatile uint32_t *)0x4004D008) // Pin Control Register n
  1003. #define PORTE_PCR3 (*(volatile uint32_t *)0x4004D00C) // Pin Control Register n
  1004. #define PORTE_PCR4 (*(volatile uint32_t *)0x4004D010) // Pin Control Register n
  1005. #define PORTE_PCR5 (*(volatile uint32_t *)0x4004D014) // Pin Control Register n
  1006. #define PORTE_PCR6 (*(volatile uint32_t *)0x4004D018) // Pin Control Register n
  1007. #define PORTE_PCR7 (*(volatile uint32_t *)0x4004D01C) // Pin Control Register n
  1008. #define PORTE_PCR8 (*(volatile uint32_t *)0x4004D020) // Pin Control Register n
  1009. #define PORTE_PCR9 (*(volatile uint32_t *)0x4004D024) // Pin Control Register n
  1010. #define PORTE_PCR10 (*(volatile uint32_t *)0x4004D028) // Pin Control Register n
  1011. #define PORTE_PCR11 (*(volatile uint32_t *)0x4004D02C) // Pin Control Register n
  1012. #define PORTE_PCR12 (*(volatile uint32_t *)0x4004D030) // Pin Control Register n
  1013. #define PORTE_PCR13 (*(volatile uint32_t *)0x4004D034) // Pin Control Register n
  1014. #define PORTE_PCR14 (*(volatile uint32_t *)0x4004D038) // Pin Control Register n
  1015. #define PORTE_PCR15 (*(volatile uint32_t *)0x4004D03C) // Pin Control Register n
  1016. #define PORTE_PCR16 (*(volatile uint32_t *)0x4004D040) // Pin Control Register n
  1017. #define PORTE_PCR17 (*(volatile uint32_t *)0x4004D044) // Pin Control Register n
  1018. #define PORTE_PCR18 (*(volatile uint32_t *)0x4004D048) // Pin Control Register n
  1019. #define PORTE_PCR19 (*(volatile uint32_t *)0x4004D04C) // Pin Control Register n
  1020. #define PORTE_PCR20 (*(volatile uint32_t *)0x4004D050) // Pin Control Register n
  1021. #define PORTE_PCR21 (*(volatile uint32_t *)0x4004D054) // Pin Control Register n
  1022. #define PORTE_PCR22 (*(volatile uint32_t *)0x4004D058) // Pin Control Register n
  1023. #define PORTE_PCR23 (*(volatile uint32_t *)0x4004D05C) // Pin Control Register n
  1024. #define PORTE_PCR24 (*(volatile uint32_t *)0x4004D060) // Pin Control Register n
  1025. #define PORTE_PCR25 (*(volatile uint32_t *)0x4004D064) // Pin Control Register n
  1026. #define PORTE_PCR26 (*(volatile uint32_t *)0x4004D068) // Pin Control Register n
  1027. #define PORTE_PCR27 (*(volatile uint32_t *)0x4004D06C) // Pin Control Register n
  1028. #define PORTE_PCR28 (*(volatile uint32_t *)0x4004D070) // Pin Control Register n
  1029. #define PORTE_PCR29 (*(volatile uint32_t *)0x4004D074) // Pin Control Register n
  1030. #define PORTE_PCR30 (*(volatile uint32_t *)0x4004D078) // Pin Control Register n
  1031. #define PORTE_PCR31 (*(volatile uint32_t *)0x4004D07C) // Pin Control Register n
  1032. #define PORTE_GPCLR (*(volatile uint32_t *)0x4004D080) // Global Pin Control Low Register
  1033. #define PORTE_GPCHR (*(volatile uint32_t *)0x4004D084) // Global Pin Control High Register
  1034. #define PORTE_ISFR (*(volatile uint32_t *)0x4004D0A0) // Interrupt Status Flag Register
  1035. #define PORTE_DFER (*(volatile uint32_t *)0x4004D0C0) // Digital Filter Enable
  1036. #define PORTE_DFCR (*(volatile uint32_t *)0x4004D0C4) // Digital Filter Clock
  1037. #define PORTE_DFWR (*(volatile uint32_t *)0x4004D0C8) // Digital Filter Width
  1038. // System Integration Module (SIM)
  1039. #define SIM_SOPT1 (*(volatile uint32_t *)0x40047000) // System Options Register 1
  1040. #define SIM_SOPT1_USBREGEN ((uint32_t)0x80000000) // USB regulator enable
  1041. #define SIM_SOPT1_USBSSTBY ((uint32_t)0x40000000) // USB regulator standby in Stop, VLPS, LLS and VLLS
  1042. #define SIM_SOPT1_USBVSTBY ((uint32_t)0x20000000) // USB regulator standby in VLPR and VLPW
  1043. #define SIM_SOPT1_OSC32KSEL(n) ((uint32_t)(((n) & 3) << 18)) // 32K oscillator clock, 0=system osc, 2=rtc osc, 3=lpo
  1044. #define SIM_SOPT1CFG (*(volatile uint32_t *)0x40047004) // SOPT1 Configuration Register
  1045. #define SIM_SOPT1CFG_USSWE ((uint32_t)0x04000000) // USB voltage regulator stop standby write enable
  1046. #define SIM_SOPT1CFG_UVSWE ((uint32_t)0x02000000) // USB voltage regulator VLP standby write enable
  1047. #define SIM_SOPT1CFG_URWE ((uint32_t)0x01000000) // USB voltage regulator enable write enable
  1048. #define SIM_USBPHYCTL (*(volatile uint32_t *)0x40047008) // USB PHY Control Register
  1049. #define SIM_USBPHYCTL_USBDISILIM ((uint32_t)0x00800000) // USB Disable Inrush Current Limit
  1050. #define SIM_USBPHYCTL_USB3VOUTTRG(n) ((uint32_t)(((n) & 7) << 20)) // USB 3.3V Output Target
  1051. #define SIM_USBPHYCTL_USBVREGPD ((uint32_t)0x00020000) // Enables the pulldown on the output of the USB Regulator.
  1052. #define SIM_USBPHYCTL_USBVREGSEL ((uint32_t)0x00010000) // Selects the default input voltage source
  1053. #define SIM_SOPT2 (*(volatile uint32_t *)0x40048004) // System Options Register 2
  1054. #define SIM_SOPT2_SDHCSRC(n) (uint32_t)(((n) & 3) << 28) // SDHC Clock, 0=system, 1=FLL/PLL, 2=OSCERCLK, 3=external
  1055. #define SIM_SOPT2_LPUARTSRC(n) (uint32_t)(((n) & 3) << 26) // LPUART Clock, 0=off, 1=FLL/PLL, 2=OSCERCLK, 3=MCGIRCLK
  1056. #define SIM_SOPT2_UART0SRC(n) (uint32_t)(((n) & 3) << 26) // UART0 Clock, 0=off, 1=FLL/PLL, 2=OSCERCLK, 3=MCGIRCLK
  1057. #define SIM_SOPT2_TPMSRC(n) (uint32_t)(((n) & 3) << 24) // TPM Clock, 0=off, 1=FLL/PLL, 2=OSCERCLK, 3=MCGIRCLK
  1058. #define SIM_SOPT2_TIMESRC(n) (uint32_t)(((n) & 3) << 20) // IEEE 1588 clock, 0=system, 1=FLL/PLL, 2=OSCERCLK, 3=external
  1059. #define SIM_SOPT2_RMIISRC ((uint32_t)0x00080000) // 0=external, 1=external 1588
  1060. #define SIM_SOPT2_USBSRC ((uint32_t)0x00040000) // 0=USB_CLKIN, 1=FFL/PLL
  1061. #define SIM_SOPT2_PLLFLLSEL ((uint32_t)0x00010000) // 0=FLL, 1=PLL
  1062. #define SIM_SOPT2_IRC48SEL ((uint32_t)0x00030000) // 0=FLL, 1=PLL
  1063. #define SIM_SOPT2_TRACECLKSEL ((uint32_t)0x00001000) // 0=MCGOUTCLK, 1=CPU
  1064. #define SIM_SOPT2_PTD7PAD ((uint32_t)0x00000800) // 0=normal, 1=double drive PTD7
  1065. #define SIM_SOPT2_FBSL(n) ((uint32_t)(((n) & 3) << 8)) // FlexBus security level
  1066. #define SIM_SOPT2_CLKOUTSEL(n) ((uint32_t)(((n) & 7) << 5)) // Selects the clock to output on the CLKOUT pin.
  1067. #define SIM_SOPT2_RTCCLKOUTSEL ((uint32_t)0x00000010) // RTC clock out select
  1068. #define SIM_SOPT2_USBREGEN ((uint32_t)0x00000002) // USB PHY PLL Regulator Enable
  1069. #define SIM_SOPT2_USBSLSRC ((uint32_t)0x00000001) // USB Slow Clock Source
  1070. #define SIM_SOPT4 (*(volatile uint32_t *)0x4004800C) // System Options Register 4
  1071. #define SIM_SOPT4_FTM3TRG1SRC ((uint32_t)0x80000000) // FlexTimer 3 Hardware Trigger 1 Source Select
  1072. #define SIM_SOPT4_FTM3TRG0SRC ((uint32_t)0x40000000) // FlexTimer 3 Hardware Trigger 0 Source Select
  1073. #define SIM_SOPT4_FTM0TRG1SRC ((uint32_t)0x20000000) // FlexTimer 0 Hardware Trigger 1 Source Select
  1074. #define SIM_SOPT4_FTM0TRG0SRC ((uint32_t)0x10000000) // FlexTimer 0 Hardware Trigger 0 Source Select
  1075. #define SIM_SOPT4_FTM3CLKSEL ((uint32_t)0x08000000) // FlexTimer 3 External Clock Pin Select
  1076. #define SIM_SOPT4_FTM2CLKSEL ((uint32_t)0x04000000) // FlexTimer 2 External Clock Pin Select
  1077. #define SIM_SOPT4_FTM1CLKSEL ((uint32_t)0x02000000) // FTM1 External Clock Pin Select
  1078. #define SIM_SOPT4_FTM0CLKSEL ((uint32_t)0x01000000) // FlexTimer 0 External Clock Pin Select
  1079. #define SIM_SOPT4_FTM2CH1SRC ((uint32_t)0x00400000) // FTM2 channel 1 input capture source select
  1080. #define SIM_SOPT4_FTM2CH0SRC(n) ((uint32_t)(((n) & 3) << 20)) // FTM2 channel 0 input capture source select
  1081. #define SIM_SOPT4_FTM1CH0SRC(n) ((uint32_t)(((n) & 3) << 18)) // FTM1 channel 0 input capture source select
  1082. #define SIM_SOPT4_FTM3FLT0 ((uint32_t)0x00001000) // FTM3 Fault 0 Select
  1083. #define SIM_SOPT4_FTM2FLT0 ((uint32_t)0x00000100) // FTM2 Fault 0 Select
  1084. #define SIM_SOPT4_FTM1FLT0 ((uint32_t)0x00000010) // FTM1 Fault 0 Select
  1085. #define SIM_SOPT4_FTM0FLT3 ((uint32_t)0x00000008) // FTM0 Fault 3 Select
  1086. #define SIM_SOPT4_FTM0FLT2 ((uint32_t)0x00000004) // FTM0 Fault 2 Select
  1087. #define SIM_SOPT4_FTM0FLT1 ((uint32_t)0x00000002) // FTM0 Fault 1 Select
  1088. #define SIM_SOPT4_FTM0FLT0 ((uint32_t)0x00000001) // FTM0 Fault 0 Select
  1089. #define SIM_SOPT5 (*(volatile uint32_t *)0x40048010) // System Options Register 5
  1090. #define SIM_SOPT5_LPUART0RXSRC(n) (uint32_t)(((n) & 3) << 18) // LPUART0 receive data source select
  1091. #define SIM_SOPT5_LPUART0TXSRC(n) (uint32_t)(((n) & 3) << 16) // LPUART0 transmit data source select
  1092. #define SIM_SOPT5_UART1RXSRC(n) (uint32_t)(((n) & 3) << 6) // UART 1 receive data source select
  1093. #define SIM_SOPT5_UART1TXSRC(n) (uint32_t)(((n) & 3) << 4) // UART 1 transmit data source select
  1094. #define SIM_SOPT5_UART0RXSRC(n) (uint32_t)(((n) & 3) << 2) // UART 0 receive data source select
  1095. #define SIM_SOPT5_UART0TXSRC(n) (uint32_t)(((n) & 3) << 0) // UART 0 transmit data source select
  1096. #define SIM_SOPT7 (*(volatile uint32_t *)0x40048018) // System Options Register 7
  1097. #define SIM_SOPT7_ADC1ALTTRGEN ((uint32_t)0x00008000) // ADC1 alternate trigger enable
  1098. #define SIM_SOPT7_ADC1PRETRGSEL ((uint32_t)0x00001000) // ADC1 pre-trigger select
  1099. #define SIM_SOPT7_ADC1TRGSEL(n) (uint32_t)(((n) & 15) << 8) // ADC1 trigger select
  1100. #define SIM_SOPT7_ADC0ALTTRGEN ((uint32_t)0x00000080) // ADC0 alternate trigger enable
  1101. #define SIM_SOPT7_ADC0PRETRGSEL ((uint32_t)0x00000010) // ADC0 pretrigger select
  1102. #define SIM_SOPT7_ADC0TRGSEL(n) (uint32_t)(((n) & 15) << 0) // ADC0 trigger select
  1103. #define SIM_SOPT8 (*(volatile uint32_t *)0x4004801C) // System Options Register 8
  1104. #define SIM_SOPT8_FTM3OCH7SRC ((uint32_t)0x80000000) // FTM3 channel 7 output source
  1105. #define SIM_SOPT8_FTM3OCH6SRC ((uint32_t)0x40000000) // FTM3 channel 6 output source
  1106. #define SIM_SOPT8_FTM3OCH5SRC ((uint32_t)0x20000000) // FTM3 channel 5 output source
  1107. #define SIM_SOPT8_FTM3OCH4SRC ((uint32_t)0x10000000) // FTM3 channel 4 output source
  1108. #define SIM_SOPT8_FTM3OCH3SRC ((uint32_t)0x08000000) // FTM3 channel 3 output source
  1109. #define SIM_SOPT8_FTM3OCH2SRC ((uint32_t)0x04000000) // FTM3 channel 2 output source
  1110. #define SIM_SOPT8_FTM3OCH1SRC ((uint32_t)0x02000000) // FTM3 channel 1 output source
  1111. #define SIM_SOPT8_FTM3OCH0SRC ((uint32_t)0x01000000) // FTM3 channel 0 output source
  1112. #define SIM_SOPT8_FTM0OCH7SRC ((uint32_t)0x00800000) // FTM0 channel 7 output source
  1113. #define SIM_SOPT8_FTM0OCH6SRC ((uint32_t)0x00400000) // FTM0 channel 6 output source
  1114. #define SIM_SOPT8_FTM0OCH5SRC ((uint32_t)0x00200000) // FTM0 channel 5 output source
  1115. #define SIM_SOPT8_FTM0OCH4SRC ((uint32_t)0x00100000) // FTM0 channel 4 output source
  1116. #define SIM_SOPT8_FTM0OCH3SRC ((uint32_t)0x00080000) // FTM0 channel 3 output source
  1117. #define SIM_SOPT8_FTM0OCH2SRC ((uint32_t)0x00040000) // FTM0 channel 2 output source
  1118. #define SIM_SOPT8_FTM0OCH1SRC ((uint32_t)0x00020000) // FTM0 channel 1 output source
  1119. #define SIM_SOPT8_FTM0OCH0SRC ((uint32_t)0x00010000) // FTM0 channel 0 output source
  1120. #define SIM_SOPT8_FTM3SYNCBIT ((uint32_t)0x00000008) // FTM3 Hardware Trigger 0 Software Synchronization
  1121. #define SIM_SOPT8_FTM2SYNCBIT ((uint32_t)0x00000004) // FTM2 Hardware Trigger 0 Software Synchronization
  1122. #define SIM_SOPT8_FTM1SYNCBIT ((uint32_t)0x00000002) // FTM1 Hardware Trigger 0 Software Synchronization
  1123. #define SIM_SOPT8_FTM0SYNCBIT ((uint32_t)0x00000001) // FTM0 Hardware Trigger 0 Software Synchronization
  1124. #define SIM_SOPT9 (*(volatile uint32_t *)0x40048020) // System Options Register 9
  1125. #define SIM_SOPT9_TPM2CLKSEL ((uint32_t)0x02000000) // TPM2 External Clock Pin Select
  1126. #define SIM_SOPT9_TPM1CLKSEL ((uint32_t)0x01000000) // TPM1 External Clock Pin Select
  1127. #define SIM_SOPT9_TPM2CH0SRC(n) (uint32_t)(((n) & 3) << 20) // TPM2 channel 0 input capture source select
  1128. #define SIM_SOPT9_TPM1CH0SRC(n) (uint32_t)(((n) & 3) << 18) // TPM1 channel 0 input capture source select
  1129. #define SIM_SDID (*(const uint32_t *)0x40048024) // System Device Identification Register
  1130. #define SIM_SCGC1 (*(volatile uint32_t *)0x40048028) // System Clock Gating Control Register 1
  1131. #define SIM_SCGC1_UART5 ((uint32_t)0x00000800) // UART5 Clock Gate Control
  1132. #define SIM_SCGC1_UART4 ((uint32_t)0x00000400) // UART4 Clock Gate Control
  1133. #define SIM_SCGC1_I2C3 ((uint32_t)0x00000080) // I2C3 Clock Gate Control
  1134. #define SIM_SCGC1_I2C2 ((uint32_t)0x00000040) // I2C2 Clock Gate Control
  1135. #define SIM_SCGC2 (*(volatile uint32_t *)0x4004802C) // System Clock Gating Control Register 2
  1136. #if defined(KINETISK)
  1137. #define SIM_SCGC2_DAC1 ((uint32_t)0x00002000) // DAC1 Clock Gate Control
  1138. #define SIM_SCGC2_DAC0 ((uint32_t)0x00001000) // DAC0 Clock on APIS1 (base addr 400CC000)
  1139. #define SIM_SCGC2_TPM2 ((uint32_t)0x00000400) // TPM2 Clock Gate Control
  1140. #define SIM_SCGC2_TPM1 ((uint32_t)0x00000200) // TPM1 Clock Gate Control
  1141. #define SIM_SCGC2_LPUART0 ((uint32_t)0x00000010) // LPUART0 Clock Gate Control
  1142. #define SIM_SCGC2_ENET ((uint32_t)0x00000001) // Ethernet Clock Gate Control
  1143. #endif
  1144. #define SIM_SCGC3 (*(volatile uint32_t *)0x40048030) // System Clock Gating Control Register 3
  1145. #define SIM_SCGC3_ADC1 ((uint32_t)0x08000000) // ADC1 Clock Gate Control
  1146. #define SIM_SCGC3_FTM3 ((uint32_t)0x02000000) // FTM3 Clock Gate Control
  1147. #define SIM_SCGC3_FTM2 ((uint32_t)0x01000000) // FTM2 Clock on APIS1 (base addr 400B8000)
  1148. #define SIM_SCGC3_SDHC ((uint32_t)0x00020000) // SDHC Clock Gate Control
  1149. #define SIM_SCGC3_SPI2 ((uint32_t)0x00001000) // SPI2 Clock Gate Control
  1150. #define SIM_SCGC3_FLEXCAN1 ((uint32_t)0x00000010) // FLEXCAN1 Clock Gate Control
  1151. #define SIM_SCGC3_USBHSDCD ((uint32_t)0x00000008) // USBHSDCD Clock Gate Control
  1152. #define SIM_SCGC3_USBHSPHY ((uint32_t)0x00000004) // USBHSPHY Clock Gate Control
  1153. #define SIM_SCGC3_USBHS ((uint32_t)0x00000002) // USBHS Clock Gate Control
  1154. //#define SIM_SCGC3_RNGA ((uint32_t)0x00000001) // RNGA Clock on APIS1 (base addr 400A0000)
  1155. #define SIM_SCGC4 (*(volatile uint32_t *)0x40048034) // System Clock Gating Control Register 4
  1156. #define SIM_SCGC4_VREF ((uint32_t)0x00100000) // VREF Clock Gate Control
  1157. #define SIM_SCGC4_CMP ((uint32_t)0x00080000) // Comparator Clock Gate Control
  1158. #define SIM_SCGC4_USBOTG ((uint32_t)0x00040000) // USB Clock Gate Control
  1159. #define SIM_SCGC4_UART3 ((uint32_t)0x00002000) // UART3 Clock Gate Control
  1160. #define SIM_SCGC4_UART2 ((uint32_t)0x00001000) // UART2 Clock Gate Control
  1161. #define SIM_SCGC4_UART1 ((uint32_t)0x00000800) // UART1 Clock Gate Control
  1162. #define SIM_SCGC4_UART0 ((uint32_t)0x00000400) // UART0 Clock Gate Control
  1163. #define SIM_SCGC4_I2C1 ((uint32_t)0x00000080) // I2C1 Clock Gate Control
  1164. #define SIM_SCGC4_I2C0 ((uint32_t)0x00000040) // I2C0 Clock Gate Control
  1165. #define SIM_SCGC4_CMT ((uint32_t)0x00000004) // CMT Clock Gate Control
  1166. #define SIM_SCGC4_EWM ((uint32_t)0x00000002) // EWM Clock Gate Control
  1167. #ifdef KINETISL
  1168. #define SIM_SCGC4_SPI1 ((uint32_t)0x00800000) //
  1169. #define SIM_SCGC4_SPI0 ((uint32_t)0x00400000) //
  1170. #endif
  1171. #define SIM_SCGC5 (*(volatile uint32_t *)0x40048038) // System Clock Gating Control Register 5
  1172. #define SIM_SCGC5_PORTE ((uint32_t)0x00002000) // Port E Clock Gate Control
  1173. #define SIM_SCGC5_PORTD ((uint32_t)0x00001000) // Port D Clock Gate Control
  1174. #define SIM_SCGC5_PORTC ((uint32_t)0x00000800) // Port C Clock Gate Control
  1175. #define SIM_SCGC5_PORTB ((uint32_t)0x00000400) // Port B Clock Gate Control
  1176. #define SIM_SCGC5_PORTA ((uint32_t)0x00000200) // Port A Clock Gate Control
  1177. #define SIM_SCGC5_TSI ((uint32_t)0x00000020) // Touch Sense Input TSI Clock Gate Control
  1178. #define SIM_SCGC5_LPTIMER ((uint32_t)0x00000001) // Low Power Timer Access Control
  1179. #define SIM_SCGC6 (*(volatile uint32_t *)0x4004803C) // System Clock Gating Control Register 6
  1180. #if defined(KINETISL)
  1181. #define SIM_SCGC6_DAC0 ((uint32_t)0x80000000) // DAC on Kinetis-L
  1182. #define SIM_SCGC6_TPM2 ((uint32_t)0x04000000) // FTM2 Clock Gate Control
  1183. #define SIM_SCGC6_TPM1 ((uint32_t)0x02000000) // FTM1 Clock Gate Control
  1184. #define SIM_SCGC6_TPM0 ((uint32_t)0x01000000) // FTM0 Clock Gate Control
  1185. #elif defined(KINETISK)
  1186. //#define SIM_SCGC6_DAC0 ((uint32_t)0x80000000) // DAC0 Clock on APIS0 (base addr 4003F000)
  1187. //#define SIM_SCGC6_FTM2 ((uint32_t)0x04000000) // FTM2 Clock on APIS0 (base addr 4003A000)
  1188. #define SIM_SCGC6_PDB ((uint32_t)0x00400000) // PDB Clock Gate Control
  1189. #define SIM_SCGC6_USBDCD ((uint32_t)0x00200000) // USB DCD Clock Gate Control
  1190. #define SIM_SCGC6_SPI1 ((uint32_t)0x00002000) // SPI1 Clock Gate Control
  1191. #define SIM_SCGC6_SPI0 ((uint32_t)0x00001000) // SPI0 Clock Gate Control
  1192. #define SIM_SCGC6_RNGA ((uint32_t)0x00000200) // RNGA Clock on APIS0 (base addr 40029000)
  1193. #define SIM_SCGC6_FLEXCAN0 ((uint32_t)0x00000010) // FlexCAN0 Clock Gate Control
  1194. #define SIM_SCGC6_CRC ((uint32_t)0x00040000) // CRC Clock Gate Control
  1195. #endif
  1196. #define SIM_SCGC6_RTC ((uint32_t)0x20000000) // RTC Access
  1197. #define SIM_SCGC6_ADC0 ((uint32_t)0x08000000) // ADC0 Clock Gate Control
  1198. #define SIM_SCGC6_FTM1 ((uint32_t)0x02000000) // FTM1 Clock Gate Control
  1199. #define SIM_SCGC6_FTM0 ((uint32_t)0x01000000) // FTM0 Clock Gate Control
  1200. #define SIM_SCGC6_PIT ((uint32_t)0x00800000) // PIT Clock Gate Control
  1201. #define SIM_SCGC6_I2S ((uint32_t)0x00008000) // I2S Clock Gate Control
  1202. #define SIM_SCGC6_DMAMUX ((uint32_t)0x00000002) // DMA Mux Clock Gate Control
  1203. #define SIM_SCGC6_FTFL ((uint32_t)0x00000001) // Flash Memory Clock Gate Control
  1204. #define SIM_SCGC7 (*(volatile uint32_t *)0x40048040) // System Clock Gating Control Register 7
  1205. #if defined(KINETISK)
  1206. #define SIM_SCGC7_SDRAMC ((uint32_t)0x00000008) // SDRAM Clock Gate Control
  1207. #define SIM_SCGC7_MPU ((uint32_t)0x00000004) // MPU Clock Gate Control
  1208. #define SIM_SCGC7_DMA ((uint32_t)0x00000002) // DMA Clock Gate Control
  1209. #define SIM_SCGC7_FLEXBUS ((uint32_t)0x00000001) // FLEXBUS Clock Gate Control
  1210. #elif defined(KINETISL)
  1211. #define SIM_SCGC7_DMA ((uint32_t)0x00000100) // DMA Clock Gate Control
  1212. #endif
  1213. #define SIM_CLKDIV1 (*(volatile uint32_t *)0x40048044) // System Clock Divider Register 1
  1214. #define SIM_CLKDIV1_OUTDIV1(n) ((uint32_t)(((n) & 0x0F) << 28)) // divide value for the core/system clock
  1215. #define SIM_CLKDIV1_OUTDIV2(n) ((uint32_t)(((n) & 0x0F) << 24)) // divide value for the peripheral clock
  1216. #define SIM_CLKDIV1_OUTDIV3(n) ((uint32_t)(((n) & 0x0F) << 20)) // divide value for the flexbus clock
  1217. #define SIM_CLKDIV1_OUTDIV4(n) ((uint32_t)(((n) & 0x0F) << 16)) // divide value for the flash clock
  1218. #define SIM_CLKDIV1_OUTDIVS(n1, n2, n3, n4) \
  1219. (SIM_CLKDIV1_OUTDIV1(n1) | SIM_CLKDIV1_OUTDIV2(n2) | \
  1220. SIM_CLKDIV1_OUTDIV3(n3) | SIM_CLKDIV1_OUTDIV4(n4))
  1221. #define SIM_CLKDIV2 (*(volatile uint32_t *)0x40048048) // System Clock Divider Register 2
  1222. #define SIM_CLKDIV2_USBDIV(n) ((uint32_t)(((n) & 0x07) << 1))
  1223. #define SIM_CLKDIV2_USBFRAC ((uint32_t)0x01)
  1224. #define SIM_FCFG1 (*(const uint32_t *)0x4004804C) // Flash Configuration Register 1
  1225. #define SIM_FCFG1_FLASHDOZE ((uint32_t)0x00000002) // Flash Doze (disabled during wait)
  1226. #define SIM_FCFG1_FLASHDIS ((uint32_t)0x00000001) // Flash Disable
  1227. #define SIM_FCFG2 (*(const uint32_t *)0x40048050) // Flash Configuration Register 2
  1228. #define SIM_UIDH (*(const uint32_t *)0x40048054) // Unique Identification Register High
  1229. #define SIM_UIDMH (*(const uint32_t *)0x40048058) // Unique Identification Register Mid-High
  1230. #define SIM_UIDML (*(const uint32_t *)0x4004805C) // Unique Identification Register Mid Low
  1231. #define SIM_UIDL (*(const uint32_t *)0x40048060) // Unique Identification Register Low
  1232. #define SIM_CLKDIV3 (*(volatile uint32_t *)0x40048064) // System Clock Divider Register 3 (LPUART & TPM)
  1233. #define SIM_CLKDIV3_PLLFLLDIV(n) ((uint32_t)(((n) & 0x07) << 1))
  1234. #define SIM_CLKDIV3_PLLFLLFRAC ((uint32_t)0x01)
  1235. #define SIM_CLKDIV4 (*(volatile uint32_t *)0x40048068) // System Clock Divider Register 4 (Trace)
  1236. #define SIM_CLKDIV4_TRACEDIV(n) ((uint32_t)(((n) & 0x07) << 1))
  1237. #define SIM_CLKDIV4_TRACEFRAC ((uint32_t)0x01)
  1238. #if defined(KINETISL)
  1239. #define SIM_COPC (*(volatile uint32_t *)0x40048100) // COP Control Register (SIM_COPC)
  1240. #define SIM_SRVCOP (*(volatile uint32_t *)0x40048104) // Service COP Register (SIM_SRVCOP)
  1241. #endif
  1242. // Reset Control Module (RCM)
  1243. #define RCM_SRS0 (*(volatile uint8_t *)0x4007F000) // System Reset Status Register 0
  1244. #define RCM_SRS0_POR ((uint8_t)0x80)
  1245. #define RCM_SRS0_PIN ((uint8_t)0x40)
  1246. #define RCM_SRS0_WDOG ((uint8_t)0x20)
  1247. #define RCM_SRS0_LOL ((uint8_t)0x08)
  1248. #define RCM_SRS0_LOC ((uint8_t)0x04)
  1249. #define RCM_SRS0_LVD ((uint8_t)0x02)
  1250. #define RCM_SRS0_WAKEUP ((uint8_t)0x01)
  1251. #define RCM_SRS1 (*(volatile uint8_t *)0x4007F001) // System Reset Status Register 1
  1252. #define RCM_SRS1_SACKERR ((uint8_t)0x20)
  1253. #define RCM_SRS1_EZPT ((uint8_t)0x10)
  1254. #define RCM_SRS1_MDM_AP ((uint8_t)0x08)
  1255. #define RCM_SRS1_SW ((uint8_t)0x04)
  1256. #define RCM_SRS1_LOCKUP ((uint8_t)0x02)
  1257. #define RCM_SRS1_JTAG ((uint8_t)0x01)
  1258. #define RCM_RPFC (*(volatile uint8_t *)0x4007F004) // Reset Pin Filter Control Register
  1259. #define RCM_RPFW (*(volatile uint8_t *)0x4007F005) // Reset Pin Filter Width Register
  1260. #define RCM_MR (*(volatile uint8_t *)0x4007F007) // Mode Register
  1261. #define RCM_SSRS0 (*(volatile uint8_t *)0x4007F008) // Sticky System Reset Status Register 0
  1262. #define RCM_SSRS1 (*(volatile uint8_t *)0x4007F009) // Sticky System Reset Status Register 0
  1263. // System Mode Controller
  1264. #define SMC_PMPROT (*(volatile uint8_t *)0x4007E000) // Power Mode Protection Register
  1265. #define SMC_PMPROT_AHSRUN ((uint8_t)0x80) // Allow high speed run mode
  1266. #define SMC_PMPROT_AVLP ((uint8_t)0x20) // Allow very low power modes
  1267. #define SMC_PMPROT_ALLS ((uint8_t)0x08) // Allow low leakage stop mode
  1268. #define SMC_PMPROT_AVLLS ((uint8_t)0x02) // Allow very low leakage stop mode
  1269. #define SMC_PMCTRL (*(volatile uint8_t *)0x4007E001) // Power Mode Control Register
  1270. #define SMC_PMCTRL_LPWUI ((uint8_t)0x80) // Low Power Wake Up on Interrupt
  1271. #define SMC_PMCTRL_RUNM(n) ((uint8_t)(((n) & 0x03) << 5)) // Run Mode Control
  1272. #define SMC_PMCTRL_STOPA ((uint8_t)0x08) // Stop Aborted
  1273. #define SMC_PMCTRL_STOPM(n) ((uint8_t)((n) & 0x07)) // Stop Mode Control
  1274. #define SMC_VLLSCTRL (*(volatile uint8_t *)0x4007E002) // VLLS Control Register
  1275. #define SMC_VLLSCTRL_PORPO ((uint8_t)0x20) // POR Power Option
  1276. #define SMC_VLLSCTRL_VLLSM(n) ((uint8_t)((n) & 0x07)) // VLLS Mode Control
  1277. #define SMC_PMSTAT (*(volatile uint8_t *)0x4007E003) // Power Mode Status Register
  1278. #define SMC_PMSTAT_RUN ((uint8_t)0x01) // Current power mode is RUN
  1279. #define SMC_PMSTAT_STOP ((uint8_t)0x02) // Current power mode is STOP
  1280. #define SMC_PMSTAT_VLPR ((uint8_t)0x04) // Current power mode is VLPR
  1281. #define SMC_PMSTAT_VLPW ((uint8_t)0x08) // Current power mode is VLPW
  1282. #define SMC_PMSTAT_VLPS ((uint8_t)0x10) // Current power mode is VLPS
  1283. #define SMC_PMSTAT_LLS ((uint8_t)0x20) // Current power mode is LLS
  1284. #define SMC_PMSTAT_VLLS ((uint8_t)0x40) // Current power mode is VLLS
  1285. #define SMC_PMSTAT_HSRUN ((uint8_t)0x80) // Current power mode is HSRUN
  1286. // Power Management Controller
  1287. #define PMC_LVDSC1 (*(volatile uint8_t *)0x4007D000) // Low Voltage Detect Status And Control 1 register
  1288. #define PMC_LVDSC1_LVDF ((uint8_t)0x80) // Low-Voltage Detect Flag
  1289. #define PMC_LVDSC1_LVDACK ((uint8_t)0x40) // Low-Voltage Detect Acknowledge
  1290. #define PMC_LVDSC1_LVDIE ((uint8_t)0x20) // Low-Voltage Detect Interrupt Enable
  1291. #define PMC_LVDSC1_LVDRE ((uint8_t)0x10) // Low-Voltage Detect Reset Enable
  1292. #define PMC_LVDSC1_LVDV(n) ((uint8_t)((n) & 0x03)) // Low-Voltage Detect Voltage Select
  1293. #define PMC_LVDSC2 (*(volatile uint8_t *)0x4007D001) // Low Voltage Detect Status And Control 2 register
  1294. #define PMC_LVDSC2_LVWF ((uint8_t)0x80) // Low-Voltage Warning Flag
  1295. #define PMC_LVDSC2_LVWACK ((uint8_t)0x40) // Low-Voltage Warning Acknowledge
  1296. #define PMC_LVDSC2_LVWIE ((uint8_t)0x20) // Low-Voltage Warning Interrupt Enable
  1297. #define PMC_LVDSC2_LVWV(n) ((uint8_t)((n) & 0x03)) // Low-Voltage Warning Voltage Select
  1298. #define PMC_REGSC (*(volatile uint8_t *)0x4007D002) // Regulator Status And Control register
  1299. #define PMC_REGSC_BGEN ((uint8_t)0x10) // Bandgap Enable In VLPx Operation
  1300. #define PMC_REGSC_ACKISO ((uint8_t)0x08) // Acknowledge Isolation
  1301. #define PMC_REGSC_REGONS ((uint8_t)0x04) // Regulator In Run Regulation Status
  1302. #define PMC_REGSC_BGBE ((uint8_t)0x01) // Bandgap Buffer Enable
  1303. // Low-Leakage Wakeup Unit (LLWU)
  1304. #if defined(HAS_KINETIS_LLWU_32CH)
  1305. #define LLWU_PE1 (*(volatile uint8_t *)0x4007C000) // LLWU Pin Enable 1 register
  1306. #define LLWU_PE1_WUPE0(n) ((uint8_t)((n) & 0x03)) // Wakeup Pin Enable For LLWU_P0
  1307. #define LLWU_PE1_WUPE1(n) ((uint8_t)(((n) & 0x03) << 2)) // Wakeup Pin Enable For LLWU_P1
  1308. #define LLWU_PE1_WUPE2(n) ((uint8_t)(((n) & 0x03) << 4)) // Wakeup Pin Enable For LLWU_P2
  1309. #define LLWU_PE1_WUPE3(n) ((uint8_t)(((n) & 0x03) << 6)) // Wakeup Pin Enable For LLWU_P3
  1310. #define LLWU_PE2 (*(volatile uint8_t *)0x4007C001) // LLWU Pin Enable 2 register
  1311. #define LLWU_PE2_WUPE4(n) ((uint8_t)((n) & 0x03)) // Wakeup Pin Enable For LLWU_P4
  1312. #define LLWU_PE2_WUPE5(n) ((uint8_t)(((n) & 0x03) << 2)) // Wakeup Pin Enable For LLWU_P5
  1313. #define LLWU_PE2_WUPE6(n) ((uint8_t)(((n) & 0x03) << 4)) // Wakeup Pin Enable For LLWU_P6
  1314. #define LLWU_PE2_WUPE7(n) ((uint8_t)(((n) & 0x03) << 6)) // Wakeup Pin Enable For LLWU_P7
  1315. #define LLWU_PE3 (*(volatile uint8_t *)0x4007C002) // LLWU Pin Enable 3 register
  1316. #define LLWU_PE3_WUPE8(n) ((uint8_t)((n) & 0x03)) // Wakeup Pin Enable For LLWU_P8
  1317. #define LLWU_PE3_WUPE9(n) ((uint8_t)(((n) & 0x03) << 2)) // Wakeup Pin Enable For LLWU_P9
  1318. #define LLWU_PE3_WUPE10(n) ((uint8_t)(((n) & 0x03) << 4)) // Wakeup Pin Enable For LLWU_P10
  1319. #define LLWU_PE3_WUPE11(n) ((uint8_t)(((n) & 0x03) << 6)) // Wakeup Pin Enable For LLWU_P11
  1320. #define LLWU_PE4 (*(volatile uint8_t *)0x4007C003) // LLWU Pin Enable 4 register
  1321. #define LLWU_PE4_WUPE12(n) ((uint8_t)((n) & 0x03)) // Wakeup Pin Enable For LLWU_P12
  1322. #define LLWU_PE4_WUPE13(n) ((uint8_t)(((n) & 0x03) << 2)) // Wakeup Pin Enable For LLWU_P13
  1323. #define LLWU_PE4_WUPE14(n) ((uint8_t)(((n) & 0x03) << 4)) // Wakeup Pin Enable For LLWU_P14
  1324. #define LLWU_PE4_WUPE15(n) ((uint8_t)(((n) & 0x03) << 6)) // Wakeup Pin Enable For LLWU_P15
  1325. #define LLWU_PE5 (*(volatile uint8_t *)0x4007C004) // LLWU Pin Enable 5 register
  1326. #define LLWU_PE5_WUPE19(n) ((uint8_t)((n) & 0x03)) // Wakeup Pin Enable For LLWU_P19
  1327. #define LLWU_PE5_WUPE18(n) ((uint8_t)(((n) & 0x03) << 2)) // Wakeup Pin Enable For LLWU_P18
  1328. #define LLWU_PE5_WUPE17(n) ((uint8_t)(((n) & 0x03) << 4)) // Wakeup Pin Enable For LLWU_P17
  1329. #define LLWU_PE5_WUPE16(n) ((uint8_t)(((n) & 0x03) << 6)) // Wakeup Pin Enable For LLWU_P16
  1330. #define LLWU_PE6 (*(volatile uint8_t *)0x4007C005) // LLWU Pin Enable 6 register
  1331. #define LLWU_PE6_WUPE23(n) ((uint8_t)((n) & 0x03)) // Wakeup Pin Enable For LLWU_P23
  1332. #define LLWU_PE6_WUPE22(n) ((uint8_t)(((n) & 0x03) << 2)) // Wakeup Pin Enable For LLWU_P22
  1333. #define LLWU_PE6_WUPE21(n) ((uint8_t)(((n) & 0x03) << 4)) // Wakeup Pin Enable For LLWU_P21
  1334. #define LLWU_PE6_WUPE20(n) ((uint8_t)(((n) & 0x03) << 6)) // Wakeup Pin Enable For LLWU_P20
  1335. #define LLWU_PE7 (*(volatile uint8_t *)0x4007C006) // LLWU Pin Enable 7 register
  1336. #define LLWU_PE7_WUPE27(n) ((uint8_t)((n) & 0x03)) // Wakeup Pin Enable For LLWU_P27
  1337. #define LLWU_PE7_WUPE26(n) ((uint8_t)(((n) & 0x03) << 2)) // Wakeup Pin Enable For LLWU_P26
  1338. #define LLWU_PE7_WUPE25(n) ((uint8_t)(((n) & 0x03) << 4)) // Wakeup Pin Enable For LLWU_P25
  1339. #define LLWU_PE7_WUPE24(n) ((uint8_t)(((n) & 0x03) << 6)) // Wakeup Pin Enable For LLWU_P24
  1340. #define LLWU_PE8 (*(volatile uint8_t *)0x4007C007) // LLWU Pin Enable 8 register
  1341. #define LLWU_PE8_WUPE31(n) ((uint8_t)((n) & 0x03)) // Wakeup Pin Enable For LLWU_P31
  1342. #define LLWU_PE8_WUPE30(n) ((uint8_t)(((n) & 0x03) << 2)) // Wakeup Pin Enable For LLWU_P30
  1343. #define LLWU_PE8_WUPE29(n) ((uint8_t)(((n) & 0x03) << 4)) // Wakeup Pin Enable For LLWU_P29
  1344. #define LLWU_PE8_WUPE28(n) ((uint8_t)(((n) & 0x03) << 6)) // Wakeup Pin Enable For LLWU_P28
  1345. #define LLWU_ME (*(volatile uint8_t *)0x4007C008) // LLWU Module Enable register
  1346. #define LLWU_ME_WUME0 ((uint8_t)0x01) // Wakeup Module Enable For Module 0
  1347. #define LLWU_ME_WUME1 ((uint8_t)0x02) // Wakeup Module Enable For Module 1
  1348. #define LLWU_ME_WUME2 ((uint8_t)0x04) // Wakeup Module Enable For Module 2
  1349. #define LLWU_ME_WUME3 ((uint8_t)0x08) // Wakeup Module Enable For Module 3
  1350. #define LLWU_ME_WUME4 ((uint8_t)0x10) // Wakeup Module Enable For Module 4
  1351. #define LLWU_ME_WUME5 ((uint8_t)0x20) // Wakeup Module Enable For Module 5
  1352. #define LLWU_ME_WUME6 ((uint8_t)0x40) // Wakeup Module Enable For Module 6
  1353. #define LLWU_ME_WUME7 ((uint8_t)0x80) // Wakeup Module Enable For Module 7
  1354. #define LLWU_PF1 (*(volatile uint8_t *)0x4007C009) // LLWU Pin Flag 1 register
  1355. #define LLWU_PF1_WUF0 ((uint8_t)0x01) // Wakeup Flag For LLWU_P0
  1356. #define LLWU_PF1_WUF1 ((uint8_t)0x02) // Wakeup Flag For LLWU_P1
  1357. #define LLWU_PF1_WUF2 ((uint8_t)0x04) // Wakeup Flag For LLWU_P2
  1358. #define LLWU_PF1_WUF3 ((uint8_t)0x08) // Wakeup Flag For LLWU_P3
  1359. #define LLWU_PF1_WUF4 ((uint8_t)0x10) // Wakeup Flag For LLWU_P4
  1360. #define LLWU_PF1_WUF5 ((uint8_t)0x20) // Wakeup Flag For LLWU_P5
  1361. #define LLWU_PF1_WUF6 ((uint8_t)0x40) // Wakeup Flag For LLWU_P6
  1362. #define LLWU_PF1_WUF7 ((uint8_t)0x80) // Wakeup Flag For LLWU_P7
  1363. #define LLWU_PF2 (*(volatile uint8_t *)0x4007C00A) // LLWU Pin Flag 2 register
  1364. #define LLWU_PF2_WUF8 ((uint8_t)0x01) // Wakeup Flag For LLWU_P8
  1365. #define LLWU_PF2_WUF9 ((uint8_t)0x02) // Wakeup Flag For LLWU_P9
  1366. #define LLWU_PF2_WUF10 ((uint8_t)0x04) // Wakeup Flag For LLWU_P10
  1367. #define LLWU_PF2_WUF11 ((uint8_t)0x08) // Wakeup Flag For LLWU_P11
  1368. #define LLWU_PF2_WUF12 ((uint8_t)0x10) // Wakeup Flag For LLWU_P12
  1369. #define LLWU_PF2_WUF13 ((uint8_t)0x20) // Wakeup Flag For LLWU_P13
  1370. #define LLWU_PF2_WUF14 ((uint8_t)0x40) // Wakeup Flag For LLWU_P14
  1371. #define LLWU_PF2_WUF15 ((uint8_t)0x80) // Wakeup Flag For LLWU_P15
  1372. #define LLWU_PF3 (*(volatile uint8_t *)0x4007C00B) // LLWU Pin Flag 3 register
  1373. #define LLWU_PF3_WUF16 ((uint8_t)0x01) // Wakeup Flag For LLWU_P16
  1374. #define LLWU_PF3_WUF17 ((uint8_t)0x02) // Wakeup Flag For LLWU_P17
  1375. #define LLWU_PF3_WUF18 ((uint8_t)0x04) // Wakeup Flag For LLWU_P18
  1376. #define LLWU_PF3_WUF19 ((uint8_t)0x08) // Wakeup Flag For LLWU_P19
  1377. #define LLWU_PF3_WUF20 ((uint8_t)0x10) // Wakeup Flag For LLWU_P20
  1378. #define LLWU_PF3_WUF21 ((uint8_t)0x20) // Wakeup Flag For LLWU_P21
  1379. #define LLWU_PF3_WUF22 ((uint8_t)0x40) // Wakeup Flag For LLWU_P22
  1380. #define LLWU_PF3_WUF23 ((uint8_t)0x80) // Wakeup Flag For LLWU_P23
  1381. #define LLWU_PF4 (*(volatile uint8_t *)0x4007C00C) // LLWU Pin Flag 4 register
  1382. #define LLWU_PF4_WUF31 ((uint8_t)0x01) // Wakeup Flag For LLWU_P31
  1383. #define LLWU_PF4_WUF30 ((uint8_t)0x02) // Wakeup Flag For LLWU_P30
  1384. #define LLWU_PF4_WUF29 ((uint8_t)0x04) // Wakeup Flag For LLWU_P29
  1385. #define LLWU_PF4_WUF28 ((uint8_t)0x08) // Wakeup Flag For LLWU_P28
  1386. #define LLWU_PF4_WUF27 ((uint8_t)0x10) // Wakeup Flag For LLWU_P27
  1387. #define LLWU_PF4_WUF26 ((uint8_t)0x20) // Wakeup Flag For LLWU_P26
  1388. #define LLWU_PF4_WUF25 ((uint8_t)0x40) // Wakeup Flag For LLWU_P25
  1389. #define LLWU_PF4_WUF24 ((uint8_t)0x80) // Wakeup Flag For LLWU_P24
  1390. #define LLWU_MF5 (*(volatile uint8_t *)0x4007C00D) // LLWU Module Flag 5 register
  1391. #define LLWU_MF5_MWUF0 ((uint8_t)0x01) // Wakeup flag For module 0
  1392. #define LLWU_MF5_MWUF1 ((uint8_t)0x02) // Wakeup flag For module 1
  1393. #define LLWU_MF5_MWUF2 ((uint8_t)0x04) // Wakeup flag For module 2
  1394. #define LLWU_MF5_MWUF3 ((uint8_t)0x08) // Wakeup flag For module 3
  1395. #define LLWU_MF5_MWUF4 ((uint8_t)0x10) // Wakeup flag For module 4
  1396. #define LLWU_MF5_MWUF5 ((uint8_t)0x20) // Wakeup flag For module 5
  1397. #define LLWU_MF5_MWUF6 ((uint8_t)0x40) // Wakeup flag For module 6
  1398. #define LLWU_MF5_MWUF7 ((uint8_t)0x80) // Wakeup flag For module 7
  1399. #define LLWU_FILT1 (*(volatile uint8_t *)0x4007C00E) // LLWU Pin Filter 1 register
  1400. #define LLWU_FILT2 (*(volatile uint8_t *)0x4007C00F) // LLWU Pin Filter 2 register
  1401. #define LLWU_FILT3 (*(volatile uint8_t *)0x4007C010) // LLWU Pin Filter 3 register
  1402. #define LLWU_FILT4 (*(volatile uint8_t *)0x4007C011) // LLWU Pin Filter 4 register
  1403. #elif defined(HAS_KINETIS_LLWU_16CH)
  1404. #define LLWU_PE1 (*(volatile uint8_t *)0x4007C000) // LLWU Pin Enable 1 register
  1405. #define LLWU_PE1_WUPE0(n) ((uint8_t)((n) & 0x03)) // Wakeup Pin Enable For LLWU_P0
  1406. #define LLWU_PE1_WUPE1(n) ((uint8_t)(((n) & 0x03) << 2)) // Wakeup Pin Enable For LLWU_P1
  1407. #define LLWU_PE1_WUPE2(n) ((uint8_t)(((n) & 0x03) << 4)) // Wakeup Pin Enable For LLWU_P2
  1408. #define LLWU_PE1_WUPE3(n) ((uint8_t)(((n) & 0x03) << 6)) // Wakeup Pin Enable For LLWU_P3
  1409. #define LLWU_PE2 (*(volatile uint8_t *)0x4007C001) // LLWU Pin Enable 2 register
  1410. #define LLWU_PE2_WUPE4(n) ((uint8_t)((n) & 0x03)) // Wakeup Pin Enable For LLWU_P4
  1411. #define LLWU_PE2_WUPE5(n) ((uint8_t)(((n) & 0x03) << 2)) // Wakeup Pin Enable For LLWU_P5
  1412. #define LLWU_PE2_WUPE6(n) ((uint8_t)(((n) & 0x03) << 4)) // Wakeup Pin Enable For LLWU_P6
  1413. #define LLWU_PE2_WUPE7(n) ((uint8_t)(((n) & 0x03) << 6)) // Wakeup Pin Enable For LLWU_P7
  1414. #define LLWU_PE3 (*(volatile uint8_t *)0x4007C002) // LLWU Pin Enable 3 register
  1415. #define LLWU_PE3_WUPE8(n) ((uint8_t)((n) & 0x03)) // Wakeup Pin Enable For LLWU_P8
  1416. #define LLWU_PE3_WUPE9(n) ((uint8_t)(((n) & 0x03) << 2)) // Wakeup Pin Enable For LLWU_P9
  1417. #define LLWU_PE3_WUPE10(n) ((uint8_t)(((n) & 0x03) << 4)) // Wakeup Pin Enable For LLWU_P10
  1418. #define LLWU_PE3_WUPE11(n) ((uint8_t)(((n) & 0x03) << 6)) // Wakeup Pin Enable For LLWU_P11
  1419. #define LLWU_PE4 (*(volatile uint8_t *)0x4007C003) // LLWU Pin Enable 4 register
  1420. #define LLWU_PE4_WUPE12(n) ((uint8_t)((n) & 0x03)) // Wakeup Pin Enable For LLWU_P12
  1421. #define LLWU_PE4_WUPE13(n) ((uint8_t)(((n) & 0x03) << 2)) // Wakeup Pin Enable For LLWU_P13
  1422. #define LLWU_PE4_WUPE14(n) ((uint8_t)(((n) & 0x03) << 4)) // Wakeup Pin Enable For LLWU_P14
  1423. #define LLWU_PE4_WUPE15(n) ((uint8_t)(((n) & 0x03) << 6)) // Wakeup Pin Enable For LLWU_P15
  1424. #define LLWU_ME (*(volatile uint8_t *)0x4007C004) // LLWU Module Enable register
  1425. #define LLWU_ME_WUME0 ((uint8_t)0x01) // Wakeup Module Enable For Module 0
  1426. #define LLWU_ME_WUME1 ((uint8_t)0x02) // Wakeup Module Enable For Module 1
  1427. #define LLWU_ME_WUME2 ((uint8_t)0x04) // Wakeup Module Enable For Module 2
  1428. #define LLWU_ME_WUME3 ((uint8_t)0x08) // Wakeup Module Enable For Module 3
  1429. #define LLWU_ME_WUME4 ((uint8_t)0x10) // Wakeup Module Enable For Module 4
  1430. #define LLWU_ME_WUME5 ((uint8_t)0x20) // Wakeup Module Enable For Module 5
  1431. #define LLWU_ME_WUME6 ((uint8_t)0x40) // Wakeup Module Enable For Module 6
  1432. #define LLWU_ME_WUME7 ((uint8_t)0x80) // Wakeup Module Enable For Module 7
  1433. #define LLWU_F1 (*(volatile uint8_t *)0x4007C005) // LLWU Flag 1 register
  1434. #define LLWU_F1_WUF0 ((uint8_t)0x01) // Wakeup Flag For LLWU_P0
  1435. #define LLWU_F1_WUF1 ((uint8_t)0x02) // Wakeup Flag For LLWU_P1
  1436. #define LLWU_F1_WUF2 ((uint8_t)0x04) // Wakeup Flag For LLWU_P2
  1437. #define LLWU_F1_WUF3 ((uint8_t)0x08) // Wakeup Flag For LLWU_P3
  1438. #define LLWU_F1_WUF4 ((uint8_t)0x10) // Wakeup Flag For LLWU_P4
  1439. #define LLWU_F1_WUF5 ((uint8_t)0x20) // Wakeup Flag For LLWU_P5
  1440. #define LLWU_F1_WUF6 ((uint8_t)0x40) // Wakeup Flag For LLWU_P6
  1441. #define LLWU_F1_WUF7 ((uint8_t)0x80) // Wakeup Flag For LLWU_P7
  1442. #define LLWU_F2 (*(volatile uint8_t *)0x4007C006) // LLWU Flag 2 register
  1443. #define LLWU_F2_WUF8 ((uint8_t)0x01) // Wakeup Flag For LLWU_P8
  1444. #define LLWU_F2_WUF9 ((uint8_t)0x02) // Wakeup Flag For LLWU_P9
  1445. #define LLWU_F2_WUF10 ((uint8_t)0x04) // Wakeup Flag For LLWU_P10
  1446. #define LLWU_F2_WUF11 ((uint8_t)0x08) // Wakeup Flag For LLWU_P11
  1447. #define LLWU_F2_WUF12 ((uint8_t)0x10) // Wakeup Flag For LLWU_P12
  1448. #define LLWU_F2_WUF13 ((uint8_t)0x20) // Wakeup Flag For LLWU_P13
  1449. #define LLWU_F2_WUF14 ((uint8_t)0x40) // Wakeup Flag For LLWU_P14
  1450. #define LLWU_F2_WUF15 ((uint8_t)0x80) // Wakeup Flag For LLWU_P15
  1451. #define LLWU_F3 (*(volatile uint8_t *)0x4007C007) // LLWU Flag 3 register
  1452. #define LLWU_F3_MWUF0 ((uint8_t)0x01) // Wakeup flag For module 0
  1453. #define LLWU_F3_MWUF1 ((uint8_t)0x02) // Wakeup flag For module 1
  1454. #define LLWU_F3_MWUF2 ((uint8_t)0x04) // Wakeup flag For module 2
  1455. #define LLWU_F3_MWUF3 ((uint8_t)0x08) // Wakeup flag For module 3
  1456. #define LLWU_F3_MWUF4 ((uint8_t)0x10) // Wakeup flag For module 4
  1457. #define LLWU_F3_MWUF5 ((uint8_t)0x20) // Wakeup flag For module 5
  1458. #define LLWU_F3_MWUF6 ((uint8_t)0x40) // Wakeup flag For module 6
  1459. #define LLWU_F3_MWUF7 ((uint8_t)0x80) // Wakeup flag For module 7
  1460. #define LLWU_FILT1 (*(volatile uint8_t *)0x4007C008) // LLWU Pin Filter 1 register
  1461. #define LLWU_FILT2 (*(volatile uint8_t *)0x4007C009) // LLWU Pin Filter 2 register
  1462. #define LLWU_RST (*(volatile uint8_t *)0x4007C00A) // LLWU Reset Enable register
  1463. #endif
  1464. // Miscellaneous Control Module (MCM)
  1465. #if defined(KINETISK)
  1466. #define MCM_PLASC (*(volatile uint16_t *)0xE0080008) // Crossbar Switch (AXBS) Slave Configuration
  1467. #define MCM_PLAMC (*(volatile uint16_t *)0xE008000A) // Crossbar Switch (AXBS) Master Configuration
  1468. #define MCM_PLACR (*(volatile uint32_t *)0xE008000C) // Crossbar Switch (AXBS) Control Register (MK20DX128)
  1469. #define MCM_PLACR_ARG ((uint32_t)0x00000200) // Arbitration select, 0=fixed, 1=round-robin
  1470. #define MCM_CR (*(volatile uint32_t *)0xE008000C) // RAM arbitration control register (MK20DX256)
  1471. #define MCM_CR_SRAMLWP ((uint32_t)0x40000000) // SRAM_L write protect
  1472. #define MCM_CR_SRAMLAP(n) ((uint32_t)(((n) & 0x03) << 28)) // SRAM_L priority, 0=RR, 1=favor DMA, 2=CPU, 3=DMA
  1473. #define MCM_CR_SRAMUWP ((uint32_t)0x04000000) // SRAM_U write protect
  1474. #define MCM_CR_SRAMUAP(n) ((uint32_t)(((n) & 0x03) << 24)) // SRAM_U priority, 0=RR, 1=favor DMA, 2=CPU, 3=DMA
  1475. #define MCM_ISCR (*(volatile uint32_t *)0xE0080010) // Interrupt Status Register
  1476. #define MCM_ETBCC (*(volatile uint32_t *)0xE0080014) // ETB Counter Control register
  1477. #define MCM_ETBRL (*(volatile uint32_t *)0xE0080018) // ETB Reload register
  1478. #define MCM_ETBCNT (*(volatile uint32_t *)0xE008001C) // ETB Counter Value register
  1479. #define MCM_FADR (*(volatile uint32_t *)0xE0080020) // Fault address register
  1480. #define MCM_FATR (*(volatile uint32_t *)0xE0080024) // Fault attributes register
  1481. #define MCM_FDR (*(volatile uint32_t *)0xE0080028) // Fault data register
  1482. #define MCM_PID (*(volatile uint32_t *)0xE0080030) // Process ID register
  1483. #define MCM_CPO (*(volatile uint32_t *)0xE0080040) // Compute Operation Control Register
  1484. #elif defined(KINETISL)
  1485. #define MCM_PLASC (*(volatile uint16_t *)0xF0003008) // Crossbar Switch (AXBS) Slave Configuration
  1486. #define MCM_PLAMC (*(volatile uint16_t *)0xF000300A) // Crossbar Switch (AXBS) Master Configuration
  1487. #define MCM_PLACR (*(volatile uint32_t *)0xF000300C) // Platform Control Register
  1488. #define MCM_PLACR_ESFC ((uint32_t)0x00010000) // Enable Stalling Flash Controller
  1489. #define MCM_PLACR_DFCS ((uint32_t)0x00008000) // Disable Flash Controller Speculation
  1490. #define MCM_PLACR_EFDS ((uint32_t)0x00004000) // Enable Flash Data Speculation
  1491. #define MCM_PLACR_DFCC ((uint32_t)0x00002000) // Disable Flash Controller Cache
  1492. #define MCM_PLACR_DFCIC ((uint32_t)0x00001000) // Disable Flash Controller Instruction Caching
  1493. #define MCM_PLACR_DFCDA ((uint32_t)0x00000800) // Disable Flash Controller Data Caching
  1494. #define MCM_PLACR_CFCC ((uint32_t)0x00000400) // Clear Flash Controller Cache
  1495. #define MCM_PLACR_ARB ((uint32_t)0x00000200) // Arbitration select
  1496. #define MCM_CPO (*(volatile uint32_t *)0xF0003040) // Compute Operation Control Register
  1497. #endif
  1498. // Crossbar Switch (AXBS) - not programmable on MK20DX128 & Kinetis-L
  1499. #define AXBS_PRS0 (*(volatile uint32_t *)0x40004000) // Priority Registers Slave 0
  1500. #define AXBS_CRS0 (*(volatile uint32_t *)0x40004010) // Control Register 0
  1501. #define AXBS_PRS1 (*(volatile uint32_t *)0x40004100) // Priority Registers Slave 1
  1502. #define AXBS_CRS1 (*(volatile uint32_t *)0x40004110) // Control Register 1
  1503. #define AXBS_PRS2 (*(volatile uint32_t *)0x40004200) // Priority Registers Slave 2
  1504. #define AXBS_CRS2 (*(volatile uint32_t *)0x40004210) // Control Register 2
  1505. #define AXBS_PRS3 (*(volatile uint32_t *)0x40004300) // Priority Registers Slave 3
  1506. #define AXBS_CRS3 (*(volatile uint32_t *)0x40004310) // Control Register 3
  1507. #define AXBS_PRS4 (*(volatile uint32_t *)0x40004400) // Priority Registers Slave 4
  1508. #define AXBS_CRS4 (*(volatile uint32_t *)0x40004410) // Control Register 4
  1509. #define AXBS_PRS5 (*(volatile uint32_t *)0x40004500) // Priority Registers Slave 5
  1510. #define AXBS_CRS5 (*(volatile uint32_t *)0x40004510) // Control Register 5
  1511. #define AXBS_PRS6 (*(volatile uint32_t *)0x40004600) // Priority Registers Slave 6
  1512. #define AXBS_CRS6 (*(volatile uint32_t *)0x40004610) // Control Register 6
  1513. #define AXBS_PRS7 (*(volatile uint32_t *)0x40004700) // Priority Registers Slave 7
  1514. #define AXBS_CRS7 (*(volatile uint32_t *)0x40004710) // Control Register 7
  1515. #define AXBS_MGPCR0 (*(volatile uint32_t *)0x40004800) // Master 0 General Purpose Control Register
  1516. #define AXBS_MGPCR1 (*(volatile uint32_t *)0x40004900) // Master 1 General Purpose Control Register
  1517. #define AXBS_MGPCR2 (*(volatile uint32_t *)0x40004A00) // Master 2 General Purpose Control Register
  1518. #define AXBS_MGPCR3 (*(volatile uint32_t *)0x40004B00) // Master 3 General Purpose Control Register
  1519. #define AXBS_MGPCR4 (*(volatile uint32_t *)0x40004C00) // Master 4 General Purpose Control Register
  1520. #define AXBS_MGPCR5 (*(volatile uint32_t *)0x40004D00) // Master 5 General Purpose Control Register
  1521. #define AXBS_MGPCR6 (*(volatile uint32_t *)0x40004E00) // Master 6 General Purpose Control Register
  1522. #define AXBS_MGPCR7 (*(volatile uint32_t *)0x40004F00) // Master 7 General Purpose Control Register
  1523. #define AXBS_CRS_READONLY ((uint32_t)0x80000000)
  1524. #define AXBS_CRS_HALTLOWPRIORITY ((uint32_t)0x40000000)
  1525. #define AXBS_CRS_ARB_FIXED ((uint32_t)0x00000000)
  1526. #define AXBS_CRS_ARB_ROUNDROBIN ((uint32_t)0x00010000)
  1527. #define AXBS_CRS_PARK_FIXED ((uint32_t)0x00000000)
  1528. #define AXBS_CRS_PARK_PREVIOUS ((uint32_t)0x00000010)
  1529. #define AXBS_CRS_PARK_NONE ((uint32_t)0x00000020)
  1530. #define AXBS_CRS_PARK(n) ((uint32_t)(((n) & 7) << 0))
  1531. // Peripheral Bridge (AIPS-Lite)
  1532. #define AIPS0_MPRA (*(volatile uint32_t *)0x40000000) // Master Privilege Register A
  1533. #define AIPS0_PACRA (*(volatile uint32_t *)0x40000020) // Peripheral Access Control Register
  1534. #define AIPS0_PACRB (*(volatile uint32_t *)0x40000024) // Peripheral Access Control Register
  1535. #define AIPS0_PACRC (*(volatile uint32_t *)0x40000028) // Peripheral Access Control Register
  1536. #define AIPS0_PACRD (*(volatile uint32_t *)0x4000002C) // Peripheral Access Control Register
  1537. #define AIPS0_PACRE (*(volatile uint32_t *)0x40000040) // Peripheral Access Control Register
  1538. #define AIPS0_PACRF (*(volatile uint32_t *)0x40000044) // Peripheral Access Control Register
  1539. #define AIPS0_PACRG (*(volatile uint32_t *)0x40000048) // Peripheral Access Control Register
  1540. #define AIPS0_PACRH (*(volatile uint32_t *)0x4000004C) // Peripheral Access Control Register
  1541. #define AIPS0_PACRI (*(volatile uint32_t *)0x40000050) // Peripheral Access Control Register
  1542. #define AIPS0_PACRJ (*(volatile uint32_t *)0x40000054) // Peripheral Access Control Register
  1543. #define AIPS0_PACRK (*(volatile uint32_t *)0x40000058) // Peripheral Access Control Register
  1544. #define AIPS0_PACRL (*(volatile uint32_t *)0x4000005C) // Peripheral Access Control Register
  1545. #define AIPS0_PACRM (*(volatile uint32_t *)0x40000060) // Peripheral Access Control Register
  1546. #define AIPS0_PACRN (*(volatile uint32_t *)0x40000064) // Peripheral Access Control Register
  1547. #define AIPS0_PACRO (*(volatile uint32_t *)0x40000068) // Peripheral Access Control Register
  1548. #define AIPS0_PACRP (*(volatile uint32_t *)0x4000006C) // Peripheral Access Control Register
  1549. #define AIPS1_MPRA (*(volatile uint32_t *)0x40080000) // Master Privilege Register A
  1550. #define AIPS1_PACRA (*(volatile uint32_t *)0x40080020) // Peripheral Access Control Register
  1551. #define AIPS1_PACRB (*(volatile uint32_t *)0x40080024) // Peripheral Access Control Register
  1552. #define AIPS1_PACRC (*(volatile uint32_t *)0x40080028) // Peripheral Access Control Register
  1553. #define AIPS1_PACRD (*(volatile uint32_t *)0x4008002C) // Peripheral Access Control Register
  1554. #define AIPS1_PACRE (*(volatile uint32_t *)0x40080040) // Peripheral Access Control Register
  1555. #define AIPS1_PACRF (*(volatile uint32_t *)0x40080044) // Peripheral Access Control Register
  1556. #define AIPS1_PACRG (*(volatile uint32_t *)0x40080048) // Peripheral Access Control Register
  1557. #define AIPS1_PACRH (*(volatile uint32_t *)0x4008004C) // Peripheral Access Control Register
  1558. #define AIPS1_PACRI (*(volatile uint32_t *)0x40080050) // Peripheral Access Control Register
  1559. #define AIPS1_PACRJ (*(volatile uint32_t *)0x40080054) // Peripheral Access Control Register
  1560. #define AIPS1_PACRK (*(volatile uint32_t *)0x40080058) // Peripheral Access Control Register
  1561. #define AIPS1_PACRL (*(volatile uint32_t *)0x4008005C) // Peripheral Access Control Register
  1562. #define AIPS1_PACRM (*(volatile uint32_t *)0x40080060) // Peripheral Access Control Register
  1563. #define AIPS1_PACRN (*(volatile uint32_t *)0x40080064) // Peripheral Access Control Register
  1564. #define AIPS1_PACRO (*(volatile uint32_t *)0x40080068) // Peripheral Access Control Register
  1565. #define AIPS1_PACRP (*(volatile uint32_t *)0x4008006C) // Peripheral Access Control Register
  1566. // Memory Protection Unit (MPU)
  1567. #if defined(HAS_KINETIS_MPU)
  1568. #define MPU_CESR (*(volatile uint32_t *)0x4000D000) // Control/Error Status Register
  1569. #define MPU_EAR0 (*(volatile uint32_t *)0x4000D010) // Error Address Register, slave port 0
  1570. #define MPU_EDR0 (*(volatile uint32_t *)0x4000D014) // Error Detail Register, slave port 0
  1571. #define MPU_EAR1 (*(volatile uint32_t *)0x4000D018) // Error Address Register, slave port 1
  1572. #define MPU_EDR1 (*(volatile uint32_t *)0x4000D01C) // Error Detail Register, slave port 1
  1573. #define MPU_EAR2 (*(volatile uint32_t *)0x4000D020) // Error Address Register, slave port 2
  1574. #define MPU_EDR2 (*(volatile uint32_t *)0x4000D024) // Error Detail Register, slave port 2
  1575. #define MPU_EAR3 (*(volatile uint32_t *)0x4000D028) // Error Address Register, slave port 3
  1576. #define MPU_EDR3 (*(volatile uint32_t *)0x4000D02C) // Error Detail Register, slave port 3
  1577. #define MPU_EAR4 (*(volatile uint32_t *)0x4000D030) // Error Address Register, slave port 4
  1578. #define MPU_EDR4 (*(volatile uint32_t *)0x4000D034) // Error Detail Register, slave port 4
  1579. #define MPU_RGD0_WORD0 (*(volatile uint32_t *)0x4000D400) // Region Descriptor 0, Word 0
  1580. #define MPU_RGD0_WORD1 (*(volatile uint32_t *)0x4000D404) // Region Descriptor 0, Word 1
  1581. #define MPU_RGD0_WORD2 (*(volatile uint32_t *)0x4000D408) // Region Descriptor 0, Word 2
  1582. #define MPU_RGD0_WORD3 (*(volatile uint32_t *)0x4000D40C) // Region Descriptor 0, Word 3
  1583. #define MPU_RGD1_WORD0 (*(volatile uint32_t *)0x4000D410) // Region Descriptor 1, Word 0
  1584. #define MPU_RGD1_WORD1 (*(volatile uint32_t *)0x4000D414) // Region Descriptor 1, Word 1
  1585. #define MPU_RGD1_WORD2 (*(volatile uint32_t *)0x4000D418) // Region Descriptor 1, Word 2
  1586. #define MPU_RGD1_WORD3 (*(volatile uint32_t *)0x4000D41C) // Region Descriptor 1, Word 3
  1587. #define MPU_RGD2_WORD0 (*(volatile uint32_t *)0x4000D420) // Region Descriptor 2, Word 0
  1588. #define MPU_RGD2_WORD1 (*(volatile uint32_t *)0x4000D424) // Region Descriptor 2, Word 1
  1589. #define MPU_RGD2_WORD2 (*(volatile uint32_t *)0x4000D428) // Region Descriptor 2, Word 2
  1590. #define MPU_RGD2_WORD3 (*(volatile uint32_t *)0x4000D42C) // Region Descriptor 2, Word 3
  1591. #define MPU_RGD3_WORD0 (*(volatile uint32_t *)0x4000D430) // Region Descriptor 3, Word 0
  1592. #define MPU_RGD3_WORD1 (*(volatile uint32_t *)0x4000D434) // Region Descriptor 3, Word 1
  1593. #define MPU_RGD3_WORD2 (*(volatile uint32_t *)0x4000D438) // Region Descriptor 3, Word 2
  1594. #define MPU_RGD3_WORD3 (*(volatile uint32_t *)0x4000D43C) // Region Descriptor 3, Word 3
  1595. #define MPU_RGD4_WORD0 (*(volatile uint32_t *)0x4000D440) // Region Descriptor 4, Word 0
  1596. #define MPU_RGD4_WORD1 (*(volatile uint32_t *)0x4000D444) // Region Descriptor 4, Word 1
  1597. #define MPU_RGD4_WORD2 (*(volatile uint32_t *)0x4000D448) // Region Descriptor 4, Word 2
  1598. #define MPU_RGD4_WORD3 (*(volatile uint32_t *)0x4000D44C) // Region Descriptor 4, Word 3
  1599. #define MPU_RGD5_WORD0 (*(volatile uint32_t *)0x4000D450) // Region Descriptor 5, Word 0
  1600. #define MPU_RGD5_WORD1 (*(volatile uint32_t *)0x4000D454) // Region Descriptor 5, Word 1
  1601. #define MPU_RGD5_WORD2 (*(volatile uint32_t *)0x4000D458) // Region Descriptor 5, Word 2
  1602. #define MPU_RGD5_WORD3 (*(volatile uint32_t *)0x4000D45C) // Region Descriptor 5, Word 3
  1603. #define MPU_RGD6_WORD0 (*(volatile uint32_t *)0x4000D460) // Region Descriptor 6, Word 0
  1604. #define MPU_RGD6_WORD1 (*(volatile uint32_t *)0x4000D464) // Region Descriptor 6, Word 1
  1605. #define MPU_RGD6_WORD2 (*(volatile uint32_t *)0x4000D468) // Region Descriptor 6, Word 2
  1606. #define MPU_RGD6_WORD3 (*(volatile uint32_t *)0x4000D46C) // Region Descriptor 6, Word 3
  1607. #define MPU_RGD7_WORD0 (*(volatile uint32_t *)0x4000D470) // Region Descriptor 7, Word 0
  1608. #define MPU_RGD7_WORD1 (*(volatile uint32_t *)0x4000D474) // Region Descriptor 7, Word 1
  1609. #define MPU_RGD7_WORD2 (*(volatile uint32_t *)0x4000D478) // Region Descriptor 7, Word 2
  1610. #define MPU_RGD7_WORD3 (*(volatile uint32_t *)0x4000D47C) // Region Descriptor 7, Word 3
  1611. #define MPU_RGD8_WORD0 (*(volatile uint32_t *)0x4000D480) // Region Descriptor 8, Word 0
  1612. #define MPU_RGD8_WORD1 (*(volatile uint32_t *)0x4000D484) // Region Descriptor 8, Word 1
  1613. #define MPU_RGD8_WORD2 (*(volatile uint32_t *)0x4000D488) // Region Descriptor 8, Word 2
  1614. #define MPU_RGD8_WORD3 (*(volatile uint32_t *)0x4000D48C) // Region Descriptor 8, Word 3
  1615. #define MPU_RGD9_WORD0 (*(volatile uint32_t *)0x4000D490) // Region Descriptor 9, Word 0
  1616. #define MPU_RGD9_WORD1 (*(volatile uint32_t *)0x4000D494) // Region Descriptor 9, Word 1
  1617. #define MPU_RGD9_WORD2 (*(volatile uint32_t *)0x4000D498) // Region Descriptor 9, Word 2
  1618. #define MPU_RGD9_WORD3 (*(volatile uint32_t *)0x4000D49C) // Region Descriptor 9, Word 3
  1619. #define MPU_RGD10_WORD0 (*(volatile uint32_t *)0x4000D4A0) // Region Descriptor 10, Word 0
  1620. #define MPU_RGD10_WORD1 (*(volatile uint32_t *)0x4000D4A4) // Region Descriptor 10, Word 1
  1621. #define MPU_RGD10_WORD2 (*(volatile uint32_t *)0x4000D4A8) // Region Descriptor 10, Word 2
  1622. #define MPU_RGD10_WORD3 (*(volatile uint32_t *)0x4000D4AC) // Region Descriptor 10, Word 3
  1623. #define MPU_RGD11_WORD0 (*(volatile uint32_t *)0x4000D4B0) // Region Descriptor 11, Word 0
  1624. #define MPU_RGD11_WORD1 (*(volatile uint32_t *)0x4000D4B4) // Region Descriptor 11, Word 1
  1625. #define MPU_RGD11_WORD2 (*(volatile uint32_t *)0x4000D4B8) // Region Descriptor 11, Word 2
  1626. #define MPU_RGD11_WORD3 (*(volatile uint32_t *)0x4000D4BC) // Region Descriptor 11, Word 3
  1627. #define MPU_RGDAAC0 (*(volatile uint32_t *)0x4000D800) // Region Descriptor Alternate Access Control 0
  1628. #define MPU_RGDAAC1 (*(volatile uint32_t *)0x4000D804) // Region Descriptor Alternate Access Control 1
  1629. #define MPU_RGDAAC2 (*(volatile uint32_t *)0x4000D808) // Region Descriptor Alternate Access Control 2
  1630. #define MPU_RGDAAC3 (*(volatile uint32_t *)0x4000D80C) // Region Descriptor Alternate Access Control 3
  1631. #define MPU_RGDAAC4 (*(volatile uint32_t *)0x4000D810) // Region Descriptor Alternate Access Control 4
  1632. #define MPU_RGDAAC5 (*(volatile uint32_t *)0x4000D814) // Region Descriptor Alternate Access Control 5
  1633. #define MPU_RGDAAC6 (*(volatile uint32_t *)0x4000D818) // Region Descriptor Alternate Access Control 6
  1634. #define MPU_RGDAAC7 (*(volatile uint32_t *)0x4000D81C) // Region Descriptor Alternate Access Control 7
  1635. #define MPU_RGDAAC8 (*(volatile uint32_t *)0x4000D820) // Region Descriptor Alternate Access Control 8
  1636. #define MPU_RGDAAC9 (*(volatile uint32_t *)0x4000D824) // Region Descriptor Alternate Access Control 9
  1637. #define MPU_RGDAAC10 (*(volatile uint32_t *)0x4000D828) // Region Descriptor Alternate Access Control 10
  1638. #define MPU_RGDAAC11 (*(volatile uint32_t *)0x4000D82C) // Region Descriptor Alternate Access Control 11
  1639. #endif
  1640. // Direct Memory Access Multiplexer (DMAMUX)
  1641. #if DMA_NUM_CHANNELS >= 4
  1642. #define DMAMUX0_CHCFG0 (*(volatile uint8_t *)0x40021000) // Channel Configuration register
  1643. #define DMAMUX0_CHCFG1 (*(volatile uint8_t *)0x40021001) // Channel Configuration register
  1644. #define DMAMUX0_CHCFG2 (*(volatile uint8_t *)0x40021002) // Channel Configuration register
  1645. #define DMAMUX0_CHCFG3 (*(volatile uint8_t *)0x40021003) // Channel Configuration register
  1646. #endif
  1647. #if DMA_NUM_CHANNELS >= 16
  1648. #define DMAMUX0_CHCFG4 (*(volatile uint8_t *)0x40021004) // Channel Configuration register
  1649. #define DMAMUX0_CHCFG5 (*(volatile uint8_t *)0x40021005) // Channel Configuration register
  1650. #define DMAMUX0_CHCFG6 (*(volatile uint8_t *)0x40021006) // Channel Configuration register
  1651. #define DMAMUX0_CHCFG7 (*(volatile uint8_t *)0x40021007) // Channel Configuration register
  1652. #define DMAMUX0_CHCFG8 (*(volatile uint8_t *)0x40021008) // Channel Configuration register
  1653. #define DMAMUX0_CHCFG9 (*(volatile uint8_t *)0x40021009) // Channel Configuration register
  1654. #define DMAMUX0_CHCFG10 (*(volatile uint8_t *)0x4002100A) // Channel Configuration register
  1655. #define DMAMUX0_CHCFG11 (*(volatile uint8_t *)0x4002100B) // Channel Configuration register
  1656. #define DMAMUX0_CHCFG12 (*(volatile uint8_t *)0x4002100C) // Channel Configuration register
  1657. #define DMAMUX0_CHCFG13 (*(volatile uint8_t *)0x4002100D) // Channel Configuration register
  1658. #define DMAMUX0_CHCFG14 (*(volatile uint8_t *)0x4002100E) // Channel Configuration register
  1659. #define DMAMUX0_CHCFG15 (*(volatile uint8_t *)0x4002100F) // Channel Configuration register
  1660. #endif
  1661. #if DMA_NUM_CHANNELS >= 32
  1662. #define DMAMUX0_CHCFG16 (*(volatile uint8_t *)0x40021010) // Channel Configuration register
  1663. #define DMAMUX0_CHCFG17 (*(volatile uint8_t *)0x40021011) // Channel Configuration register
  1664. #define DMAMUX0_CHCFG18 (*(volatile uint8_t *)0x40021012) // Channel Configuration register
  1665. #define DMAMUX0_CHCFG19 (*(volatile uint8_t *)0x40021013) // Channel Configuration register
  1666. #define DMAMUX0_CHCFG20 (*(volatile uint8_t *)0x40021014) // Channel Configuration register
  1667. #define DMAMUX0_CHCFG21 (*(volatile uint8_t *)0x40021015) // Channel Configuration register
  1668. #define DMAMUX0_CHCFG22 (*(volatile uint8_t *)0x40021016) // Channel Configuration register
  1669. #define DMAMUX0_CHCFG23 (*(volatile uint8_t *)0x40021017) // Channel Configuration register
  1670. #define DMAMUX0_CHCFG24 (*(volatile uint8_t *)0x40021018) // Channel Configuration register
  1671. #define DMAMUX0_CHCFG25 (*(volatile uint8_t *)0x40021019) // Channel Configuration register
  1672. #define DMAMUX0_CHCFG26 (*(volatile uint8_t *)0x4002101A) // Channel Configuration register
  1673. #define DMAMUX0_CHCFG27 (*(volatile uint8_t *)0x4002101B) // Channel Configuration register
  1674. #define DMAMUX0_CHCFG28 (*(volatile uint8_t *)0x4002101C) // Channel Configuration register
  1675. #define DMAMUX0_CHCFG29 (*(volatile uint8_t *)0x4002101D) // Channel Configuration register
  1676. #define DMAMUX0_CHCFG30 (*(volatile uint8_t *)0x4002101E) // Channel Configuration register
  1677. #define DMAMUX0_CHCFG31 (*(volatile uint8_t *)0x4002101F) // Channel Configuration register
  1678. #endif
  1679. #define DMAMUX_DISABLE 0
  1680. #define DMAMUX_TRIG 64
  1681. #define DMAMUX_ENABLE 128
  1682. // Direct Memory Access Controller (eDMA)
  1683. #if defined(KINETISK)
  1684. #define DMA_CR (*(volatile uint32_t *)0x40008000) // Control Register
  1685. #define DMA_CR_CX ((uint32_t)(1<<17)) // Cancel Transfer
  1686. #define DMA_CR_ECX ((uint32_t)(1<<16)) // Error Cancel Transfer
  1687. #define DMA_CR_EMLM ((uint32_t)0x80) // Enable Minor Loop Mapping
  1688. #define DMA_CR_CLM ((uint32_t)0x40) // Continuous Link Mode
  1689. #define DMA_CR_HALT ((uint32_t)0x20) // Halt DMA Operations
  1690. #define DMA_CR_HOE ((uint32_t)0x10) // Halt On Error
  1691. #define DMA_CR_ERCA ((uint32_t)0x04) // Enable Round Robin Channel Arbitration
  1692. #define DMA_CR_EDBG ((uint32_t)0x02) // Enable Debug
  1693. #define DMA_ES (*(volatile uint32_t *)0x40008004) // Error Status Register
  1694. #define DMA_ERQ (*(volatile uint32_t *)0x4000800C) // Enable Request Register
  1695. #define DMA_EEI (*(volatile uint32_t *)0x40008014) // Enable Error Interrupt Register
  1696. #define DMA_CEEI (*(volatile uint8_t *)0x40008018) // Clear Enable Error Interrupt Register
  1697. #define DMA_CEEI_CEEI(n) ((uint8_t)(n & 15)<<0) // Clear Enable Error Interrupt
  1698. #define DMA_CEEI_CAEE ((uint8_t)1<<6) // Clear All Enable Error Interrupts
  1699. #define DMA_CEEI_NOP ((uint8_t)1<<7) // NOP
  1700. #define DMA_SEEI (*(volatile uint8_t *)0x40008019) // Set Enable Error Interrupt Register
  1701. #define DMA_SEEI_SEEI(n) ((uint8_t)(n & 15)<<0) // Set Enable Error Interrupt
  1702. #define DMA_SEEI_SAEE ((uint8_t)1<<6) // Set All Enable Error Interrupts
  1703. #define DMA_SEEI_NOP ((uint8_t)1<<7) // NOP
  1704. #define DMA_CERQ (*(volatile uint8_t *)0x4000801A) // Clear Enable Request Register
  1705. #define DMA_CERQ_CERQ(n) ((uint8_t)(n & 15)<<0) // Clear Enable Request
  1706. #define DMA_CERQ_CAER ((uint8_t)1<<6) // Clear All Enable Requests
  1707. #define DMA_CERQ_NOP ((uint8_t)1<<7) // NOP
  1708. #define DMA_SERQ (*(volatile uint8_t *)0x4000801B) // Set Enable Request Register
  1709. #define DMA_SERQ_SERQ(n) ((uint8_t)(n & 15)<<0) // Set Enable Request
  1710. #define DMA_SERQ_SAER ((uint8_t)1<<6) // Set All Enable Requests
  1711. #define DMA_SERQ_NOP ((uint8_t)1<<7) // NOP
  1712. #define DMA_CDNE (*(volatile uint8_t *)0x4000801C) // Clear DONE Status Bit Register
  1713. #define DMA_CDNE_CDNE(n) ((uint8_t)(n & 15)<<0) // Clear Done Bit
  1714. #define DMA_CDNE_CADN ((uint8_t)1<<6) // Clear All Done Bits
  1715. #define DMA_CDNE_NOP ((uint8_t)1<<7) // NOP
  1716. #define DMA_SSRT (*(volatile uint8_t *)0x4000801D) // Set START Bit Register
  1717. #define DMA_SSRT_SSRT(n) ((uint8_t)(n & 15)<<0) // Set Start Bit
  1718. #define DMA_SSRT_SAST ((uint8_t)1<<6) // Set All Start Bits
  1719. #define DMA_SSRT_NOP ((uint8_t)1<<7) // NOP
  1720. #define DMA_CERR (*(volatile uint8_t *)0x4000801E) // Clear Error Register
  1721. #define DMA_CERR_CERR(n) ((uint8_t)(n & 15)<<0) // Clear Error Indicator
  1722. #define DMA_CERR_CAEI ((uint8_t)1<<6) // Clear All Error Indicators
  1723. #define DMA_CERR_NOP ((uint8_t)1<<7) // NOP
  1724. #define DMA_CINT (*(volatile uint8_t *)0x4000801F) // Clear Interrupt Request Register
  1725. #define DMA_CINT_CINT(n) ((uint8_t)(n & 15)<<0) // Clear Interrupt Request
  1726. #define DMA_CINT_CAIR ((uint8_t)1<<6) // Clear All Interrupt Requests
  1727. #define DMA_CINT_NOP ((uint8_t)1<<7) // NOP
  1728. #define DMA_INT (*(volatile uint32_t *)0x40008024) // Interrupt Request Register
  1729. #define DMA_ERR (*(volatile uint32_t *)0x4000802C) // Error Register
  1730. #define DMA_HRS (*(volatile uint32_t *)0x40008034) // Hardware Request Status Register
  1731. #if DMA_NUM_CHANNELS >= 4
  1732. #define DMA_ERQ_ERQ0 ((uint32_t)1<<0) // Enable DMA Request 0
  1733. #define DMA_ERQ_ERQ1 ((uint32_t)1<<1) // Enable DMA Request 1
  1734. #define DMA_ERQ_ERQ2 ((uint32_t)1<<2) // Enable DMA Request 2
  1735. #define DMA_ERQ_ERQ3 ((uint32_t)1<<3) // Enable DMA Request 3
  1736. #define DMA_INT_INT0 ((uint32_t)1<<0) // Interrupt Request 0
  1737. #define DMA_INT_INT1 ((uint32_t)1<<1) // Interrupt Request 1
  1738. #define DMA_INT_INT2 ((uint32_t)1<<2) // Interrupt Request 2
  1739. #define DMA_INT_INT3 ((uint32_t)1<<3) // Interrupt Request 3
  1740. #define DMA_ERR_ERR0 ((uint32_t)1<<0) // Error in Channel 0
  1741. #define DMA_ERR_ERR1 ((uint32_t)1<<1) // Error in Channel 1
  1742. #define DMA_ERR_ERR2 ((uint32_t)1<<2) // Error in Channel 2
  1743. #define DMA_ERR_ERR3 ((uint32_t)1<<3) // Error in Channel 3
  1744. #define DMA_HRS_HRS0 ((uint32_t)1<<0) // Hardware Request Status Channel 0
  1745. #define DMA_HRS_HRS1 ((uint32_t)1<<1) // Hardware Request Status Channel 1
  1746. #define DMA_HRS_HRS2 ((uint32_t)1<<2) // Hardware Request Status Channel 2
  1747. #define DMA_HRS_HRS3 ((uint32_t)1<<3) // Hardware Request Status Channel 3
  1748. #endif
  1749. #if DMA_NUM_CHANNELS >= 16
  1750. #define DMA_ERQ_ERQ4 ((uint32_t)1<<4) // Enable DMA Request 4
  1751. #define DMA_ERQ_ERQ5 ((uint32_t)1<<5) // Enable DMA Request 5
  1752. #define DMA_ERQ_ERQ6 ((uint32_t)1<<6) // Enable DMA Request 6
  1753. #define DMA_ERQ_ERQ7 ((uint32_t)1<<7) // Enable DMA Request 7
  1754. #define DMA_ERQ_ERQ8 ((uint32_t)1<<8) // Enable DMA Request 8
  1755. #define DMA_ERQ_ERQ9 ((uint32_t)1<<9) // Enable DMA Request 9
  1756. #define DMA_ERQ_ERQ10 ((uint32_t)1<<10) // Enable DMA Request 10
  1757. #define DMA_ERQ_ERQ11 ((uint32_t)1<<11) // Enable DMA Request 11
  1758. #define DMA_ERQ_ERQ12 ((uint32_t)1<<12) // Enable DMA Request 12
  1759. #define DMA_ERQ_ERQ13 ((uint32_t)1<<13) // Enable DMA Request 13
  1760. #define DMA_ERQ_ERQ14 ((uint32_t)1<<14) // Enable DMA Request 14
  1761. #define DMA_ERQ_ERQ15 ((uint32_t)1<<15) // Enable DMA Request 15
  1762. #define DMA_INT_INT4 ((uint32_t)1<<4) // Interrupt Request 4
  1763. #define DMA_INT_INT5 ((uint32_t)1<<5) // Interrupt Request 5
  1764. #define DMA_INT_INT6 ((uint32_t)1<<6) // Interrupt Request 6
  1765. #define DMA_INT_INT7 ((uint32_t)1<<7) // Interrupt Request 7
  1766. #define DMA_INT_INT8 ((uint32_t)1<<8) // Interrupt Request 8
  1767. #define DMA_INT_INT9 ((uint32_t)1<<9) // Interrupt Request 9
  1768. #define DMA_INT_INT10 ((uint32_t)1<<10) // Interrupt Request 10
  1769. #define DMA_INT_INT11 ((uint32_t)1<<11) // Interrupt Request 11
  1770. #define DMA_INT_INT12 ((uint32_t)1<<12) // Interrupt Request 12
  1771. #define DMA_INT_INT13 ((uint32_t)1<<13) // Interrupt Request 13
  1772. #define DMA_INT_INT14 ((uint32_t)1<<14) // Interrupt Request 14
  1773. #define DMA_INT_INT15 ((uint32_t)1<<15) // Interrupt Request 15
  1774. #define DMA_ERR_ERR4 ((uint32_t)1<<4) // Error in Channel 4
  1775. #define DMA_ERR_ERR5 ((uint32_t)1<<5) // Error in Channel 5
  1776. #define DMA_ERR_ERR6 ((uint32_t)1<<6) // Error in Channel 6
  1777. #define DMA_ERR_ERR7 ((uint32_t)1<<7) // Error in Channel 7
  1778. #define DMA_ERR_ERR8 ((uint32_t)1<<8) // Error in Channel 8
  1779. #define DMA_ERR_ERR9 ((uint32_t)1<<9) // Error in Channel 9
  1780. #define DMA_ERR_ERR10 ((uint32_t)1<<10) // Error in Channel 10
  1781. #define DMA_ERR_ERR11 ((uint32_t)1<<11) // Error in Channel 11
  1782. #define DMA_ERR_ERR12 ((uint32_t)1<<12) // Error in Channel 12
  1783. #define DMA_ERR_ERR13 ((uint32_t)1<<13) // Error in Channel 13
  1784. #define DMA_ERR_ERR14 ((uint32_t)1<<14) // Error in Channel 14
  1785. #define DMA_ERR_ERR15 ((uint32_t)1<<15) // Error in Channel 15
  1786. #define DMA_HRS_HRS4 ((uint32_t)1<<4) // Hardware Request Status Channel 4
  1787. #define DMA_HRS_HRS5 ((uint32_t)1<<5) // Hardware Request Status Channel 5
  1788. #define DMA_HRS_HRS6 ((uint32_t)1<<6) // Hardware Request Status Channel 6
  1789. #define DMA_HRS_HRS7 ((uint32_t)1<<7) // Hardware Request Status Channel 7
  1790. #define DMA_HRS_HRS8 ((uint32_t)1<<8) // Hardware Request Status Channel 8
  1791. #define DMA_HRS_HRS9 ((uint32_t)1<<9) // Hardware Request Status Channel 9
  1792. #define DMA_HRS_HRS10 ((uint32_t)1<<10) // Hardware Request Status Channel 10
  1793. #define DMA_HRS_HRS11 ((uint32_t)1<<11) // Hardware Request Status Channel 11
  1794. #define DMA_HRS_HRS12 ((uint32_t)1<<12) // Hardware Request Status Channel 12
  1795. #define DMA_HRS_HRS13 ((uint32_t)1<<13) // Hardware Request Status Channel 13
  1796. #define DMA_HRS_HRS14 ((uint32_t)1<<14) // Hardware Request Status Channel 14
  1797. #define DMA_HRS_HRS15 ((uint32_t)1<<15) // Hardware Request Status Channel 15
  1798. #endif
  1799. #if DMA_NUM_CHANNELS >= 32
  1800. #define DMA_ERQ_ERQ16 ((uint32_t)1<<16) // Enable DMA Request 16
  1801. #define DMA_ERQ_ERQ17 ((uint32_t)1<<17) // Enable DMA Request 17
  1802. #define DMA_ERQ_ERQ18 ((uint32_t)1<<18) // Enable DMA Request 18
  1803. #define DMA_ERQ_ERQ19 ((uint32_t)1<<19) // Enable DMA Request 19
  1804. #define DMA_ERQ_ERQ20 ((uint32_t)1<<20) // Enable DMA Request 20
  1805. #define DMA_ERQ_ERQ21 ((uint32_t)1<<21) // Enable DMA Request 21
  1806. #define DMA_ERQ_ERQ22 ((uint32_t)1<<22) // Enable DMA Request 22
  1807. #define DMA_ERQ_ERQ23 ((uint32_t)1<<23) // Enable DMA Request 23
  1808. #define DMA_ERQ_ERQ24 ((uint32_t)1<<24) // Enable DMA Request 24
  1809. #define DMA_ERQ_ERQ25 ((uint32_t)1<<25) // Enable DMA Request 25
  1810. #define DMA_ERQ_ERQ26 ((uint32_t)1<<26) // Enable DMA Request 26
  1811. #define DMA_ERQ_ERQ27 ((uint32_t)1<<27) // Enable DMA Request 27
  1812. #define DMA_ERQ_ERQ28 ((uint32_t)1<<28) // Enable DMA Request 28
  1813. #define DMA_ERQ_ERQ29 ((uint32_t)1<<29) // Enable DMA Request 29
  1814. #define DMA_ERQ_ERQ30 ((uint32_t)1<<30) // Enable DMA Request 30
  1815. #define DMA_ERQ_ERQ31 ((uint32_t)1<<31) // Enable DMA Request 31
  1816. #define DMA_INT_INT16 ((uint32_t)1<<16) // Interrupt Request 16
  1817. #define DMA_INT_INT17 ((uint32_t)1<<17) // Interrupt Request 17
  1818. #define DMA_INT_INT18 ((uint32_t)1<<18) // Interrupt Request 18
  1819. #define DMA_INT_INT19 ((uint32_t)1<<19) // Interrupt Request 19
  1820. #define DMA_INT_INT20 ((uint32_t)1<<20) // Interrupt Request 20
  1821. #define DMA_INT_INT21 ((uint32_t)1<<21) // Interrupt Request 21
  1822. #define DMA_INT_INT22 ((uint32_t)1<<22) // Interrupt Request 22
  1823. #define DMA_INT_INT23 ((uint32_t)1<<23) // Interrupt Request 23
  1824. #define DMA_INT_INT24 ((uint32_t)1<<24) // Interrupt Request 24
  1825. #define DMA_INT_INT25 ((uint32_t)1<<25) // Interrupt Request 25
  1826. #define DMA_INT_INT26 ((uint32_t)1<<26) // Interrupt Request 26
  1827. #define DMA_INT_INT27 ((uint32_t)1<<27) // Interrupt Request 27
  1828. #define DMA_INT_INT28 ((uint32_t)1<<28) // Interrupt Request 28
  1829. #define DMA_INT_INT29 ((uint32_t)1<<29) // Interrupt Request 29
  1830. #define DMA_INT_INT30 ((uint32_t)1<<30) // Interrupt Request 30
  1831. #define DMA_INT_INT31 ((uint32_t)1<<31) // Interrupt Request 31
  1832. #define DMA_ERR_ERR16 ((uint32_t)1<<16) // Error in Channel 16
  1833. #define DMA_ERR_ERR17 ((uint32_t)1<<17) // Error in Channel 17
  1834. #define DMA_ERR_ERR18 ((uint32_t)1<<18) // Error in Channel 18
  1835. #define DMA_ERR_ERR19 ((uint32_t)1<<19) // Error in Channel 19
  1836. #define DMA_ERR_ERR20 ((uint32_t)1<<20) // Error in Channel 20
  1837. #define DMA_ERR_ERR21 ((uint32_t)1<<21) // Error in Channel 21
  1838. #define DMA_ERR_ERR22 ((uint32_t)1<<22) // Error in Channel 22
  1839. #define DMA_ERR_ERR23 ((uint32_t)1<<23) // Error in Channel 23
  1840. #define DMA_ERR_ERR24 ((uint32_t)1<<24) // Error in Channel 24
  1841. #define DMA_ERR_ERR25 ((uint32_t)1<<25) // Error in Channel 25
  1842. #define DMA_ERR_ERR26 ((uint32_t)1<<26) // Error in Channel 26
  1843. #define DMA_ERR_ERR27 ((uint32_t)1<<27) // Error in Channel 27
  1844. #define DMA_ERR_ERR28 ((uint32_t)1<<28) // Error in Channel 28
  1845. #define DMA_ERR_ERR29 ((uint32_t)1<<29) // Error in Channel 29
  1846. #define DMA_ERR_ERR30 ((uint32_t)1<<30) // Error in Channel 30
  1847. #define DMA_ERR_ERR31 ((uint32_t)1<<31) // Error in Channel 31
  1848. #define DMA_HRS_HRS16 ((uint32_t)1<<16) // Hardware Request Status Channel 16
  1849. #define DMA_HRS_HRS17 ((uint32_t)1<<17) // Hardware Request Status Channel 17
  1850. #define DMA_HRS_HRS18 ((uint32_t)1<<18) // Hardware Request Status Channel 18
  1851. #define DMA_HRS_HRS19 ((uint32_t)1<<19) // Hardware Request Status Channel 19
  1852. #define DMA_HRS_HRS20 ((uint32_t)1<<20) // Hardware Request Status Channel 20
  1853. #define DMA_HRS_HRS21 ((uint32_t)1<<21) // Hardware Request Status Channel 21
  1854. #define DMA_HRS_HRS22 ((uint32_t)1<<22) // Hardware Request Status Channel 22
  1855. #define DMA_HRS_HRS23 ((uint32_t)1<<23) // Hardware Request Status Channel 23
  1856. #define DMA_HRS_HRS24 ((uint32_t)1<<24) // Hardware Request Status Channel 24
  1857. #define DMA_HRS_HRS25 ((uint32_t)1<<25) // Hardware Request Status Channel 25
  1858. #define DMA_HRS_HRS26 ((uint32_t)1<<26) // Hardware Request Status Channel 26
  1859. #define DMA_HRS_HRS27 ((uint32_t)1<<27) // Hardware Request Status Channel 27
  1860. #define DMA_HRS_HRS28 ((uint32_t)1<<28) // Hardware Request Status Channel 28
  1861. #define DMA_HRS_HRS29 ((uint32_t)1<<29) // Hardware Request Status Channel 29
  1862. #define DMA_HRS_HRS30 ((uint32_t)1<<30) // Hardware Request Status Channel 30
  1863. #define DMA_HRS_HRS31 ((uint32_t)1<<31) // Hardware Request Status Channel 31
  1864. #endif
  1865. #if DMA_NUM_CHANNELS >= 4
  1866. #define DMA_DCHPRI3 (*(volatile uint8_t *)0x40008100) // Channel n Priority Register
  1867. #define DMA_DCHPRI2 (*(volatile uint8_t *)0x40008101) // Channel n Priority Register
  1868. #define DMA_DCHPRI1 (*(volatile uint8_t *)0x40008102) // Channel n Priority Register
  1869. #define DMA_DCHPRI0 (*(volatile uint8_t *)0x40008103) // Channel n Priority Register
  1870. #endif
  1871. #define DMA_DCHPRI_CHPRI(n) ((uint8_t)(n & 15)<<0) // Channel Arbitration Priority
  1872. #define DMA_DCHPRI_DPA ((uint8_t)1<<6) // Disable PreEmpt Ability
  1873. #define DMA_DCHPRI_ECP ((uint8_t)1<<7) // Enable PreEmption
  1874. #if DMA_NUM_CHANNELS >= 16
  1875. #define DMA_DCHPRI7 (*(volatile uint8_t *)0x40008104) // Channel n Priority Register
  1876. #define DMA_DCHPRI6 (*(volatile uint8_t *)0x40008105) // Channel n Priority Register
  1877. #define DMA_DCHPRI5 (*(volatile uint8_t *)0x40008106) // Channel n Priority Register
  1878. #define DMA_DCHPRI4 (*(volatile uint8_t *)0x40008107) // Channel n Priority Register
  1879. #define DMA_DCHPRI11 (*(volatile uint8_t *)0x40008108) // Channel n Priority Register
  1880. #define DMA_DCHPRI10 (*(volatile uint8_t *)0x40008109) // Channel n Priority Register
  1881. #define DMA_DCHPRI9 (*(volatile uint8_t *)0x4000810A) // Channel n Priority Register
  1882. #define DMA_DCHPRI8 (*(volatile uint8_t *)0x4000810B) // Channel n Priority Register
  1883. #define DMA_DCHPRI15 (*(volatile uint8_t *)0x4000810C) // Channel n Priority Register
  1884. #define DMA_DCHPRI14 (*(volatile uint8_t *)0x4000810D) // Channel n Priority Register
  1885. #define DMA_DCHPRI13 (*(volatile uint8_t *)0x4000810E) // Channel n Priority Register
  1886. #define DMA_DCHPRI12 (*(volatile uint8_t *)0x4000810F) // Channel n Priority Register
  1887. #endif
  1888. #if DMA_NUM_CHANNELS >= 32
  1889. #define DMA_DCHPRI19 (*(volatile uint8_t *)0x40008110) // Channel n Priority Register
  1890. #define DMA_DCHPRI18 (*(volatile uint8_t *)0x40008111) // Channel n Priority Register
  1891. #define DMA_DCHPRI17 (*(volatile uint8_t *)0x40008112) // Channel n Priority Register
  1892. #define DMA_DCHPRI16 (*(volatile uint8_t *)0x40008113) // Channel n Priority Register
  1893. #define DMA_DCHPRI23 (*(volatile uint8_t *)0x40008114) // Channel n Priority Register
  1894. #define DMA_DCHPRI22 (*(volatile uint8_t *)0x40008115) // Channel n Priority Register
  1895. #define DMA_DCHPRI21 (*(volatile uint8_t *)0x40008116) // Channel n Priority Register
  1896. #define DMA_DCHPRI20 (*(volatile uint8_t *)0x40008117) // Channel n Priority Register
  1897. #define DMA_DCHPRI27 (*(volatile uint8_t *)0x40008118) // Channel n Priority Register
  1898. #define DMA_DCHPRI26 (*(volatile uint8_t *)0x40008119) // Channel n Priority Register
  1899. #define DMA_DCHPRI25 (*(volatile uint8_t *)0x4000811A) // Channel n Priority Register
  1900. #define DMA_DCHPRI24 (*(volatile uint8_t *)0x4000811B) // Channel n Priority Register
  1901. #define DMA_DCHPRI31 (*(volatile uint8_t *)0x4000811C) // Channel n Priority Register
  1902. #define DMA_DCHPRI30 (*(volatile uint8_t *)0x4000811D) // Channel n Priority Register
  1903. #define DMA_DCHPRI29 (*(volatile uint8_t *)0x4000811E) // Channel n Priority Register
  1904. #define DMA_DCHPRI28 (*(volatile uint8_t *)0x4000811F) // Channel n Priority Register
  1905. #define DMA_CR_GRP0PRI ((uint32_t)0x100)
  1906. #define DMA_CR_GRP1PRI ((uint32_t)0x400)
  1907. #endif
  1908. #define DMA_TCD_ATTR_SMOD(n) (((n) & 0x1F) << 11)
  1909. #define DMA_TCD_ATTR_SSIZE(n) (((n) & 0x7) << 8)
  1910. #define DMA_TCD_ATTR_DMOD(n) (((n) & 0x1F) << 3)
  1911. #define DMA_TCD_ATTR_DSIZE(n) (((n) & 0x7) << 0)
  1912. #define DMA_TCD_ATTR_SIZE_8BIT 0
  1913. #define DMA_TCD_ATTR_SIZE_16BIT 1
  1914. #define DMA_TCD_ATTR_SIZE_32BIT 2
  1915. #define DMA_TCD_ATTR_SIZE_16BYTE 4
  1916. #define DMA_TCD_ATTR_SIZE_32BYTE 5 // caution: this might not be supported in newer chips?
  1917. #define DMA_TCD_CSR_BWC(n) (((n) & 0x3) << 14)
  1918. #define DMA_TCD_CSR_BWC_MASK 0xC000
  1919. #define DMA_TCD_CSR_MAJORLINKCH(n) (((n) & 0xF) << 8)
  1920. #define DMA_TCD_CSR_MAJORLINKCH_MASK 0x0F00
  1921. #define DMA_TCD_CSR_DONE 0x0080
  1922. #define DMA_TCD_CSR_ACTIVE 0x0040
  1923. #define DMA_TCD_CSR_MAJORELINK 0x0020
  1924. #define DMA_TCD_CSR_ESG 0x0010
  1925. #define DMA_TCD_CSR_DREQ 0x0008
  1926. #define DMA_TCD_CSR_INTHALF 0x0004
  1927. #define DMA_TCD_CSR_INTMAJOR 0x0002
  1928. #define DMA_TCD_CSR_START 0x0001
  1929. #define DMA_TCD_CITER_MASK ((uint16_t)0x7FFF) // Loop count mask
  1930. #define DMA_TCD_CITER_ELINK ((uint16_t)1<<15) // Enable channel linking on minor-loop complete
  1931. #define DMA_TCD_BITER_MASK ((uint16_t)0x7FFF) // Loop count mask
  1932. #define DMA_TCD_BITER_ELINK ((uint16_t)1<<15) // Enable channel linking on minor-loop complete
  1933. #define DMA_TCD_BITER_ELINKYES_ELINK 0x8000
  1934. #define DMA_TCD_BITER_ELINKYES_LINKCH(n) (((n) & 0xF) << 9)
  1935. #define DMA_TCD_BITER_ELINKYES_LINKCH_MASK 0x1E00
  1936. #define DMA_TCD_BITER_ELINKYES_BITER(n) (((n) & 0x1FF) << 0)
  1937. #define DMA_TCD_BITER_ELINKYES_BITER_MASK 0x01FF
  1938. #define DMA_TCD_CITER_ELINKYES_ELINK 0x8000
  1939. #define DMA_TCD_CITER_ELINKYES_LINKCH(n) (((n) & 0xF) << 9)
  1940. #define DMA_TCD_CITER_ELINKYES_LINKCH_MASK 0x1E00
  1941. #define DMA_TCD_CITER_ELINKYES_CITER(n) (((n) & 0x1FF) << 0)
  1942. #define DMA_TCD_CITER_ELINKYES_CITER_MASK 0x01FF
  1943. #define DMA_TCD_NBYTES_SMLOE ((uint32_t)1<<31) // Source Minor Loop Offset Enable
  1944. #define DMA_TCD_NBYTES_DMLOE ((uint32_t)1<<30) // Destination Minor Loop Offset Enable
  1945. #define DMA_TCD_NBYTES_MLOFFNO_NBYTES(n) ((uint32_t)((n) & 0x3FFFFFFF)) // NBytes transfer count when minor loop disabled
  1946. #define DMA_TCD_NBYTES_MLOFFYES_NBYTES(n) ((uint32_t)((n) & 0x3FF)) // NBytes transfer count when minor loop enabled
  1947. #define DMA_TCD_NBYTES_MLOFFYES_MLOFF(n) ((uint32_t)((n) & 0xFFFFF)<<10) // Minor loop offset
  1948. #if DMA_NUM_CHANNELS >= 4
  1949. #define DMA_TCD0_SADDR (*(volatile const void * volatile *)0x40009000) // TCD Source Address
  1950. #define DMA_TCD0_SOFF (*(volatile int16_t *)0x40009004) // TCD Signed Source Address Offset
  1951. #define DMA_TCD0_ATTR (*(volatile uint16_t *)0x40009006) // TCD Transfer Attributes
  1952. #define DMA_TCD0_NBYTES_MLNO (*(volatile uint32_t *)0x40009008) // TCD Minor Byte Count (Minor Loop Disabled)
  1953. #define DMA_TCD0_NBYTES_MLOFFNO (*(volatile uint32_t *)0x40009008) // TCD Signed Minor Loop Offset (Minor Loop Enabled and Offset Disabled)
  1954. #define DMA_TCD0_NBYTES_MLOFFYES (*(volatile uint32_t *)0x40009008) // TCD Signed Minor Loop Offset (Minor Loop and Offset Enabled)
  1955. #define DMA_TCD0_SLAST (*(volatile int32_t *)0x4000900C) // TCD Last Source Address Adjustment
  1956. #define DMA_TCD0_DADDR (*(volatile void * volatile *)0x40009010) // TCD Destination Address
  1957. #define DMA_TCD0_DOFF (*(volatile int16_t *)0x40009014) // TCD Signed Destination Address Offset
  1958. #define DMA_TCD0_CITER_ELINKYES (*(volatile uint16_t *)0x40009016) // TCD Current Minor Loop Link, Major Loop Count, Channel Linking Enabled
  1959. #define DMA_TCD0_CITER_ELINKNO (*(volatile uint16_t *)0x40009016) // ??
  1960. #define DMA_TCD0_DLASTSGA (*(volatile int32_t *)0x40009018) // TCD Last Destination Address Adjustment/Scatter Gather Address
  1961. #define DMA_TCD0_CSR (*(volatile uint16_t *)0x4000901C) // TCD Control and Status
  1962. #define DMA_TCD0_BITER_ELINKYES (*(volatile uint16_t *)0x4000901E) // TCD Beginning Minor Loop Link, Major Loop Count, Channel Linking Enabled
  1963. #define DMA_TCD0_BITER_ELINKNO (*(volatile uint16_t *)0x4000901E) // TCD Beginning Minor Loop Link, Major Loop Count, Channel Linking Disabled
  1964. #define DMA_TCD1_SADDR (*(volatile const void * volatile *)0x40009020) // TCD Source Address
  1965. #define DMA_TCD1_SOFF (*(volatile int16_t *)0x40009024) // TCD Signed Source Address Offset
  1966. #define DMA_TCD1_ATTR (*(volatile uint16_t *)0x40009026) // TCD Transfer Attributes
  1967. #define DMA_TCD1_NBYTES_MLNO (*(volatile uint32_t *)0x40009028) // TCD Minor Byte Count, Minor Loop Disabled
  1968. #define DMA_TCD1_NBYTES_MLOFFNO (*(volatile uint32_t *)0x40009028) // TCD Signed Minor Loop Offset, Minor Loop Enabled and Offset Disabled
  1969. #define DMA_TCD1_NBYTES_MLOFFYES (*(volatile uint32_t *)0x40009028) // TCD Signed Minor Loop Offset, Minor Loop and Offset Enabled
  1970. #define DMA_TCD1_SLAST (*(volatile int32_t *)0x4000902C) // TCD Last Source Address Adjustment
  1971. #define DMA_TCD1_DADDR (*(volatile void * volatile *)0x40009030) // TCD Destination Address
  1972. #define DMA_TCD1_DOFF (*(volatile int16_t *)0x40009034) // TCD Signed Destination Address Offset
  1973. #define DMA_TCD1_CITER_ELINKYES (*(volatile uint16_t *)0x40009036) // TCD Current Minor Loop Link, Major Loop Count, Channel Linking Enabled
  1974. #define DMA_TCD1_CITER_ELINKNO (*(volatile uint16_t *)0x40009036) // ??
  1975. #define DMA_TCD1_DLASTSGA (*(volatile int32_t *)0x40009038) // TCD Last Destination Address Adjustment/Scatter Gather Address
  1976. #define DMA_TCD1_CSR (*(volatile uint16_t *)0x4000903C) // TCD Control and Status
  1977. #define DMA_TCD1_BITER_ELINKYES (*(volatile uint16_t *)0x4000903E) // TCD Beginning Minor Loop Link, Major Loop Count Channel Linking Enabled
  1978. #define DMA_TCD1_BITER_ELINKNO (*(volatile uint16_t *)0x4000903E) // TCD Beginning Minor Loop Link, Major Loop Count, Channel Linking Disabled
  1979. #define DMA_TCD2_SADDR (*(volatile const void * volatile *)0x40009040) // TCD Source Address
  1980. #define DMA_TCD2_SOFF (*(volatile int16_t *)0x40009044) // TCD Signed Source Address Offset
  1981. #define DMA_TCD2_ATTR (*(volatile uint16_t *)0x40009046) // TCD Transfer Attributes
  1982. #define DMA_TCD2_NBYTES_MLNO (*(volatile uint32_t *)0x40009048) // TCD Minor Byte Count, Minor Loop Disabled
  1983. #define DMA_TCD2_NBYTES_MLOFFNO (*(volatile uint32_t *)0x40009048) // TCD Signed Minor Loop Offset, Minor Loop Enabled and Offset Disabled
  1984. #define DMA_TCD2_NBYTES_MLOFFYES (*(volatile uint32_t *)0x40009048) // TCD Signed Minor Loop Offset, Minor Loop and Offset Enabled
  1985. #define DMA_TCD2_SLAST (*(volatile int32_t *)0x4000904C) // TCD Last Source Address Adjustment
  1986. #define DMA_TCD2_DADDR (*(volatile void * volatile *)0x40009050) // TCD Destination Address
  1987. #define DMA_TCD2_DOFF (*(volatile int16_t *)0x40009054) // TCD Signed Destination Address Offset
  1988. #define DMA_TCD2_CITER_ELINKYES (*(volatile uint16_t *)0x40009056) // TCD Current Minor Loop Link, Major Loop Count, Channel Linking Enabled
  1989. #define DMA_TCD2_CITER_ELINKNO (*(volatile uint16_t *)0x40009056) // ??
  1990. #define DMA_TCD2_DLASTSGA (*(volatile int32_t *)0x40009058) // TCD Last Destination Address Adjustment/Scatter Gather Address
  1991. #define DMA_TCD2_CSR (*(volatile uint16_t *)0x4000905C) // TCD Control and Status
  1992. #define DMA_TCD2_BITER_ELINKYES (*(volatile uint16_t *)0x4000905E) // TCD Beginning Minor Loop Link, Major Loop Count, Channel Linking Enabled
  1993. #define DMA_TCD2_BITER_ELINKNO (*(volatile uint16_t *)0x4000905E) // TCD Beginning Minor Loop Link, Major Loop Count, Channel Linking Disabled
  1994. #define DMA_TCD3_SADDR (*(volatile const void * volatile *)0x40009060) // TCD Source Address
  1995. #define DMA_TCD3_SOFF (*(volatile int16_t *)0x40009064) // TCD Signed Source Address Offset
  1996. #define DMA_TCD3_ATTR (*(volatile uint16_t *)0x40009066) // TCD Transfer Attributes
  1997. #define DMA_TCD3_NBYTES_MLNO (*(volatile uint32_t *)0x40009068) // TCD Minor Byte Count, Minor Loop Disabled
  1998. #define DMA_TCD3_NBYTES_MLOFFNO (*(volatile uint32_t *)0x40009068) // TCD Signed Minor Loop Offset, Minor Loop Enabled and Offset Disabled
  1999. #define DMA_TCD3_NBYTES_MLOFFYES (*(volatile uint32_t *)0x40009068) // TCD Signed Minor Loop Offset, Minor Loop and Offset Enabled
  2000. #define DMA_TCD3_SLAST (*(volatile int32_t *)0x4000906C) // TCD Last Source Address Adjustment
  2001. #define DMA_TCD3_DADDR (*(volatile void * volatile *)0x40009070) // TCD Destination Address
  2002. #define DMA_TCD3_DOFF (*(volatile int16_t *)0x40009074) // TCD Signed Destination Address Offset
  2003. #define DMA_TCD3_CITER_ELINKYES (*(volatile uint16_t *)0x40009076) // TCD Current Minor Loop Link, Major Loop Count, Channel Linking Enabled
  2004. #define DMA_TCD3_CITER_ELINKNO (*(volatile uint16_t *)0x40009076) // ??
  2005. #define DMA_TCD3_DLASTSGA (*(volatile int32_t *)0x40009078) // TCD Last Destination Address Adjustment/Scatter Gather Address
  2006. #define DMA_TCD3_CSR (*(volatile uint16_t *)0x4000907C) // TCD Control and Status
  2007. #define DMA_TCD3_BITER_ELINKYES (*(volatile uint16_t *)0x4000907E) // TCD Beginning Minor Loop Link, Major Loop Count ,Channel Linking Enabled
  2008. #define DMA_TCD3_BITER_ELINKNO (*(volatile uint16_t *)0x4000907E) // TCD Beginning Minor Loop Link, Major Loop Count ,Channel Linking Disabled
  2009. #define DMA_TCD4_SADDR (*(volatile const void * volatile *)0x40009080) // TCD Source Addr
  2010. #define DMA_TCD4_SOFF (*(volatile int16_t *)0x40009084) // TCD Signed Source Address Offset
  2011. #define DMA_TCD4_ATTR (*(volatile uint16_t *)0x40009086) // TCD Transfer Attributes
  2012. #define DMA_TCD4_NBYTES_MLNO (*(volatile uint32_t *)0x40009088) // TCD Minor Byte Count
  2013. #define DMA_TCD4_NBYTES_MLOFFNO (*(volatile uint32_t *)0x40009088) // TCD Signed Minor Loop Offset
  2014. #define DMA_TCD4_NBYTES_MLOFFYES (*(volatile uint32_t *)0x40009088) // TCD Signed Minor Loop Offset
  2015. #define DMA_TCD4_SLAST (*(volatile int32_t *)0x4000908C) // TCD Last Source Addr Adj.
  2016. #define DMA_TCD4_DADDR (*(volatile void * volatile *)0x40009090) // TCD Destination Address
  2017. #define DMA_TCD4_DOFF (*(volatile int16_t *)0x40009094) // TCD Signed Dest Address Offset
  2018. #define DMA_TCD4_CITER_ELINKYES (*(volatile uint16_t *)0x40009096) // TCD Current Minor Loop Link
  2019. #define DMA_TCD4_CITER_ELINKNO (*(volatile uint16_t *)0x40009096) // ??
  2020. #define DMA_TCD4_DLASTSGA (*(volatile int32_t *)0x40009098) // TCD Last Destination Addr Adj
  2021. #define DMA_TCD4_CSR (*(volatile uint16_t *)0x4000909C) // TCD Control and Status
  2022. #define DMA_TCD4_BITER_ELINKYES (*(volatile uint16_t *)0x4000909E) // TCD Beginning Minor Loop Link
  2023. #define DMA_TCD4_BITER_ELINKNO (*(volatile uint16_t *)0x4000909E) // TCD Beginning Minor Loop Link
  2024. #endif
  2025. #if DMA_NUM_CHANNELS >= 16
  2026. #define DMA_TCD5_SADDR (*(volatile const void * volatile *)0x400090A0) // TCD Source Addr
  2027. #define DMA_TCD5_SOFF (*(volatile int16_t *)0x400090A4) // TCD Signed Source Address Offset
  2028. #define DMA_TCD5_ATTR (*(volatile uint16_t *)0x400090A6) // TCD Transfer Attributes
  2029. #define DMA_TCD5_NBYTES_MLNO (*(volatile uint32_t *)0x400090A8) // TCD Minor Byte Count
  2030. #define DMA_TCD5_NBYTES_MLOFFNO (*(volatile uint32_t *)0x400090A8) // TCD Signed Minor Loop Offset
  2031. #define DMA_TCD5_NBYTES_MLOFFYES (*(volatile uint32_t *)0x400090A8) // TCD Signed Minor Loop Offset
  2032. #define DMA_TCD5_SLAST (*(volatile int32_t *)0x400090AC) // TCD Last Source Addr Adj.
  2033. #define DMA_TCD5_DADDR (*(volatile void * volatile *)0x400090B0) // TCD Destination Address
  2034. #define DMA_TCD5_DOFF (*(volatile int16_t *)0x400090B4) // TCD Signed Dest Address Offset
  2035. #define DMA_TCD5_CITER_ELINKYES (*(volatile uint16_t *)0x400090B6) // TCD Current Minor Loop Link
  2036. #define DMA_TCD5_CITER_ELINKNO (*(volatile uint16_t *)0x400090B6) // ??
  2037. #define DMA_TCD5_DLASTSGA (*(volatile int32_t *)0x400090B8) // TCD Last Destination Addr Adj
  2038. #define DMA_TCD5_CSR (*(volatile uint16_t *)0x400090BC) // TCD Control and Status
  2039. #define DMA_TCD5_BITER_ELINKYES (*(volatile uint16_t *)0x400090BE) // TCD Beginning Minor Loop Link
  2040. #define DMA_TCD5_BITER_ELINKNO (*(volatile uint16_t *)0x400090BE) // TCD Beginning Minor Loop Link
  2041. #define DMA_TCD6_SADDR (*(volatile const void * volatile *)0x400090C0) // TCD Source Addr
  2042. #define DMA_TCD6_SOFF (*(volatile int16_t *)0x400090C4) // TCD Signed Source Address Offset
  2043. #define DMA_TCD6_ATTR (*(volatile uint16_t *)0x400090C6) // TCD Transfer Attributes
  2044. #define DMA_TCD6_NBYTES_MLNO (*(volatile uint32_t *)0x400090C8) // TCD Minor Byte Count
  2045. #define DMA_TCD6_NBYTES_MLOFFNO (*(volatile uint32_t *)0x400090C8) // TCD Signed Minor Loop Offset
  2046. #define DMA_TCD6_NBYTES_MLOFFYES (*(volatile uint32_t *)0x400090C8) // TCD Signed Minor Loop Offset
  2047. #define DMA_TCD6_SLAST (*(volatile int32_t *)0x400090CC) // TCD Last Source Addr Adj.
  2048. #define DMA_TCD6_DADDR (*(volatile void * volatile *)0x400090D0) // TCD Destination Address
  2049. #define DMA_TCD6_DOFF (*(volatile int16_t *)0x400090D4) // TCD Signed Dest Address Offset
  2050. #define DMA_TCD6_CITER_ELINKYES (*(volatile uint16_t *)0x400090D6) // TCD Current Minor Loop Link
  2051. #define DMA_TCD6_CITER_ELINKNO (*(volatile uint16_t *)0x400090D6) // ??
  2052. #define DMA_TCD6_DLASTSGA (*(volatile int32_t *)0x400090D8) // TCD Last Destination Addr Adj
  2053. #define DMA_TCD6_CSR (*(volatile uint16_t *)0x400090DC) // TCD Control and Status
  2054. #define DMA_TCD6_BITER_ELINKYES (*(volatile uint16_t *)0x400090DE) // TCD Beginning Minor Loop Link
  2055. #define DMA_TCD6_BITER_ELINKNO (*(volatile uint16_t *)0x400090DE) // TCD Beginning Minor Loop Link
  2056. #define DMA_TCD7_SADDR (*(volatile const void * volatile *)0x400090E0) // TCD Source Addr
  2057. #define DMA_TCD7_SOFF (*(volatile int16_t *)0x400090E4) // TCD Signed Source Address Offset
  2058. #define DMA_TCD7_ATTR (*(volatile uint16_t *)0x400090E6) // TCD Transfer Attributes
  2059. #define DMA_TCD7_NBYTES_MLNO (*(volatile uint32_t *)0x400090E8) // TCD Minor Byte Count
  2060. #define DMA_TCD7_NBYTES_MLOFFNO (*(volatile uint32_t *)0x400090E8) // TCD Signed Minor Loop Offset
  2061. #define DMA_TCD7_NBYTES_MLOFFYES (*(volatile uint32_t *)0x400090E8) // TCD Signed Minor Loop Offset
  2062. #define DMA_TCD7_SLAST (*(volatile int32_t *)0x400090EC) // TCD Last Source Addr Adj.
  2063. #define DMA_TCD7_DADDR (*(volatile void * volatile *)0x400090F0) // TCD Destination Address
  2064. #define DMA_TCD7_DOFF (*(volatile int16_t *)0x400090F4) // TCD Signed Dest Address Offset
  2065. #define DMA_TCD7_CITER_ELINKYES (*(volatile uint16_t *)0x400090F6) // TCD Current Minor Loop Link
  2066. #define DMA_TCD7_CITER_ELINKNO (*(volatile uint16_t *)0x400090F6) // ??
  2067. #define DMA_TCD7_DLASTSGA (*(volatile int32_t *)0x400090F8) // TCD Last Destination Addr Adj
  2068. #define DMA_TCD7_CSR (*(volatile uint16_t *)0x400090FC) // TCD Control and Status
  2069. #define DMA_TCD7_BITER_ELINKYES (*(volatile uint16_t *)0x400090FE) // TCD Beginning Minor Loop Link
  2070. #define DMA_TCD7_BITER_ELINKNO (*(volatile uint16_t *)0x400090FE) // TCD Beginning Minor Loop Link
  2071. #define DMA_TCD8_SADDR (*(volatile const void * volatile *)0x40009100) // TCD Source Addr
  2072. #define DMA_TCD8_SOFF (*(volatile int16_t *)0x40009104) // TCD Signed Source Address Offset
  2073. #define DMA_TCD8_ATTR (*(volatile uint16_t *)0x40009106) // TCD Transfer Attributes
  2074. #define DMA_TCD8_NBYTES_MLNO (*(volatile uint32_t *)0x40009108) // TCD Minor Byte Count
  2075. #define DMA_TCD8_NBYTES_MLOFFNO (*(volatile uint32_t *)0x40009108) // TCD Signed Minor Loop Offset
  2076. #define DMA_TCD8_NBYTES_MLOFFYES (*(volatile uint32_t *)0x40009108) // TCD Signed Minor Loop Offset
  2077. #define DMA_TCD8_SLAST (*(volatile int32_t *)0x4000910C) // TCD Last Source Addr Adj.
  2078. #define DMA_TCD8_DADDR (*(volatile void * volatile *)0x40009110) // TCD Destination Address
  2079. #define DMA_TCD8_DOFF (*(volatile int16_t *)0x40009114) // TCD Signed Dest Address Offset
  2080. #define DMA_TCD8_CITER_ELINKYES (*(volatile uint16_t *)0x40009116) // TCD Current Minor Loop Link
  2081. #define DMA_TCD8_CITER_ELINKNO (*(volatile uint16_t *)0x40009116) // ??
  2082. #define DMA_TCD8_DLASTSGA (*(volatile int32_t *)0x40009118) // TCD Last Destination Addr Adj
  2083. #define DMA_TCD8_CSR (*(volatile uint16_t *)0x4000911C) // TCD Control and Status
  2084. #define DMA_TCD8_BITER_ELINKYES (*(volatile uint16_t *)0x4000911E) // TCD Beginning Minor Loop Link
  2085. #define DMA_TCD8_BITER_ELINKNO (*(volatile uint16_t *)0x4000911E) // TCD Beginning Minor Loop Link
  2086. #define DMA_TCD9_SADDR (*(volatile const void * volatile *)0x40009120) // TCD Source Addr
  2087. #define DMA_TCD9_SOFF (*(volatile int16_t *)0x40009124) // TCD Signed Source Address Offset
  2088. #define DMA_TCD9_ATTR (*(volatile uint16_t *)0x40009126) // TCD Transfer Attributes
  2089. #define DMA_TCD9_NBYTES_MLNO (*(volatile uint32_t *)0x40009128) // TCD Minor Byte Count
  2090. #define DMA_TCD9_NBYTES_MLOFFNO (*(volatile uint32_t *)0x40009128) // TCD Signed Minor Loop Offset
  2091. #define DMA_TCD9_NBYTES_MLOFFYES (*(volatile uint32_t *)0x40009128) // TCD Signed Minor Loop Offset
  2092. #define DMA_TCD9_SLAST (*(volatile int32_t *)0x4000912C) // TCD Last Source Addr Adj.
  2093. #define DMA_TCD9_DADDR (*(volatile void * volatile *)0x40009130) // TCD Destination Address
  2094. #define DMA_TCD9_DOFF (*(volatile int16_t *)0x40009134) // TCD Signed Dest Address Offset
  2095. #define DMA_TCD9_CITER_ELINKYES (*(volatile uint16_t *)0x40009136) // TCD Current Minor Loop Link
  2096. #define DMA_TCD9_CITER_ELINKNO (*(volatile uint16_t *)0x40009136) // ??
  2097. #define DMA_TCD9_DLASTSGA (*(volatile int32_t *)0x40009138) // TCD Last Destination Addr Adj
  2098. #define DMA_TCD9_CSR (*(volatile uint16_t *)0x4000913C) // TCD Control and Status
  2099. #define DMA_TCD9_BITER_ELINKYES (*(volatile uint16_t *)0x4000913E) // TCD Beginning Minor Loop Link
  2100. #define DMA_TCD9_BITER_ELINKNO (*(volatile uint16_t *)0x4000913E) // TCD Beginning Minor Loop Link
  2101. #define DMA_TCD10_SADDR (*(volatile const void * volatile *)0x40009140) // TCD Source Addr
  2102. #define DMA_TCD10_SOFF (*(volatile int16_t *)0x40009144) // TCD Signed Source Address Offset
  2103. #define DMA_TCD10_ATTR (*(volatile uint16_t *)0x40009146) // TCD Transfer Attributes
  2104. #define DMA_TCD10_NBYTES_MLNO (*(volatile uint32_t *)0x40009148) // TCD Minor Byte Count
  2105. #define DMA_TCD10_NBYTES_MLOFFNO (*(volatile uint32_t *)0x40009148) // TCD Signed Minor Loop Offset
  2106. #define DMA_TCD10_NBYTES_MLOFFYES (*(volatile uint32_t *)0x40009148) // TCD Signed Minor Loop Offset
  2107. #define DMA_TCD10_SLAST (*(volatile int32_t *)0x4000914C) // TCD Last Source Addr Adj.
  2108. #define DMA_TCD10_DADDR (*(volatile void * volatile *)0x40009150) // TCD Destination Address
  2109. #define DMA_TCD10_DOFF (*(volatile int16_t *)0x40009154) // TCD Signed Dest Address Offset
  2110. #define DMA_TCD10_CITER_ELINKYES (*(volatile uint16_t *)0x40009156) // TCD Current Minor Loop Link
  2111. #define DMA_TCD10_CITER_ELINKNO (*(volatile uint16_t *)0x40009156) // ??
  2112. #define DMA_TCD10_DLASTSGA (*(volatile int32_t *)0x40009158) // TCD Last Destination Addr Adj
  2113. #define DMA_TCD10_CSR (*(volatile uint16_t *)0x4000915C) // TCD Control and Status
  2114. #define DMA_TCD10_BITER_ELINKYES (*(volatile uint16_t *)0x4000915E) // TCD Beginning Minor Loop Link
  2115. #define DMA_TCD10_BITER_ELINKNO (*(volatile uint16_t *)0x4000915E) // TCD Beginning Minor Loop Link
  2116. #define DMA_TCD11_SADDR (*(volatile const void * volatile *)0x40009160) // TCD Source Addr
  2117. #define DMA_TCD11_SOFF (*(volatile int16_t *)0x40009164) // TCD Signed Source Address Offset
  2118. #define DMA_TCD11_ATTR (*(volatile uint16_t *)0x40009166) // TCD Transfer Attributes
  2119. #define DMA_TCD11_NBYTES_MLNO (*(volatile uint32_t *)0x40009168) // TCD Minor Byte Count
  2120. #define DMA_TCD11_NBYTES_MLOFFNO (*(volatile uint32_t *)0x40009168) // TCD Signed Minor Loop Offset
  2121. #define DMA_TCD11_NBYTES_MLOFFYES (*(volatile uint32_t *)0x40009168) // TCD Signed Minor Loop Offset
  2122. #define DMA_TCD11_SLAST (*(volatile int32_t *)0x4000916C) // TCD Last Source Addr Adj.
  2123. #define DMA_TCD11_DADDR (*(volatile void * volatile *)0x40009170) // TCD Destination Address
  2124. #define DMA_TCD11_DOFF (*(volatile int16_t *)0x40009174) // TCD Signed Dest Address Offset
  2125. #define DMA_TCD11_CITER_ELINKYES (*(volatile uint16_t *)0x40009176) // TCD Current Minor Loop Link
  2126. #define DMA_TCD11_CITER_ELINKNO (*(volatile uint16_t *)0x40009176) // ??
  2127. #define DMA_TCD11_DLASTSGA (*(volatile int32_t *)0x40009178) // TCD Last Destination Addr Adj
  2128. #define DMA_TCD11_CSR (*(volatile uint16_t *)0x4000917C) // TCD Control and Status
  2129. #define DMA_TCD11_BITER_ELINKYES (*(volatile uint16_t *)0x4000917E) // TCD Beginning Minor Loop Link
  2130. #define DMA_TCD11_BITER_ELINKNO (*(volatile uint16_t *)0x4000917E) // TCD Beginning Minor Loop Link
  2131. #define DMA_TCD12_SADDR (*(volatile const void * volatile *)0x40009180) // TCD Source Addr
  2132. #define DMA_TCD12_SOFF (*(volatile int16_t *)0x40009184) // TCD Signed Source Address Offset
  2133. #define DMA_TCD12_ATTR (*(volatile uint16_t *)0x40009186) // TCD Transfer Attributes
  2134. #define DMA_TCD12_NBYTES_MLNO (*(volatile uint32_t *)0x40009188) // TCD Minor Byte Count
  2135. #define DMA_TCD12_NBYTES_MLOFFNO (*(volatile uint32_t *)0x40009188) // TCD Signed Minor Loop Offset
  2136. #define DMA_TCD12_NBYTES_MLOFFYES (*(volatile uint32_t *)0x40009188) // TCD Signed Minor Loop Offset
  2137. #define DMA_TCD12_SLAST (*(volatile int32_t *)0x4000918C) // TCD Last Source Addr Adj.
  2138. #define DMA_TCD12_DADDR (*(volatile void * volatile *)0x40009190) // TCD Destination Address
  2139. #define DMA_TCD12_DOFF (*(volatile int16_t *)0x40009194) // TCD Signed Dest Address Offset
  2140. #define DMA_TCD12_CITER_ELINKYES (*(volatile uint16_t *)0x40009196) // TCD Current Minor Loop Link
  2141. #define DMA_TCD12_CITER_ELINKNO (*(volatile uint16_t *)0x40009196) // ??
  2142. #define DMA_TCD12_DLASTSGA (*(volatile int32_t *)0x40009198) // TCD Last Destination Addr Adj
  2143. #define DMA_TCD12_CSR (*(volatile uint16_t *)0x4000919C) // TCD Control and Status
  2144. #define DMA_TCD12_BITER_ELINKYES (*(volatile uint16_t *)0x4000919E) // TCD Beginning Minor Loop Link
  2145. #define DMA_TCD12_BITER_ELINKNO (*(volatile uint16_t *)0x4000919E) // TCD Beginning Minor Loop Link
  2146. #define DMA_TCD13_SADDR (*(volatile const void * volatile *)0x400091A0) // TCD Source Addr
  2147. #define DMA_TCD13_SOFF (*(volatile int16_t *)0x400091A4) // TCD Signed Source Address Offset
  2148. #define DMA_TCD13_ATTR (*(volatile uint16_t *)0x400091A6) // TCD Transfer Attributes
  2149. #define DMA_TCD13_NBYTES_MLNO (*(volatile uint32_t *)0x400091A8) // TCD Minor Byte Count
  2150. #define DMA_TCD13_NBYTES_MLOFFNO (*(volatile uint32_t *)0x400091A8) // TCD Signed Minor Loop Offset
  2151. #define DMA_TCD13_NBYTES_MLOFFYES (*(volatile uint32_t *)0x400091A8) // TCD Signed Minor Loop Offset
  2152. #define DMA_TCD13_SLAST (*(volatile int32_t *)0x400091AC) // TCD Last Source Addr Adj.
  2153. #define DMA_TCD13_DADDR (*(volatile void * volatile *)0x400091B0) // TCD Destination Address
  2154. #define DMA_TCD13_DOFF (*(volatile int16_t *)0x400091B4) // TCD Signed Dest Address Offset
  2155. #define DMA_TCD13_CITER_ELINKYES (*(volatile uint16_t *)0x400091B6) // TCD Current Minor Loop Link
  2156. #define DMA_TCD13_CITER_ELINKNO (*(volatile uint16_t *)0x400091B6) // ??
  2157. #define DMA_TCD13_DLASTSGA (*(volatile int32_t *)0x400091B8) // TCD Last Destination Addr Adj
  2158. #define DMA_TCD13_CSR (*(volatile uint16_t *)0x400091BC) // TCD Control and Status
  2159. #define DMA_TCD13_BITER_ELINKYES (*(volatile uint16_t *)0x400091BE) // TCD Beginning Minor Loop Link
  2160. #define DMA_TCD13_BITER_ELINKNO (*(volatile uint16_t *)0x400091BE) // TCD Beginning Minor Loop Link
  2161. #define DMA_TCD14_SADDR (*(volatile const void * volatile *)0x400091C0) // TCD Source Addr
  2162. #define DMA_TCD14_SOFF (*(volatile int16_t *)0x400091C4) // TCD Signed Source Address Offset
  2163. #define DMA_TCD14_ATTR (*(volatile uint16_t *)0x400091C6) // TCD Transfer Attributes
  2164. #define DMA_TCD14_NBYTES_MLNO (*(volatile uint32_t *)0x400091C8) // TCD Minor Byte Count
  2165. #define DMA_TCD14_NBYTES_MLOFFNO (*(volatile uint32_t *)0x400091C8) // TCD Signed Minor Loop Offset
  2166. #define DMA_TCD14_NBYTES_MLOFFYES (*(volatile uint32_t *)0x400091C8) // TCD Signed Minor Loop Offset
  2167. #define DMA_TCD14_SLAST (*(volatile int32_t *)0x400091CC) // TCD Last Source Addr Adj.
  2168. #define DMA_TCD14_DADDR (*(volatile void * volatile *)0x400091D0) // TCD Destination Address
  2169. #define DMA_TCD14_DOFF (*(volatile int16_t *)0x400091D4) // TCD Signed Dest Address Offset
  2170. #define DMA_TCD14_CITER_ELINKYES (*(volatile uint16_t *)0x400091D6) // TCD Current Minor Loop Link
  2171. #define DMA_TCD14_CITER_ELINKNO (*(volatile uint16_t *)0x400091D6) // ??
  2172. #define DMA_TCD14_DLASTSGA (*(volatile int32_t *)0x400091D8) // TCD Last Destination Addr Adj
  2173. #define DMA_TCD14_CSR (*(volatile uint16_t *)0x400091DC) // TCD Control and Status
  2174. #define DMA_TCD14_BITER_ELINKYES (*(volatile uint16_t *)0x400091DE) // TCD Beginning Minor Loop Link
  2175. #define DMA_TCD14_BITER_ELINKNO (*(volatile uint16_t *)0x400091DE) // TCD Beginning Minor Loop Link
  2176. #define DMA_TCD15_SADDR (*(volatile const void * volatile *)0x400091E0) // TCD Source Addr
  2177. #define DMA_TCD15_SOFF (*(volatile int16_t *)0x400091E4) // TCD Signed Source Address Offset
  2178. #define DMA_TCD15_ATTR (*(volatile uint16_t *)0x400091E6) // TCD Transfer Attributes
  2179. #define DMA_TCD15_NBYTES_MLNO (*(volatile uint32_t *)0x400091E8) // TCD Minor Byte Count
  2180. #define DMA_TCD15_NBYTES_MLOFFNO (*(volatile uint32_t *)0x400091E8) // TCD Signed Minor Loop Offset
  2181. #define DMA_TCD15_NBYTES_MLOFFYES (*(volatile uint32_t *)0x400091E8) // TCD Signed Minor Loop Offset
  2182. #define DMA_TCD15_SLAST (*(volatile int32_t *)0x400091EC) // TCD Last Source Addr Adj.
  2183. #define DMA_TCD15_DADDR (*(volatile void * volatile *)0x400091F0) // TCD Destination Address
  2184. #define DMA_TCD15_DOFF (*(volatile int16_t *)0x400091F4) // TCD Signed Dest Address Offset
  2185. #define DMA_TCD15_CITER_ELINKYES (*(volatile uint16_t *)0x400091F6) // TCD Current Minor Loop Link
  2186. #define DMA_TCD15_CITER_ELINKNO (*(volatile uint16_t *)0x400091F6) // ??
  2187. #define DMA_TCD15_DLASTSGA (*(volatile int32_t *)0x400091F8) // TCD Last Destination Addr Adj
  2188. #define DMA_TCD15_CSR (*(volatile uint16_t *)0x400091FC) // TCD Control and Status
  2189. #define DMA_TCD15_BITER_ELINKYES (*(volatile uint16_t *)0x400091FE) // TCD Beginning Minor Loop Link
  2190. #define DMA_TCD15_BITER_ELINKNO (*(volatile uint16_t *)0x400091FE) // TCD Beginning Minor Loop Link
  2191. #endif
  2192. #if DMA_NUM_CHANNELS >= 32
  2193. #define DMA_TCD16_SADDR (*(volatile const void * volatile *)0x40009200) // TCD Source Addr
  2194. #define DMA_TCD16_SOFF (*(volatile int16_t *)0x40009204) // TCD Signed Source Address Offset
  2195. #define DMA_TCD16_ATTR (*(volatile uint16_t *)0x40009206) // TCD Transfer Attributes
  2196. #define DMA_TCD16_NBYTES_MLNO (*(volatile uint32_t *)0x40009208) // TCD Minor Byte Count
  2197. #define DMA_TCD16_NBYTES_MLOFFNO (*(volatile uint32_t *)0x40009208) // TCD Signed Minor Loop Offset
  2198. #define DMA_TCD16_NBYTES_MLOFFYES (*(volatile uint32_t *)0x40009208) // TCD Signed Minor Loop Offset
  2199. #define DMA_TCD16_SLAST (*(volatile int32_t *)0x4000920C) // TCD Last Source Addr Adj.
  2200. #define DMA_TCD16_DADDR (*(volatile void * volatile *)0x40009210) // TCD Destination Address
  2201. #define DMA_TCD16_DOFF (*(volatile int16_t *)0x40009214) // TCD Signed Dest Address Offset
  2202. #define DMA_TCD16_CITER_ELINKYES (*(volatile uint16_t *)0x40009216) // TCD Current Minor Loop Link
  2203. #define DMA_TCD16_CITER_ELINKNO (*(volatile uint16_t *)0x40009216) // ??
  2204. #define DMA_TCD16_DLASTSGA (*(volatile int32_t *)0x40009218) // TCD Last Destination Addr Adj
  2205. #define DMA_TCD16_CSR (*(volatile uint16_t *)0x4000921C) // TCD Control and Status
  2206. #define DMA_TCD16_BITER_ELINKYES (*(volatile uint16_t *)0x4000921E) // TCD Beginning Minor Loop Link
  2207. #define DMA_TCD16_BITER_ELINKNO (*(volatile uint16_t *)0x4000921E) // TCD Beginning Minor Loop Link
  2208. #define DMA_TCD17_SADDR (*(volatile const void * volatile *)0x40009220) // TCD Source Addr
  2209. #define DMA_TCD17_SOFF (*(volatile int16_t *)0x40009224) // TCD Signed Source Address Offset
  2210. #define DMA_TCD17_ATTR (*(volatile uint16_t *)0x40009226) // TCD Transfer Attributes
  2211. #define DMA_TCD17_NBYTES_MLNO (*(volatile uint32_t *)0x40009228) // TCD Minor Byte Count
  2212. #define DMA_TCD17_NBYTES_MLOFFNO (*(volatile uint32_t *)0x40009228) // TCD Signed Minor Loop Offset
  2213. #define DMA_TCD17_NBYTES_MLOFFYES (*(volatile uint32_t *)0x40009228) // TCD Signed Minor Loop Offset
  2214. #define DMA_TCD17_SLAST (*(volatile int32_t *)0x4000922C) // TCD Last Source Addr Adj.
  2215. #define DMA_TCD17_DADDR (*(volatile void * volatile *)0x40009230) // TCD Destination Address
  2216. #define DMA_TCD17_DOFF (*(volatile int16_t *)0x40009234) // TCD Signed Dest Address Offset
  2217. #define DMA_TCD17_CITER_ELINKYES (*(volatile uint16_t *)0x40009236) // TCD Current Minor Loop Link
  2218. #define DMA_TCD17_CITER_ELINKNO (*(volatile uint16_t *)0x40009236) // ??
  2219. #define DMA_TCD17_DLASTSGA (*(volatile int32_t *)0x40009238) // TCD Last Destination Addr Adj
  2220. #define DMA_TCD17_CSR (*(volatile uint16_t *)0x4000923C) // TCD Control and Status
  2221. #define DMA_TCD17_BITER_ELINKYES (*(volatile uint16_t *)0x4000923E) // TCD Beginning Minor Loop Link
  2222. #define DMA_TCD17_BITER_ELINKNO (*(volatile uint16_t *)0x4000923E) // TCD Beginning Minor Loop Link
  2223. #define DMA_TCD18_SADDR (*(volatile const void * volatile *)0x40009240) // TCD Source Addr
  2224. #define DMA_TCD18_SOFF (*(volatile int16_t *)0x40009244) // TCD Signed Source Address Offset
  2225. #define DMA_TCD18_ATTR (*(volatile uint16_t *)0x40009246) // TCD Transfer Attributes
  2226. #define DMA_TCD18_NBYTES_MLNO (*(volatile uint32_t *)0x40009248) // TCD Minor Byte Count
  2227. #define DMA_TCD18_NBYTES_MLOFFNO (*(volatile uint32_t *)0x40009248) // TCD Signed Minor Loop Offset
  2228. #define DMA_TCD18_NBYTES_MLOFFYES (*(volatile uint32_t *)0x40009248) // TCD Signed Minor Loop Offset
  2229. #define DMA_TCD18_SLAST (*(volatile int32_t *)0x4000924C) // TCD Last Source Addr Adj.
  2230. #define DMA_TCD18_DADDR (*(volatile void * volatile *)0x40009250) // TCD Destination Address
  2231. #define DMA_TCD18_DOFF (*(volatile int16_t *)0x40009254) // TCD Signed Dest Address Offset
  2232. #define DMA_TCD18_CITER_ELINKYES (*(volatile uint16_t *)0x40009256) // TCD Current Minor Loop Link
  2233. #define DMA_TCD18_CITER_ELINKNO (*(volatile uint16_t *)0x40009256) // ??
  2234. #define DMA_TCD18_DLASTSGA (*(volatile int32_t *)0x40009258) // TCD Last Destination Addr Adj
  2235. #define DMA_TCD18_CSR (*(volatile uint16_t *)0x4000925C) // TCD Control and Status
  2236. #define DMA_TCD18_BITER_ELINKYES (*(volatile uint16_t *)0x4000925E) // TCD Beginning Minor Loop Link
  2237. #define DMA_TCD18_BITER_ELINKNO (*(volatile uint16_t *)0x4000925E) // TCD Beginning Minor Loop Link
  2238. #define DMA_TCD19_SADDR (*(volatile const void * volatile *)0x40009260) // TCD Source Addr
  2239. #define DMA_TCD19_SOFF (*(volatile int16_t *)0x40009264) // TCD Signed Source Address Offset
  2240. #define DMA_TCD19_ATTR (*(volatile uint16_t *)0x40009266) // TCD Transfer Attributes
  2241. #define DMA_TCD19_NBYTES_MLNO (*(volatile uint32_t *)0x40009268) // TCD Minor Byte Count
  2242. #define DMA_TCD19_NBYTES_MLOFFNO (*(volatile uint32_t *)0x40009268) // TCD Signed Minor Loop Offset
  2243. #define DMA_TCD19_NBYTES_MLOFFYES (*(volatile uint32_t *)0x40009268) // TCD Signed Minor Loop Offset
  2244. #define DMA_TCD19_SLAST (*(volatile int32_t *)0x4000926C) // TCD Last Source Addr Adj.
  2245. #define DMA_TCD19_DADDR (*(volatile void * volatile *)0x40009270) // TCD Destination Address
  2246. #define DMA_TCD19_DOFF (*(volatile int16_t *)0x40009274) // TCD Signed Dest Address Offset
  2247. #define DMA_TCD19_CITER_ELINKYES (*(volatile uint16_t *)0x40009276) // TCD Current Minor Loop Link
  2248. #define DMA_TCD19_CITER_ELINKNO (*(volatile uint16_t *)0x40009276) // ??
  2249. #define DMA_TCD19_DLASTSGA (*(volatile int32_t *)0x40009278) // TCD Last Destination Addr Adj
  2250. #define DMA_TCD19_CSR (*(volatile uint16_t *)0x4000927C) // TCD Control and Status
  2251. #define DMA_TCD19_BITER_ELINKYES (*(volatile uint16_t *)0x4000927E) // TCD Beginning Minor Loop Link
  2252. #define DMA_TCD19_BITER_ELINKNO (*(volatile uint16_t *)0x4000927E) // TCD Beginning Minor Loop Link
  2253. #define DMA_TCD20_SADDR (*(volatile const void * volatile *)0x40009280) // TCD Source Addr
  2254. #define DMA_TCD20_SOFF (*(volatile int16_t *)0x40009284) // TCD Signed Source Address Offset
  2255. #define DMA_TCD20_ATTR (*(volatile uint16_t *)0x40009286) // TCD Transfer Attributes
  2256. #define DMA_TCD20_NBYTES_MLNO (*(volatile uint32_t *)0x40009288) // TCD Minor Byte Count
  2257. #define DMA_TCD20_NBYTES_MLOFFNO (*(volatile uint32_t *)0x40009288) // TCD Signed Minor Loop Offset
  2258. #define DMA_TCD20_NBYTES_MLOFFYES (*(volatile uint32_t *)0x40009288) // TCD Signed Minor Loop Offset
  2259. #define DMA_TCD20_SLAST (*(volatile int32_t *)0x4000928C) // TCD Last Source Addr Adj.
  2260. #define DMA_TCD20_DADDR (*(volatile void * volatile *)0x40009290) // TCD Destination Address
  2261. #define DMA_TCD20_DOFF (*(volatile int16_t *)0x40009294) // TCD Signed Dest Address Offset
  2262. #define DMA_TCD20_CITER_ELINKYES (*(volatile uint16_t *)0x40009296) // TCD Current Minor Loop Link
  2263. #define DMA_TCD20_CITER_ELINKNO (*(volatile uint16_t *)0x40009296) // ??
  2264. #define DMA_TCD20_DLASTSGA (*(volatile int32_t *)0x40009298) // TCD Last Destination Addr Adj
  2265. #define DMA_TCD20_CSR (*(volatile uint16_t *)0x4000929C) // TCD Control and Status
  2266. #define DMA_TCD20_BITER_ELINKYES (*(volatile uint16_t *)0x4000929E) // TCD Beginning Minor Loop Link
  2267. #define DMA_TCD20_BITER_ELINKNO (*(volatile uint16_t *)0x4000929E) // TCD Beginning Minor Loop Link
  2268. #define DMA_TCD21_SADDR (*(volatile const void * volatile *)0x400092A0) // TCD Source Addr
  2269. #define DMA_TCD21_SOFF (*(volatile int16_t *)0x400092A4) // TCD Signed Source Address Offset
  2270. #define DMA_TCD21_ATTR (*(volatile uint16_t *)0x400092A6) // TCD Transfer Attributes
  2271. #define DMA_TCD21_NBYTES_MLNO (*(volatile uint32_t *)0x400092A8) // TCD Minor Byte Count
  2272. #define DMA_TCD21_NBYTES_MLOFFNO (*(volatile uint32_t *)0x400092A8) // TCD Signed Minor Loop Offset
  2273. #define DMA_TCD21_NBYTES_MLOFFYES (*(volatile uint32_t *)0x400092A8) // TCD Signed Minor Loop Offset
  2274. #define DMA_TCD21_SLAST (*(volatile int32_t *)0x400092AC) // TCD Last Source Addr Adj.
  2275. #define DMA_TCD21_DADDR (*(volatile void * volatile *)0x400092B0) // TCD Destination Address
  2276. #define DMA_TCD21_DOFF (*(volatile int16_t *)0x400092B4) // TCD Signed Dest Address Offset
  2277. #define DMA_TCD21_CITER_ELINKYES (*(volatile uint16_t *)0x400092B6) // TCD Current Minor Loop Link
  2278. #define DMA_TCD21_CITER_ELINKNO (*(volatile uint16_t *)0x400092B6) // ??
  2279. #define DMA_TCD21_DLASTSGA (*(volatile int32_t *)0x400092B8) // TCD Last Destination Addr Adj
  2280. #define DMA_TCD21_CSR (*(volatile uint16_t *)0x400092BC) // TCD Control and Status
  2281. #define DMA_TCD21_BITER_ELINKYES (*(volatile uint16_t *)0x400092BE) // TCD Beginning Minor Loop Link
  2282. #define DMA_TCD21_BITER_ELINKNO (*(volatile uint16_t *)0x400092BE) // TCD Beginning Minor Loop Link
  2283. #define DMA_TCD22_SADDR (*(volatile const void * volatile *)0x400092C0) // TCD Source Addr
  2284. #define DMA_TCD22_SOFF (*(volatile int16_t *)0x400092C4) // TCD Signed Source Address Offset
  2285. #define DMA_TCD22_ATTR (*(volatile uint16_t *)0x400092C6) // TCD Transfer Attributes
  2286. #define DMA_TCD22_NBYTES_MLNO (*(volatile uint32_t *)0x400092C8) // TCD Minor Byte Count
  2287. #define DMA_TCD22_NBYTES_MLOFFNO (*(volatile uint32_t *)0x400092C8) // TCD Signed Minor Loop Offset
  2288. #define DMA_TCD22_NBYTES_MLOFFYES (*(volatile uint32_t *)0x400092C8) // TCD Signed Minor Loop Offset
  2289. #define DMA_TCD22_SLAST (*(volatile int32_t *)0x400092CC) // TCD Last Source Addr Adj.
  2290. #define DMA_TCD22_DADDR (*(volatile void * volatile *)0x400092D0) // TCD Destination Address
  2291. #define DMA_TCD22_DOFF (*(volatile int16_t *)0x400092D4) // TCD Signed Dest Address Offset
  2292. #define DMA_TCD22_CITER_ELINKYES (*(volatile uint16_t *)0x400092D6) // TCD Current Minor Loop Link
  2293. #define DMA_TCD22_CITER_ELINKNO (*(volatile uint16_t *)0x400092D6) // ??
  2294. #define DMA_TCD22_DLASTSGA (*(volatile int32_t *)0x400092D8) // TCD Last Destination Addr Adj
  2295. #define DMA_TCD22_CSR (*(volatile uint16_t *)0x400092DC) // TCD Control and Status
  2296. #define DMA_TCD22_BITER_ELINKYES (*(volatile uint16_t *)0x400092DE) // TCD Beginning Minor Loop Link
  2297. #define DMA_TCD22_BITER_ELINKNO (*(volatile uint16_t *)0x400092DE) // TCD Beginning Minor Loop Link
  2298. #define DMA_TCD23_SADDR (*(volatile const void * volatile *)0x400092E0) // TCD Source Addr
  2299. #define DMA_TCD23_SOFF (*(volatile int16_t *)0x400092E4) // TCD Signed Source Address Offset
  2300. #define DMA_TCD23_ATTR (*(volatile uint16_t *)0x400092E6) // TCD Transfer Attributes
  2301. #define DMA_TCD23_NBYTES_MLNO (*(volatile uint32_t *)0x400092E8) // TCD Minor Byte Count
  2302. #define DMA_TCD23_NBYTES_MLOFFNO (*(volatile uint32_t *)0x400092E8) // TCD Signed Minor Loop Offset
  2303. #define DMA_TCD23_NBYTES_MLOFFYES (*(volatile uint32_t *)0x400092E8) // TCD Signed Minor Loop Offset
  2304. #define DMA_TCD23_SLAST (*(volatile int32_t *)0x400092EC) // TCD Last Source Addr Adj.
  2305. #define DMA_TCD23_DADDR (*(volatile void * volatile *)0x400092F0) // TCD Destination Address
  2306. #define DMA_TCD23_DOFF (*(volatile int16_t *)0x400092F4) // TCD Signed Dest Address Offset
  2307. #define DMA_TCD23_CITER_ELINKYES (*(volatile uint16_t *)0x400092F6) // TCD Current Minor Loop Link
  2308. #define DMA_TCD23_CITER_ELINKNO (*(volatile uint16_t *)0x400092F6) // ??
  2309. #define DMA_TCD23_DLASTSGA (*(volatile int32_t *)0x400092F8) // TCD Last Destination Addr Adj
  2310. #define DMA_TCD23_CSR (*(volatile uint16_t *)0x400092FC) // TCD Control and Status
  2311. #define DMA_TCD23_BITER_ELINKYES (*(volatile uint16_t *)0x400092FE) // TCD Beginning Minor Loop Link
  2312. #define DMA_TCD23_BITER_ELINKNO (*(volatile uint16_t *)0x400092FE) // TCD Beginning Minor Loop Link
  2313. #define DMA_TCD24_SADDR (*(volatile const void * volatile *)0x40009300) // TCD Source Addr
  2314. #define DMA_TCD24_SOFF (*(volatile int16_t *)0x40009304) // TCD Signed Source Address Offset
  2315. #define DMA_TCD24_ATTR (*(volatile uint16_t *)0x40009306) // TCD Transfer Attributes
  2316. #define DMA_TCD24_NBYTES_MLNO (*(volatile uint32_t *)0x40009308) // TCD Minor Byte Count
  2317. #define DMA_TCD24_NBYTES_MLOFFNO (*(volatile uint32_t *)0x40009308) // TCD Signed Minor Loop Offset
  2318. #define DMA_TCD24_NBYTES_MLOFFYES (*(volatile uint32_t *)0x40009308) // TCD Signed Minor Loop Offset
  2319. #define DMA_TCD24_SLAST (*(volatile int32_t *)0x4000930C) // TCD Last Source Addr Adj.
  2320. #define DMA_TCD24_DADDR (*(volatile void * volatile *)0x40009310) // TCD Destination Address
  2321. #define DMA_TCD24_DOFF (*(volatile int16_t *)0x40009314) // TCD Signed Dest Address Offset
  2322. #define DMA_TCD24_CITER_ELINKYES (*(volatile uint16_t *)0x40009316) // TCD Current Minor Loop Link
  2323. #define DMA_TCD24_CITER_ELINKNO (*(volatile uint16_t *)0x40009316) // ??
  2324. #define DMA_TCD24_DLASTSGA (*(volatile int32_t *)0x40009318) // TCD Last Destination Addr Adj
  2325. #define DMA_TCD24_CSR (*(volatile uint16_t *)0x4000931C) // TCD Control and Status
  2326. #define DMA_TCD24_BITER_ELINKYES (*(volatile uint16_t *)0x4000931E) // TCD Beginning Minor Loop Link
  2327. #define DMA_TCD24_BITER_ELINKNO (*(volatile uint16_t *)0x4000931E) // TCD Beginning Minor Loop Link
  2328. #define DMA_TCD25_SADDR (*(volatile const void * volatile *)0x40009320) // TCD Source Addr
  2329. #define DMA_TCD25_SOFF (*(volatile int16_t *)0x40009324) // TCD Signed Source Address Offset
  2330. #define DMA_TCD25_ATTR (*(volatile uint16_t *)0x40009326) // TCD Transfer Attributes
  2331. #define DMA_TCD25_NBYTES_MLNO (*(volatile uint32_t *)0x40009328) // TCD Minor Byte Count
  2332. #define DMA_TCD25_NBYTES_MLOFFNO (*(volatile uint32_t *)0x40009328) // TCD Signed Minor Loop Offset
  2333. #define DMA_TCD25_NBYTES_MLOFFYES (*(volatile uint32_t *)0x40009328) // TCD Signed Minor Loop Offset
  2334. #define DMA_TCD25_SLAST (*(volatile int32_t *)0x4000932C) // TCD Last Source Addr Adj.
  2335. #define DMA_TCD25_DADDR (*(volatile void * volatile *)0x40009330) // TCD Destination Address
  2336. #define DMA_TCD25_DOFF (*(volatile int16_t *)0x40009334) // TCD Signed Dest Address Offset
  2337. #define DMA_TCD25_CITER_ELINKYES (*(volatile uint16_t *)0x40009336) // TCD Current Minor Loop Link
  2338. #define DMA_TCD25_CITER_ELINKNO (*(volatile uint16_t *)0x40009336) // ??
  2339. #define DMA_TCD25_DLASTSGA (*(volatile int32_t *)0x40009338) // TCD Last Destination Addr Adj
  2340. #define DMA_TCD25_CSR (*(volatile uint16_t *)0x4000933C) // TCD Control and Status
  2341. #define DMA_TCD25_BITER_ELINKYES (*(volatile uint16_t *)0x4000933E) // TCD Beginning Minor Loop Link
  2342. #define DMA_TCD25_BITER_ELINKNO (*(volatile uint16_t *)0x4000933E) // TCD Beginning Minor Loop Link
  2343. #define DMA_TCD26_SADDR (*(volatile const void * volatile *)0x40009340) // TCD Source Addr
  2344. #define DMA_TCD26_SOFF (*(volatile int16_t *)0x40009344) // TCD Signed Source Address Offset
  2345. #define DMA_TCD26_ATTR (*(volatile uint16_t *)0x40009346) // TCD Transfer Attributes
  2346. #define DMA_TCD26_NBYTES_MLNO (*(volatile uint32_t *)0x40009348) // TCD Minor Byte Count
  2347. #define DMA_TCD26_NBYTES_MLOFFNO (*(volatile uint32_t *)0x40009348) // TCD Signed Minor Loop Offset
  2348. #define DMA_TCD26_NBYTES_MLOFFYES (*(volatile uint32_t *)0x40009348) // TCD Signed Minor Loop Offset
  2349. #define DMA_TCD26_SLAST (*(volatile int32_t *)0x4000934C) // TCD Last Source Addr Adj.
  2350. #define DMA_TCD26_DADDR (*(volatile void * volatile *)0x40009350) // TCD Destination Address
  2351. #define DMA_TCD26_DOFF (*(volatile int16_t *)0x40009354) // TCD Signed Dest Address Offset
  2352. #define DMA_TCD26_CITER_ELINKYES (*(volatile uint16_t *)0x40009356) // TCD Current Minor Loop Link
  2353. #define DMA_TCD26_CITER_ELINKNO (*(volatile uint16_t *)0x40009356) // ??
  2354. #define DMA_TCD26_DLASTSGA (*(volatile int32_t *)0x40009358) // TCD Last Destination Addr Adj
  2355. #define DMA_TCD26_CSR (*(volatile uint16_t *)0x4000935C) // TCD Control and Status
  2356. #define DMA_TCD26_BITER_ELINKYES (*(volatile uint16_t *)0x4000935E) // TCD Beginning Minor Loop Link
  2357. #define DMA_TCD26_BITER_ELINKNO (*(volatile uint16_t *)0x4000935E) // TCD Beginning Minor Loop Link
  2358. #define DMA_TCD27_SADDR (*(volatile const void * volatile *)0x40009360) // TCD Source Addr
  2359. #define DMA_TCD27_SOFF (*(volatile int16_t *)0x40009364) // TCD Signed Source Address Offset
  2360. #define DMA_TCD27_ATTR (*(volatile uint16_t *)0x40009366) // TCD Transfer Attributes
  2361. #define DMA_TCD27_NBYTES_MLNO (*(volatile uint32_t *)0x40009368) // TCD Minor Byte Count
  2362. #define DMA_TCD27_NBYTES_MLOFFNO (*(volatile uint32_t *)0x40009368) // TCD Signed Minor Loop Offset
  2363. #define DMA_TCD27_NBYTES_MLOFFYES (*(volatile uint32_t *)0x40009368) // TCD Signed Minor Loop Offset
  2364. #define DMA_TCD27_SLAST (*(volatile int32_t *)0x4000936C) // TCD Last Source Addr Adj.
  2365. #define DMA_TCD27_DADDR (*(volatile void * volatile *)0x40009370) // TCD Destination Address
  2366. #define DMA_TCD27_DOFF (*(volatile int16_t *)0x40009374) // TCD Signed Dest Address Offset
  2367. #define DMA_TCD27_CITER_ELINKYES (*(volatile uint16_t *)0x40009376) // TCD Current Minor Loop Link
  2368. #define DMA_TCD27_CITER_ELINKNO (*(volatile uint16_t *)0x40009376) // ??
  2369. #define DMA_TCD27_DLASTSGA (*(volatile int32_t *)0x40009378) // TCD Last Destination Addr Adj
  2370. #define DMA_TCD27_CSR (*(volatile uint16_t *)0x4000937C) // TCD Control and Status
  2371. #define DMA_TCD27_BITER_ELINKYES (*(volatile uint16_t *)0x4000937E) // TCD Beginning Minor Loop Link
  2372. #define DMA_TCD27_BITER_ELINKNO (*(volatile uint16_t *)0x4000937E) // TCD Beginning Minor Loop Link
  2373. #define DMA_TCD28_SADDR (*(volatile const void * volatile *)0x40009380) // TCD Source Addr
  2374. #define DMA_TCD28_SOFF (*(volatile int16_t *)0x40009384) // TCD Signed Source Address Offset
  2375. #define DMA_TCD28_ATTR (*(volatile uint16_t *)0x40009386) // TCD Transfer Attributes
  2376. #define DMA_TCD28_NBYTES_MLNO (*(volatile uint32_t *)0x40009388) // TCD Minor Byte Count
  2377. #define DMA_TCD28_NBYTES_MLOFFNO (*(volatile uint32_t *)0x40009388) // TCD Signed Minor Loop Offset
  2378. #define DMA_TCD28_NBYTES_MLOFFYES (*(volatile uint32_t *)0x40009388) // TCD Signed Minor Loop Offset
  2379. #define DMA_TCD28_SLAST (*(volatile int32_t *)0x4000938C) // TCD Last Source Addr Adj.
  2380. #define DMA_TCD28_DADDR (*(volatile void * volatile *)0x40009390) // TCD Destination Address
  2381. #define DMA_TCD28_DOFF (*(volatile int16_t *)0x40009394) // TCD Signed Dest Address Offset
  2382. #define DMA_TCD28_CITER_ELINKYES (*(volatile uint16_t *)0x40009396) // TCD Current Minor Loop Link
  2383. #define DMA_TCD28_CITER_ELINKNO (*(volatile uint16_t *)0x40009396) // ??
  2384. #define DMA_TCD28_DLASTSGA (*(volatile int32_t *)0x40009398) // TCD Last Destination Addr Adj
  2385. #define DMA_TCD28_CSR (*(volatile uint16_t *)0x4000939C) // TCD Control and Status
  2386. #define DMA_TCD28_BITER_ELINKYES (*(volatile uint16_t *)0x4000939E) // TCD Beginning Minor Loop Link
  2387. #define DMA_TCD28_BITER_ELINKNO (*(volatile uint16_t *)0x4000939E) // TCD Beginning Minor Loop Link
  2388. #define DMA_TCD29_SADDR (*(volatile const void * volatile *)0x400093A0) // TCD Source Addr
  2389. #define DMA_TCD29_SOFF (*(volatile int16_t *)0x400093A4) // TCD Signed Source Address Offset
  2390. #define DMA_TCD29_ATTR (*(volatile uint16_t *)0x400093A6) // TCD Transfer Attributes
  2391. #define DMA_TCD29_NBYTES_MLNO (*(volatile uint32_t *)0x400093A8) // TCD Minor Byte Count
  2392. #define DMA_TCD29_NBYTES_MLOFFNO (*(volatile uint32_t *)0x400093A8) // TCD Signed Minor Loop Offset
  2393. #define DMA_TCD29_NBYTES_MLOFFYES (*(volatile uint32_t *)0x400093A8) // TCD Signed Minor Loop Offset
  2394. #define DMA_TCD29_SLAST (*(volatile int32_t *)0x400093AC) // TCD Last Source Addr Adj.
  2395. #define DMA_TCD29_DADDR (*(volatile void * volatile *)0x400093B0) // TCD Destination Address
  2396. #define DMA_TCD29_DOFF (*(volatile int16_t *)0x400093B4) // TCD Signed Dest Address Offset
  2397. #define DMA_TCD29_CITER_ELINKYES (*(volatile uint16_t *)0x400093B6) // TCD Current Minor Loop Link
  2398. #define DMA_TCD29_CITER_ELINKNO (*(volatile uint16_t *)0x400093B6) // ??
  2399. #define DMA_TCD29_DLASTSGA (*(volatile int32_t *)0x400093B8) // TCD Last Destination Addr Adj
  2400. #define DMA_TCD29_CSR (*(volatile uint16_t *)0x400093BC) // TCD Control and Status
  2401. #define DMA_TCD29_BITER_ELINKYES (*(volatile uint16_t *)0x400093BE) // TCD Beginning Minor Loop Link
  2402. #define DMA_TCD29_BITER_ELINKNO (*(volatile uint16_t *)0x400093BE) // TCD Beginning Minor Loop Link
  2403. #define DMA_TCD30_SADDR (*(volatile const void * volatile *)0x400093C0) // TCD Source Addr
  2404. #define DMA_TCD30_SOFF (*(volatile int16_t *)0x400093C4) // TCD Signed Source Address Offset
  2405. #define DMA_TCD30_ATTR (*(volatile uint16_t *)0x400093C6) // TCD Transfer Attributes
  2406. #define DMA_TCD30_NBYTES_MLNO (*(volatile uint32_t *)0x400093C8) // TCD Minor Byte Count
  2407. #define DMA_TCD30_NBYTES_MLOFFNO (*(volatile uint32_t *)0x400093C8) // TCD Signed Minor Loop Offset
  2408. #define DMA_TCD30_NBYTES_MLOFFYES (*(volatile uint32_t *)0x400093C8) // TCD Signed Minor Loop Offset
  2409. #define DMA_TCD30_SLAST (*(volatile int32_t *)0x400093CC) // TCD Last Source Addr Adj.
  2410. #define DMA_TCD30_DADDR (*(volatile void * volatile *)0x400093D0) // TCD Destination Address
  2411. #define DMA_TCD30_DOFF (*(volatile int16_t *)0x400093D4) // TCD Signed Dest Address Offset
  2412. #define DMA_TCD30_CITER_ELINKYES (*(volatile uint16_t *)0x400093D6) // TCD Current Minor Loop Link
  2413. #define DMA_TCD30_CITER_ELINKNO (*(volatile uint16_t *)0x400093D6) // ??
  2414. #define DMA_TCD30_DLASTSGA (*(volatile int32_t *)0x400093D8) // TCD Last Destination Addr Adj
  2415. #define DMA_TCD30_CSR (*(volatile uint16_t *)0x400093DC) // TCD Control and Status
  2416. #define DMA_TCD30_BITER_ELINKYES (*(volatile uint16_t *)0x400093DE) // TCD Beginning Minor Loop Link
  2417. #define DMA_TCD30_BITER_ELINKNO (*(volatile uint16_t *)0x400093DE) // TCD Beginning Minor Loop Link
  2418. #define DMA_TCD31_SADDR (*(volatile const void * volatile *)0x400093E0) // TCD Source Addr
  2419. #define DMA_TCD31_SOFF (*(volatile int16_t *)0x400093E4) // TCD Signed Source Address Offset
  2420. #define DMA_TCD31_ATTR (*(volatile uint16_t *)0x400093E6) // TCD Transfer Attributes
  2421. #define DMA_TCD31_NBYTES_MLNO (*(volatile uint32_t *)0x400093E8) // TCD Minor Byte Count
  2422. #define DMA_TCD31_NBYTES_MLOFFNO (*(volatile uint32_t *)0x400093E8) // TCD Signed Minor Loop Offset
  2423. #define DMA_TCD31_NBYTES_MLOFFYES (*(volatile uint32_t *)0x400093E8) // TCD Signed Minor Loop Offset
  2424. #define DMA_TCD31_SLAST (*(volatile int32_t *)0x400093EC) // TCD Last Source Addr Adj.
  2425. #define DMA_TCD31_DADDR (*(volatile void * volatile *)0x400093F0) // TCD Destination Address
  2426. #define DMA_TCD31_DOFF (*(volatile int16_t *)0x400093F4) // TCD Signed Dest Address Offset
  2427. #define DMA_TCD31_CITER_ELINKYES (*(volatile uint16_t *)0x400093F6) // TCD Current Minor Loop Link
  2428. #define DMA_TCD31_CITER_ELINKNO (*(volatile uint16_t *)0x400093F6) // ??
  2429. #define DMA_TCD31_DLASTSGA (*(volatile int32_t *)0x400093F8) // TCD Last Destination Addr Adj
  2430. #define DMA_TCD31_CSR (*(volatile uint16_t *)0x400093FC) // TCD Control and Status
  2431. #define DMA_TCD31_BITER_ELINKYES (*(volatile uint16_t *)0x400093FE) // TCD Beginning Minor Loop Link
  2432. #define DMA_TCD31_BITER_ELINKNO (*(volatile uint16_t *)0x400093FE) // TCD Beginning Minor Loop Link
  2433. #endif
  2434. #elif defined(KINETISL)
  2435. #define DMA_SAR0 (*(volatile const void * volatile *)0x40008100) // Source Address
  2436. #define DMA_DAR0 (*(volatile void * volatile *)0x40008104) // Destination Address
  2437. #define DMA_DSR_BCR0 (*(volatile uint32_t *)0x40008108) // Status / Byte Count
  2438. #define DMA_DCR0 (*(volatile uint32_t *)0x4000810C) // Control
  2439. #define DMA_SAR1 (*(volatile const void * volatile *)0x40008110) // Source Address
  2440. #define DMA_DAR1 (*(volatile void * volatile *)0x40008114) // Destination Address
  2441. #define DMA_DSR_BCR1 (*(volatile uint32_t *)0x40008118) // Status / Byte Count
  2442. #define DMA_DCR1 (*(volatile uint32_t *)0x4000811C) // Control
  2443. #define DMA_SAR2 (*(volatile const void * volatile *)0x40008120) // Source Address
  2444. #define DMA_DAR2 (*(volatile void * volatile *)0x40008124) // Destination Address
  2445. #define DMA_DSR_BCR2 (*(volatile uint32_t *)0x40008128) // Status / Byte Count
  2446. #define DMA_DCR2 (*(volatile uint32_t *)0x4000812C) // Control
  2447. #define DMA_SAR3 (*(volatile const void * volatile *)0x40008130) // Source Address
  2448. #define DMA_DAR3 (*(volatile void * volatile *)0x40008134) // Destination Address
  2449. #define DMA_DSR_BCR3 (*(volatile uint32_t *)0x40008138) // Status / Byte Count
  2450. #define DMA_DCR3 (*(volatile uint32_t *)0x4000813C) // Control
  2451. #define DMA_DSR_BCR_CE ((uint32_t)0x40000000) // Configuration Error
  2452. #define DMA_DSR_BCR_BES ((uint32_t)0x20000000) // Bus Error on Source
  2453. #define DMA_DSR_BCR_BED ((uint32_t)0x10000000) // Bus Error on Destination
  2454. #define DMA_DSR_BCR_REQ ((uint32_t)0x04000000) // Request
  2455. #define DMA_DSR_BCR_BSY ((uint32_t)0x02000000) // Busy
  2456. #define DMA_DSR_BCR_DONE ((uint32_t)0x01000000) // Transactions Done
  2457. #define DMA_DSR_BCR_BCR(n) ((n) & 0x00FFFFFF) // Byte Count Remaining
  2458. #define DMA_DCR_EINT ((uint32_t)0x80000000) // Enable Interrupt on Completion
  2459. #define DMA_DCR_ERQ ((uint32_t)0x40000000) // Enable Peripheral Request
  2460. #define DMA_DCR_CS ((uint32_t)0x20000000) // Cycle Steal
  2461. #define DMA_DCR_AA ((uint32_t)0x10000000) // Auto-align
  2462. #define DMA_DCR_EADREQ ((uint32_t)0x00800000) // Enable asynchronous DMA requests
  2463. #define DMA_DCR_SINC ((uint32_t)0x00400000) // Source Increment
  2464. #define DMA_DCR_SSIZE(n) (((n) & 3) << 20) // Source Size, 0=32, 1=8, 2=16
  2465. #define DMA_DCR_DINC ((uint32_t)0x00080000) // Destination Increment
  2466. #define DMA_DCR_DSIZE(n) (((n) & 3) << 17) // Dest Size, 0=32, 1=8, 2=16
  2467. #define DMA_DCR_START ((uint32_t)0x00010000) // Start Transfer
  2468. #define DMA_DCR_SMOD(n) (((n) & 15) << 12) // Source Address Modulo
  2469. #define DMA_DCR_DMOD(n) (((n) & 15) << 8) // Destination Address Modulo
  2470. #define DMA_DCR_D_REQ ((uint32_t)0x00000080) // Disable Request
  2471. #define DMA_DCR_LINKCC(n) (((n) & 3) << 4) // Link Channel Control
  2472. #define DMA_DCR_LCH1(n) (((n) & 3) << 2) // Link Channel 1
  2473. #define DMA_DCR_LCH2(n) (((n) & 3) << 0) // Link Channel 2
  2474. #endif
  2475. // External Watchdog Monitor (EWM)
  2476. #define EWM_CTRL (*(volatile uint8_t *)0x40061000) // Control Register
  2477. #define EWM_SERV (*(volatile uint8_t *)0x40061001) // Service Register
  2478. #define EWM_CMPL (*(volatile uint8_t *)0x40061002) // Compare Low Register
  2479. #define EWM_CMPH (*(volatile uint8_t *)0x40061003) // Compare High Register
  2480. // Watchdog Timer (WDOG)
  2481. #define WDOG_STCTRLH (*(volatile uint16_t *)0x40052000) // Watchdog Status and Control Register High
  2482. #define WDOG_STCTRLH_DISTESTWDOG ((uint16_t)0x4000) // Allows the WDOG's functional test mode to be disabled permanently.
  2483. #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.
  2484. #define WDOG_STCTRLH_TESTSEL ((uint16_t)0x0800)
  2485. #define WDOG_STCTRLH_TESTWDOG ((uint16_t)0x0400)
  2486. #define WDOG_STCTRLH_WAITEN ((uint16_t)0x0080)
  2487. #define WDOG_STCTRLH_STOPEN ((uint16_t)0x0040)
  2488. #define WDOG_STCTRLH_DBGEN ((uint16_t)0x0020)
  2489. #define WDOG_STCTRLH_ALLOWUPDATE ((uint16_t)0x0010)
  2490. #define WDOG_STCTRLH_WINEN ((uint16_t)0x0008)
  2491. #define WDOG_STCTRLH_IRQRSTEN ((uint16_t)0x0004)
  2492. #define WDOG_STCTRLH_CLKSRC ((uint16_t)0x0002)
  2493. #define WDOG_STCTRLH_WDOGEN ((uint16_t)0x0001)
  2494. #define WDOG_STCTRLL (*(volatile uint16_t *)0x40052002) // Watchdog Status and Control Register Low
  2495. #define WDOG_TOVALH (*(volatile uint16_t *)0x40052004) // Watchdog Time-out Value Register High
  2496. #define WDOG_TOVALL (*(volatile uint16_t *)0x40052006) // Watchdog Time-out Value Register Low
  2497. #define WDOG_WINH (*(volatile uint16_t *)0x40052008) // Watchdog Window Register High
  2498. #define WDOG_WINL (*(volatile uint16_t *)0x4005200A) // Watchdog Window Register Low
  2499. #define WDOG_REFRESH (*(volatile uint16_t *)0x4005200C) // Watchdog Refresh register
  2500. #define WDOG_UNLOCK (*(volatile uint16_t *)0x4005200E) // Watchdog Unlock register
  2501. #define WDOG_UNLOCK_SEQ1 ((uint16_t)0xC520)
  2502. #define WDOG_UNLOCK_SEQ2 ((uint16_t)0xD928)
  2503. #define WDOG_TMROUTH (*(volatile uint16_t *)0x40052010) // Watchdog Timer Output Register High
  2504. #define WDOG_TMROUTL (*(volatile uint16_t *)0x40052012) // Watchdog Timer Output Register Low
  2505. #define WDOG_RSTCNT (*(volatile uint16_t *)0x40052014) // Watchdog Reset Count register
  2506. #define WDOG_PRESC (*(volatile uint16_t *)0x40052016) // Watchdog Prescaler register
  2507. // Multipurpose Clock Generator (MCG)
  2508. typedef struct {
  2509. volatile uint8_t C1;
  2510. volatile uint8_t C2;
  2511. volatile uint8_t C3;
  2512. volatile uint8_t C4;
  2513. volatile uint8_t C5;
  2514. volatile uint8_t C6;
  2515. volatile uint8_t S;
  2516. volatile uint8_t unused1;
  2517. volatile uint8_t SC;
  2518. volatile uint8_t unused2;
  2519. volatile uint8_t ATCVH;
  2520. volatile uint8_t ATCVL;
  2521. volatile uint8_t C7;
  2522. volatile uint8_t C8;
  2523. volatile uint8_t C9;
  2524. volatile uint8_t unused3;
  2525. volatile uint8_t C11;
  2526. volatile uint8_t C12;
  2527. volatile uint8_t S2;
  2528. volatile uint8_t T3;
  2529. } KINETIS_MCG_t;
  2530. #define KINETIS_MCG (*(KINETIS_MCG_t *)0x40064000)
  2531. #define MCG_C1 (KINETIS_MCG.C1) // 40064000 MCG Control 1 Register
  2532. #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.
  2533. #define MCG_C1_IRCLKEN (uint8_t)0x02 // Internal Reference Clock Enable, Enables the internal reference clock for use as MCGIRCLK.
  2534. #define MCG_C1_IREFS (uint8_t)0x04 // Internal Reference Select, Selects the reference clock source for the FLL.
  2535. #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
  2536. #define MCG_C1_CLKS(n) (uint8_t)(((n) & 0x03) << 6) // Clock Source Select, Selects the clock source for MCGOUTCLK
  2537. #define MCG_C2 (KINETIS_MCG.C2) // 40064001 MCG Control 2 Register
  2538. #define MCG_C2_IRCS (uint8_t)0x01 // Internal Reference Clock Select, Selects between the fast or slow internal reference clock source.
  2539. #define MCG_C2_LP (uint8_t)0x02 // Low Power Select, Controls whether the FLL or PLL is disabled in BLPI and BLPE modes.
  2540. #define MCG_C2_EREFS (uint8_t)0x04 // External Reference Select, Selects the source for the external reference clock.
  2541. #define MCG_C2_HGO0 (uint8_t)0x08 // High Gain Oscillator Select, Controls the crystal oscillator mode of operation
  2542. #define MCG_C2_RANGE0(n) (uint8_t)(((n) & 0x03) << 4) // Frequency Range Select, Selects the frequency range for the crystal oscillator
  2543. #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
  2544. #define MCG_C3 (KINETIS_MCG.C3) // 40064002 MCG Control 3 Register
  2545. #define MCG_C3_SCTRIM(n) (uint8_t)(n) // Slow Internal Reference Clock Trim Setting
  2546. #define MCG_C4 (KINETIS_MCG.C4) // 40064003 MCG Control 4 Register
  2547. #define MCG_C4_SCFTRIM (uint8_t)0x01 // Slow Internal Reference Clock Fine Trim
  2548. #define MCG_C4_FCTRIM(n) (uint8_t)(((n) & 0x0F) << 1) // Fast Internal Reference Clock Trim Setting
  2549. #define MCG_C4_DRST_DRS(n) (uint8_t)(((n) & 0x03) << 5) // DCO Range Select
  2550. #define MCG_C4_DMX32 (uint8_t)0x80 // DCO Maximum Frequency with 32.768 kHz Reference, controls whether the DCO frequency range is narrowed
  2551. #define MCG_C5 (KINETIS_MCG.C5) // 40064004 MCG Control 5 Register
  2552. #define MCG_C5_PRDIV0(n) (uint8_t)((n) & 0x1F) // PLL External Reference Divider
  2553. #define MCG_C5_PLLSTEN0 (uint8_t)0x20 // PLL Stop Enable
  2554. #define MCG_C5_PLLCLKEN0 (uint8_t)0x40 // PLL Clock Enable
  2555. #define MCG_C6 (KINETIS_MCG.C6) // 40064005 MCG Control 6 Register
  2556. #define MCG_C6_VDIV0(n) (uint8_t)((n) & 0x1F) // VCO 0 Divider
  2557. #define MCG_C6_CME0 (uint8_t)0x20 // Clock Monitor Enable
  2558. #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.
  2559. #define MCG_C6_LOLIE0 (uint8_t)0x80 // Loss of Lock Interrrupt Enable
  2560. #define MCG_S (KINETIS_MCG.S) // 40064006 MCG Status Register
  2561. #define MCG_S_IRCST (uint8_t)0x01 // Internal Reference Clock Status
  2562. #define MCG_S_OSCINIT0 (uint8_t)0x02 // OSC Initialization, resets to 0, is set to 1 after the initialization cycles of the crystal oscillator
  2563. #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
  2564. #define MCG_S_CLKST_MASK (uint8_t)0x0C
  2565. #define MCG_S_IREFST (uint8_t)0x10 // Internal Reference Status
  2566. #define MCG_S_PLLST (uint8_t)0x20 // PLL Select Status
  2567. #define MCG_S_LOCK0 (uint8_t)0x40 // Lock Status, 0=PLL Unlocked, 1=PLL Locked
  2568. #define MCG_S_LOLS0 (uint8_t)0x80 // Loss of Lock Status
  2569. #define MCG_SC (KINETIS_MCG.SC) // 40064008 MCG Status and Control Register
  2570. #define MCG_SC_LOCS0 (uint8_t)0x01 // OSC0 Loss of Clock Status
  2571. #define MCG_SC_FCRDIV(n) (uint8_t)(((n) & 0x07) << 1) // Fast Clock Internal Reference Divider
  2572. #define MCG_SC_FLTPRSRV (uint8_t)0x10 // FLL Filter Preserve Enable
  2573. #define MCG_SC_ATMF (uint8_t)0x20 // Automatic Trim Machine Fail Flag
  2574. #define MCG_SC_ATMS (uint8_t)0x40 // Automatic Trim Machine Select
  2575. #define MCG_SC_ATME (uint8_t)0x80 // Automatic Trim Machine Enable
  2576. #define MCG_ATCVH (KINETIS_MCG.ATCVH) // 4006400A MCG Auto Trim Compare Value High Register
  2577. #define MCG_ATCVL (KINETIS_MCG.ATCVL) // 4006400B MCG Auto Trim Compare Value Low Register
  2578. #define MCG_C7 (KINETIS_MCG.C7) // 4006400C MCG Control 7 Register
  2579. #define MCG_C8 (KINETIS_MCG.C8) // 4006400D MCG Control 8 Register
  2580. #define MCG_C9 (KINETIS_MCG.C9) // 4006400E MCG Control 9 Register
  2581. #define MCG_C11 (KINETIS_MCG.C11) // 40064010 MCG Control 11 Register
  2582. #define MCG_C12 (KINETIS_MCG.C12) // 40064011 MCG Control 12 Register
  2583. #define MCG_S2 (KINETIS_MCG.S2) // 40064012 MCG Status 2 Register
  2584. #define MCG_T3 (KINETIS_MCG.T3) // 40064013 MCG Test 3 Register
  2585. // Oscillator (OSC)
  2586. #define OSC0_CR (*(volatile uint8_t *)0x40065000) // OSC Control Register
  2587. #define OSC_SC16P ((uint8_t)0x01) // Oscillator 16 pF Capacitor Load Configure
  2588. #define OSC_SC8P ((uint8_t)0x02) // Oscillator 8 pF Capacitor Load Configure
  2589. #define OSC_SC4P ((uint8_t)0x04) // Oscillator 4 pF Capacitor Load Configure
  2590. #define OSC_SC2P ((uint8_t)0x08) // Oscillator 2 pF Capacitor Load Configure
  2591. #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.
  2592. #define OSC_ERCLKEN ((uint8_t)0x80) // External Reference Enable, Enables external reference clock (OSCERCLK).
  2593. #define OSC0_OSC_DIV (*(volatile uint8_t *)0x40065002) // Clock divider register
  2594. // Local Memory Controller
  2595. #define LMEM_PCCCR (*(volatile uint32_t *)0xE0082000) // Cache control register
  2596. #define LMEM_PCCLCR (*(volatile uint32_t *)0xE0082004) // Cache line control register
  2597. #define LMEM_PCCSAR (*(volatile uint32_t *)0xE0082008) // Cache search address register
  2598. #define LMEM_PCCCVR (*(volatile uint32_t *)0xE008200C) // Cache read/write value register
  2599. #define LMEM_PCCRMR (*(volatile uint32_t *)0xE0082020) // Cache regions mode register
  2600. // Flash Memory Controller (FMC)
  2601. #define FMC_PFAPR (*(volatile uint32_t *)0x4001F000) // Flash Access Protection
  2602. #define FMC_PFB0CR (*(volatile uint32_t *)0x4001F004) // Flash Control
  2603. #define FMC_TAGVDW0S0 (*(volatile uint32_t *)0x4001F100) // Cache Tag Storage
  2604. #define FMC_TAGVDW0S1 (*(volatile uint32_t *)0x4001F104) // Cache Tag Storage
  2605. #define FMC_TAGVDW1S0 (*(volatile uint32_t *)0x4001F108) // Cache Tag Storage
  2606. #define FMC_TAGVDW1S1 (*(volatile uint32_t *)0x4001F10C) // Cache Tag Storage
  2607. #define FMC_TAGVDW2S0 (*(volatile uint32_t *)0x4001F110) // Cache Tag Storage
  2608. #define FMC_TAGVDW2S1 (*(volatile uint32_t *)0x4001F114) // Cache Tag Storage
  2609. #define FMC_TAGVDW3S0 (*(volatile uint32_t *)0x4001F118) // Cache Tag Storage
  2610. #define FMC_TAGVDW3S1 (*(volatile uint32_t *)0x4001F11C) // Cache Tag Storage
  2611. #define FMC_DATAW0S0 (*(volatile uint32_t *)0x4001F200) // Cache Data Storage
  2612. #define FMC_DATAW0S1 (*(volatile uint32_t *)0x4001F204) // Cache Data Storage
  2613. #define FMC_DATAW1S0 (*(volatile uint32_t *)0x4001F208) // Cache Data Storage
  2614. #define FMC_DATAW1S1 (*(volatile uint32_t *)0x4001F20C) // Cache Data Storage
  2615. #define FMC_DATAW2S0 (*(volatile uint32_t *)0x4001F210) // Cache Data Storage
  2616. #define FMC_DATAW2S1 (*(volatile uint32_t *)0x4001F214) // Cache Data Storage
  2617. #define FMC_DATAW3S0 (*(volatile uint32_t *)0x4001F218) // Cache Data Storage
  2618. #define FMC_DATAW3S1 (*(volatile uint32_t *)0x4001F21C) // Cache Data Storage
  2619. // Flash Memory Module (FTFL)
  2620. #define FTFL_FSTAT (*(volatile uint8_t *)0x40020000) // Flash Status Register
  2621. #define FTFL_FSTAT_CCIF ((uint8_t)0x80) // Command Complete Interrupt Flag
  2622. #define FTFL_FSTAT_RDCOLERR ((uint8_t)0x40) // Flash Read Collision Error Flag
  2623. #define FTFL_FSTAT_ACCERR ((uint8_t)0x20) // Flash Access Error Flag
  2624. #define FTFL_FSTAT_FPVIOL ((uint8_t)0x10) // Flash Protection Violation Flag
  2625. #define FTFL_FSTAT_MGSTAT0 ((uint8_t)0x01) // Memory Controller Command Completion Status Flag
  2626. #define FTFL_FCNFG (*(volatile uint8_t *)0x40020001) // Flash Configuration Register
  2627. #define FTFL_FCNFG_CCIE ((uint8_t)0x80) // Command Complete Interrupt Enable
  2628. #define FTFL_FCNFG_RDCOLLIE ((uint8_t)0x40) // Read Collision Error Interrupt Enable
  2629. #define FTFL_FCNFG_ERSAREQ ((uint8_t)0x20) // Erase All Request
  2630. #define FTFL_FCNFG_ERSSUSP ((uint8_t)0x10) // Erase Suspend
  2631. #define FTFL_FCNFG_PFLSH ((uint8_t)0x04) // Flash memory configuration
  2632. #define FTFL_FCNFG_RAMRDY ((uint8_t)0x02) // RAM Ready
  2633. #define FTFL_FCNFG_EEERDY ((uint8_t)0x01) // EEPROM Ready
  2634. #define FTFL_FSEC (*(const uint8_t *)0x40020002) // Flash Security Register
  2635. #define FTFL_FOPT (*(const uint8_t *)0x40020003) // Flash Option Register
  2636. #define FTFL_FCCOB3 (*(volatile uint8_t *)0x40020004) // Flash Common Command Object Registers
  2637. #define FTFL_FCCOB2 (*(volatile uint8_t *)0x40020005)
  2638. #define FTFL_FCCOB1 (*(volatile uint8_t *)0x40020006)
  2639. #define FTFL_FCCOB0 (*(volatile uint8_t *)0x40020007)
  2640. #define FTFL_FCCOB7 (*(volatile uint8_t *)0x40020008)
  2641. #define FTFL_FCCOB6 (*(volatile uint8_t *)0x40020009)
  2642. #define FTFL_FCCOB5 (*(volatile uint8_t *)0x4002000A)
  2643. #define FTFL_FCCOB4 (*(volatile uint8_t *)0x4002000B)
  2644. #define FTFL_FCCOBB (*(volatile uint8_t *)0x4002000C)
  2645. #define FTFL_FCCOBA (*(volatile uint8_t *)0x4002000D)
  2646. #define FTFL_FCCOB9 (*(volatile uint8_t *)0x4002000E)
  2647. #define FTFL_FCCOB8 (*(volatile uint8_t *)0x4002000F)
  2648. #define FTFL_FPROT3 (*(volatile uint8_t *)0x40020010) // Program Flash Protection Registers
  2649. #define FTFL_FPROT2 (*(volatile uint8_t *)0x40020011) // Program Flash Protection Registers
  2650. #define FTFL_FPROT1 (*(volatile uint8_t *)0x40020012) // Program Flash Protection Registers
  2651. #define FTFL_FPROT0 (*(volatile uint8_t *)0x40020013) // Program Flash Protection Registers
  2652. #define FTFL_FEPROT (*(volatile uint8_t *)0x40020016) // EEPROM Protection Register
  2653. #define FTFL_FDPROT (*(volatile uint8_t *)0x40020017) // Data Flash Protection Register
  2654. // Cyclic Redundancy Check (CRC)
  2655. #define CRC_CRC (*(volatile uint32_t *)0x40032000) // CRC Data register
  2656. #define CRC_GPOLY (*(volatile uint32_t *)0x40032004) // CRC Polynomial register
  2657. #define CRC_CTRL (*(volatile uint32_t *)0x40032008) // CRC Control register
  2658. // Cryptographic Acceleration Unit (CAU)
  2659. #define CAU_CASR (*(volatile uint32_t *)0xE0081000) // Status Register
  2660. #define CAU_CAA (*(volatile uint32_t *)0xE0081001) // Accumulator
  2661. #define CAU_CA0 (*(volatile uint32_t *)0xE0081002) // General Purpose Register
  2662. #define CAU_CA1 (*(volatile uint32_t *)0xE0081003) // General Purpose Register
  2663. #define CAU_CA2 (*(volatile uint32_t *)0xE0081004) // General Purpose Register
  2664. #define CAU_CA3 (*(volatile uint32_t *)0xE0081005) // General Purpose Register
  2665. #define CAU_CA4 (*(volatile uint32_t *)0xE0081006) // General Purpose Register
  2666. #define CAU_CA5 (*(volatile uint32_t *)0xE0081007) // General Purpose Register
  2667. #define CAU_CA6 (*(volatile uint32_t *)0xE0081008) // General Purpose Register
  2668. #define CAU_CA7 (*(volatile uint32_t *)0xE0081009) // General Purpose Register
  2669. #define CAU_CA8 (*(volatile uint32_t *)0xE008100A) // General Purpose Register
  2670. // Random Number Generator Accelerator (RNGA)
  2671. #define RNG_CR (*(volatile uint32_t *)0x40029000) // RNGA Control Register
  2672. #define RNG_SR (*(volatile uint32_t *)0x40029004) // RNGA Status Register
  2673. #define RNG_ER (*(volatile uint32_t *)0x40029008) // RNGA Entropy Register
  2674. #define RNG_OR (*(volatile uint32_t *)0x4002900C) // RNGA Output Register
  2675. // Analog-to-Digital Converter (ADC)
  2676. #define ADC0_SC1A (*(volatile uint32_t *)0x4003B000) // ADC status and control registers 1
  2677. #define ADC0_SC1B (*(volatile uint32_t *)0x4003B004) // ADC status and control registers 1
  2678. #define ADC_SC1_COCO ((uint32_t)0x80) // Conversion complete flag
  2679. #define ADC_SC1_AIEN ((uint32_t)0x40) // Interrupt enable
  2680. #define ADC_SC1_DIFF ((uint32_t)0x20) // Differential mode enable
  2681. #define ADC_SC1_ADCH(n) ((uint32_t)((n) & 0x1F)) // Input channel select
  2682. #define ADC0_CFG1 (*(volatile uint32_t *)0x4003B008) // ADC configuration register 1
  2683. #define ADC_CFG1_ADLPC ((uint32_t)0x80) // Low-power configuration
  2684. #define ADC_CFG1_ADIV(n) ((uint32_t)(((n) & 3) << 5)) // Clock divide select, 0=direct, 1=div2, 2=div4, 3=div8
  2685. #define ADC_CFG1_ADLSMP ((uint32_t)0x10) // Sample time configuration, 0=Short, 1=Long
  2686. #define ADC_CFG1_MODE(n) ((uint32_t)(((n) & 3) << 2)) // Conversion mode, 0=8 bit, 1=12 bit, 2=10 bit, 3=16 bit
  2687. #define ADC_CFG1_ADICLK(n) ((uint32_t)(((n) & 3) << 0)) // Input clock, 0=bus, 1=bus/2, 2=OSCERCLK, 3=async
  2688. #define ADC0_CFG2 (*(volatile uint32_t *)0x4003B00C) // Configuration register 2
  2689. #define ADC_CFG2_MUXSEL ((uint32_t)0x10) // 0=a channels, 1=b channels
  2690. #define ADC_CFG2_ADACKEN ((uint32_t)0x08) // async clock enable
  2691. #define ADC_CFG2_ADHSC ((uint32_t)0x04) // High speed configuration
  2692. #define ADC_CFG2_ADLSTS(n) ((uint32_t)(((n) & 3) << 0)) // Sample time, 0=24 cycles, 1=12 cycles, 2=6 cycles, 3=2 cycles
  2693. #define ADC0_RA (*(volatile uint32_t *)0x4003B010) // ADC data result register
  2694. #define ADC0_RB (*(volatile uint32_t *)0x4003B014) // ADC data result register
  2695. #define ADC0_CV1 (*(volatile uint32_t *)0x4003B018) // Compare value registers
  2696. #define ADC0_CV2 (*(volatile uint32_t *)0x4003B01C) // Compare value registers
  2697. #define ADC0_SC2 (*(volatile uint32_t *)0x4003B020) // Status and control register 2
  2698. #define ADC_SC2_ADACT ((uint32_t)0x80) // Conversion active
  2699. #define ADC_SC2_ADTRG ((uint32_t)0x40) // Conversion trigger select, 0=software, 1=hardware
  2700. #define ADC_SC2_ACFE ((uint32_t)0x20) // Compare function enable
  2701. #define ADC_SC2_ACFGT ((uint32_t)0x10) // Compare function greater than enable
  2702. #define ADC_SC2_ACREN ((uint32_t)0x08) // Compare function range enable
  2703. #define ADC_SC2_DMAEN ((uint32_t)0x04) // DMA enable
  2704. #define ADC_SC2_REFSEL(n) ((uint32_t)(((n) & 3) << 0)) // Voltage reference, 0=vcc/external, 1=1.2 volts
  2705. #define ADC0_SC3 (*(volatile uint32_t *)0x4003B024) // Status and control register 3
  2706. #define ADC_SC3_CAL ((uint32_t)0x80) // Calibration, 1=begin, stays set while cal in progress
  2707. #define ADC_SC3_CALF ((uint32_t)0x40) // Calibration failed flag
  2708. #define ADC_SC3_ADCO ((uint32_t)0x08) // Continuous conversion enable
  2709. #define ADC_SC3_AVGE ((uint32_t)0x04) // Hardware average enable
  2710. #define ADC_SC3_AVGS(n) ((uint32_t)(((n) & 3) << 0)) // avg select, 0=4 samples, 1=8 samples, 2=16 samples, 3=32 samples
  2711. #define ADC0_OFS (*(volatile uint32_t *)0x4003B028) // ADC offset correction register
  2712. #define ADC0_PG (*(volatile uint32_t *)0x4003B02C) // ADC plus-side gain register
  2713. #define ADC0_MG (*(volatile uint32_t *)0x4003B030) // ADC minus-side gain register
  2714. #define ADC0_CLPD (*(volatile uint32_t *)0x4003B034) // ADC plus-side general calibration value register
  2715. #define ADC0_CLPS (*(volatile uint32_t *)0x4003B038) // ADC plus-side general calibration value register
  2716. #define ADC0_CLP4 (*(volatile uint32_t *)0x4003B03C) // ADC plus-side general calibration value register
  2717. #define ADC0_CLP3 (*(volatile uint32_t *)0x4003B040) // ADC plus-side general calibration value register
  2718. #define ADC0_CLP2 (*(volatile uint32_t *)0x4003B044) // ADC plus-side general calibration value register
  2719. #define ADC0_CLP1 (*(volatile uint32_t *)0x4003B048) // ADC plus-side general calibration value register
  2720. #define ADC0_CLP0 (*(volatile uint32_t *)0x4003B04C) // ADC plus-side general calibration value register
  2721. #define ADC0_PGA (*(volatile uint32_t *)0x4003B050) // ADC Programmable Gain Amplifier
  2722. #define ADC_PGA_PGAEN ((uint32_t)0x00800000) // Enable
  2723. #define ADC_PGA_PGALPB ((uint32_t)0x00100000) // Low-Power Mode Control, 0=low power, 1=normal
  2724. #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
  2725. #define ADC0_CLMD (*(volatile uint32_t *)0x4003B054) // ADC minus-side general calibration value register
  2726. #define ADC0_CLMS (*(volatile uint32_t *)0x4003B058) // ADC minus-side general calibration value register
  2727. #define ADC0_CLM4 (*(volatile uint32_t *)0x4003B05C) // ADC minus-side general calibration value register
  2728. #define ADC0_CLM3 (*(volatile uint32_t *)0x4003B060) // ADC minus-side general calibration value register
  2729. #define ADC0_CLM2 (*(volatile uint32_t *)0x4003B064) // ADC minus-side general calibration value register
  2730. #define ADC0_CLM1 (*(volatile uint32_t *)0x4003B068) // ADC minus-side general calibration value register
  2731. #define ADC0_CLM0 (*(volatile uint32_t *)0x4003B06C) // ADC minus-side general calibration value register
  2732. #define ADC1_SC1A (*(volatile uint32_t *)0x400BB000) // ADC status and control registers 1
  2733. #define ADC1_SC1B (*(volatile uint32_t *)0x400BB004) // ADC status and control registers 1
  2734. #define ADC1_CFG1 (*(volatile uint32_t *)0x400BB008) // ADC configuration register 1
  2735. #define ADC1_CFG2 (*(volatile uint32_t *)0x400BB00C) // Configuration register 2
  2736. #define ADC1_RA (*(volatile uint32_t *)0x400BB010) // ADC data result register
  2737. #define ADC1_RB (*(volatile uint32_t *)0x400BB014) // ADC data result register
  2738. #define ADC1_CV1 (*(volatile uint32_t *)0x400BB018) // Compare value registers
  2739. #define ADC1_CV2 (*(volatile uint32_t *)0x400BB01C) // Compare value registers
  2740. #define ADC1_SC2 (*(volatile uint32_t *)0x400BB020) // Status and control register 2
  2741. #define ADC1_SC3 (*(volatile uint32_t *)0x400BB024) // Status and control register 3
  2742. #define ADC1_OFS (*(volatile uint32_t *)0x400BB028) // ADC offset correction register
  2743. #define ADC1_PG (*(volatile uint32_t *)0x400BB02C) // ADC plus-side gain register
  2744. #define ADC1_MG (*(volatile uint32_t *)0x400BB030) // ADC minus-side gain register
  2745. #define ADC1_CLPD (*(volatile uint32_t *)0x400BB034) // ADC plus-side general calibration value register
  2746. #define ADC1_CLPS (*(volatile uint32_t *)0x400BB038) // ADC plus-side general calibration value register
  2747. #define ADC1_CLP4 (*(volatile uint32_t *)0x400BB03C) // ADC plus-side general calibration value register
  2748. #define ADC1_CLP3 (*(volatile uint32_t *)0x400BB040) // ADC plus-side general calibration value register
  2749. #define ADC1_CLP2 (*(volatile uint32_t *)0x400BB044) // ADC plus-side general calibration value register
  2750. #define ADC1_CLP1 (*(volatile uint32_t *)0x400BB048) // ADC plus-side general calibration value register
  2751. #define ADC1_CLP0 (*(volatile uint32_t *)0x400BB04C) // ADC plus-side general calibration value register
  2752. #define ADC1_PGA (*(volatile uint32_t *)0x400BB050) // ADC Programmable Gain Amplifier
  2753. #define ADC1_CLMD (*(volatile uint32_t *)0x400BB054) // ADC minus-side general calibration value register
  2754. #define ADC1_CLMS (*(volatile uint32_t *)0x400BB058) // ADC minus-side general calibration value register
  2755. #define ADC1_CLM4 (*(volatile uint32_t *)0x400BB05C) // ADC minus-side general calibration value register
  2756. #define ADC1_CLM3 (*(volatile uint32_t *)0x400BB060) // ADC minus-side general calibration value register
  2757. #define ADC1_CLM2 (*(volatile uint32_t *)0x400BB064) // ADC minus-side general calibration value register
  2758. #define ADC1_CLM1 (*(volatile uint32_t *)0x400BB068) // ADC minus-side general calibration value register
  2759. #define ADC1_CLM0 (*(volatile uint32_t *)0x400BB06C) // ADC minus-side general calibration value register
  2760. // 12-bit Digital-to-Analog Converter (DAC)
  2761. #if defined(KINETISK)
  2762. #define DAC0_DAT0L (*(volatile uint8_t *)0x400CC000) // DAC Data Low Register
  2763. #define DAC0_DATH (*(volatile uint8_t *)0x400CC001) // DAC Data High Register
  2764. #define DAC0_DAT1L (*(volatile uint8_t *)0x400CC002) // DAC Data Low Register
  2765. #define DAC0_DAT2L (*(volatile uint8_t *)0x400CC004) // DAC Data Low Register
  2766. #define DAC0_DAT3L (*(volatile uint8_t *)0x400CC006) // DAC Data Low Register
  2767. #define DAC0_DAT4L (*(volatile uint8_t *)0x400CC008) // DAC Data Low Register
  2768. #define DAC0_DAT5L (*(volatile uint8_t *)0x400CC00A) // DAC Data Low Register
  2769. #define DAC0_DAT6L (*(volatile uint8_t *)0x400CC00C) // DAC Data Low Register
  2770. #define DAC0_DAT7L (*(volatile uint8_t *)0x400CC00E) // DAC Data Low Register
  2771. #define DAC0_DAT8L (*(volatile uint8_t *)0x400CC010) // DAC Data Low Register
  2772. #define DAC0_DAT9L (*(volatile uint8_t *)0x400CC012) // DAC Data Low Register
  2773. #define DAC0_DAT10L (*(volatile uint8_t *)0x400CC014) // DAC Data Low Register
  2774. #define DAC0_DAT11L (*(volatile uint8_t *)0x400CC016) // DAC Data Low Register
  2775. #define DAC0_DAT12L (*(volatile uint8_t *)0x400CC018) // DAC Data Low Register
  2776. #define DAC0_DAT13L (*(volatile uint8_t *)0x400CC01A) // DAC Data Low Register
  2777. #define DAC0_DAT14L (*(volatile uint8_t *)0x400CC01C) // DAC Data Low Register
  2778. #define DAC0_DAT15L (*(volatile uint8_t *)0x400CC01E) // DAC Data Low Register
  2779. #define DAC0_SR (*(volatile uint8_t *)0x400CC020) // DAC Status Register
  2780. #define DAC0_C0 (*(volatile uint8_t *)0x400CC021) // DAC Control Register
  2781. #define DAC_C0_DACEN 0x80 // DAC Enable
  2782. #define DAC_C0_DACRFS 0x40 // DAC Reference Select
  2783. #define DAC_C0_DACTRGSEL 0x20 // DAC Trigger Select
  2784. #define DAC_C0_DACSWTRG 0x10 // DAC Software Trigger
  2785. #define DAC_C0_LPEN 0x08 // DAC Low Power Control
  2786. #define DAC_C0_DACBWIEN 0x04 // DAC Buffer Watermark Interrupt Enable
  2787. #define DAC_C0_DACBTIEN 0x02 // DAC Buffer Read Pointer Top Flag Interrupt Enable
  2788. #define DAC_C0_DACBBIEN 0x01 // DAC Buffer Read Pointer Bottom Flag Interrupt Enable
  2789. #define DAC0_C1 (*(volatile uint8_t *)0x400CC022) // DAC Control Register 1
  2790. #define DAC_C1_DMAEN 0x80 // DMA Enable Select
  2791. #define DAC_C1_DACBFWM(n) ((((n) & 3) << 3)) // DAC Buffer Watermark Select
  2792. #define DAC_C1_DACBFMD(n) ((((n) & 3) << 1)) // DAC Buffer Work Mode Select
  2793. #define DAC_C1_DACBFEN 0x01 // DAC Buffer Enable
  2794. #define DAC0_C2 (*(volatile uint8_t *)0x400CC023) // DAC Control Register 2
  2795. #define DAC_C2_DACBFRP(n) ((((n) & 15) << 4)) // DAC Buffer Read Pointer
  2796. #define DAC_C2_DACBFUP(n) ((((n) & 15) << 0)) // DAC Buffer Upper Limit
  2797. #define DAC1_DAT0L (*(volatile uint8_t *)0x400CD000) // DAC Data Low Register
  2798. #define DAC1_DATH (*(volatile uint8_t *)0x400CD001) // DAC Data High Register
  2799. #define DAC1_DAT1L (*(volatile uint8_t *)0x400CD002) // DAC Data Low Register
  2800. #define DAC1_DAT2L (*(volatile uint8_t *)0x400CD004) // DAC Data Low Register
  2801. #define DAC1_DAT3L (*(volatile uint8_t *)0x400CD006) // DAC Data Low Register
  2802. #define DAC1_DAT4L (*(volatile uint8_t *)0x400CD008) // DAC Data Low Register
  2803. #define DAC1_DAT5L (*(volatile uint8_t *)0x400CD00A) // DAC Data Low Register
  2804. #define DAC1_DAT6L (*(volatile uint8_t *)0x400CD00C) // DAC Data Low Register
  2805. #define DAC1_DAT7L (*(volatile uint8_t *)0x400CD00E) // DAC Data Low Register
  2806. #define DAC1_DAT8L (*(volatile uint8_t *)0x400CD010) // DAC Data Low Register
  2807. #define DAC1_DAT9L (*(volatile uint8_t *)0x400CD012) // DAC Data Low Register
  2808. #define DAC1_DAT10L (*(volatile uint8_t *)0x400CD014) // DAC Data Low Register
  2809. #define DAC1_DAT11L (*(volatile uint8_t *)0x400CD016) // DAC Data Low Register
  2810. #define DAC1_DAT12L (*(volatile uint8_t *)0x400CD018) // DAC Data Low Register
  2811. #define DAC1_DAT13L (*(volatile uint8_t *)0x400CD01A) // DAC Data Low Register
  2812. #define DAC1_DAT14L (*(volatile uint8_t *)0x400CD01C) // DAC Data Low Register
  2813. #define DAC1_DAT15L (*(volatile uint8_t *)0x400CD01E) // DAC Data Low Register
  2814. #define DAC1_SR (*(volatile uint8_t *)0x400CD020) // DAC Status Register
  2815. #define DAC1_C0 (*(volatile uint8_t *)0x400CD021) // DAC Control Register
  2816. #define DAC1_C1 (*(volatile uint8_t *)0x400CD022) // DAC Control Register 1
  2817. #define DAC1_C2 (*(volatile uint8_t *)0x400CD023) // DAC Control Register 2
  2818. #elif defined(KINETISL)
  2819. #define DAC0_DAT0L (*(volatile uint8_t *)0x4003F000) // Data Low
  2820. #define DAC0_DAT0H (*(volatile uint8_t *)0x4003F001) // Data High
  2821. #define DAC0_DAT1L (*(volatile uint8_t *)0x4003F002) // Data Low
  2822. #define DAC0_DAT1H (*(volatile uint8_t *)0x4003F003) // Data High
  2823. #define DAC0_SR (*(volatile uint8_t *)0x4003F020) // Status
  2824. #define DAC0_C0 (*(volatile uint8_t *)0x4003F021) // Control Register
  2825. #define DAC0_C1 (*(volatile uint8_t *)0x4003F022) // Control Register 1
  2826. #define DAC0_C2 (*(volatile uint8_t *)0x4003F023) // Control Register 2
  2827. #define DAC_SR_DACBFRPTF ((uint8_t)0x02) // Read Pointer Top Position Flag
  2828. #define DAC_SR_DACBFRPBF ((uint8_t)0x01) // Read Pointer Bottom Position Flag
  2829. #define DAC_C0_DACEN ((uint8_t)0x80) // Enable
  2830. #define DAC_C0_DACRFS ((uint8_t)0x40) // Reference, 0=AREF pin, 1=VCC
  2831. #define DAC_C0_DACTRGSEL ((uint8_t)0x20) // Trigger Select
  2832. #define DAC_C0_DACSWTRG ((uint8_t)0x10) // Software Trigger
  2833. #define DAC_C0_LPEN ((uint8_t)0x08) // Low Power Control
  2834. #define DAC_C0_DACBTIEN ((uint8_t)0x02) // Top Flag Interrupt Enable
  2835. #define DAC_C0_DACBBIEN ((uint8_t)0x01) // Bottom Flag Interrupt Enable
  2836. #define DAC_C1_DMAEN ((uint8_t)0x80) // DMA Enable
  2837. #define DAC_C1_DACBFMD ((uint8_t)0x04) // Work Mode Select
  2838. #define DAC_C1_DACBFEN ((uint8_t)0x01) // Buffer Enable
  2839. #define DAC_C2_DACBFRP ((uint8_t)0x10) // Buffer Read Pointer
  2840. #define DAC_C2_DACBFUP ((uint8_t)0x01) // Buffer Upper Limit
  2841. #endif
  2842. // Analog Comparator (CMP)
  2843. #define CMP0_CR0 (*(volatile uint8_t *)0x40073000) // CMP Control Register 0
  2844. #define CMP_CR0_FILTER_CNT(n) (uint8_t)(((n) & 0x07) << 4)
  2845. #define CMP_CR0_HYSTCTR(n) (uint8_t)(((n) & 0x03) << 0)
  2846. #define CMP0_CR1 (*(volatile uint8_t *)0x40073001) // CMP Control Register
  2847. #define CMP_CR1_SE (uint8_t)0x80 // Sample Enable
  2848. #define CMP_CR1_WE (uint8_t)0x40 // Windowing Enable
  2849. #define CMP_CR1_TRIGM (uint8_t)0x20 // Trigger Mode Enable
  2850. #define CMP_CR1_PMODE (uint8_t)0x10 // Power Mode Select
  2851. #define CMP_CR1_INV (uint8_t)0x08 // Comparator INVERT
  2852. #define CMP_CR1_COS (uint8_t)0x04 // Comparator Output Select
  2853. #define CMP_CR1_OPE (uint8_t)0x02 // Comparator Output Pin Enable
  2854. #define CMP_CR1_EN (uint8_t)0x01 // Comparator Module Enable
  2855. #define CMP0_FPR (*(volatile uint8_t *)0x40073002) // CMP Filter Period Register
  2856. #define CMP0_SCR (*(volatile uint8_t *)0x40073003) // CMP Status and Control Register
  2857. #define CMP_SCR_DMAEN (uint8_t)0x40 // DMA Enable Control
  2858. #define CMP_SCR_IER (uint8_t)0x10 // Comparator Interrupt Enable Rising
  2859. #define CMP_SCR_IEF (uint8_t)0x08 // Comparator Interrupt Enable Falling
  2860. #define CMP_SCR_CFR (uint8_t)0x04 // Analog Comparator Flag Rising
  2861. #define CMP_SCR_CFF (uint8_t)0x02 // Analog Comparator Flag Falling
  2862. #define CMP_SCR_COUT (uint8_t)0x01 // Analog Comparator Output
  2863. #define CMP0_DACCR (*(volatile uint8_t *)0x40073004) // DAC Control Register
  2864. #define CMP_DACCR_DACEN (uint8_t)0x80 // DAC Enable
  2865. #define CMP_DACCR_VRSEL (uint8_t)0x40 // Supply Voltage Reference Source Select
  2866. #define CMP_DACCR_VOSEL(n) (uint8_t)(((n) & 0x3F) << 0) // DAC Output Voltage Select
  2867. #define CMP0_MUXCR (*(volatile uint8_t *)0x40073005) // MUX Control Register
  2868. #define CMP_MUXCR_PSTM (uint8_t)0x40 // Pass Through Mode Enable
  2869. #define CMP_MUXCR_PSEL(n) (uint8_t)(((n) & 0x07) << 3) // Plus Input Mux Control
  2870. #define CMP_MUXCR_MSEL(n) (uint8_t)(((n) & 0x07) << 0) // Minus Input Mux Control
  2871. #define CMP1_CR0 (*(volatile uint8_t *)0x40073008) // CMP Control Register 0
  2872. #define CMP1_CR1 (*(volatile uint8_t *)0x40073009) // CMP Control Register 1
  2873. #define CMP1_FPR (*(volatile uint8_t *)0x4007300A) // CMP Filter Period Register
  2874. #define CMP1_SCR (*(volatile uint8_t *)0x4007300B) // CMP Status and Control Register
  2875. #define CMP1_DACCR (*(volatile uint8_t *)0x4007300C) // DAC Control Register
  2876. #define CMP1_MUXCR (*(volatile uint8_t *)0x4007300D) // MUX Control Register
  2877. #define CMP2_CR0 (*(volatile uint8_t *)0x40073010) // CMP Control Register 0
  2878. #define CMP2_CR1 (*(volatile uint8_t *)0x40073011) // CMP Control Register 1
  2879. #define CMP2_FPR (*(volatile uint8_t *)0x40073012) // CMP Filter Period Register
  2880. #define CMP2_SCR (*(volatile uint8_t *)0x40073013) // CMP Status and Control Register
  2881. #define CMP2_DACCR (*(volatile uint8_t *)0x40073014) // DAC Control Register
  2882. #define CMP2_MUXCR (*(volatile uint8_t *)0x40073015) // MUX Control Register
  2883. #define CMP3_CR0 (*(volatile uint8_t *)0x40073018) // CMP Control Register 0
  2884. #define CMP3_CR1 (*(volatile uint8_t *)0x40073019) // CMP Control Register 1
  2885. #define CMP3_FPR (*(volatile uint8_t *)0x4007301A) // CMP Filter Period Register
  2886. #define CMP3_SCR (*(volatile uint8_t *)0x4007301B) // CMP Status and Control Register
  2887. #define CMP3_DACCR (*(volatile uint8_t *)0x4007301C) // DAC Control Register
  2888. #define CMP3_MUXCR (*(volatile uint8_t *)0x4007301D) // MUX Control Register
  2889. // Analog Voltage Reference (VREFV1)
  2890. #define VREF_TRM (*(volatile uint8_t *)0x40074000) // VREF Trim Register
  2891. #define VREF_TRM_CHOPEN ((uint8_t)0x40) // Chop oscillator enable
  2892. #define VREF_TRM_TRIM(n) ((n) & 0x3F) // Trim bits
  2893. #define VREF_SC (*(volatile uint8_t *)0x40074001) // VREF Status and Control Register
  2894. #define VREF_SC_VREFEN ((uint8_t)0x80) // Internal Voltage Reference enable
  2895. #define VREF_SC_REGEN ((uint8_t)0x40) // Regulator enable
  2896. #define VREF_SC_ICOMPEN ((uint8_t)0x20) // Second order curvature compensation enable
  2897. #define VREF_SC_VREFST ((uint8_t)0x04) // Internal Voltage Reference stable flag
  2898. #define VREF_SC_MODE_LV(n) (uint8_t)(((n) & 3) << 0) // Buffer Mode selection: 0=Bandgap on only
  2899. // 2=Low-power buffer mode
  2900. // Programmable Delay Block (PDB)
  2901. #define PDB0_SC (*(volatile uint32_t *)0x40036000) // Status and Control Register
  2902. #define PDB_SC_LDMOD(n) (((n) & 3) << 18) // Load Mode Select
  2903. #define PDB_SC_PDBEIE 0x00020000 // Sequence Error Interrupt Enable
  2904. #define PDB_SC_SWTRIG 0x00010000 // Software Trigger
  2905. #define PDB_SC_DMAEN 0x00008000 // DMA Enable
  2906. #define PDB_SC_PRESCALER(n) (((n) & 7) << 12) // Prescaler Divider Select
  2907. #define PDB_SC_TRGSEL(n) (((n) & 15) << 8) // Trigger Input Source Select
  2908. #define PDB_SC_PDBEN 0x00000080 // PDB Enable
  2909. #define PDB_SC_PDBIF 0x00000040 // PDB Interrupt Flag
  2910. #define PDB_SC_PDBIE 0x00000020 // PDB Interrupt Enable.
  2911. #define PDB_SC_MULT(n) (((n) & 3) << 2) // Multiplication Factor
  2912. #define PDB_SC_CONT 0x00000002 // Continuous Mode Enable
  2913. #define PDB_SC_LDOK 0x00000001 // Load OK
  2914. #define PDB0_MOD (*(volatile uint32_t *)0x40036004) // Modulus Register
  2915. #define PDB0_CNT (*(volatile uint32_t *)0x40036008) // Counter Register
  2916. #define PDB0_IDLY (*(volatile uint32_t *)0x4003600C) // Interrupt Delay Register
  2917. #define PDB0_CH0C1 (*(volatile uint32_t *)0x40036010) // Channel 0 Control Register 1
  2918. #define PDB0_CH0S (*(volatile uint32_t *)0x40036014) // Channel 0 Status Register
  2919. #define PDB0_CH0DLY0 (*(volatile uint32_t *)0x40036018) // Channel 0 Delay 0 Register
  2920. #define PDB0_CH0DLY1 (*(volatile uint32_t *)0x4003601C) // Channel 0 Delay 1 Register
  2921. #define PDB0_CH1C1 (*(volatile uint32_t *)0x40036038) // Channel 1 Control Register 1
  2922. #define PDB0_CH1S (*(volatile uint32_t *)0x4003603C) // Channel 1 Status Register
  2923. #define PDB0_CH1DLY0 (*(volatile uint32_t *)0x40036040) // Channel 1 Delay 0 Register
  2924. #define PDB0_CH1DLY1 (*(volatile uint32_t *)0x40036044) // Channel 1 Delay 1 Register
  2925. #define PDB0_DACINTC0 (*(volatile uint32_t *)0x40036150) // DAC Interval Trigger n Control Register
  2926. #define PDB0_DACINT0 (*(volatile uint32_t *)0x40036154) // DAC Interval n Register
  2927. #define PDB0_DACINTC1 (*(volatile uint32_t *)0x40036158) // DAC Interval Trigger n Control register
  2928. #define PDB0_DACINT1 (*(volatile uint32_t *)0x4003615C) // DAC Interval n register
  2929. #define PDB0_POEN (*(volatile uint32_t *)0x40036190) // Pulse-Out n Enable Register
  2930. #define PDB0_PO0DLY (*(volatile uint32_t *)0x40036194) // Pulse-Out n Delay Register
  2931. #define PDB0_PO1DLY (*(volatile uint32_t *)0x40036198) // Pulse-Out n Delay Register
  2932. #define PDB0_PO2DLY (*(volatile uint32_t *)0x4003619C) // Pulse-Out n Delay Register
  2933. #define PDB0_PO3DLY (*(volatile uint32_t *)0x400361A0) // Pulse-Out n Delay Register
  2934. // Timer/PWM Module (TPM)
  2935. #if defined(KINETISL)
  2936. #define TPM0_SC (*(volatile uint32_t *)0x40038000) // Status And Control
  2937. #define TPM0_CNT (*(volatile uint32_t *)0x40038004) // Counter
  2938. #define TPM0_MOD (*(volatile uint32_t *)0x40038008) // Modulo
  2939. #define TPM0_C0SC (*(volatile uint32_t *)0x4003800C) // Channel 0 Status And Control
  2940. #define TPM0_C0V (*(volatile uint32_t *)0x40038010) // Channel 0 Value
  2941. #define TPM0_C1SC (*(volatile uint32_t *)0x40038014) // Channel 1 Status And Control
  2942. #define TPM0_C1V (*(volatile uint32_t *)0x40038018) // Channel 1 Value
  2943. #define TPM0_C2SC (*(volatile uint32_t *)0x4003801C) // Channel 2 Status And Control
  2944. #define TPM0_C2V (*(volatile uint32_t *)0x40038020) // Channel 2 Value
  2945. #define TPM0_C3SC (*(volatile uint32_t *)0x40038024) // Channel 3 Status And Control
  2946. #define TPM0_C3V (*(volatile uint32_t *)0x40038028) // Channel 3 Value
  2947. #define TPM0_C4SC (*(volatile uint32_t *)0x4003802C) // Channel 4 Status And Control
  2948. #define TPM0_C4V (*(volatile uint32_t *)0x40038030) // Channel 4 Value
  2949. #define TPM0_C5SC (*(volatile uint32_t *)0x40038034) // Channel 5 Status And Control
  2950. #define TPM0_C5V (*(volatile uint32_t *)0x40038038) // Channel 5 Value
  2951. #define TPM0_STATUS (*(volatile uint32_t *)0x40038050) // Capture And Compare Status
  2952. #define TPM0_CONF (*(volatile uint32_t *)0x40038084) // Configuration
  2953. #define TPM1_SC (*(volatile uint32_t *)0x40039000) // Status And Control
  2954. #define TPM1_CNT (*(volatile uint32_t *)0x40039004) // Counter
  2955. #define TPM1_MOD (*(volatile uint32_t *)0x40039008) // Modulo
  2956. #define TPM1_C0SC (*(volatile uint32_t *)0x4003900C) // Channel 0 Status And Control
  2957. #define TPM1_C0V (*(volatile uint32_t *)0x40039010) // Channel 0 Value
  2958. #define TPM1_C1SC (*(volatile uint32_t *)0x40039014) // Channel 1 Status And Control
  2959. #define TPM1_C1V (*(volatile uint32_t *)0x40039018) // Channel 1 Value
  2960. #define TPM1_STATUS (*(volatile uint32_t *)0x40039050) // Capture And Compare Status
  2961. #define TPM1_CONF (*(volatile uint32_t *)0x40039084) // Configuration
  2962. #define TPM2_SC (*(volatile uint32_t *)0x4003A000) // Status And Control
  2963. #define TPM2_CNT (*(volatile uint32_t *)0x4003A004) // Counter
  2964. #define TPM2_MOD (*(volatile uint32_t *)0x4003A008) // Modulo
  2965. #define TPM2_C0SC (*(volatile uint32_t *)0x4003A00C) // Channel 0 Status And Control
  2966. #define TPM2_C0V (*(volatile uint32_t *)0x4003A010) // Channel 0 Value
  2967. #define TPM2_C1SC (*(volatile uint32_t *)0x4003A014) // Channel 1 Status And Control
  2968. #define TPM2_C1V (*(volatile uint32_t *)0x4003A018) // Channel 1 Value
  2969. #define TPM2_STATUS (*(volatile uint32_t *)0x4003A050) // Capture And Compare Status
  2970. #define TPM2_CONF (*(volatile uint32_t *)0x4003A084) // Configuration
  2971. #elif defined(KINETISK)
  2972. #define TPM1_SC (*(volatile uint32_t *)0x400C9000) // Status And Control
  2973. #define TPM1_CNT (*(volatile uint32_t *)0x400C9004) // Counter
  2974. #define TPM1_MOD (*(volatile uint32_t *)0x400C9008) // Modulo
  2975. #define TPM1_C0SC (*(volatile uint32_t *)0x400C900C) // Channel 0 Status And Control
  2976. #define TPM1_C0V (*(volatile uint32_t *)0x400C9010) // Channel 0 Value
  2977. #define TPM1_C1SC (*(volatile uint32_t *)0x400C9014) // Channel 1 Status And Control
  2978. #define TPM1_C1V (*(volatile uint32_t *)0x400C9018) // Channel 1 Value
  2979. #define TPM1_STATUS (*(volatile uint32_t *)0x400C9050) // Capture And Compare Status
  2980. #define TPM1_COMBINE (*(volatile uint32_t *)0x400C9064) // Function For Linked Channels
  2981. #define TPM1_POL (*(volatile uint32_t *)0x400C9070) // Channels Polarity
  2982. #define TPM1_FILTER (*(volatile uint32_t *)0x400C9078) // Input Capture Filter Control
  2983. #define TPM1_QDCTRL (*(volatile uint32_t *)0x400C9080) // Quadrature Decoder Control And Status
  2984. #define TPM1_CONF (*(volatile uint32_t *)0x400C9084) // Configuration
  2985. #define TPM2_SC (*(volatile uint32_t *)0x400CA000) // Status And Control
  2986. #define TPM2_CNT (*(volatile uint32_t *)0x400CA004) // Counter
  2987. #define TPM2_MOD (*(volatile uint32_t *)0x400CA008) // Modulo
  2988. #define TPM2_C0SC (*(volatile uint32_t *)0x400CA00C) // Channel 0 Status And Control
  2989. #define TPM2_C0V (*(volatile uint32_t *)0x400CA010) // Channel 0 Value
  2990. #define TPM2_C1SC (*(volatile uint32_t *)0x400CA014) // Channel 1 Status And Control
  2991. #define TPM2_C1V (*(volatile uint32_t *)0x400CA018) // Channel 1 Value
  2992. #define TPM2_STATUS (*(volatile uint32_t *)0x400CA050) // Capture And Compare Status
  2993. #define TPM2_COMBINE (*(volatile uint32_t *)0x400CA064) // Function For Linked Channels
  2994. #define TPM2_POL (*(volatile uint32_t *)0x400CA070) // Channels Polarity
  2995. #define TPM2_FILTER (*(volatile uint32_t *)0x400CA078) // Input Capture Filter Control
  2996. #define TPM2_QDCTRL (*(volatile uint32_t *)0x400CA080) // Quadrature Decoder Control And Status
  2997. #define TPM2_CONF (*(volatile uint32_t *)0x400CA084) // Configuration
  2998. #endif
  2999. // FlexTimer Module (FTM)
  3000. #define FTM0_SC (*(volatile uint32_t *)0x40038000) // Status And Control
  3001. #ifdef KINETISL
  3002. #define FTM_SC_DMA 0x100 // DMA Enable
  3003. #endif
  3004. #define FTM_SC_TOF 0x80 // Timer Overflow Flag
  3005. #define FTM_SC_TOIE 0x40 // Timer Overflow Interrupt Enable
  3006. #define FTM_SC_CPWMS 0x20 // Center-Aligned PWM Select
  3007. #define FTM_SC_CLKS(n) (((n) & 3) << 3) // Clock Source Selection
  3008. #define FTM_SC_CLKS_MASK 0x18
  3009. #define FTM_SC_PS(n) (((n) & 7) << 0) // Prescale Factor Selection
  3010. #define FTM_SC_PS_MASK 0x07
  3011. #define FTM0_CNT (*(volatile uint32_t *)0x40038004) // Counter
  3012. #define FTM0_MOD (*(volatile uint32_t *)0x40038008) // Modulo
  3013. #define FTM0_C0SC (*(volatile uint32_t *)0x4003800C) // Channel 0 Status And Control
  3014. #define FTM_CSC_CHF 0x80 // Channel Flag
  3015. #define FTM_CSC_CHIE 0x40 // Channel Interrupt Enable
  3016. #define FTM_CSC_MSB 0x20 // Channel Mode Select
  3017. #define FTM_CSC_MSA 0x10 // Channel Mode Select
  3018. #define FTM_CSC_ELSB 0x08 // Edge or Level Select
  3019. #define FTM_CSC_ELSA 0x04 // Edge or Level Select
  3020. #define FTM_CSC_DMA 0x01 // DMA Enable
  3021. #define FTM0_C0V (*(volatile uint32_t *)0x40038010) // Channel 0 Value
  3022. #define FTM0_C1SC (*(volatile uint32_t *)0x40038014) // Channel 1 Status And Control
  3023. #define FTM0_C1V (*(volatile uint32_t *)0x40038018) // Channel 1 Value
  3024. #define FTM0_C2SC (*(volatile uint32_t *)0x4003801C) // Channel 2 Status And Control
  3025. #define FTM0_C2V (*(volatile uint32_t *)0x40038020) // Channel 2 Value
  3026. #define FTM0_C3SC (*(volatile uint32_t *)0x40038024) // Channel 3 Status And Control
  3027. #define FTM0_C3V (*(volatile uint32_t *)0x40038028) // Channel 3 Value
  3028. #define FTM0_C4SC (*(volatile uint32_t *)0x4003802C) // Channel 4 Status And Control
  3029. #define FTM0_C4V (*(volatile uint32_t *)0x40038030) // Channel 4 Value
  3030. #define FTM0_C5SC (*(volatile uint32_t *)0x40038034) // Channel 5 Status And Control
  3031. #define FTM0_C5V (*(volatile uint32_t *)0x40038038) // Channel 5 Value
  3032. #define FTM0_C6SC (*(volatile uint32_t *)0x4003803C) // Channel 6 Status And Control
  3033. #define FTM0_C6V (*(volatile uint32_t *)0x40038040) // Channel 6 Value
  3034. #define FTM0_C7SC (*(volatile uint32_t *)0x40038044) // Channel 7 Status And Control
  3035. #define FTM0_C7V (*(volatile uint32_t *)0x40038048) // Channel 7 Value
  3036. #define FTM0_CNTIN (*(volatile uint32_t *)0x4003804C) // Counter Initial Value
  3037. #define FTM0_STATUS (*(volatile uint32_t *)0x40038050) // Capture And Compare Status
  3038. #define FTM_STATUS_CH7F 0x80 //
  3039. #define FTM_STATUS_CH6F 0x40 //
  3040. #define FTM_STATUS_CH5F 0x20 //
  3041. #define FTM_STATUS_CH4F 0x10 //
  3042. #define FTM_STATUS_CH3F 0x08 //
  3043. #define FTM_STATUS_CH2F 0x04 //
  3044. #define FTM_STATUS_CH1F 0x02 //
  3045. #define FTM_STATUS_CH0F 0x01 //
  3046. #define FTM0_MODE (*(volatile uint32_t *)0x40038054) // Features Mode Selection
  3047. #define FTM_MODE_FAULTIE 0x80 // Fault Interrupt Enable
  3048. #define FTM_MODE_FAULTM(n) (((n) & 3) << 5) // Fault Control Mode
  3049. #define FTM_MODE_FAULTM_MASK 0x60
  3050. #define FTM_MODE_CAPTEST 0x10 // Capture Test Mode Enable
  3051. #define FTM_MODE_PWMSYNC 0x08 // PWM Synchronization Mode
  3052. #define FTM_MODE_WPDIS 0x04 // Write Protection Disable
  3053. #define FTM_MODE_INIT 0x02 // Initialize The Channels Output
  3054. #define FTM_MODE_FTMEN 0x01 // FTM Enable
  3055. #define FTM0_SYNC (*(volatile uint32_t *)0x40038058) // Synchronization
  3056. #define FTM_SYNC_SWSYNC 0x80 //
  3057. #define FTM_SYNC_TRIG2 0x40 //
  3058. #define FTM_SYNC_TRIG1 0x20 //
  3059. #define FTM_SYNC_TRIG0 0x10 //
  3060. #define FTM_SYNC_SYNCHOM 0x08 //
  3061. #define FTM_SYNC_REINIT 0x04 //
  3062. #define FTM_SYNC_CNTMAX 0x02 //
  3063. #define FTM_SYNC_CNTMIN 0x01 //
  3064. #define FTM0_OUTINIT (*(volatile uint32_t *)0x4003805C) // Initial State For Channels Output
  3065. #define FTM_OUTINIT_CH7OI 0x80 //
  3066. #define FTM_OUTINIT_CH6OI 0x40 //
  3067. #define FTM_OUTINIT_CH5OI 0x20 //
  3068. #define FTM_OUTINIT_CH4OI 0x10 //
  3069. #define FTM_OUTINIT_CH3OI 0x08 //
  3070. #define FTM_OUTINIT_CH2OI 0x04 //
  3071. #define FTM_OUTINIT_CH1OI 0x02 //
  3072. #define FTM_OUTINIT_CH0OI 0x01 //
  3073. #define FTM0_OUTMASK (*(volatile uint32_t *)0x40038060) // Output Mask
  3074. #define FTM_OUTMASK_CH7OM 0x80 //
  3075. #define FTM_OUTMASK_CH6OM 0x40 //
  3076. #define FTM_OUTMASK_CH5OM 0x20 //
  3077. #define FTM_OUTMASK_CH4OM 0x10 //
  3078. #define FTM_OUTMASK_CH3OM 0x08 //
  3079. #define FTM_OUTMASK_CH2OM 0x04 //
  3080. #define FTM_OUTMASK_CH1OM 0x02 //
  3081. #define FTM_OUTMASK_CH0OM 0x01 //
  3082. #define FTM0_COMBINE (*(volatile uint32_t *)0x40038064) // Function For Linked Channels
  3083. #define FTM_COMBINE_FAULTEN3 0x40000000 // Enable the fault control, ch #6 & #7
  3084. #define FTM_COMBINE_SYNCEN3 0x20000000 // Enable PWM sync of C6V & C7V
  3085. #define FTM_COMBINE_DTEN3 0x10000000 // Enable deadtime insertion, ch #6 & #7
  3086. #define FTM_COMBINE_DECAP3 0x08000000 // Dual Edge Capture Mode
  3087. #define FTM_COMBINE_DECAPEN3 0x04000000 // Dual Edge Capture Mode Enable
  3088. #define FTM_COMBINE_COMP3 0x02000000 // Complement Of Channel #6 & #7
  3089. #define FTM_COMBINE_COMBINE3 0x01000000 // Combine Channels #6 & #7
  3090. #define FTM_COMBINE_FAULTEN2 0x00400000 // Enable the fault control, ch #4 & #5
  3091. #define FTM_COMBINE_SYNCEN2 0x00200000 // Enable PWM sync of C4V & C5V
  3092. #define FTM_COMBINE_DTEN2 0x00100000 // Enable deadtime insertion, ch #4 & #5
  3093. #define FTM_COMBINE_DECAP2 0x00080000 // Dual Edge Capture Mode
  3094. #define FTM_COMBINE_DECAPEN2 0x00040000 // Dual Edge Capture Mode Enable
  3095. #define FTM_COMBINE_COMP2 0x00020000 // Complement Of Channel #4 & #5
  3096. #define FTM_COMBINE_COMBINE2 0x00010000 // Combine Channels #4 & #5
  3097. #define FTM_COMBINE_FAULTEN1 0x00004000 // Enable the fault control, ch #2 & #3
  3098. #define FTM_COMBINE_SYNCEN1 0x00002000 // Enable PWM sync of C2V & C3V
  3099. #define FTM_COMBINE_DTEN1 0x00001000 // Enable deadtime insertion, ch #2 & #3
  3100. #define FTM_COMBINE_DECAP1 0x00000800 // Dual Edge Capture Mode
  3101. #define FTM_COMBINE_DECAPEN1 0x00000400 // Dual Edge Capture Mode Enable
  3102. #define FTM_COMBINE_COMP1 0x00000200 // Complement Of Channel #2 & #3
  3103. #define FTM_COMBINE_COMBINE1 0x00000100 // Combine Channels #2 & #3
  3104. #define FTM_COMBINE_FAULTEN0 0x00000040 // Enable the fault control, ch #0 & #1
  3105. #define FTM_COMBINE_SYNCEN0 0x00000020 // Enable PWM sync of C0V & C1V
  3106. #define FTM_COMBINE_DTEN0 0x00000010 // Enable deadtime insertion, ch #0 & #1
  3107. #define FTM_COMBINE_DECAP0 0x00000008 // Dual Edge Capture Mode
  3108. #define FTM_COMBINE_DECAPEN0 0x00000004 // Dual Edge Capture Mode Enable
  3109. #define FTM_COMBINE_COMP0 0x00000002 // Complement Of Channel #0 & #1
  3110. #define FTM_COMBINE_COMBINE0 0x00000001 // Combine Channels #0 & #1
  3111. #define FTM0_DEADTIME (*(volatile uint32_t *)0x40038068) // Deadtime Insertion Control
  3112. #define FTM_DEADTIME_DTPS(n) (((n) & 3) << 6) // Prescaler Value, 0=1x, 2=4x, 3=16x
  3113. #define FTM_DEADTIME_DTPS_MASK 0xC0
  3114. #define FTM_DEADTIME_DTVAL(n) (((n) & 63) << 0) // Deadtime Value
  3115. #define FTM_DEADTIME_DTVAL_MASK 0x3F
  3116. #define FTM0_EXTTRIG (*(volatile uint32_t *)0x4003806C) // FTM External Trigger
  3117. #define FTM_EXTTRIG_TRIGF 0x80 // Channel Trigger Flag
  3118. #define FTM_EXTTRIG_INITTRIGEN 0x40 // Initialization Trigger Enable
  3119. #define FTM_EXTTRIG_CH1TRIG 0x20 // Channel 1 Trigger Enable
  3120. #define FTM_EXTTRIG_CH0TRIG 0x10 // Channel 0 Trigger Enable
  3121. #define FTM_EXTTRIG_CH5TRIG 0x08 // Channel 5 Trigger Enable
  3122. #define FTM_EXTTRIG_CH4TRIG 0x04 // Channel 4 Trigger Enable
  3123. #define FTM_EXTTRIG_CH3TRIG 0x02 // Channel 3 Trigger Enable
  3124. #define FTM_EXTTRIG_CH2TRIG 0x01 // Channel 2 Trigger Enable
  3125. #define FTM0_POL (*(volatile uint32_t *)0x40038070) // Channels Polarity
  3126. #define FTM_POL_POL7 0x80 // Channel 7 Polarity, 0=active high, 1=active low
  3127. #define FTM_POL_POL6 0x40 // Channel 6 Polarity, 0=active high, 1=active low
  3128. #define FTM_POL_POL5 0x20 // Channel 5 Polarity, 0=active high, 1=active low
  3129. #define FTM_POL_POL4 0x10 // Channel 4 Polarity, 0=active high, 1=active low
  3130. #define FTM_POL_POL3 0x08 // Channel 3 Polarity, 0=active high, 1=active low
  3131. #define FTM_POL_POL2 0x04 // Channel 2 Polarity, 0=active high, 1=active low
  3132. #define FTM_POL_POL1 0x02 // Channel 1 Polarity, 0=active high, 1=active low
  3133. #define FTM_POL_POL0 0x01 // Channel 0 Polarity, 0=active high, 1=active low
  3134. #define FTM0_FMS (*(volatile uint32_t *)0x40038074) // Fault Mode Status
  3135. #define FTM_FMS_FAULTF 0x80 // Fault Detection Flag
  3136. #define FTM_FMS_WPEN 0x40 // Write Protection Enable
  3137. #define FTM_FMS_FAULTIN 0x20 // Fault Inputs
  3138. #define FTM_FMS_FAULTF3 0x08 // Fault Detection Flag 3
  3139. #define FTM_FMS_FAULTF2 0x04 // Fault Detection Flag 2
  3140. #define FTM_FMS_FAULTF1 0x02 // Fault Detection Flag 1
  3141. #define FTM_FMS_FAULTF0 0x01 // Fault Detection Flag 0
  3142. #define FTM0_FILTER (*(volatile uint32_t *)0x40038078) // Input Capture Filter Control
  3143. #define FTM_FILTER_CH3FVAL(n) (((n) & 15) << 12) // Channel 3 Input Filter
  3144. #define FTM_FILTER_CH2FVAL(n) (((n) & 15) << 8) // Channel 2 Input Filter
  3145. #define FTM_FILTER_CH1FVAL(n) (((n) & 15) << 4) // Channel 1 Input Filter
  3146. #define FTM_FILTER_CH0FVAL(n) (((n) & 15) << 0) // Channel 0 Input Filter
  3147. #define FTM_FILTER_CH3FVAL_MASK 0xF000
  3148. #define FTM_FILTER_CH2FVAL_MASK 0x0F00
  3149. #define FTM_FILTER_CH1FVAL_MASK 0x00F0
  3150. #define FTM_FILTER_CH0FVAL_MASK 0x000F
  3151. #define FTM0_FLTCTRL (*(volatile uint32_t *)0x4003807C) // Fault Control
  3152. #define FTM_FLTCTRL_FFVAL(n) (((n) & 15) << 8) // Fault Input Filter Value, 0=disable
  3153. #define FTM_FLTCTRL_FFVAL_MASK 0xF00
  3154. #define FTM_FLTCTRL_FFLTR3EN 0x80 // Fault Input 3 Filter Enable
  3155. #define FTM_FLTCTRL_FFLTR2EN 0x40 // Fault Input 2 Filter Enable
  3156. #define FTM_FLTCTRL_FFLTR1EN 0x20 // Fault Input 1 Filter Enable
  3157. #define FTM_FLTCTRL_FFLTR0EN 0x10 // Fault Input 0 Filter Enable
  3158. #define FTM_FLTCTRL_FAULT3EN 0x08 // Fault Input 3 Enable
  3159. #define FTM_FLTCTRL_FAULT2EN 0x04 // Fault Input 2 Enable
  3160. #define FTM_FLTCTRL_FAULT1EN 0x02 // Fault Input 1 Enable
  3161. #define FTM_FLTCTRL_FAULT0EN 0x01 // Fault Input 0 Enable
  3162. #define FTM0_QDCTRL (*(volatile uint32_t *)0x40038080) // Quadrature Decoder Control And Status
  3163. #define FTM_QDCTRL_PHAFLTREN 0x80 // Phase A Input Filter Enable
  3164. #define FTM_QDCTRL_PHBFLTREN 0x40 // Phase B Input Filter Enable
  3165. #define FTM_QDCTRL_PHAPOL 0x20 // Phase A Input Polarity
  3166. #define FTM_QDCTRL_PHBPOL 0x10 // Phase B Input Polarity
  3167. #define FTM_QDCTRL_QUADMODE 0x08 // Quadrature Decoder Mode
  3168. #define FTM_QDCTRL_QUADIR 0x04 // FTM Counter Direction In Quadrature Decoder Mode
  3169. #define FTM_QDCTRL_TOFDIR 0x02 // Timer Overflow Direction In Quadrature Decoder Mode
  3170. #define FTM_QDCTRL_QUADEN 0x01 // Quadrature Decoder Mode Enable
  3171. #define FTM0_CONF (*(volatile uint32_t *)0x40038084) // Configuration
  3172. #define FTM_CONF_GTBEOUT 0x400 // Global Time Base Output
  3173. #define FTM_CONF_GTBEEN 0x200 // Global Time Base Enable
  3174. #define FTM_CONF_BDMMODE (((n) & 3) << 6) // Behavior when in debug mode
  3175. #define FTM_CONF_NUMTOF (((n) & 31) << 0) // ratio of counter overflows to TOF bit set
  3176. #define FTM0_FLTPOL (*(volatile uint32_t *)0x40038088) // FTM Fault Input Polarity
  3177. #define FTM_FLTPOL_FLT3POL 0x08 // Fault Input 3 Polarity
  3178. #define FTM_FLTPOL_FLT2POL 0x04 // Fault Input 2 Polarity
  3179. #define FTM_FLTPOL_FLT1POL 0x02 // Fault Input 1 Polarity
  3180. #define FTM_FLTPOL_FLT0POL 0x01 // Fault Input 0 Polarity
  3181. #define FTM0_SYNCONF (*(volatile uint32_t *)0x4003808C) // Synchronization Configuration
  3182. #define FTM_SYNCONF_HWSOC 0x100000 // Software output control synchronization is activated by a hardware trigger.
  3183. #define FTM_SYNCONF_HWINVC 0x080000 // Inverting control synchronization is activated by a hardware trigger.
  3184. #define FTM_SYNCONF_HWOM 0x040000 // Output mask synchronization is activated by a hardware trigger.
  3185. #define FTM_SYNCONF_HWWRBUF 0x020000 // MOD, CNTIN, and CV registers synchronization is activated by a hardware trigger.
  3186. #define FTM_SYNCONF_HWRSTCNT 0x010000 // FTM counter synchronization is activated by a hardware trigger.
  3187. #define FTM_SYNCONF_SWSOC 0x001000 // Software output control synchronization is activated by the software trigger.
  3188. #define FTM_SYNCONF_SWINVC 0x000800 // Inverting control synchronization is activated by the software trigger.
  3189. #define FTM_SYNCONF_SWOM 0x000400 // Output mask synchronization is activated by the software trigger.
  3190. #define FTM_SYNCONF_SWWRBUF 0x000200 // MOD, CNTIN, and CV registers synchronization is activated by the software trigger.
  3191. #define FTM_SYNCONF_SWRSTCNT 0x000100 // FTM counter synchronization is activated by the software trigger.
  3192. #define FTM_SYNCONF_SYNCMODE 0x000080 // Synchronization Mode, 0=Legacy, 1=Enhanced PWM
  3193. #define FTM_SYNCONF_SWOC 0x000020 // SWOCTRL Register Synchronization
  3194. #define FTM_SYNCONF_INVC 0x000010 // INVCTRL Register Synchronization
  3195. #define FTM_SYNCONF_CNTINC 0x000004 // CNTIN Register Synchronization
  3196. #define FTM_SYNCONF_HWTRIGMODE 0x000001 // Hardware Trigger Mode
  3197. #define FTM0_INVCTRL (*(volatile uint32_t *)0x40038090) // FTM Inverting Control
  3198. #define FTM_INVCTRL_INV3EN 0x08 // Pair Channels 3 Inverting Enable
  3199. #define FTM_INVCTRL_INV2EN 0x04 // Pair Channels 2 Inverting Enable
  3200. #define FTM_INVCTRL_INV1EN 0x02 // Pair Channels 1 Inverting Enable
  3201. #define FTM_INVCTRL_INV0EN 0x01 // Pair Channels 0 Inverting Enable
  3202. #define FTM0_SWOCTRL (*(volatile uint32_t *)0x40038094) // FTM Software Output Control
  3203. #define FTM_SWOCTRL_CH7OCV 0x8000 // Channel 7 Software Output Control Value
  3204. #define FTM_SWOCTRL_CH6OCV 0x4000 // Channel 6 Software Output Control Value
  3205. #define FTM_SWOCTRL_CH5OCV 0x2000 // Channel 5 Software Output Control Value
  3206. #define FTM_SWOCTRL_CH4OCV 0x1000 // Channel 4 Software Output Control Value
  3207. #define FTM_SWOCTRL_CH3OCV 0x0800 // Channel 3 Software Output Control Value
  3208. #define FTM_SWOCTRL_CH2OCV 0x0400 // Channel 2 Software Output Control Value
  3209. #define FTM_SWOCTRL_CH1OCV 0x0200 // Channel 1 Software Output Control Value
  3210. #define FTM_SWOCTRL_CH0OCV 0x0100 // Channel 0 Software Output Control Value
  3211. #define FTM_SWOCTRL_CH7OC 0x0080 // Channel 7 Software Output Control Enable
  3212. #define FTM_SWOCTRL_CH6OC 0x0040 // Channel 6 Software Output Control Enable
  3213. #define FTM_SWOCTRL_CH5OC 0x0020 // Channel 5 Software Output Control Enable
  3214. #define FTM_SWOCTRL_CH4OC 0x0010 // Channel 4 Software Output Control Enable
  3215. #define FTM_SWOCTRL_CH3OC 0x0008 // Channel 3 Software Output Control Enable
  3216. #define FTM_SWOCTRL_CH2OC 0x0004 // Channel 2 Software Output Control Enable
  3217. #define FTM_SWOCTRL_CH1OC 0x0002 // Channel 1 Software Output Control Enable
  3218. #define FTM_SWOCTRL_CH0OC 0x0001 // Channel 0 Software Output Control Enable
  3219. #define FTM0_PWMLOAD (*(volatile uint32_t *)0x40038098) // FTM PWM Load
  3220. #define FTM_PWMLOAD_LDOK 0x200 // Enables the loading of the MOD, CNTIN, and CV registers with the values of their write buffers
  3221. #define FTM_PWMLOAD_CH7SEL 0x80 // Channel 7 Select
  3222. #define FTM_PWMLOAD_CH6SEL 0x40 // Channel 6 Select
  3223. #define FTM_PWMLOAD_CH5SEL 0x20 // Channel 5 Select
  3224. #define FTM_PWMLOAD_CH4SEL 0x10 // Channel 4 Select
  3225. #define FTM_PWMLOAD_CH3SEL 0x08 // Channel 4 Select
  3226. #define FTM_PWMLOAD_CH2SEL 0x04 // Channel 3 Select
  3227. #define FTM_PWMLOAD_CH1SEL 0x02 // Channel 2 Select
  3228. #define FTM_PWMLOAD_CH0SEL 0x01 // Channel 1 Select
  3229. #define FTM1_SC (*(volatile uint32_t *)0x40039000) // Status And Control
  3230. #define FTM1_CNT (*(volatile uint32_t *)0x40039004) // Counter
  3231. #define FTM1_MOD (*(volatile uint32_t *)0x40039008) // Modulo
  3232. #define FTM1_C0SC (*(volatile uint32_t *)0x4003900C) // Channel 0 Status And Control
  3233. #define FTM1_C0V (*(volatile uint32_t *)0x40039010) // Channel 0 Value
  3234. #define FTM1_C1SC (*(volatile uint32_t *)0x40039014) // Channel 1 Status And Control
  3235. #define FTM1_C1V (*(volatile uint32_t *)0x40039018) // Channel 1 Value
  3236. #define FTM1_CNTIN (*(volatile uint32_t *)0x4003904C) // Counter Initial Value
  3237. #define FTM1_STATUS (*(volatile uint32_t *)0x40039050) // Capture And Compare Status
  3238. #define FTM1_MODE (*(volatile uint32_t *)0x40039054) // Features Mode Selection
  3239. #define FTM1_SYNC (*(volatile uint32_t *)0x40039058) // Synchronization
  3240. #define FTM1_OUTINIT (*(volatile uint32_t *)0x4003905C) // Initial State For Channels Output
  3241. #define FTM1_OUTMASK (*(volatile uint32_t *)0x40039060) // Output Mask
  3242. #define FTM1_COMBINE (*(volatile uint32_t *)0x40039064) // Function For Linked Channels
  3243. #define FTM1_DEADTIME (*(volatile uint32_t *)0x40039068) // Deadtime Insertion Control
  3244. #define FTM1_EXTTRIG (*(volatile uint32_t *)0x4003906C) // FTM External Trigger
  3245. #define FTM1_POL (*(volatile uint32_t *)0x40039070) // Channels Polarity
  3246. #define FTM1_FMS (*(volatile uint32_t *)0x40039074) // Fault Mode Status
  3247. #define FTM1_FILTER (*(volatile uint32_t *)0x40039078) // Input Capture Filter Control
  3248. #define FTM1_FLTCTRL (*(volatile uint32_t *)0x4003907C) // Fault Control
  3249. #define FTM1_QDCTRL (*(volatile uint32_t *)0x40039080) // Quadrature Decoder Control And Status
  3250. #define FTM1_CONF (*(volatile uint32_t *)0x40039084) // Configuration
  3251. #define FTM1_FLTPOL (*(volatile uint32_t *)0x40039088) // FTM Fault Input Polarity
  3252. #define FTM1_SYNCONF (*(volatile uint32_t *)0x4003908C) // Synchronization Configuration
  3253. #define FTM1_INVCTRL (*(volatile uint32_t *)0x40039090) // FTM Inverting Control
  3254. #define FTM1_SWOCTRL (*(volatile uint32_t *)0x40039094) // FTM Software Output Control
  3255. #define FTM1_PWMLOAD (*(volatile uint32_t *)0x40039098) // FTM PWM Load
  3256. #if defined(KINETISK)
  3257. #define FTM2_SC (*(volatile uint32_t *)0x400B8000) // Status And Control
  3258. #define FTM2_CNT (*(volatile uint32_t *)0x400B8004) // Counter
  3259. #define FTM2_MOD (*(volatile uint32_t *)0x400B8008) // Modulo
  3260. #define FTM2_C0SC (*(volatile uint32_t *)0x400B800C) // Channel 0 Status And Control
  3261. #define FTM2_C0V (*(volatile uint32_t *)0x400B8010) // Channel 0 Value
  3262. #define FTM2_C1SC (*(volatile uint32_t *)0x400B8014) // Channel 1 Status And Control
  3263. #define FTM2_C1V (*(volatile uint32_t *)0x400B8018) // Channel 1 Value
  3264. #define FTM2_CNTIN (*(volatile uint32_t *)0x400B804C) // Counter Initial Value
  3265. #define FTM2_STATUS (*(volatile uint32_t *)0x400B8050) // Capture And Compare Status
  3266. #define FTM2_MODE (*(volatile uint32_t *)0x400B8054) // Features Mode Selection
  3267. #define FTM2_SYNC (*(volatile uint32_t *)0x400B8058) // Synchronization
  3268. #define FTM2_OUTINIT (*(volatile uint32_t *)0x400B805C) // Initial State For Channels Output
  3269. #define FTM2_OUTMASK (*(volatile uint32_t *)0x400B8060) // Output Mask
  3270. #define FTM2_COMBINE (*(volatile uint32_t *)0x400B8064) // Function For Linked Channels
  3271. #define FTM2_DEADTIME (*(volatile uint32_t *)0x400B8068) // Deadtime Insertion Control
  3272. #define FTM2_EXTTRIG (*(volatile uint32_t *)0x400B806C) // FTM External Trigger
  3273. #define FTM2_POL (*(volatile uint32_t *)0x400B8070) // Channels Polarity
  3274. #define FTM2_FMS (*(volatile uint32_t *)0x400B8074) // Fault Mode Status
  3275. #define FTM2_FILTER (*(volatile uint32_t *)0x400B8078) // Input Capture Filter Control
  3276. #define FTM2_FLTCTRL (*(volatile uint32_t *)0x400B807C) // Fault Control
  3277. #define FTM2_QDCTRL (*(volatile uint32_t *)0x400B8080) // Quadrature Decoder Control And Status
  3278. #define FTM2_CONF (*(volatile uint32_t *)0x400B8084) // Configuration
  3279. #define FTM2_FLTPOL (*(volatile uint32_t *)0x400B8088) // FTM Fault Input Polarity
  3280. #define FTM2_SYNCONF (*(volatile uint32_t *)0x400B808C) // Synchronization Configuration
  3281. #define FTM2_INVCTRL (*(volatile uint32_t *)0x400B8090) // FTM Inverting Control
  3282. #define FTM2_SWOCTRL (*(volatile uint32_t *)0x400B8094) // FTM Software Output Control
  3283. #define FTM2_PWMLOAD (*(volatile uint32_t *)0x400B8098) // FTM PWM Load
  3284. #define FTM3_SC (*(volatile uint32_t *)0x400B9000) // Status And Control
  3285. #define FTM3_CNT (*(volatile uint32_t *)0x400B9004) // Counter
  3286. #define FTM3_MOD (*(volatile uint32_t *)0x400B9008) // Modulo
  3287. #define FTM3_C0SC (*(volatile uint32_t *)0x400B900C) // Channel 0 Status And Control
  3288. #define FTM3_C0V (*(volatile uint32_t *)0x400B9010) // Channel 0 Value
  3289. #define FTM3_C1SC (*(volatile uint32_t *)0x400B9014) // Channel 1 Status And Control
  3290. #define FTM3_C1V (*(volatile uint32_t *)0x400B9018) // Channel 1 Value
  3291. #define FTM3_C2SC (*(volatile uint32_t *)0x400B901C) // Channel 1 Status And Control
  3292. #define FTM3_C2V (*(volatile uint32_t *)0x400B9020) // Channel 1 Value
  3293. #define FTM3_C3SC (*(volatile uint32_t *)0x400B9024) // Channel 1 Status And Control
  3294. #define FTM3_C3V (*(volatile uint32_t *)0x400B9028) // Channel 1 Value
  3295. #define FTM3_C4SC (*(volatile uint32_t *)0x400B902C) // Channel 1 Status And Control
  3296. #define FTM3_C4V (*(volatile uint32_t *)0x400B9030) // Channel 1 Value
  3297. #define FTM3_C5SC (*(volatile uint32_t *)0x400B9034) // Channel 1 Status And Control
  3298. #define FTM3_C5V (*(volatile uint32_t *)0x400B9038) // Channel 1 Value
  3299. #define FTM3_C6SC (*(volatile uint32_t *)0x400B903C) // Channel 1 Status And Control
  3300. #define FTM3_C6V (*(volatile uint32_t *)0x400B9040) // Channel 1 Value
  3301. #define FTM3_C7SC (*(volatile uint32_t *)0x400B9044) // Channel 1 Status And Control
  3302. #define FTM3_C7V (*(volatile uint32_t *)0x400B9048) // Channel 1 Value
  3303. #define FTM3_CNTIN (*(volatile uint32_t *)0x400B904C) // Counter Initial Value
  3304. #define FTM3_STATUS (*(volatile uint32_t *)0x400B9050) // Capture And Compare Status
  3305. #define FTM3_MODE (*(volatile uint32_t *)0x400B9054) // Features Mode Selection
  3306. #define FTM3_SYNC (*(volatile uint32_t *)0x400B9058) // Synchronization
  3307. #define FTM3_OUTINIT (*(volatile uint32_t *)0x400B905C) // Initial State For Channels Output
  3308. #define FTM3_OUTMASK (*(volatile uint32_t *)0x400B9060) // Output Mask
  3309. #define FTM3_COMBINE (*(volatile uint32_t *)0x400B9064) // Function For Linked Channels
  3310. #define FTM3_DEADTIME (*(volatile uint32_t *)0x400B9068) // Deadtime Insertion Control
  3311. #define FTM3_EXTTRIG (*(volatile uint32_t *)0x400B906C) // FTM External Trigger
  3312. #define FTM3_POL (*(volatile uint32_t *)0x400B9070) // Channels Polarity
  3313. #define FTM3_FMS (*(volatile uint32_t *)0x400B9074) // Fault Mode Status
  3314. #define FTM3_FILTER (*(volatile uint32_t *)0x400B9078) // Input Capture Filter Control
  3315. #define FTM3_FLTCTRL (*(volatile uint32_t *)0x400B907C) // Fault Control
  3316. #define FTM3_QDCTRL (*(volatile uint32_t *)0x400B9080) // Quadrature Decoder Control And Status
  3317. #define FTM3_CONF (*(volatile uint32_t *)0x400B9084) // Configuration
  3318. #define FTM3_FLTPOL (*(volatile uint32_t *)0x400B9088) // FTM Fault Input Polarity
  3319. #define FTM3_SYNCONF (*(volatile uint32_t *)0x400B908C) // Synchronization Configuration
  3320. #define FTM3_INVCTRL (*(volatile uint32_t *)0x400B9090) // FTM Inverting Control
  3321. #define FTM3_SWOCTRL (*(volatile uint32_t *)0x400B9094) // FTM Software Output Control
  3322. #define FTM3_PWMLOAD (*(volatile uint32_t *)0x400B9098) // FTM PWM Load
  3323. #elif defined(KINETISL)
  3324. #define FTM2_SC (*(volatile uint32_t *)0x4003A000) // Status And Control
  3325. #define FTM2_CNT (*(volatile uint32_t *)0x4003A004) // Counter
  3326. #define FTM2_MOD (*(volatile uint32_t *)0x4003A008) // Modulo
  3327. #define FTM2_C0SC (*(volatile uint32_t *)0x4003A00C) // Channel 0 Status And Control
  3328. #define FTM2_C0V (*(volatile uint32_t *)0x4003A010) // Channel 0 Value
  3329. #define FTM2_C1SC (*(volatile uint32_t *)0x4003A014) // Channel 1 Status And Control
  3330. #define FTM2_C1V (*(volatile uint32_t *)0x4003A018) // Channel 1 Value
  3331. #define FTM2_STATUS (*(volatile uint32_t *)0x4003A050) // Capture And Compare Status
  3332. #define FTM2_CONF (*(volatile uint32_t *)0x4003A084) // Configuration
  3333. #endif
  3334. // Periodic Interrupt Timer (PIT)
  3335. #define PIT_MCR (*(volatile uint32_t *)0x40037000) // PIT Module Control Register
  3336. #define PIT_MCR_MDIS (1<<1) // Module disable
  3337. #define PIT_MCR_FRZ (1<<0) // Freeze
  3338. #if defined(KINETISL)
  3339. #define PIT_LTMR64H (*(volatile uint32_t *)0x400370E0) // PIT Upper Lifetime Timer Register
  3340. #define PIT_LTMR64L (*(volatile uint32_t *)0x400370E4) // PIT Lower Lifetime Timer Register
  3341. #endif // defined(KINETISL)
  3342. typedef struct {
  3343. volatile uint32_t LDVAL;
  3344. volatile uint32_t CVAL;
  3345. volatile uint32_t TCTRL;
  3346. volatile uint32_t TFLG;
  3347. } KINETISK_PIT_CHANNEL_t;
  3348. #define KINETISK_PIT_CHANNELS (KINETISK_PIT_CHANNEL_t *)(0x40037100)
  3349. #define PIT_LDVAL0 (*(volatile uint32_t *)0x40037100) // Timer Load Value Register
  3350. #define PIT_CVAL0 (*(volatile uint32_t *)0x40037104) // Current Timer Value Register
  3351. #define PIT_TCTRL0 (*(volatile uint32_t *)0x40037108) // Timer Control Register
  3352. #define PIT_TCTRL_CHN (1<<2) // Chain Mode
  3353. #define PIT_TCTRL_TIE (1<<1) // Timer Interrupt Enable
  3354. #define PIT_TCTRL_TEN (1<<0) // Timer Enable
  3355. #define PIT_TFLG0 (*(volatile uint32_t *)0x4003710C) // Timer Flag Register
  3356. #define PIT_TFLG_TIF (1<<0) // Timer Interrupt Flag (write 1 to clear)
  3357. #define PIT_LDVAL1 (*(volatile uint32_t *)0x40037110) // Timer Load Value Register
  3358. #define PIT_CVAL1 (*(volatile uint32_t *)0x40037114) // Current Timer Value Register
  3359. #define PIT_TCTRL1 (*(volatile uint32_t *)0x40037118) // Timer Control Register
  3360. #define PIT_TFLG1 (*(volatile uint32_t *)0x4003711C) // Timer Flag Register
  3361. #if defined(KINETISK) // the 3.1 has 4 PITs, LC has only 2
  3362. #define PIT_LDVAL2 (*(volatile uint32_t *)0x40037120) // Timer Load Value Register
  3363. #define PIT_CVAL2 (*(volatile uint32_t *)0x40037124) // Current Timer Value Register
  3364. #define PIT_TCTRL2 (*(volatile uint32_t *)0x40037128) // Timer Control Register
  3365. #define PIT_TFLG2 (*(volatile uint32_t *)0x4003712C) // Timer Flag Register
  3366. #define PIT_LDVAL3 (*(volatile uint32_t *)0x40037130) // Timer Load Value Register
  3367. #define PIT_CVAL3 (*(volatile uint32_t *)0x40037134) // Current Timer Value Register
  3368. #define PIT_TCTRL3 (*(volatile uint32_t *)0x40037138) // Timer Control Register
  3369. #define PIT_TFLG3 (*(volatile uint32_t *)0x4003713C) // Timer Flag Register
  3370. #endif // defined(KINETISK)
  3371. // Low-Power Timer (LPTMR)
  3372. #define LPTMR0_CSR (*(volatile uint32_t *)0x40040000) // Low Power Timer Control Status Register
  3373. #define LPTMR_CSR_TCF 0x80 // Compare Flag
  3374. #define LPTMR_CSR_TIE 0x40 // Interrupt Enable
  3375. #define LPTMR_CSR_TPS(n) (((n) & 3) << 4) // Pin: 0=CMP0, 1=xtal, 2=pin13
  3376. #define LPTMR_CSR_TPP 0x08 // Pin Polarity
  3377. #define LPTMR_CSR_TFC 0x04 // Free-Running Counter
  3378. #define LPTMR_CSR_TMS 0x02 // Mode Select, 0=timer, 1=counter
  3379. #define LPTMR_CSR_TEN 0x01 // Enable
  3380. #define LPTMR0_PSR (*(volatile uint32_t *)0x40040004) // Low Power Timer Prescale Register
  3381. #define LPTMR_PSR_PRESCALE(n) (((n) & 15) << 3) // Prescaler value
  3382. #define LPTMR_PSR_PBYP 0x04 // Prescaler bypass
  3383. #define LPTMR_PSR_PCS(n) (((n) & 3) << 0) // Clock: 0=MCGIRCLK, 1=LPO(1kHz), 2=ERCLK32K, 3=OSCERCLK
  3384. #define LPTMR0_CMR (*(volatile uint32_t *)0x40040008) // Low Power Timer Compare Register
  3385. #define LPTMR0_CNR (*(volatile uint32_t *)0x4004000C) // Low Power Timer Counter Register
  3386. // Carrier Modulator Transmitter (CMT)
  3387. #define CMT_CGH1 (*(volatile uint8_t *)0x40062000) // CMT Carrier Generator High Data Register 1
  3388. #define CMT_CGL1 (*(volatile uint8_t *)0x40062001) // CMT Carrier Generator Low Data Register 1
  3389. #define CMT_CGH2 (*(volatile uint8_t *)0x40062002) // CMT Carrier Generator High Data Register 2
  3390. #define CMT_CGL2 (*(volatile uint8_t *)0x40062003) // CMT Carrier Generator Low Data Register 2
  3391. #define CMT_OC (*(volatile uint8_t *)0x40062004) // CMT Output Control Register
  3392. #define CMT_MSC (*(volatile uint8_t *)0x40062005) // CMT Modulator Status and Control Register
  3393. #define CMT_CMD1 (*(volatile uint8_t *)0x40062006) // CMT Modulator Data Register Mark High
  3394. #define CMT_CMD2 (*(volatile uint8_t *)0x40062007) // CMT Modulator Data Register Mark Low
  3395. #define CMT_CMD3 (*(volatile uint8_t *)0x40062008) // CMT Modulator Data Register Space High
  3396. #define CMT_CMD4 (*(volatile uint8_t *)0x40062009) // CMT Modulator Data Register Space Low
  3397. #define CMT_PPS (*(volatile uint8_t *)0x4006200A) // CMT Primary Prescaler Register
  3398. #define CMT_DMA (*(volatile uint8_t *)0x4006200B) // CMT Direct Memory Access Register
  3399. // Real Time Clock (RTC)
  3400. #define RTC_TSR (*(volatile uint32_t *)0x4003D000) // RTC Time Seconds Register
  3401. #define RTC_TPR (*(volatile uint32_t *)0x4003D004) // RTC Time Prescaler Register
  3402. #define RTC_TAR (*(volatile uint32_t *)0x4003D008) // RTC Time Alarm Register
  3403. #define RTC_TCR (*(volatile uint32_t *)0x4003D00C) // RTC Time Compensation Register
  3404. #define RTC_TCR_CIC(n) (((n) & 255) << 24) // Compensation Interval Counter
  3405. #define RTC_TCR_TCV(n) (((n) & 255) << 16) // Time Compensation Value
  3406. #define RTC_TCR_CIR(n) (((n) & 255) << 8) // Compensation Interval Register
  3407. #define RTC_TCR_TCR(n) (((n) & 255) << 0) // Time Compensation Register
  3408. #define RTC_CR (*(volatile uint32_t *)0x4003D010) // RTC Control Register
  3409. #define RTC_CR_SC2P ((uint32_t)0x00002000) //
  3410. #define RTC_CR_SC4P ((uint32_t)0x00001000) //
  3411. #define RTC_CR_SC8P ((uint32_t)0x00000800) //
  3412. #define RTC_CR_SC16P ((uint32_t)0x00000400) //
  3413. #define RTC_CR_CLKO ((uint32_t)0x00000200) //
  3414. #define RTC_CR_OSCE ((uint32_t)0x00000100) //
  3415. #define RTC_CR_UM ((uint32_t)0x00000008) //
  3416. #define RTC_CR_SUP ((uint32_t)0x00000004) //
  3417. #define RTC_CR_WPE ((uint32_t)0x00000002) //
  3418. #define RTC_CR_SWR ((uint32_t)0x00000001) //
  3419. #define RTC_SR (*(volatile uint32_t *)0x4003D014) // RTC Status Register
  3420. #define RTC_SR_TCE ((uint32_t)0x00000010) //
  3421. #define RTC_SR_TAF ((uint32_t)0x00000004) //
  3422. #define RTC_SR_TOF ((uint32_t)0x00000002) //
  3423. #define RTC_SR_TIF ((uint32_t)0x00000001) //
  3424. #define RTC_LR (*(volatile uint32_t *)0x4003D018) // RTC Lock Register
  3425. #define RTC_IER (*(volatile uint32_t *)0x4003D01C) // RTC Interrupt Enable Register
  3426. #define RTC_WAR (*(volatile uint32_t *)0x4003D800) // RTC Write Access Register
  3427. #define RTC_RAR (*(volatile uint32_t *)0x4003D804) // RTC Read Access Register
  3428. // 10/100-Mbps Ethernet MAC (ENET)
  3429. #define ENET_EIR (*(volatile uint32_t *)0x400C0004) // Interrupt Event Register
  3430. #define ENET_EIR_BABR ((uint32_t)0x40000000) // Babbling Receive Error
  3431. #define ENET_EIR_BABT ((uint32_t)0x20000000) // Babbling Transmit Error
  3432. #define ENET_EIR_GRA ((uint32_t)0x10000000) // Graceful Stop Complete
  3433. #define ENET_EIR_TXF ((uint32_t)0x08000000) // Transmit Frame Interrupt
  3434. #define ENET_EIR_TXB ((uint32_t)0x04000000) // Transmit Buffer Interrupt
  3435. #define ENET_EIR_RXF ((uint32_t)0x02000000) // Receive Frame Interrupt
  3436. #define ENET_EIR_RXB ((uint32_t)0x01000000) // Receive Buffer Interrupt
  3437. #define ENET_EIR_MII ((uint32_t)0x00800000) // MII Interrupt
  3438. #define ENET_EIR_EBERR ((uint32_t)0x00400000) // Ethernet Bus Error
  3439. #define ENET_EIR_LC ((uint32_t)0x00200000) // Late Collision
  3440. #define ENET_EIR_RL ((uint32_t)0x00100000) // Collision Retry Limit
  3441. #define ENET_EIR_UN ((uint32_t)0x00080000) // Transmit FIFO Underrun
  3442. #define ENET_EIR_PLR ((uint32_t)0x00040000) // Payload Receive Error
  3443. #define ENET_EIR_WAKEUP ((uint32_t)0x00020000) // Node Wakeup Request Indication
  3444. #define ENET_EIR_TS_AVAIL ((uint32_t)0x00010000) // Transmit Timestamp Available
  3445. #define ENET_EIR_TS_TIMER ((uint32_t)0x00008000) // Timestamp Timer
  3446. #define ENET_EIMR (*(volatile uint32_t *)0x400C0008) // Interrupt Mask Register
  3447. #define ENET_EIRM_BABR ((uint32_t)0x40000000) // Babbling Receive Error Mask
  3448. #define ENET_EIRM_BABT ((uint32_t)0x20000000) // Babbling Transmit Error Mask
  3449. #define ENET_EIRM_GRA ((uint32_t)0x10000000) // Graceful Stop Complete Mask
  3450. #define ENET_EIRM_TXF ((uint32_t)0x08000000) // Transmit Frame Interrupt Mask
  3451. #define ENET_EIRM_TXB ((uint32_t)0x04000000) // Transmit Buffer Interrupt Mask
  3452. #define ENET_EIRM_RXF ((uint32_t)0x02000000) // Receive Frame Interrupt Mask
  3453. #define ENET_EIRM_RXB ((uint32_t)0x01000000) // Receive Buffer Interrupt Mask
  3454. #define ENET_EIRM_MII ((uint32_t)0x00800000) // MII Interrupt Mask
  3455. #define ENET_EIRM_EBERR ((uint32_t)0x00400000) // Ethernet Bus Error Mask
  3456. #define ENET_EIRM_LC ((uint32_t)0x00200000) // Late Collision Mask
  3457. #define ENET_EIRM_RL ((uint32_t)0x00100000) // Collision Retry Limit Mask
  3458. #define ENET_EIRM_UN ((uint32_t)0x00080000) // Transmit FIFO Underrun Mask
  3459. #define ENET_EIRM_PLR ((uint32_t)0x00040000) // Payload Receive Error Mask
  3460. #define ENET_EIRM_WAKEUP ((uint32_t)0x00020000) // Node Wakeup Request Indication Mask
  3461. #define ENET_EIRM_TS_AVAIL ((uint32_t)0x00010000) // Transmit Timestamp Available Mask
  3462. #define ENET_EIRM_TS_TIMER ((uint32_t)0x00008000) // Timestamp Timer Mask
  3463. #define ENET_RDAR (*(volatile uint32_t *)0x400C0010) // Receive Descriptor Active Register
  3464. #define ENET_RDAR_RDAR ((uint32_t)0x01000000)
  3465. #define ENET_TDAR (*(volatile uint32_t *)0x400C0014) // Transmit Descriptor Active Register
  3466. #define ENET_TDAR_TDAR ((uint32_t)0x01000000)
  3467. #define ENET_ECR (*(volatile uint32_t *)0x400C0024) // Ethernet Control Register
  3468. #define ENET_ECR_DBSWP ((uint32_t)0x00000100) // Descriptor Byte Swapping Enable
  3469. #define ENET_ECR_STOPEN ((uint32_t)0x00000080) // STOPEN Signal Control
  3470. #define ENET_ECR_DBGEN ((uint32_t)0x00000040) // Debug Enable
  3471. #define ENET_ECR_EN1588 ((uint32_t)0x00000010) // EN1588 Enable
  3472. #define ENET_ECR_SLEEP ((uint32_t)0x00000008) // Sleep Mode Enable
  3473. #define ENET_ECR_MAGICEN ((uint32_t)0x00000004) // Magic Packet Detection Enable
  3474. #define ENET_ECR_ETHEREN ((uint32_t)0x00000002) // Ethernet Enable
  3475. #define ENET_ECR_RESET ((uint32_t)0x00000001) // Ethernet MAC Reset
  3476. #define ENET_MMFR (*(volatile uint32_t *)0x400C0040) // MII Management Frame Register
  3477. #define ENET_MMFR_ST(n) (uint32_t)(((n) & 0x3) << 30)
  3478. #define ENET_MMFR_OP(n) (uint32_t)(((n) & 0x3) << 28)
  3479. #define ENET_MMFR_PA(n) (uint32_t)(((n) & 0x1F) << 23)
  3480. #define ENET_MMFR_RA(n) (uint32_t)(((n) & 0x1F) << 18)
  3481. #define ENET_MMFR_TA(n) (uint32_t)(((n) & 0x3) << 16)
  3482. #define ENET_MMFR_DATA(n) (uint32_t)(((n) & 0xFFFF) << 0)
  3483. #define ENET_MMFR_DATA_MASK ((uint32_t)0x0000FFFF)
  3484. #define ENET_MSCR (*(volatile uint32_t *)0x400C0044) // MII Speed Control Register
  3485. #define ENET_MSCR_HOLDTIME(n) (uint32_t)(((n) & 0x7) << 8)
  3486. #define ENET_MSCR_DIS_PRE ((uint32_t)0x00000080)
  3487. #define ENET_MSCR_MII_SPEED(n) (uint32_t)(((n) & 0x3F) << 1)
  3488. #define ENET_MIBC (*(volatile uint32_t *)0x400C0064) // MIB Control Register
  3489. #define ENET_MIBC_MIB_DIS ((uint32_t)0x80000000) // Disable MIB Logic
  3490. #define ENET_MIBC_MIB_IDLE ((uint32_t)0x40000000) // MIB Idle
  3491. #define ENET_MIBC_MIB_CLEAR ((uint32_t)0x20000000) // MIB Clear
  3492. #define ENET_RCR (*(volatile uint32_t *)0x400C0084) // Receive Control Register
  3493. #define ENET_RCR_GRS ((uint32_t)0x80000000) // Graceful Receive Stopped
  3494. #define ENET_RCR_NLC ((uint32_t)0x40000000) // Payload Length Check Disable
  3495. #define ENET_RCR_MAX_FL(n) (uint32_t)(((n) & 0x3FFF)<<16) // Maximum Frame Length
  3496. #define ENET_RCR_CFEN ((uint32_t)0x00008000) // MAC Control Frame Enable
  3497. #define ENET_RCR_CRCFWD ((uint32_t)0x00004000) // Terminate/Forward Received CRC
  3498. #define ENET_RCR_PAUFWD ((uint32_t)0x00002000) // Terminate/Forward Pause Frames
  3499. #define ENET_RCR_PADEN ((uint32_t)0x00001000) // Enable Frame Padding Remove On Receive
  3500. #define ENET_RCR_RMII_10T ((uint32_t)0x00000200) // Enables 10-Mbps mode of the RMII
  3501. #define ENET_RCR_RMII_MODE ((uint32_t)0x00000100) // RMII Mode Enable
  3502. #define ENET_RCR_FCE ((uint32_t)0x00000020) // Flow Control Enable
  3503. #define ENET_RCR_BC_REJ ((uint32_t)0x00000010) // Broadcast Frame Reject
  3504. #define ENET_RCR_PROM ((uint32_t)0x00000008) // Promiscuous Mode
  3505. #define ENET_RCR_MII_MODE ((uint32_t)0x00000004) // Media Independent Interface Mode
  3506. #define ENET_RCR_DRT ((uint32_t)0x00000002) // Disable Receive On Transmit
  3507. #define ENET_RCR_LOOP ((uint32_t)0x00000001) // Internal Loopback
  3508. #define ENET_TCR (*(volatile uint32_t *)0x400C00C4) // Transmit Control Register
  3509. #define ENET_TCR_CRCFWD ((uint32_t)0x00000200) // Forward Frame From Application With CRC
  3510. #define ENET_TCR_ADDINS ((uint32_t)0x00000100) // Set MAC Address On Transmit
  3511. #define ENET_TCR_ADDSEL(n) (uint32_t)(((n) & 0x7)<<5) // Source MAC Address Select On Transmit
  3512. #define ENET_TCR_RFC_PAUSE ((uint32_t)0x00000010) // Receive Frame Control Pause
  3513. #define ENET_TCR_TFC_PAUSE ((uint32_t)0x00000008) // Transmit Frame Control Pause
  3514. #define ENET_TCR_FDEN ((uint32_t)0x00000004) // Full-Duplex Enable
  3515. #define ENET_TCR_GTS ((uint32_t)0x00000001) // Graceful Transmit Stop
  3516. #define ENET_PALR (*(volatile uint32_t *)0x400C00E4) // Physical Address Lower Register
  3517. #define ENET_PAUR (*(volatile uint32_t *)0x400C00E8) // Physical Address Upper Register
  3518. #define ENET_OPD (*(volatile uint32_t *)0x400C00EC) // Opcode/Pause Duration Register
  3519. #define ENET_IAUR (*(volatile uint32_t *)0x400C0118) // Descriptor Individual Upper Address Register
  3520. #define ENET_IALR (*(volatile uint32_t *)0x400C011C) // Descriptor Individual Lower Address Register
  3521. #define ENET_GAUR (*(volatile uint32_t *)0x400C0120) // Descriptor Group Upper Address Register
  3522. #define ENET_GALR (*(volatile uint32_t *)0x400C0124) // Descriptor Group Lower Address Register
  3523. #define ENET_TFWR (*(volatile uint32_t *)0x400C0144) // Transmit FIFO Watermark Register
  3524. #define ENET_TFWR_STRFWD ((uint32_t)0x00000100) // Store And Forward Enable
  3525. #define ENET_TFWR_TFWR(n) (uint32_t)(((n) & 0x3F)<<0) // Transmit FIFO Write (X64 bytes)
  3526. #define ENET_RDSR (*(volatile uint32_t *)0x400C0180) // Receive Descriptor Ring Start Register
  3527. #define ENET_TDSR (*(volatile uint32_t *)0x400C0184) // Transmit Buffer Descriptor Ring Start Register
  3528. #define ENET_MRBR (*(volatile uint32_t *)0x400C0188) // Maximum Receive Buffer Size Register
  3529. #define ENET_RSFL (*(volatile uint32_t *)0x400C0190) // Receive FIFO Section Full Threshold
  3530. #define ENET_RSEM (*(volatile uint32_t *)0x400C0194) // Receive FIFO Section Empty Threshold
  3531. #define ENET_RSEM_STAT_SECTION_EMPTY(n) (uint32_t)(((n) & 0x7)<<5) // RX Status FIFO Section Empty Threshold
  3532. #define ENET_RSEM_RX_SECTION_EMPTY(n) (uint32_t)(((n) & 0x7)<<5) // Value Of The Receive FIFO Section Empty Threshold
  3533. #define ENET_RAEM (*(volatile uint32_t *)0x400C0198) // Receive FIFO Almost Empty Threshold
  3534. #define ENET_RAFL (*(volatile uint32_t *)0x400C019C) // Receive FIFO Almost Full Threshold
  3535. #define ENET_TSEM (*(volatile uint32_t *)0x400C01A0) // Transmit FIFO Section Empty Threshold
  3536. #define ENET_TAEM (*(volatile uint32_t *)0x400C01A4) // Transmit FIFO Almost Empty Threshold
  3537. #define ENET_TAFL (*(volatile uint32_t *)0x400C01A8) // Transmit FIFO Almost Full Threshold
  3538. #define ENET_TIPG (*(volatile uint32_t *)0x400C01AC) // Transmit Inter-Packet Gap
  3539. #define ENET_FTRL (*(volatile uint32_t *)0x400C01B0) // Frame Truncation Length
  3540. #define ENET_TACC (*(volatile uint32_t *)0x400C01C0) // Transmit Accelerator Function Configuration
  3541. #define ENET_TACC_PROCHK ((uint32_t)0x00000010) // Enables insertion of protocol checksum
  3542. #define ENET_TACC_IPCHK ((uint32_t)0x00000008) // Enables insertion of IP header checksum
  3543. #define ENET_TACC_SHIFT16 ((uint32_t)0x00000001) // TX FIFO Shift-16 (align data to 32 bits)
  3544. #define ENET_RACC (*(volatile uint32_t *)0x400C01C4) // Receive Accelerator Function Configuration
  3545. #define ENET_RACC_SHIFT16 ((uint32_t)0x00000080) // RX FIFO Shift-16 (align data to 32 bits)
  3546. #define ENET_RACC_LINEDIS ((uint32_t)0x00000040) // Enable Discard Of Frames With MAC Layer Errors
  3547. #define ENET_RACC_PRODIS ((uint32_t)0x00000004) // Enable Discard Of Frames With Wrong Protocol Checksum
  3548. #define ENET_RACC_IPDIS ((uint32_t)0x00000002) // Enable Discard Of Frames With Wrong IPv4 Header Checksum
  3549. #define ENET_RACC_PADREM ((uint32_t)0x00000001) // Enable Padding Removal For Short IP Frames
  3550. #define ENET_RMON_T_DROP (*(volatile uint32_t *)0x400C0200) // Reserved Statistic Register
  3551. #define ENET_RMON_T_PACKETS (*(volatile uint32_t *)0x400C0204) // Tx Packet Count Statistic Register
  3552. #define ENET_RMON_T_BC_PKT (*(volatile uint32_t *)0x400C0208) // Tx Broadcast Packets Statistic Register
  3553. #define ENET_RMON_T_MC_PKT (*(volatile uint32_t *)0x400C020C) // Tx Multicast Packets Statistic Register
  3554. #define ENET_RMON_T_CRC_ALIGN (*(volatile uint32_t *)0x400C0210) // Tx Packets with CRC/Align Error Statistic Register
  3555. #define ENET_RMON_T_UNDERSIZE (*(volatile uint32_t *)0x400C0214) // Tx Packets Less Than Bytes and Good CRC Statistic Register
  3556. #define ENET_RMON_T_OVERSIZE (*(volatile uint32_t *)0x400C0218) // Tx Packets GT MAX_FL bytes and Good CRC Statistic Register
  3557. #define ENET_RMON_T_FRAG (*(volatile uint32_t *)0x400C021C) // Tx Packets Less Than 64 Bytes and Bad CRC Statistic Register
  3558. #define ENET_RMON_T_JAB (*(volatile uint32_t *)0x400C0220) // Tx Packets Greater Than MAX_FL bytes and Bad CRC Statistic Register
  3559. #define ENET_RMON_T_COL (*(volatile uint32_t *)0x400C0224) // Tx Collision Count Statistic Register
  3560. #define ENET_RMON_T_P64 (*(volatile uint32_t *)0x400C0228) // Tx 64-Byte Packets Statistic Register
  3561. #define ENET_RMON_T_P65TO127 (*(volatile uint32_t *)0x400C022C) // Tx 65- to 127-byte Packets Statistic Register
  3562. #define ENET_RMON_T_P128TO255 (*(volatile uint32_t *)0x400C0230) // Tx 128- to 255-byte Packets Statistic Register
  3563. #define ENET_RMON_T_P256TO511 (*(volatile uint32_t *)0x400C0234) // Tx 256- to 511-byte Packets Statistic Register
  3564. #define ENET_RMON_T_P512TO1023 (*(volatile uint32_t *)0x400C0238) // Tx 512- to 1023-byte Packets Statistic Register
  3565. #define ENET_RMON_T_P1024TO2047 (*(volatile uint32_t *)0x400C023C) // Tx 1024- to 2047-byte Packets Statistic Register
  3566. #define ENET_RMON_T_P_GTE2048 (*(volatile uint32_t *)0x400C0240) // Tx Packets Greater Than 2048 Bytes Statistic Register
  3567. #define ENET_RMON_T_OCTETS (*(volatile uint32_t *)0x400C0244) // Tx Octets Statistic Register
  3568. #define ENET_IEEE_T_DROP (*(volatile uint32_t *)0x400C0248) // IEEE_T_DROP Reserved Statistic Register
  3569. #define ENET_IEEE_T_FRAME_OK (*(volatile uint32_t *)0x400C024C) // Frames Transmitted OK Statistic Register
  3570. #define ENET_IEEE_T_1COL (*(volatile uint32_t *)0x400C0250) // Frames Transmitted with Single Collision Statistic Register
  3571. #define ENET_IEEE_T_MCOL (*(volatile uint32_t *)0x400C0254) // Frames Transmitted with Multiple Collisions Statistic Register
  3572. #define ENET_IEEE_T_DEF (*(volatile uint32_t *)0x400C0258) // Frames Transmitted after Deferral Delay Statistic Register
  3573. #define ENET_IEEE_T_LCOL (*(volatile uint32_t *)0x400C025C) // Frames Transmitted with Late Collision Statistic Register
  3574. #define ENET_IEEE_T_EXCOL (*(volatile uint32_t *)0x400C0260) // Frames Transmitted with Excessive Collisions Statistic Register
  3575. #define ENET_IEEE_T_MACERR (*(volatile uint32_t *)0x400C0264) // Frames Transmitted with Tx FIFO Underrun Statistic Register
  3576. #define ENET_IEEE_T_CSERR (*(volatile uint32_t *)0x400C0268) // Frames Transmitted with Carrier Sense Error Statistic Register
  3577. #define ENET_IEEE_T_SQE (*(volatile uint32_t *)0x400C026C) // ??
  3578. #define ENET_IEEE_T_FDXFC (*(volatile uint32_t *)0x400C0270) // Flow Control Pause Frames Transmitted Statistic Register
  3579. #define ENET_IEEE_T_OCTETS_OK (*(volatile uint32_t *)0x400C0274) // Octet Count for Frames Transmitted w/o Error Statistic Register
  3580. #define ENET_RMON_R_PACKETS (*(volatile uint32_t *)0x400C0284) // Rx Packet Count Statistic Register
  3581. #define ENET_RMON_R_BC_PKT (*(volatile uint32_t *)0x400C0288) // Rx Broadcast Packets Statistic Register
  3582. #define ENET_RMON_R_MC_PKT (*(volatile uint32_t *)0x400C028C) // Rx Multicast Packets Statistic Register
  3583. #define ENET_RMON_R_CRC_ALIGN (*(volatile uint32_t *)0x400C0290) // Rx Packets with CRC/Align Error Statistic Register
  3584. #define ENET_RMON_R_UNDERSIZE (*(volatile uint32_t *)0x400C0294) // Rx Packets with Less Than 64 Bytes and Good CRC Statistic Register
  3585. #define ENET_RMON_R_OVERSIZE (*(volatile uint32_t *)0x400C0298) // Rx Packets Greater Than MAX_FL and Good CRC Statistic Register
  3586. #define ENET_RMON_R_FRAG (*(volatile uint32_t *)0x400C029C) // Rx Packets Less Than 64 Bytes and Bad CRC Statistic Register
  3587. #define ENET_RMON_R_JAB (*(volatile uint32_t *)0x400C02A0) // Rx Packets Greater Than MAX_FL Bytes and Bad CRC Statistic Register
  3588. #define ENET_RMON_R_RESVD_0 (*(volatile uint32_t *)0x400C02A4) // Reserved Statistic Register
  3589. #define ENET_RMON_R_P64 (*(volatile uint32_t *)0x400C02A8) // Rx 64-Byte Packets Statistic Register
  3590. #define ENET_RMON_R_P65TO127 (*(volatile uint32_t *)0x400C02AC) // Rx 65- to 127-Byte Packets Statistic Register
  3591. #define ENET_RMON_R_P128TO255 (*(volatile uint32_t *)0x400C02B0) // Rx 128- to 255-Byte Packets Statistic Register
  3592. #define ENET_RMON_R_P256TO511 (*(volatile uint32_t *)0x400C02B4) // Rx 256- to 511-Byte Packets Statistic Register
  3593. #define ENET_RMON_R_P512TO1023 (*(volatile uint32_t *)0x400C02B8) // Rx 512- to 1023-Byte Packets Statistic Register
  3594. #define ENET_RMON_R_P1024TO2047 (*(volatile uint32_t *)0x400C02BC) // Rx 1024- to 2047-Byte Packets Statistic Register
  3595. #define ENET_RMON_R_P_GTE2048 (*(volatile uint32_t *)0x400C02C0) // Rx Packets Greater than 2048 Bytes Statistic Register
  3596. #define ENET_RMON_R_OCTETS (*(volatile uint32_t *)0x400C02C4) // Rx Octets Statistic Register
  3597. #define ENET_IEEE_R_DROP (*(volatile uint32_t *)0x400C02C8) // Frames not Counted Correctly Statistic Register
  3598. #define ENET_IEEE_R_FRAME_OK (*(volatile uint32_t *)0x400C02CC) // Frames Received OK Statistic Register
  3599. #define ENET_IEEE_R_CRC (*(volatile uint32_t *)0x400C02D0) // Frames Received with CRC Error Statistic Register
  3600. #define ENET_IEEE_R_ALIGN (*(volatile uint32_t *)0x400C02D4) // Frames Received with Alignment Error Statistic Register
  3601. #define ENET_IEEE_R_MACERR (*(volatile uint32_t *)0x400C02D8) // Receive FIFO Overflow Count Statistic Register
  3602. #define ENET_IEEE_R_FDXFC (*(volatile uint32_t *)0x400C02DC) // Flow Control Pause Frames Received Statistic Register
  3603. #define ENET_IEEE_R_OCTETS_OK (*(volatile uint32_t *)0x400C02E0) // Octet Count for Frames Received without Error Statistic Register
  3604. #define ENET_ATCR (*(volatile uint32_t *)0x400C0400) // Adjustable Timer Control Register
  3605. #define ENET_ATCR_SLAVE ((uint32_t)0x00002000) // Enable Timer Slave Mode
  3606. #define ENET_ATCR_CAPTURE ((uint32_t)0x00000800) // Capture Timer Value
  3607. #define ENET_ATCR_RESTART ((uint32_t)0x00000400) // Reset Timer
  3608. #define ENET_ATCR_PINPER ((uint32_t)0x00000080) // Enables event signal output assertion on period event
  3609. #define ENET_ATCR_PEREN ((uint32_t)0x00000010) // Enable Periodical Event
  3610. #define ENET_ATCR_OFFRST ((uint32_t)0x00000008) // Reset Timer On Offset Event
  3611. #define ENET_ATCR_OFFEN ((uint32_t)0x00000004) // Enable One-Shot Offset Event
  3612. #define ENET_ATCR_EN ((uint32_t)0x00000001) // Enable Timer
  3613. #define ENET_ATVR (*(volatile uint32_t *)0x400C0404) // Timer Value Register
  3614. #define ENET_ATOFF (*(volatile uint32_t *)0x400C0408) // Timer Offset Register
  3615. #define ENET_ATPER (*(volatile uint32_t *)0x400C040C) // Timer Period Register
  3616. #define ENET_ATCOR (*(volatile uint32_t *)0x400C0410) // Timer Correction Register
  3617. #define ENET_ATINC (*(volatile uint32_t *)0x400C0414) // Time-Stamping Clock Period Register
  3618. #define ENET_ATINC_INC_CORR(n) (uint32_t)(((n) & 0x7F)<<8) // Correction Increment Value
  3619. #define ENET_ATINC_INC(n) (uint32_t)(((n) & 0x7F)<<0) // Clock Period Of The Timestamping Clock (ts_clk) In Nanoseconds
  3620. #define ENET_ATSTMP (*(volatile uint32_t *)0x400C0418) // Timestamp of Last Transmitted Frame
  3621. #define ENET_TGSR (*(volatile uint32_t *)0x400C0604) // Timer Global Status Register
  3622. #define ENET_TGSR_TF3 ((uint32_t)0x00000008) // Timer Flag For Channel 3
  3623. #define ENET_TGSR_TF2 ((uint32_t)0x00000004) // Timer Flag For Channel 2
  3624. #define ENET_TGSR_TF1 ((uint32_t)0x00000002) // Timer Flag For Channel 1
  3625. #define ENET_TGSR_TF0 ((uint32_t)0x00000001) // Timer Flag For Channel 0
  3626. #define ENET_TCSR0 (*(volatile uint32_t *)0x400C0608) // Timer Control Status Register
  3627. #define ENET_TCSR_TF ((uint32_t)0x00000080) // Timer Flag
  3628. #define ENET_TCSR_TIR ((uint32_t)0x00000040) // Timer Interrupt Enable
  3629. #define ENET_TCSR_TMODE(n) (uint32_t)(((n) & 0xF)<<2) // Timer Mode
  3630. #define ENET_TCSR_TDRE ((uint32_t)0x00000001) // Timer DMA Request Enable
  3631. #define ENET_TCCR0 (*(volatile uint32_t *)0x400C060C) // Timer Compare Capture Register
  3632. #define ENET_TCSR1 (*(volatile uint32_t *)0x400C0610) // Timer Control Status Register
  3633. #define ENET_TCCR1 (*(volatile uint32_t *)0x400C0614) // Timer Compare Capture Register
  3634. #define ENET_TCSR2 (*(volatile uint32_t *)0x400C0618) // Timer Control Status Register
  3635. #define ENET_TCCR2 (*(volatile uint32_t *)0x400C061C) // Timer Compare Capture Register
  3636. #define ENET_TCSR3 (*(volatile uint32_t *)0x400C0620) // Timer Control Status Register
  3637. #define ENET_TCCR3 (*(volatile uint32_t *)0x400C0624) // Timer Compare Capture Register
  3638. // Universal Serial Bus OTG Controller (USBOTG)
  3639. #define USB0_PERID (*(const uint8_t *)0x40072000) // Peripheral ID register
  3640. #define USB0_IDCOMP (*(const uint8_t *)0x40072004) // Peripheral ID Complement register
  3641. #define USB0_REV (*(const uint8_t *)0x40072008) // Peripheral Revision register
  3642. #define USB0_ADDINFO (*(volatile uint8_t *)0x4007200C) // Peripheral Additional Info register
  3643. #define USB0_OTGISTAT (*(volatile uint8_t *)0x40072010) // OTG Interrupt Status register
  3644. #define USB_OTGISTAT_IDCHG ((uint8_t)0x80) //
  3645. #define USB_OTGISTAT_ONEMSEC ((uint8_t)0x40) //
  3646. #define USB_OTGISTAT_LINE_STATE_CHG ((uint8_t)0x20) //
  3647. #define USB_OTGISTAT_SESSVLDCHG ((uint8_t)0x08) //
  3648. #define USB_OTGISTAT_B_SESS_CHG ((uint8_t)0x04) //
  3649. #define USB_OTGISTAT_AVBUSCHG ((uint8_t)0x01) //
  3650. #define USB0_OTGICR (*(volatile uint8_t *)0x40072014) // OTG Interrupt Control Register
  3651. #define USB_OTGICR_IDEN ((uint8_t)0x80) //
  3652. #define USB_OTGICR_ONEMSECEN ((uint8_t)0x40) //
  3653. #define USB_OTGICR_LINESTATEEN ((uint8_t)0x20) //
  3654. #define USB_OTGICR_SESSVLDEN ((uint8_t)0x08) //
  3655. #define USB_OTGICR_BSESSEN ((uint8_t)0x04) //
  3656. #define USB_OTGICR_AVBUSEN ((uint8_t)0x01) //
  3657. #define USB0_OTGSTAT (*(volatile uint8_t *)0x40072018) // OTG Status register
  3658. #define USB_OTGSTAT_ID ((uint8_t)0x80) //
  3659. #define USB_OTGSTAT_ONEMSECEN ((uint8_t)0x40) //
  3660. #define USB_OTGSTAT_LINESTATESTABLE ((uint8_t)0x20) //
  3661. #define USB_OTGSTAT_SESS_VLD ((uint8_t)0x08) //
  3662. #define USB_OTGSTAT_BSESSEND ((uint8_t)0x04) //
  3663. #define USB_OTGSTAT_AVBUSVLD ((uint8_t)0x01) //
  3664. #define USB0_OTGCTL (*(volatile uint8_t *)0x4007201C) // OTG Control Register
  3665. #define USB_OTGCTL_DPHIGH ((uint8_t)0x80) //
  3666. #define USB_OTGCTL_DPLOW ((uint8_t)0x20) //
  3667. #define USB_OTGCTL_DMLOW ((uint8_t)0x10) //
  3668. #define USB_OTGCTL_OTGEN ((uint8_t)0x04) //
  3669. #define USB0_ISTAT (*(volatile uint8_t *)0x40072080) // Interrupt Status Register
  3670. #define USB_ISTAT_STALL ((uint8_t)0x80) //
  3671. #define USB_ISTAT_ATTACH ((uint8_t)0x40) //
  3672. #define USB_ISTAT_RESUME ((uint8_t)0x20) //
  3673. #define USB_ISTAT_SLEEP ((uint8_t)0x10) //
  3674. #define USB_ISTAT_TOKDNE ((uint8_t)0x08) //
  3675. #define USB_ISTAT_SOFTOK ((uint8_t)0x04) //
  3676. #define USB_ISTAT_ERROR ((uint8_t)0x02) //
  3677. #define USB_ISTAT_USBRST ((uint8_t)0x01) //
  3678. #define USB0_INTEN (*(volatile uint8_t *)0x40072084) // Interrupt Enable Register
  3679. #define USB_INTEN_STALLEN ((uint8_t)0x80) //
  3680. #define USB_INTEN_ATTACHEN ((uint8_t)0x40) //
  3681. #define USB_INTEN_RESUMEEN ((uint8_t)0x20) //
  3682. #define USB_INTEN_SLEEPEN ((uint8_t)0x10) //
  3683. #define USB_INTEN_TOKDNEEN ((uint8_t)0x08) //
  3684. #define USB_INTEN_SOFTOKEN ((uint8_t)0x04) //
  3685. #define USB_INTEN_ERROREN ((uint8_t)0x02) //
  3686. #define USB_INTEN_USBRSTEN ((uint8_t)0x01) //
  3687. #define USB0_ERRSTAT (*(volatile uint8_t *)0x40072088) // Error Interrupt Status Register
  3688. #define USB_ERRSTAT_BTSERR ((uint8_t)0x80) //
  3689. #define USB_ERRSTAT_DMAERR ((uint8_t)0x20) //
  3690. #define USB_ERRSTAT_BTOERR ((uint8_t)0x10) //
  3691. #define USB_ERRSTAT_DFN8 ((uint8_t)0x08) //
  3692. #define USB_ERRSTAT_CRC16 ((uint8_t)0x04) //
  3693. #define USB_ERRSTAT_CRC5EOF ((uint8_t)0x02) //
  3694. #define USB_ERRSTAT_PIDERR ((uint8_t)0x01) //
  3695. #define USB0_ERREN (*(volatile uint8_t *)0x4007208C) // Error Interrupt Enable Register
  3696. #define USB_ERREN_BTSERREN ((uint8_t)0x80) //
  3697. #define USB_ERREN_DMAERREN ((uint8_t)0x20) //
  3698. #define USB_ERREN_BTOERREN ((uint8_t)0x10) //
  3699. #define USB_ERREN_DFN8EN ((uint8_t)0x08) //
  3700. #define USB_ERREN_CRC16EN ((uint8_t)0x04) //
  3701. #define USB_ERREN_CRC5EOFEN ((uint8_t)0x02) //
  3702. #define USB_ERREN_PIDERREN ((uint8_t)0x01) //
  3703. #define USB0_STAT (*(volatile uint8_t *)0x40072090) // Status Register
  3704. #define USB_STAT_TX ((uint8_t)0x08) //
  3705. #define USB_STAT_ODD ((uint8_t)0x04) //
  3706. #define USB_STAT_ENDP(n) ((uint8_t)((n) >> 4)) //
  3707. #define USB0_CTL (*(volatile uint8_t *)0x40072094) // Control Register
  3708. #define USB_CTL_JSTATE ((uint8_t)0x80) //
  3709. #define USB_CTL_SE0 ((uint8_t)0x40) //
  3710. #define USB_CTL_TXSUSPENDTOKENBUSY ((uint8_t)0x20) //
  3711. #define USB_CTL_RESET ((uint8_t)0x10) //
  3712. #define USB_CTL_HOSTMODEEN ((uint8_t)0x08) //
  3713. #define USB_CTL_RESUME ((uint8_t)0x04) //
  3714. #define USB_CTL_ODDRST ((uint8_t)0x02) //
  3715. #define USB_CTL_USBENSOFEN ((uint8_t)0x01) //
  3716. #define USB0_ADDR (*(volatile uint8_t *)0x40072098) // Address Register
  3717. #define USB0_BDTPAGE1 (*(volatile uint8_t *)0x4007209C) // BDT Page Register 1
  3718. #define USB0_FRMNUML (*(volatile uint8_t *)0x400720A0) // Frame Number Register Low
  3719. #define USB0_FRMNUMH (*(volatile uint8_t *)0x400720A4) // Frame Number Register High
  3720. #define USB0_TOKEN (*(volatile uint8_t *)0x400720A8) // Token Register
  3721. #define USB0_SOFTHLD (*(volatile uint8_t *)0x400720AC) // SOF Threshold Register
  3722. #define USB0_BDTPAGE2 (*(volatile uint8_t *)0x400720B0) // BDT Page Register 2
  3723. #define USB0_BDTPAGE3 (*(volatile uint8_t *)0x400720B4) // BDT Page Register 3
  3724. #define USB0_ENDPT0 (*(volatile uint8_t *)0x400720C0) // Endpoint Control Register
  3725. #define USB_ENDPT_HOSTWOHUB ((uint8_t)0x80) // host only, enable low speed
  3726. #define USB_ENDPT_RETRYDIS ((uint8_t)0x40) // host only, set to disable NAK retry
  3727. #define USB_ENDPT_EPCTLDIS ((uint8_t)0x10) // 0=control, 1=bulk, interrupt, isync
  3728. #define USB_ENDPT_EPRXEN ((uint8_t)0x08) // enables the endpoint for RX transfers.
  3729. #define USB_ENDPT_EPTXEN ((uint8_t)0x04) // enables the endpoint for TX transfers.
  3730. #define USB_ENDPT_EPSTALL ((uint8_t)0x02) // set to stall endpoint
  3731. #define USB_ENDPT_EPHSHK ((uint8_t)0x01) // enable handshaking during a transaction, generally set unless Isochronous
  3732. #define USB0_ENDPT1 (*(volatile uint8_t *)0x400720C4) // Endpoint Control Register
  3733. #define USB0_ENDPT2 (*(volatile uint8_t *)0x400720C8) // Endpoint Control Register
  3734. #define USB0_ENDPT3 (*(volatile uint8_t *)0x400720CC) // Endpoint Control Register
  3735. #define USB0_ENDPT4 (*(volatile uint8_t *)0x400720D0) // Endpoint Control Register
  3736. #define USB0_ENDPT5 (*(volatile uint8_t *)0x400720D4) // Endpoint Control Register
  3737. #define USB0_ENDPT6 (*(volatile uint8_t *)0x400720D8) // Endpoint Control Register
  3738. #define USB0_ENDPT7 (*(volatile uint8_t *)0x400720DC) // Endpoint Control Register
  3739. #define USB0_ENDPT8 (*(volatile uint8_t *)0x400720E0) // Endpoint Control Register
  3740. #define USB0_ENDPT9 (*(volatile uint8_t *)0x400720E4) // Endpoint Control Register
  3741. #define USB0_ENDPT10 (*(volatile uint8_t *)0x400720E8) // Endpoint Control Register
  3742. #define USB0_ENDPT11 (*(volatile uint8_t *)0x400720EC) // Endpoint Control Register
  3743. #define USB0_ENDPT12 (*(volatile uint8_t *)0x400720F0) // Endpoint Control Register
  3744. #define USB0_ENDPT13 (*(volatile uint8_t *)0x400720F4) // Endpoint Control Register
  3745. #define USB0_ENDPT14 (*(volatile uint8_t *)0x400720F8) // Endpoint Control Register
  3746. #define USB0_ENDPT15 (*(volatile uint8_t *)0x400720FC) // Endpoint Control Register
  3747. #define USB0_USBCTRL (*(volatile uint8_t *)0x40072100) // USB Control Register
  3748. #define USB_USBCTRL_SUSP ((uint8_t)0x80) // Places the USB transceiver into the suspend state.
  3749. #define USB_USBCTRL_PDE ((uint8_t)0x40) // Enables the weak pulldowns on the USB transceiver.
  3750. #define USB0_OBSERVE (*(volatile uint8_t *)0x40072104) // USB OTG Observe Register
  3751. #define USB_OBSERVE_DPPU ((uint8_t)0x80) //
  3752. #define USB_OBSERVE_DPPD ((uint8_t)0x40) //
  3753. #define USB_OBSERVE_DMPD ((uint8_t)0x10) //
  3754. #define USB0_CONTROL (*(volatile uint8_t *)0x40072108) // USB OTG Control Register
  3755. #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.
  3756. #define USB0_USBTRC0 (*(volatile uint8_t *)0x4007210C) // USB Transceiver Control Register 0
  3757. #define USB_USBTRC_USBRESET ((uint8_t)0x80) //
  3758. #define USB_USBTRC_USBRESMEN ((uint8_t)0x20) //
  3759. #define USB_USBTRC_SYNC_DET ((uint8_t)0x02) //
  3760. #define USB_USBTRC_USB_RESUME_INT ((uint8_t)0x01) //
  3761. #define USB0_USBFRMADJUST (*(volatile uint8_t *)0x40072114) // Frame Adjust Register
  3762. #define USB0_CLK_RECOVER_CTRL (*(volatile uint8_t *)0x40072140) // USB Clock recovery control
  3763. #define USB_CLK_RECOVER_CTRL_CLOCK_RECOVER_EN ((uint8_t)0x80)
  3764. #define USB_CLK_RECOVER_CTRL_RESET_RESUME_ROUGH_EN ((uint8_t)0x40)
  3765. #define USB_CLK_RECOVER_CTRL_RESTART_IFRTRIM_EN ((uint8_t)0x20)
  3766. #define USB0_CLK_RECOVER_IRC_EN (*(volatile uint8_t *)0x40072144) // IRC48M oscillator enable
  3767. #define USB_CLK_RECOVER_IRC_EN_IRC_EN ((uint8_t)0x02)
  3768. #define USB_CLK_RECOVER_IRC_EN_REG_EN ((uint8_t)0x01)
  3769. #define USB0_CLK_RECOVER_INT_EN (*(volatile uint8_t *)0x40072154) // Clock recovery combined interrupt enable
  3770. #define USB_CLK_RECOVER_INT_EN_OVF_ERROR_EN ((uint8_t)0x10)
  3771. #define USB0_CLK_RECOVER_INT_STATUS (*(volatile uint8_t *)0x4007215C) // Clock recovery separated interrupt status
  3772. #define USB_CLK_RECOVER_INT_STATUS_OVF_ERROR ((uint8_t)0x10)
  3773. // USB Device Charger Detection Module (USBDCD)
  3774. #define USBDCD_CONTROL (*(volatile uint32_t *)0x40035000) // Control register
  3775. #define USBDCD_CONTROL_SR ((uint32_t)0x02000000)
  3776. #define USBDCD_CONTROL_START ((uint32_t)0x01000000)
  3777. #define USBDCD_CONTROL_BC12 ((uint32_t)0x00020000)
  3778. #define USBDCD_CONTROL_IE ((uint32_t)0x00010000)
  3779. #define USBDCD_CONTROL_IF ((uint32_t)0x00000100)
  3780. #define USBDCD_CONTROL_IACK ((uint32_t)0x00000001)
  3781. #define USBDCD_CLOCK (*(volatile uint32_t *)0x40035004) // Clock register
  3782. #define USBDCD_CLOCK_CLOCK_SPEED(n) (uint32_t)(((n) & 0x3FF) << 2)
  3783. #define USBDCD_CLOCK_CLOCK_UNIT ((uint32_t)0x00000001)
  3784. #define USBDCD_STATUS (*(volatile uint32_t *)0x40035008) // Status register
  3785. #define USBDCD_STATUS_ACTIVE ((uint32_t)0x00400000)
  3786. #define USBDCD_STATUS_ID ((uint32_t)0x00200000)
  3787. #define USBDCD_STATUS_ERR ((uint32_t)0x00100000)
  3788. #define USBDCD_STATUS_SEQ_STAT(n) (uint32_t)(((n) & 0x3) << 18)
  3789. #define USBDCD_STATUS_SEQ_STAT_MASK ((uint32_t)0x000C0000)
  3790. #define USBDCD_STATUS_SEQ_RES(n) (uint32_t)(((n) & 0x3) << 16)
  3791. #define USBDCD_STATUS_SEQ_RES_MASK ((uint32_t)0x00030000)
  3792. #define USBDCD_TIMER0 (*(volatile uint32_t *)0x40035010) // TIMER0 register
  3793. #define USBDCD_TIMER1 (*(volatile uint32_t *)0x40035014) // TIMER1 register
  3794. #define USBDCD_TIMER2 (*(volatile uint32_t *)0x40035018) // TIMER2 register
  3795. #define USBHSDCD_CONTROL (*(volatile uint32_t *)0x400A3000) // Control register
  3796. #define USBHSDCD_CLOCK (*(volatile uint32_t *)0x400A3004) // Clock register
  3797. #define USBHSDCD_STATUS (*(volatile uint32_t *)0x400A3008) // Status register
  3798. #define USBHSDCD_TIMER0 (*(volatile uint32_t *)0x400A3010) // TIMER0 register
  3799. #define USBHSDCD_TIMER1 (*(volatile uint32_t *)0x400A3014) // TIMER1 register
  3800. #define USBHSDCD_TIMER2 (*(volatile uint32_t *)0x400A3018) // TIMER2 register
  3801. // USB High Speed OTG Controller (USBHS)
  3802. #define USBHS_ID (*(volatile uint32_t *)0x400A1000) // Identification Register
  3803. #define USBHS_HWGENERAL (*(volatile uint32_t *)0x400A1004) // General Hardware Parameters Register
  3804. #define USBHS_HWHOST (*(volatile uint32_t *)0x400A1008) // Host Hardware Parameters Register
  3805. #define USBHS_HWDEVICE (*(volatile uint32_t *)0x400A100C) // Device Hardware Parameters Register
  3806. #define USBHS_HWTXBUF (*(volatile uint32_t *)0x400A1010) // Transmit Buffer Hardware Parameters Register
  3807. #define USBHS_HWRXBUF (*(volatile uint32_t *)0x400A1014) // Receive Buffer Hardware Parameters Register
  3808. #define USBHS_GPTIMER0LD (*(volatile uint32_t *)0x400A1080) // General Purpose Timer n Load Register
  3809. #define USBHS_GPTIMER0CTL (*(volatile uint32_t *)0x400A1084) // General Purpose Timer n Control Register
  3810. #define USBHS_GPTIMERCTL_RUN ((uint32_t)0x80000000)
  3811. #define USBHS_GPTIMERCTL_RST ((uint32_t)0x40000000)
  3812. #define USBHS_GPTIMERCTL_MODE ((uint32_t)0x01000000)
  3813. #define USBHS_GPTIMERCTL_GPTCNT(n) (uint32_t)(((n) & 0xFFFFFF) << 0)
  3814. #define USBHS_GPTIMER1LD (*(volatile uint32_t *)0x400A1088) // General Purpose Timer n Load Register
  3815. #define USBHS_GPTIMER1CTL (*(volatile uint32_t *)0x400A108C) // General Purpose Timer n Control Register
  3816. #define USBHS_USB_SBUSCFG (*(volatile uint32_t *)0x400A1090) // System Bus Interface Configuration Register
  3817. #define USBHS_HCIVERSION (*(volatile uint32_t *)0x400A1100) // Host Controller Interface Version and Capability Registers Length Register
  3818. #define USBHS_HCSPARAMS (*(volatile uint32_t *)0x400A1104) // Host Controller Structural Parameters Register
  3819. #define USBHS_HCCPARAMS (*(volatile uint32_t *)0x400A1108) // Host Controller Capability Parameters Register
  3820. #define USBHS_DCIVERSION (*(volatile uint16_t *)0x400A1122) // Device Controller Interface Version
  3821. #define USBHS_DCCPARAMS (*(volatile uint32_t *)0x400A1124) // Device Controller Capability Parameters
  3822. #define USBHS_USBCMD (*(volatile uint32_t *)0x400A1140) // USB Command Register
  3823. #define USBHS_USBCMD_ITC(n) (uint32_t)(((n) & 0xFF) << 16)
  3824. #define USBHS_USBCMD_FS2 ((uint32_t)0x00008000)
  3825. #define USBHS_USBCMD_ATDTW ((uint32_t)0x00004000)
  3826. #define USBHS_USBCMD_SUTW ((uint32_t)0x00002000)
  3827. #define USBHS_USBCMD_ASPE ((uint32_t)0x00000800)
  3828. #define USBHS_USBCMD_ASP(n) (uint32_t)(((n) & 0x3) << 8)
  3829. #define USBHS_USBCMD_IAA ((uint32_t)0x00000040)
  3830. #define USBHS_USBCMD_ASE ((uint32_t)0x00000020)
  3831. #define USBHS_USBCMD_PSE ((uint32_t)0x00000010)
  3832. #define USBHS_USBCMD_FS(n) (uint32_t)(((n) & 0x3) << 2)
  3833. #define USBHS_USBCMD_RST ((uint32_t)0x00000002)
  3834. #define USBHS_USBCMD_RS ((uint32_t)0x00000001)
  3835. #define USBHS_USBSTS (*(volatile uint32_t *)0x400A1144) // USB Status Register
  3836. #define USBHS_USBSTS_TI1 ((uint32_t)0x02000000)
  3837. #define USBHS_USBSTS_TI0 ((uint32_t)0x01000000)
  3838. #define USBHS_USBSTS_UPI ((uint32_t)0x00080000)
  3839. #define USBHS_USBSTS_UAI ((uint32_t)0x00040000)
  3840. #define USBHS_USBSTS_NAKI ((uint32_t)0x00010000)
  3841. #define USBHS_USBSTS_AS ((uint32_t)0x00008000)
  3842. #define USBHS_USBSTS_PS ((uint32_t)0x00004000)
  3843. #define USBHS_USBSTS_RCL ((uint32_t)0x00002000)
  3844. #define USBHS_USBSTS_HCH ((uint32_t)0x00001000)
  3845. #define USBHS_USBSTS_SLI ((uint32_t)0x00000100)
  3846. #define USBHS_USBSTS_SRI ((uint32_t)0x00000080)
  3847. #define USBHS_USBSTS_URI ((uint32_t)0x00000040)
  3848. #define USBHS_USBSTS_AAI ((uint32_t)0x00000020)
  3849. #define USBHS_USBSTS_SEI ((uint32_t)0x00000010)
  3850. #define USBHS_USBSTS_FRI ((uint32_t)0x00000008)
  3851. #define USBHS_USBSTS_PCI ((uint32_t)0x00000004)
  3852. #define USBHS_USBSTS_UEI ((uint32_t)0x00000002)
  3853. #define USBHS_USBSTS_UI ((uint32_t)0x00000001)
  3854. #define USBHS_USBINTR (*(volatile uint32_t *)0x400A1148) // USB Interrupt Enable Register
  3855. #define USBHS_USBINTR_TIE1 ((uint32_t)0x02000000)
  3856. #define USBHS_USBINTR_TIE0 ((uint32_t)0x01000000)
  3857. #define USBHS_USBINTR_UPIE ((uint32_t)0x00080000)
  3858. #define USBHS_USBINTR_UAIE ((uint32_t)0x00040000)
  3859. #define USBHS_USBINTR_NAKE ((uint32_t)0x00010000)
  3860. #define USBHS_USBINTR_SLE ((uint32_t)0x00000100)
  3861. #define USBHS_USBINTR_SRE ((uint32_t)0x00000080)
  3862. #define USBHS_USBINTR_URE ((uint32_t)0x00000040)
  3863. #define USBHS_USBINTR_AAE ((uint32_t)0x00000020)
  3864. #define USBHS_USBINTR_SEE ((uint32_t)0x00000010)
  3865. #define USBHS_USBINTR_FRE ((uint32_t)0x00000008)
  3866. #define USBHS_USBINTR_PCE ((uint32_t)0x00000004)
  3867. #define USBHS_USBINTR_UEE ((uint32_t)0x00000002)
  3868. #define USBHS_USBINTR_UE ((uint32_t)0x00000001)
  3869. #define USBHS_FRINDEX (*(volatile uint32_t *)0x400A114C) // Frame Index Register
  3870. #define USBHS_PERIODICLISTBASE (*(volatile uint32_t *)0x400A1154) // Periodic Frame List Base Address Register
  3871. #define USBHS_DEVICEADDR (*(volatile uint32_t *)0x400A1154) // Device Address Register
  3872. #define USBHS_DEVICEADDR_USBADR(n) (uint32_t)(((n) & 0x7F) << 25)
  3873. #define USBHS_DEVICEADDR_USBADRA ((uint32_t)0x01000000)
  3874. #define USBHS_ASYNCLISTADDR (*(volatile uint32_t *)0x400A1158) // Current Asynchronous List Address Register
  3875. #define USBHS_EPLISTADDR (*(volatile uint32_t *)0x400A1158) // Endpoint List Address Register
  3876. #define USBHS_TTCTRL (*(volatile uint32_t *)0x400A115C) // Host TT Asynchronous Buffer Control
  3877. #define USBHS_TTCTRL_TTHA(n) (uint32_t)(((n) & 0x7F) << 24)
  3878. #define USBHS_BURSTSIZE (*(volatile uint32_t *)0x400A1160) // Master Interface Data Burst Size Register
  3879. #define USBHS_BURSTSIZE_TXPBURST(n) (uint32_t)(((n) & 0xFF) << 8)
  3880. #define USBHS_BURSTSIZE_RXPBURST(n) (uint32_t)(((n) & 0xFF) << 0)
  3881. #define USBHS_TXFILLTUNING (*(volatile uint32_t *)0x400A1164) // Transmit FIFO Tuning Control Register
  3882. #define USBHS_TXFILLTUNING_TXFIFOTHRES(n) (uint32_t)(((n) & 0x3F) << 16)
  3883. #define USBHS_TXFILLTUNING_TXSCHHEALTH(n) (uint32_t)(((n) & 0x1F) << 8)
  3884. #define USBHS_TXFILLTUNING_TXSCHOH(n) (uint32_t)(((n) & 0x7F) << 0)
  3885. #define USBHS_ENDPTNAK (*(volatile uint32_t *)0x400A1178) // Endpoint NAK Register
  3886. #define USBHS_ENDPTNAKEN (*(volatile uint32_t *)0x400A117C) // Endpoint NAK Enable Register
  3887. #define USBHS_CONFIGFLAG (*(volatile uint32_t *)0x400A1180) // Configure Flag Register
  3888. #define USBHS_PORTSC1 (*(volatile uint32_t *)0x400A1184) // Port Status and Control Registers
  3889. #define USBHS_PORTSC_PTS(n) (uint32_t)(((n) & 0x3) << 30)
  3890. #define USBHS_PORTSC_PSPD(n) (uint32_t)(((n) & 0x3) << 26)
  3891. #define USBHS_PORTSC_PTS2 ((uint32_t)0x02000000)
  3892. #define USBHS_PORTSC_PFSC ((uint32_t)0x01000000)
  3893. #define USBHS_PORTSC_PHCD ((uint32_t)0x00800000)
  3894. #define USBHS_PORTSC_WKOC ((uint32_t)0x00400000)
  3895. #define USBHS_PORTSC_WKDS ((uint32_t)0x00200000)
  3896. #define USBHS_PORTSC_WKCN ((uint32_t)0x00100000)
  3897. #define USBHS_PORTSC_PTC(n) (uint32_t)(((n) & 0xF) << 16)
  3898. #define USBHS_PORTSC_PIC(n) (uint32_t)(((n) & 0x3) << 14)
  3899. #define USBHS_PORTSC_PO ((uint32_t)0x00002000)
  3900. #define USBHS_PORTSC_PP ((uint32_t)0x00001000)
  3901. #define USBHS_PORTSC_LS(n) (uint32_t)(((n) & 0x3) << 10)
  3902. #define USBHS_PORTSC_HSP ((uint32_t)0x00000200)
  3903. #define USBHS_PORTSC_PR ((uint32_t)0x00000100)
  3904. #define USBHS_PORTSC_SUSP ((uint32_t)0x00000080)
  3905. #define USBHS_PORTSC_FPR ((uint32_t)0x00000040)
  3906. #define USBHS_PORTSC_OCC ((uint32_t)0x00000020)
  3907. #define USBHS_PORTSC_OCA ((uint32_t)0x00000010)
  3908. #define USBHS_PORTSC_PEC ((uint32_t)0x00000008)
  3909. #define USBHS_PORTSC_PE ((uint32_t)0x00000004)
  3910. #define USBHS_PORTSC_CSC ((uint32_t)0x00000002)
  3911. #define USBHS_PORTSC_CCS ((uint32_t)0x00000001)
  3912. #define USBHS_OTGSC (*(volatile uint32_t *)0x400A11A4) // On-the-Go Status and Control Register
  3913. #define USBHS_OTGSC_DPIE ((uint32_t)0x40000000)
  3914. #define USBHS_OTGSC_MSE ((uint32_t)0x20000000)
  3915. #define USBHS_OTGSC_BSEIE ((uint32_t)0x10000000)
  3916. #define USBHS_OTGSC_BSVIE ((uint32_t)0x08000000)
  3917. #define USBHS_OTGSC_ASVIE ((uint32_t)0x04000000)
  3918. #define USBHS_OTGSC_AVVIE ((uint32_t)0x02000000)
  3919. #define USBHS_OTGSC_IDIE ((uint32_t)0x01000000)
  3920. #define USBHS_OTGSC_DPIS ((uint32_t)0x00400000)
  3921. #define USBHS_OTGSC_MSS ((uint32_t)0x00200000)
  3922. #define USBHS_OTGSC_BSEIS ((uint32_t)0x00100000)
  3923. #define USBHS_OTGSC_BSVIS ((uint32_t)0x00080000)
  3924. #define USBHS_OTGSC_ASVIS ((uint32_t)0x00040000)
  3925. #define USBHS_OTGSC_AVVIS ((uint32_t)0x00020000)
  3926. #define USBHS_OTGSC_IDIS ((uint32_t)0x00010000)
  3927. #define USBHS_OTGSC_DPS ((uint32_t)0x00004000)
  3928. #define USBHS_OTGSC_MST ((uint32_t)0x00002000)
  3929. #define USBHS_OTGSC_BSE ((uint32_t)0x00001000)
  3930. #define USBHS_OTGSC_BSV ((uint32_t)0x00000800)
  3931. #define USBHS_OTGSC_ASV ((uint32_t)0x00000400)
  3932. #define USBHS_OTGSC_AVV ((uint32_t)0x00000200)
  3933. #define USBHS_OTGSC_ID ((uint32_t)0x00000100)
  3934. #define USBHS_OTGSC_HABA ((uint32_t)0x00000080)
  3935. #define USBHS_OTGSC_IDPU ((uint32_t)0x00000020)
  3936. #define USBHS_OTGSC_DP ((uint32_t)0x00000010)
  3937. #define USBHS_OTGSC_OT ((uint32_t)0x00000008)
  3938. #define USBHS_OTGSC_HAAR ((uint32_t)0x00000004)
  3939. #define USBHS_OTGSC_VC ((uint32_t)0x00000002)
  3940. #define USBHS_OTGSC_VD ((uint32_t)0x00000001)
  3941. #define USBHS_USBMODE (*(volatile uint32_t *)0x400A11A8) // USB Mode Register
  3942. #define USBHS_USBMODE_TXHSD(n) (uint32_t)(((n) & 0x7) << 12)
  3943. #define USBHS_USBMODE_SDIS ((uint32_t)0x00000010)
  3944. #define USBHS_USBMODE_SLOM ((uint32_t)0x00000008)
  3945. #define USBHS_USBMODE_ES ((uint32_t)0x00000004)
  3946. #define USBHS_USBMODE_CM(n) (uint32_t)(((n) & 0x3) << 0)
  3947. #define USBHS_EPSETUPSR (*(volatile uint32_t *)0x400A11AC) // Endpoint Setup Status Register
  3948. #define USBHS_EPPRIME (*(volatile uint32_t *)0x400A11B0) // Endpoint Initialization Register
  3949. #define USBHS_EPFLUSH (*(volatile uint32_t *)0x400A11B4) // Endpoint Flush Register
  3950. #define USBHS_EPSR (*(volatile uint32_t *)0x400A11B8) // Endpoint Status Register
  3951. #define USBHS_EPCOMPLETE (*(volatile uint32_t *)0x400A11BC) // Endpoint Complete Register
  3952. #define USBHS_EPCR0 (*(volatile uint32_t *)0x400A11C0) // Endpoint Control Register 0
  3953. #define USBHS_EPCR_TXE ((uint32_t)0x00800000)
  3954. #define USBHS_EPCR_TXR ((uint32_t)0x00400000)
  3955. #define USBHS_EPCR_TXI ((uint32_t)0x00200000)
  3956. #define USBHS_EPCR_TXT(n) (uint32_t)(((n) & 0x3) << 18)
  3957. #define USBHS_EPCR_TXD ((uint32_t)0x00020000)
  3958. #define USBHS_EPCR_TXS ((uint32_t)0x00010000)
  3959. #define USBHS_EPCR_RXE ((uint32_t)0x00000080)
  3960. #define USBHS_EPCR_RXR ((uint32_t)0x00000040)
  3961. #define USBHS_EPCR_RXI ((uint32_t)0x00000020)
  3962. #define USBHS_EPCR_RXT(n) (uint32_t)(((n) & 0x3) << 2)
  3963. #define USBHS_EPCR_RXD ((uint32_t)0x00000002)
  3964. #define USBHS_EPCR_RXS ((uint32_t)0x00000001)
  3965. #define USBHS_EPCR1 (*(volatile uint32_t *)0x400A11C4) // Endpoint Control Register 1
  3966. #define USBHS_EPCR2 (*(volatile uint32_t *)0x400A11C8) // Endpoint Control Register 2
  3967. #define USBHS_EPCR3 (*(volatile uint32_t *)0x400A11CC) // Endpoint Control Register 3
  3968. #define USBHS_EPCR4 (*(volatile uint32_t *)0x400A11D0) // Endpoint Control Register 4
  3969. #define USBHS_EPCR5 (*(volatile uint32_t *)0x400A11D4) // Endpoint Control Register 5
  3970. #define USBHS_EPCR6 (*(volatile uint32_t *)0x400A11D8) // Endpoint Control Register 6
  3971. #define USBHS_EPCR7 (*(volatile uint32_t *)0x400A11DC) // Endpoint Control Register 7
  3972. #define USBHS_USBGENCTRL (*(volatile uint32_t *)0x400A1200) // USB General Control Register
  3973. #define USBHS_USBGENCTRL_WU_INT_CLR ((uint32_t)0x00000020)
  3974. #define USBHS_USBGENCTRL_WU_IE ((uint32_t)0x00000001)
  3975. // Universal Serial Bus 2.0 Integrated PHY (USB-PHY)
  3976. #define USBPHY_PWD (*(volatile uint32_t *)0x400A2000) // USB PHY Power-Down Register
  3977. #define USBPHY_PWD_RXPWDRX ((uint32_t)0x00100000)
  3978. #define USBPHY_PWD_RXPWDDIFF ((uint32_t)0x00080000)
  3979. #define USBPHY_PWD_RXPWD1PT1 ((uint32_t)0x00040000)
  3980. #define USBPHY_PWD_RXPWDENV ((uint32_t)0x00020000)
  3981. #define USBPHY_PWD_TXPWDV2I ((uint32_t)0x00001000)
  3982. #define USBPHY_PWD_TXPWDIBIAS ((uint32_t)0x00000800)
  3983. #define USBPHY_PWD_TXPWDFS ((uint32_t)0x00000400)
  3984. #define USBPHY_PWD_SET (*(volatile uint32_t *)0x400A2004) // USB PHY Power-Down Register
  3985. #define USBPHY_PWD_CLR (*(volatile uint32_t *)0x400A2008) // USB PHY Power-Down Register
  3986. #define USBPHY_PWD_TOG (*(volatile uint32_t *)0x400A200C) // USB PHY Power-Down Register
  3987. #define USBPHY_TX (*(volatile uint32_t *)0x400A2010) // USB PHY Transmitter Control Register
  3988. #define USBPHY_TX_SET (*(volatile uint32_t *)0x400A2014) // USB PHY Transmitter Control Register
  3989. #define USBPHY_TX_CLR (*(volatile uint32_t *)0x400A2018) // USB PHY Transmitter Control Register
  3990. #define USBPHY_TX_TOG (*(volatile uint32_t *)0x400A201C) // USB PHY Transmitter Control Register
  3991. #define USBPHY_RX (*(volatile uint32_t *)0x400A2020) // USB PHY Receiver Control Register
  3992. #define USBPHY_RX_SET (*(volatile uint32_t *)0x400A2024) // USB PHY Receiver Control Register
  3993. #define USBPHY_RX_CLR (*(volatile uint32_t *)0x400A2028) // USB PHY Receiver Control Register
  3994. #define USBPHY_RX_TOG (*(volatile uint32_t *)0x400A202C) // USB PHY Receiver Control Register
  3995. #define USBPHY_CTRL (*(volatile uint32_t *)0x400A2030) // USB PHY General Control Register
  3996. #define USBPHY_CTRL_SFTRST ((uint32_t)0x80000000)
  3997. #define USBPHY_CTRL_CLKGATE ((uint32_t)0x40000000)
  3998. #define USBPHY_CTRL_UTMI_SUSPENDM ((uint32_t)0x20000000)
  3999. #define USBPHY_CTRL_HOST_FORCE_LS_SE0 ((uint32_t)0x10000000)
  4000. #define USBPHY_CTRL_OTG_ID_VALUE ((uint32_t)0x08000000)
  4001. #define USBPHY_CTRL_FSDLL_RST_EN ((uint32_t)0x01000000)
  4002. #define USBPHY_CTRL_ENAUTOCLR_PHY_PWD ((uint32_t)0x00100000)
  4003. #define USBPHY_CTRL_ENAUTOCLR_CLKGATE ((uint32_t)0x00080000)
  4004. #define USBPHY_CTRL_AUTORESUME_EN ((uint32_t)0x00040000)
  4005. #define USBPHY_CTRL_ENUTMILEVEL3 ((uint32_t)0x00008000)
  4006. #define USBPHY_CTRL_ENUTMILEVEL2 ((uint32_t)0x00004000)
  4007. #define USBPHY_CTRL_DEVPLUGIN_IRQ ((uint32_t)0x00001000)
  4008. #define USBPHY_CTRL_ENDEVPLUGINDET ((uint32_t)0x00000010)
  4009. #define USBPHY_CTRL_HOSTDISCONDETECT_IRQ ((uint32_t)0x00000008)
  4010. #define USBPHY_CTRL_ENHOSTDISCONDETECT ((uint32_t)0x00000002)
  4011. #define USBPHY_CTRL_SET (*(volatile uint32_t *)0x400A2034) // USB PHY General Control Register
  4012. #define USBPHY_CTRL_CLR (*(volatile uint32_t *)0x400A2038) // USB PHY General Control Register
  4013. #define USBPHY_CTRL_TOG (*(volatile uint32_t *)0x400A203C) // USB PHY General Control Register
  4014. #define USBPHY_STATUS (*(volatile uint32_t *)0x400A2040) // USB PHY Status Register
  4015. #define USBPHY_STATUS_RESUME_STATUS ((uint32_t)0x00000400)
  4016. #define USBPHY_STATUS_OTGID_STATUS ((uint32_t)0x00000100)
  4017. #define USBPHY_STATUS_DEVPLUGIN_STATUS ((uint32_t)0x00000040)
  4018. #define USBPHY_STATUS_HOSTDISCONDETECT_STATUS ((uint32_t)0x00000008)
  4019. #define USBPHY_DEBUG (*(volatile uint32_t *)0x400A2050) // USB PHY Debug Register
  4020. #define USBPHY_DEBUG_SET (*(volatile uint32_t *)0x400A2054) // USB PHY Debug Register
  4021. #define USBPHY_DEBUG_CLR (*(volatile uint32_t *)0x400A2058) // USB PHY Debug Register
  4022. #define USBPHY_DEBUG_TOG (*(volatile uint32_t *)0x400A205C) // USB PHY Debug Register
  4023. #define USBPHY_DEBUG0_STATUS (*(volatile uint32_t *)0x400A2060) // UTMI Debug Status Register 0
  4024. #define USBPHY_DEBUG1 (*(volatile uint32_t *)0x400A2070) // UTMI Debug Status Register 1
  4025. #define USBPHY_DEBUG1_SET (*(volatile uint32_t *)0x400A2074) // UTMI Debug Status Register 1
  4026. #define USBPHY_DEBUG1_CLR (*(volatile uint32_t *)0x400A2078) // UTMI Debug Status Register 1
  4027. #define USBPHY_DEBUG1_TOG (*(volatile uint32_t *)0x400A207C) // UTMI Debug Status Register 1
  4028. #define USBPHY_VERSION (*(volatile uint32_t *)0x400A2080) // UTMI RTL Version
  4029. #define USBPHY_PLL_SIC (*(volatile uint32_t *)0x400A20A0) // USB PHY PLL Control/Status Register
  4030. #define USBPHY_PLL_SIC_PLL_LOCK ((uint32_t)0x80000000)
  4031. #define USBPHY_PLL_SIC_PLL_BYPASS ((uint32_t)0x00010000)
  4032. #define USBPHY_PLL_SIC_PLL_ENABLE ((uint32_t)0x00002000)
  4033. #define USBPHY_PLL_SIC_PLL_POWER ((uint32_t)0x00001000)
  4034. #define USBPHY_PLL_SIC_PLL_HOLD_RING_OFF ((uint32_t)0x00000800)
  4035. #define USBPHY_PLL_SIC_PLL_EN_USB_CLKS ((uint32_t)0x00000040)
  4036. #define USBPHY_PLL_SIC_PLL_DIV_SEL(n) (uint32_t)((n) & 3)
  4037. #define USBPHY_PLL_SIC_SET (*(volatile uint32_t *)0x400A20A4) // USB PHY PLL Control/Status Register
  4038. #define USBPHY_PLL_SIC_CLR (*(volatile uint32_t *)0x400A20A8) // USB PHY PLL Control/Status Register
  4039. #define USBPHY_PLL_SIC_TOG (*(volatile uint32_t *)0x400A20AC) // USB PHY PLL Control/Status Register
  4040. #define USBPHY_USB1_VBUS_DETECT (*(volatile uint32_t *)0x400A20C0) // USB PHY VBUS Detect Control Register
  4041. #define USBPHY_USB1_VBUS_DETECT_EN_CHARGER_RESISTOR ((uint32_t)0x80000000)
  4042. #define USBPHY_USB1_VBUS_DETECT_DISCHARGE_VBUS ((uint32_t)0x04000000)
  4043. #define USBPHY_USB1_VBUS_DETECT_PWRUP_CMPS ((uint32_t)0x00100000)
  4044. #define USBPHY_USB1_VBUS_DETECT_VBUSVALID_TO_SESSVALID ((uint32_t)0x00040000)
  4045. #define USBPHY_USB1_VBUS_DETECT_VBUS_SOURCE_SEL(n) (uint32_t)(((n) & 3) << 9)
  4046. #define USBPHY_USB1_VBUS_DETECT_VBUSVALID_SEL ((uint32_t)0x00000100)
  4047. #define USBPHY_USB1_VBUS_DETECT_VBUSVALID_OVERRIDE ((uint32_t)0x00000080)
  4048. #define USBPHY_USB1_VBUS_DETECT_AVALID_OVERRIDE ((uint32_t)0x00000040)
  4049. #define USBPHY_USB1_VBUS_DETECT_BVALID_OVERRIDE ((uint32_t)0x00000020)
  4050. #define USBPHY_USB1_VBUS_DETECT_SESSEND_OVERRIDE ((uint32_t)0x00000010)
  4051. #define USBPHY_USB1_VBUS_DETECT_VBUS_OVERRIDE_EN ((uint32_t)0x00000008)
  4052. #define USBPHY_USB1_VBUS_DETECT_VBUSVALID_THRESH(n) ((uint32_t)((n) & 7)
  4053. #define USBPHY_USB1_VBUS_DETECT_SET (*(volatile uint32_t *)0x400A20C4) // USB PHY VBUS Detect Control Register
  4054. #define USBPHY_USB1_VBUS_DETECT_CLR (*(volatile uint32_t *)0x400A20C8) // USB PHY VBUS Detect Control Register
  4055. #define USBPHY_USB1_VBUS_DETECT_TOG (*(volatile uint32_t *)0x400A20CC) // USB PHY VBUS Detect Control Register
  4056. #define USBPHY_USB1_VBUS_DET_STAT (*(volatile uint32_t *)0x400A20D0) // USB PHY VBUS Detector Status Register
  4057. #define USBPHY_USB1_VBUS_DET_STAT_VBUS_VALID_3V ((uint32_t)0x00000010)
  4058. #define USBPHY_USB1_VBUS_DET_STAT_VBUS_VALID ((uint32_t)0x00000008)
  4059. #define USBPHY_USB1_VBUS_DET_STAT_AVALID ((uint32_t)0x00000004)
  4060. #define USBPHY_USB1_VBUS_DET_STAT_BVALID ((uint32_t)0x00000002)
  4061. #define USBPHY_USB1_VBUS_DET_STAT_SESSEND ((uint32_t)0x00000001)
  4062. #define USBPHY_USB1_CHRG_DET_STAT (*(volatile uint32_t *)0x400A20F0) // USB PHY Charger Detect Status Register
  4063. #define USBPHY_USB1_CHRG_DET_STAT_SECDET_DCP ((uint32_t)0x00000010)
  4064. #define USBPHY_USB1_CHRG_DET_STAT_DP_STATE ((uint32_t)0x00000008)
  4065. #define USBPHY_USB1_CHRG_DET_STAT_DM_STATE ((uint32_t)0x00000004)
  4066. #define USBPHY_USB1_CHRG_DET_STAT_CHRG_DETECTED ((uint32_t)0x00000002)
  4067. #define USBPHY_USB1_CHRG_DET_STAT_PLUG_CONTACT ((uint32_t)0x00000001)
  4068. #define USBPHY_ANACTRL (*(volatile uint32_t *)0x400A2100) // USB PHY Analog Control Register
  4069. #define USBPHY_ANACTRL_SET (*(volatile uint32_t *)0x400A2104) // USB PHY Analog Control Register
  4070. #define USBPHY_ANACTRL_CLR (*(volatile uint32_t *)0x400A2108) // USB PHY Analog Control Register
  4071. #define USBPHY_ANACTRL_TOG (*(volatile uint32_t *)0x400A210C) // USB PHY Analog Control Register
  4072. #define USBPHY_USB1_LOOPBACK (*(volatile uint32_t *)0x400A2110) // USB PHY Loopback Control/Status Register
  4073. #define USBPHY_USB1_LOOPBACK_SET (*(volatile uint32_t *)0x400A2114) // USB PHY Loopback Control/Status Register
  4074. #define USBPHY_USB1_LOOPBACK_CLR (*(volatile uint32_t *)0x400A2118) // USB PHY Loopback Control/Status Register
  4075. #define USBPHY_USB1_LOOPBACK_TOG (*(volatile uint32_t *)0x400A211C) // USB PHY Loopback Control/Status Register
  4076. #define USBPHY_USB1_LOOPBACK_HSFSCNT (*(volatile uint32_t *)0x400A2120) // USB PHY Loopback Packet Number Select Register
  4077. #define USBPHY_USB1_LOOPBACK_HSFSCNT_SET (*(volatile uint32_t *)0x400A2124) // USB PHY Loopback Packet Number Select Register
  4078. #define USBPHY_USB1_LOOPBACK_HSFSCNT_CLR (*(volatile uint32_t *)0x400A2128) // USB PHY Loopback Packet Number Select Register
  4079. #define USBPHY_USB1_LOOPBACK_HSFSCNT_TOG (*(volatile uint32_t *)0x400A212C) // USB PHY Loopback Packet Number Select Register
  4080. #define USBPHY_TRIM_OVERRIDE_EN (*(volatile uint32_t *)0x400A2130) // USB PHY Trim Override Enable Register
  4081. #define USBPHY_TRIM_OVERRIDE_EN_SET (*(volatile uint32_t *)0x400A2134) // USB PHY Trim Override Enable Register
  4082. #define USBPHY_TRIM_OVERRIDE_EN_CLR (*(volatile uint32_t *)0x400A2138) // USB PHY Trim Override Enable Register
  4083. #define USBPHY_TRIM_OVERRIDE_EN_TOG (*(volatile uint32_t *)0x400A213C) // USB PHY Trim Override Enable Register
  4084. // CAN - Controller Area Network (FlexCAN)
  4085. #define CAN0_MCR (*(volatile uint32_t *)0x40024000) // Module Configuration Register
  4086. #define CAN0_CTRL1 (*(volatile uint32_t *)0x40024004) // Control 1 register
  4087. #define CAN0_TIMER (*(volatile uint32_t *)0x40024008) // Free Running Timer
  4088. #define CAN0_RXMGMASK (*(volatile uint32_t *)0x40024010) // Rx Mailboxes Global Mask Register
  4089. #define CAN0_RX14MASK (*(volatile uint32_t *)0x40024014) // Rx 14 Mask register
  4090. #define CAN0_RX15MASK (*(volatile uint32_t *)0x40024018) // Rx 15 Mask register
  4091. #define CAN0_ECR (*(volatile uint32_t *)0x4002401C) // Error Counter
  4092. #define CAN0_ESR1 (*(volatile uint32_t *)0x40024020) // Error and Status 1 register
  4093. #define CAN0_IMASK1 (*(volatile uint32_t *)0x40024028) // Interrupt Masks 1 register
  4094. #define CAN0_IFLAG1 (*(volatile uint32_t *)0x40024030) // Interrupt Flags 1 register
  4095. #define CAN0_CTRL2 (*(volatile uint32_t *)0x40024034) // Control 2 register
  4096. #define CAN0_ESR2 (*(volatile uint32_t *)0x40024038) // Error and Status 2 register
  4097. #define CAN0_CRCR (*(volatile uint32_t *)0x40024044) // CRC Register
  4098. #define CAN0_RXFGMASK (*(volatile uint32_t *)0x40024048) // Rx FIFO Global Mask register
  4099. #define CAN0_RXFIR (*(volatile uint32_t *)0x4002404C) // Rx FIFO Information Register
  4100. #define CAN0_RXIMR0 (*(volatile uint32_t *)0x40024880) // Rx Individual Mask Registers
  4101. #define CAN0_RXIMR1 (*(volatile uint32_t *)0x40024884) // Rx Individual Mask Registers
  4102. #define CAN0_RXIMR2 (*(volatile uint32_t *)0x40024888) // Rx Individual Mask Registers
  4103. #define CAN0_RXIMR3 (*(volatile uint32_t *)0x4002488C) // Rx Individual Mask Registers
  4104. #define CAN0_RXIMR4 (*(volatile uint32_t *)0x40024890) // Rx Individual Mask Registers
  4105. #define CAN0_RXIMR5 (*(volatile uint32_t *)0x40024894) // Rx Individual Mask Registers
  4106. #define CAN0_RXIMR6 (*(volatile uint32_t *)0x40024898) // Rx Individual Mask Registers
  4107. #define CAN0_RXIMR7 (*(volatile uint32_t *)0x4002489C) // Rx Individual Mask Registers
  4108. #define CAN0_RXIMR8 (*(volatile uint32_t *)0x400248A0) // Rx Individual Mask Registers
  4109. #define CAN0_RXIMR9 (*(volatile uint32_t *)0x400248A4) // Rx Individual Mask Registers
  4110. #define CAN0_RXIMR10 (*(volatile uint32_t *)0x400248A8) // Rx Individual Mask Registers
  4111. #define CAN0_RXIMR11 (*(volatile uint32_t *)0x400248AC) // Rx Individual Mask Registers
  4112. #define CAN0_RXIMR12 (*(volatile uint32_t *)0x400248B0) // Rx Individual Mask Registers
  4113. #define CAN0_RXIMR13 (*(volatile uint32_t *)0x400248B4) // Rx Individual Mask Registers
  4114. #define CAN0_RXIMR14 (*(volatile uint32_t *)0x400248B8) // Rx Individual Mask Registers
  4115. #define CAN0_RXIMR15 (*(volatile uint32_t *)0x400248BC) // Rx Individual Mask Registers
  4116. #define CAN1_MCR (*(volatile uint32_t *)0x400A4000) // Module Configuration Register
  4117. #define CAN1_CTRL1 (*(volatile uint32_t *)0x400A4004) // Control 1 register
  4118. #define CAN1_TIMER (*(volatile uint32_t *)0x400A4008) // Free Running Timer
  4119. #define CAN1_RXMGMASK (*(volatile uint32_t *)0x400A4010) // Rx Mailboxes Global Mask Register
  4120. #define CAN1_RX14MASK (*(volatile uint32_t *)0x400A4014) // Rx 14 Mask register
  4121. #define CAN1_RX15MASK (*(volatile uint32_t *)0x400A4018) // Rx 15 Mask register
  4122. #define CAN1_ECR (*(volatile uint32_t *)0x400A401C) // Error Counter
  4123. #define CAN1_ESR1 (*(volatile uint32_t *)0x400A4020) // Error and Status 1 register
  4124. #define CAN1_IMASK1 (*(volatile uint32_t *)0x400A4028) // Interrupt Masks 1 register
  4125. #define CAN1_IFLAG1 (*(volatile uint32_t *)0x400A4030) // Interrupt Flags 1 register
  4126. #define CAN1_CTRL2 (*(volatile uint32_t *)0x400A4034) // Control 2 register
  4127. #define CAN1_ESR2 (*(volatile uint32_t *)0x400A4038) // Error and Status 2 register
  4128. #define CAN1_CRCR (*(volatile uint32_t *)0x400A4044) // CRC Register
  4129. #define CAN1_RXFGMASK (*(volatile uint32_t *)0x400A4048) // Rx FIFO Global Mask register
  4130. #define CAN1_RXFIR (*(volatile uint32_t *)0x400A404C) // Rx FIFO Information Register
  4131. #define CAN1_RXIMR0 (*(volatile uint32_t *)0x400A4880) // Rx Individual Mask Registers
  4132. #define CAN1_RXIMR1 (*(volatile uint32_t *)0x400A4884) // Rx Individual Mask Registers
  4133. #define CAN1_RXIMR2 (*(volatile uint32_t *)0x400A4888) // Rx Individual Mask Registers
  4134. #define CAN1_RXIMR3 (*(volatile uint32_t *)0x400A488C) // Rx Individual Mask Registers
  4135. #define CAN1_RXIMR4 (*(volatile uint32_t *)0x400A4890) // Rx Individual Mask Registers
  4136. #define CAN1_RXIMR5 (*(volatile uint32_t *)0x400A4894) // Rx Individual Mask Registers
  4137. #define CAN1_RXIMR6 (*(volatile uint32_t *)0x400A4898) // Rx Individual Mask Registers
  4138. #define CAN1_RXIMR7 (*(volatile uint32_t *)0x400A489C) // Rx Individual Mask Registers
  4139. #define CAN1_RXIMR8 (*(volatile uint32_t *)0x400A48A0) // Rx Individual Mask Registers
  4140. #define CAN1_RXIMR9 (*(volatile uint32_t *)0x400A48A4) // Rx Individual Mask Registers
  4141. #define CAN1_RXIMR10 (*(volatile uint32_t *)0x400A48A8) // Rx Individual Mask Registers
  4142. #define CAN1_RXIMR11 (*(volatile uint32_t *)0x400A48AC) // Rx Individual Mask Registers
  4143. #define CAN1_RXIMR12 (*(volatile uint32_t *)0x400A48B0) // Rx Individual Mask Registers
  4144. #define CAN1_RXIMR13 (*(volatile uint32_t *)0x400A48B4) // Rx Individual Mask Registers
  4145. #define CAN1_RXIMR14 (*(volatile uint32_t *)0x400A48B8) // Rx Individual Mask Registers
  4146. #define CAN1_RXIMR15 (*(volatile uint32_t *)0x400A48BC) // Rx Individual Mask Registers
  4147. // SPI (DSPI)
  4148. #if defined(KINETISK)
  4149. typedef struct {
  4150. volatile uint32_t MCR; // 0
  4151. volatile uint32_t unused1;// 4
  4152. volatile uint32_t TCR; // 8
  4153. volatile uint32_t CTAR0; // c
  4154. volatile uint32_t CTAR1; // 10
  4155. volatile uint32_t CTAR2; // 14
  4156. volatile uint32_t CTAR3; // 18
  4157. volatile uint32_t CTAR4; // 1c
  4158. volatile uint32_t CTAR5; // 20
  4159. volatile uint32_t CTAR6; // 24
  4160. volatile uint32_t CTAR7; // 28
  4161. volatile uint32_t SR; // 2c
  4162. volatile uint32_t RSER; // 30
  4163. volatile uint32_t PUSHR; // 34
  4164. volatile uint32_t POPR; // 38
  4165. volatile uint32_t TXFR[16]; // 3c
  4166. volatile uint32_t RXFR[16]; // 7c
  4167. } KINETISK_SPI_t;
  4168. #define KINETISK_SPI0 (*(KINETISK_SPI_t *)0x4002C000)
  4169. #define SPI0_MCR (KINETISK_SPI0.MCR) // DSPI Module Configuration Register
  4170. #define SPI_MCR_MSTR ((uint32_t)0x80000000) // Master/Slave Mode Select
  4171. #define SPI_MCR_CONT_SCKE ((uint32_t)0x40000000) //
  4172. #define SPI_MCR_DCONF(n) (((n) & 3) << 28) //
  4173. #define SPI_MCR_FRZ ((uint32_t)0x08000000) //
  4174. #define SPI_MCR_MTFE ((uint32_t)0x04000000) //
  4175. #define SPI_MCR_ROOE ((uint32_t)0x01000000) //
  4176. #define SPI_MCR_PCSIS(n) (((n) & 0x1F) << 16) //
  4177. #define SPI_MCR_DOZE ((uint32_t)0x00008000) //
  4178. #define SPI_MCR_MDIS ((uint32_t)0x00004000) //
  4179. #define SPI_MCR_DIS_TXF ((uint32_t)0x00002000) //
  4180. #define SPI_MCR_DIS_RXF ((uint32_t)0x00001000) //
  4181. #define SPI_MCR_CLR_TXF ((uint32_t)0x00000800) //
  4182. #define SPI_MCR_CLR_RXF ((uint32_t)0x00000400) //
  4183. #define SPI_MCR_SMPL_PT(n) (((n) & 3) << 8) //
  4184. #define SPI_MCR_HALT ((uint32_t)0x00000001) //
  4185. #define SPI0_TCR (KINETISK_SPI0.TCR) // DSPI Transfer Count Register
  4186. #define SPI0_CTAR0 (KINETISK_SPI0.CTAR0) // DSPI Clock and Transfer Attributes Register, In Master Mode
  4187. #define SPI_CTAR_DBR ((uint32_t)0x80000000) // Double Baud Rate
  4188. #define SPI_CTAR_FMSZ(n) (((n) & 15) << 27) // Frame Size (+1)
  4189. #define SPI_CTAR_CPOL ((uint32_t)0x04000000) // Clock Polarity
  4190. #define SPI_CTAR_CPHA ((uint32_t)0x02000000) // Clock Phase
  4191. #define SPI_CTAR_LSBFE ((uint32_t)0x01000000) // LSB First
  4192. #define SPI_CTAR_PCSSCK(n) (((n) & 3) << 22) // PCS to SCK Delay Prescaler
  4193. #define SPI_CTAR_PASC(n) (((n) & 3) << 20) // After SCK Delay Prescaler
  4194. #define SPI_CTAR_PDT(n) (((n) & 3) << 18) // Delay after Transfer Prescaler
  4195. #define SPI_CTAR_PBR(n) (((n) & 3) << 16) // Baud Rate Prescaler
  4196. #define SPI_CTAR_CSSCK(n) (((n) & 15) << 12) // PCS to SCK Delay Scaler
  4197. #define SPI_CTAR_ASC(n) (((n) & 15) << 8) // After SCK Delay Scaler
  4198. #define SPI_CTAR_DT(n) (((n) & 15) << 4) // Delay After Transfer Scaler
  4199. #define SPI_CTAR_BR(n) (((n) & 15) << 0) // Baud Rate Scaler
  4200. #define SPI0_CTAR0_SLAVE (KINETISK_SPI0.CTAR0) // DSPI Clock and Transfer Attributes Register, In Slave Mode
  4201. #define SPI0_CTAR1 (KINETISK_SPI0.CTAR1) // DSPI Clock and Transfer Attributes Register, In Master Mode
  4202. #define SPI0_SR (KINETISK_SPI0.SR) // DSPI Status Register
  4203. #define SPI_SR_TCF ((uint32_t)0x80000000) // Transfer Complete Flag
  4204. #define SPI_SR_TXRXS ((uint32_t)0x40000000) // TX and RX Status
  4205. #define SPI_SR_EOQF ((uint32_t)0x10000000) // End of Queue Flag
  4206. #define SPI_SR_TFUF ((uint32_t)0x08000000) // Transmit FIFO Underflow Flag
  4207. #define SPI_SR_TFFF ((uint32_t)0x02000000) // Transmit FIFO Fill Flag
  4208. #define SPI_SR_RFOF ((uint32_t)0x00080000) // Receive FIFO Overflow Flag
  4209. #define SPI_SR_RFDF ((uint32_t)0x00020000) // Receive FIFO Drain Flag
  4210. #define SPI0_RSER (KINETISK_SPI0.RSER) // DSPI DMA/Interrupt Request Select and Enable Register
  4211. #define SPI_RSER_TCF_RE ((uint32_t)0x80000000) // Transmission Complete Request Enable
  4212. #define SPI_RSER_EOQF_RE ((uint32_t)0x10000000) // DSPI Finished Request Request Enable
  4213. #define SPI_RSER_TFUF_RE ((uint32_t)0x08000000) // Transmit FIFO Underflow Request Enable
  4214. #define SPI_RSER_TFFF_RE ((uint32_t)0x02000000) // Transmit FIFO Fill Request Enable
  4215. #define SPI_RSER_TFFF_DIRS ((uint32_t)0x01000000) // Transmit FIFO FIll Dma or Interrupt Request Select
  4216. #define SPI_RSER_RFOF_RE ((uint32_t)0x00080000) // Receive FIFO Overflow Request Enable
  4217. #define SPI_RSER_RFDF_RE ((uint32_t)0x00020000) // Receive FIFO Drain Request Enable
  4218. #define SPI_RSER_RFDF_DIRS ((uint32_t)0x00010000) // Receive FIFO Drain DMA or Interrupt Request Select
  4219. #define SPI0_PUSHR (KINETISK_SPI0.PUSHR) // DSPI PUSH TX FIFO Register In Master Mode
  4220. #define SPI_PUSHR_CONT ((uint32_t)0x80000000) //
  4221. #define SPI_PUSHR_CTAS(n) (((n) & 7) << 28) //
  4222. #define SPI_PUSHR_EOQ ((uint32_t)0x08000000) //
  4223. #define SPI_PUSHR_CTCNT ((uint32_t)0x04000000) //
  4224. #define SPI_PUSHR_PCS(n) (((n) & 31) << 16) //
  4225. #define SPI0_PUSHR_SLAVE (KINETISK_SPI0.PUSHR) // DSPI PUSH TX FIFO Register In Slave Mode
  4226. #define SPI0_POPR (KINETISK_SPI0.POPR) // DSPI POP RX FIFO Register
  4227. #define SPI0_TXFR0 (KINETISK_SPI0.TXFR[0]) // DSPI Transmit FIFO Registers
  4228. #define SPI0_TXFR1 (KINETISK_SPI0.TXFR[1]) // DSPI Transmit FIFO Registers
  4229. #define SPI0_TXFR2 (KINETISK_SPI0.TXFR[2]) // DSPI Transmit FIFO Registers
  4230. #define SPI0_TXFR3 (KINETISK_SPI0.TXFR[3]) // DSPI Transmit FIFO Registers
  4231. #define SPI0_RXFR0 (KINETISK_SPI0.RXFR[0]) // DSPI Receive FIFO Registers
  4232. #define SPI0_RXFR1 (KINETISK_SPI0.RXFR[1]) // DSPI Receive FIFO Registers
  4233. #define SPI0_RXFR2 (KINETISK_SPI0.RXFR[2]) // DSPI Receive FIFO Registers
  4234. #define SPI0_RXFR3 (KINETISK_SPI0.RXFR[3]) // DSPI Receive FIFO Registers
  4235. #if defined(__MK64FX512__) || defined(__MK66FX1M0__)
  4236. #define KINETISK_SPI1 (*(KINETISK_SPI_t *)0x4002D000)
  4237. #define SPI1_MCR (KINETISK_SPI1.MCR) // DSPI Module Configuration Register
  4238. #define SPI1_TCR (KINETISK_SPI1.TCR) // DSPI Transfer Count Register
  4239. #define SPI1_CTAR0 (KINETISK_SPI1.CTAR0) // DSPI Clock and Transfer Attributes Register, In Master Mode
  4240. #define SPI1_CTAR0_SLAVE (KINETISK_SPI1.CTAR0) // DSPI Clock and Transfer Attributes Register, In Slave Mode
  4241. #define SPI1_CTAR1 (KINETISK_SPI1.CTAR1) // DSPI Clock and Transfer Attributes Register, In Master Mode
  4242. #define SPI1_SR (KINETISK_SPI1.SR) // DSPI Status Register
  4243. #define SPI1_RSER (KINETISK_SPI1.RSER) // DSPI DMA/Interrupt Request Select and Enable Register
  4244. #define SPI1_PUSHR (KINETISK_SPI1.PUSHR) // DSPI PUSH TX FIFO Register In Master Mode
  4245. #define SPI1_PUSHR_SLAVE (KINETISK_SPI1.PUSHR) // DSPI PUSH TX FIFO Register In Slave Mode
  4246. #define SPI1_POPR (KINETISK_SPI1.POPR) // DSPI POP RX FIFO Register
  4247. #define SPI1_TXFR0 (KINETISK_SPI1.TXFR[0]) // DSPI Transmit FIFO Registers
  4248. #define SPI1_TXFR1 (KINETISK_SPI1.TXFR[1]) // DSPI Transmit FIFO Registers
  4249. #define SPI1_TXFR2 (KINETISK_SPI1.TXFR[2]) // DSPI Transmit FIFO Registers
  4250. #define SPI1_TXFR3 (KINETISK_SPI1.TXFR[3]) // DSPI Transmit FIFO Registers
  4251. #define SPI1_RXFR0 (KINETISK_SPI1.RXFR[0]) // DSPI Receive FIFO Registers
  4252. #define SPI1_RXFR1 (KINETISK_SPI1.RXFR[1]) // DSPI Receive FIFO Registers
  4253. #define SPI1_RXFR2 (KINETISK_SPI1.RXFR[2]) // DSPI Receive FIFO Registers
  4254. #define SPI1_RXFR3 (KINETISK_SPI1.RXFR[3]) // DSPI Receive FIFO Registers
  4255. #define KINETISK_SPI2 (*(KINETISK_SPI_t *)0x400AC000)
  4256. #define SPI2_MCR (KINETISK_SPI2.MCR) // DSPI Module Configuration Register
  4257. #define SPI2_TCR (KINETISK_SPI2.TCR) // DSPI Transfer Count Register
  4258. #define SPI2_CTAR0 (KINETISK_SPI2.CTAR0) // DSPI Clock and Transfer Attributes Register, In Master Mode
  4259. #define SPI2_CTAR0_SLAVE (KINETISK_SPI2.CTAR0) // DSPI Clock and Transfer Attributes Register, In Slave Mode
  4260. #define SPI2_CTAR1 (KINETISK_SPI2.CTAR1) // DSPI Clock and Transfer Attributes Register, In Master Mode
  4261. #define SPI2_SR (KINETISK_SPI2.SR) // DSPI Status Register
  4262. #define SPI2_RSER (KINETISK_SPI2.RSER) // DSPI DMA/Interrupt Request Select and Enable Register
  4263. #define SPI2_PUSHR (KINETISK_SPI2.PUSHR) // DSPI PUSH TX FIFO Register In Master Mode
  4264. #define SPI2_PUSHR_SLAVE (KINETISK_SPI2.PUSHR) // DSPI PUSH TX FIFO Register In Slave Mode
  4265. #define SPI2_POPR (KINETISK_SPI2.POPR) // DSPI POP RX FIFO Register
  4266. #define SPI2_TXFR0 (KINETISK_SPI2.TXFR[0]) // DSPI Transmit FIFO Registers
  4267. #define SPI2_TXFR1 (KINETISK_SPI2.TXFR[1]) // DSPI Transmit FIFO Registers
  4268. #define SPI2_TXFR2 (KINETISK_SPI2.TXFR[2]) // DSPI Transmit FIFO Registers
  4269. #define SPI2_TXFR3 (KINETISK_SPI2.TXFR[3]) // DSPI Transmit FIFO Registers
  4270. #define SPI2_RXFR0 (KINETISK_SPI2.RXFR[0]) // DSPI Receive FIFO Registers
  4271. #define SPI2_RXFR1 (KINETISK_SPI2.RXFR[1]) // DSPI Receive FIFO Registers
  4272. #define SPI2_RXFR2 (KINETISK_SPI2.RXFR[2]) // DSPI Receive FIFO Registers
  4273. #define SPI2_RXFR3 (KINETISK_SPI2.RXFR[3]) // DSPI Receive FIFO Registers
  4274. #endif
  4275. #elif defined(KINETISL)
  4276. typedef struct {
  4277. volatile uint8_t S;
  4278. volatile uint8_t BR;
  4279. volatile uint8_t C2;
  4280. volatile uint8_t C1;
  4281. volatile uint8_t ML;
  4282. volatile uint8_t MH;
  4283. volatile uint8_t DL;
  4284. volatile uint8_t DH;
  4285. volatile uint8_t unused1;
  4286. volatile uint8_t unused2;
  4287. volatile uint8_t CI;
  4288. volatile uint8_t C3;
  4289. } KINETISL_SPI_t;
  4290. #define KINETISL_SPI0 (*(KINETISL_SPI_t *)0x40076000)
  4291. #define KINETISL_SPI1 (*(KINETISL_SPI_t *)0x40077000)
  4292. #define SPI0_S (KINETISL_SPI0.S) // Status
  4293. #define SPI_S_SPRF ((uint8_t)0x80) // Read Buffer Full Flag
  4294. #define SPI_S_SPMF ((uint8_t)0x40) // Match Flag
  4295. #define SPI_S_SPTEF ((uint8_t)0x20) // Transmit Buffer Empty Flag
  4296. #define SPI_S_MODF ((uint8_t)0x10) // Fault Flag
  4297. #define SPI_S_RNFULLF ((uint8_t)0x08) // Receive FIFO nearly full flag
  4298. #define SPI_S_TNEAREF ((uint8_t)0x04) // Transmit FIFO nearly empty flag
  4299. #define SPI_S_TXFULLF ((uint8_t)0x02) // Transmit FIFO full flag
  4300. #define SPI_S_RFIFOEF ((uint8_t)0x01) // Read FIFO empty flag
  4301. #define SPI0_BR (KINETISL_SPI0.BR) // Baud Rate
  4302. #define SPI_BR_SPPR(n) (((n) & 7) << 4) // Prescale = N+1
  4303. #define SPI_BR_SPR(n) (((n) & 15) << 0) // Baud Rate Divisor = 2^(N+1) : 0-8 -> 2 to 512
  4304. #define SPI0_C2 (KINETISL_SPI0.C2) // Control Register 2
  4305. #define SPI_C2_SPMIE ((uint8_t)0x80) // Match Interrupt Enable
  4306. #define SPI_C2_SPIMODE ((uint8_t)0x40) // 0 = 8 bit mode, 1 = 16 bit mode
  4307. #define SPI_C2_TXDMAE ((uint8_t)0x20) // Transmit DMA enable
  4308. #define SPI_C2_MODFEN ((uint8_t)0x10) // Master Mode-Fault Function Enable
  4309. #define SPI_C2_BIDIROE ((uint8_t)0x08) // Bidirectional Mode Output Enable
  4310. #define SPI_C2_RXDMAE ((uint8_t)0x04) // Receive DMA enable
  4311. #define SPI_C2_SPISWAI ((uint8_t)0x02) // SPI Stop in Wait Mode
  4312. #define SPI_C2_SPC0 ((uint8_t)0x01) // SPI Pin Control, 0=normal, 1=single bidirectional
  4313. #define SPI0_C1 (KINETISL_SPI0.C1) // Control Register 1
  4314. #define SPI_C1_SPIE ((uint8_t)0x80) // Interrupt Enable
  4315. #define SPI_C1_SPE ((uint8_t)0x40) // SPI System Enable
  4316. #define SPI_C1_SPTIE ((uint8_t)0x20) // Transmit Interrupt Enable
  4317. #define SPI_C1_MSTR ((uint8_t)0x10) // Master/Slave Mode: 0=slave, 1=master
  4318. #define SPI_C1_CPOL ((uint8_t)0x08) // Clock Polarity
  4319. #define SPI_C1_CPHA ((uint8_t)0x04) // Clock Phase
  4320. #define SPI_C1_SSOE ((uint8_t)0x02) // Slave Select Output Enable
  4321. #define SPI_C1_LSBFE ((uint8_t)0x01) // LSB First: 0=MSB First, 1=LSB First
  4322. #define SPI0_ML (KINETISL_SPI0.ML) // Match Low
  4323. #define SPI0_MH (KINETISL_SPI0.MH) // Match High
  4324. #define SPI0_DL (KINETISL_SPI0.DL) // Data Low
  4325. #define SPI0_DH (KINETISL_SPI0.DH) // Data High
  4326. #define SPI0_CI (KINETISL_SPI0.CI) // Clear Interrupt
  4327. #define SPI_CI_TXFERR ((uint8_t)0x80) // Transmit FIFO error flag
  4328. #define SPI_CI_RXFERR ((uint8_t)0x40) // Receive FIFO error flag
  4329. #define SPI_CI_TXFOF ((uint8_t)0x20) // Transmit FIFO overflow flag
  4330. #define SPI_CI_RXFOF ((uint8_t)0x10) // Receive FIFO overflow flag
  4331. #define SPI_CI_TNEAREFCI ((uint8_t)0x08) // Transmit FIFO nearly empty flag clear interrupt
  4332. #define SPI_CI_RNFULLFCI ((uint8_t)0x04) // Receive FIFO nearly full flag clear interrupt
  4333. #define SPI_CI_SPTEFCI ((uint8_t)0x02) // Transmit FIFO empty flag clear interrupt
  4334. #define SPI_CI_SPRFCI ((uint8_t)0x01) // Receive FIFO full flag clear interrupt
  4335. #define SPI0_C3 (KINETISL_SPI0.C3) // Control Register 3
  4336. #define SPI_C3_TNEAREF_MARK ((uint8_t)0x20) // Transmit FIFO nearly empty watermark
  4337. #define SPI_C3_RNFULLF_MARK ((uint8_t)0x10) // Receive FIFO nearly full watermark
  4338. #define SPI_C3_INTCLR ((uint8_t)0x08) // Interrupt clearing mechanism select
  4339. #define SPI_C3_TNEARIEN ((uint8_t)0x04) // Transmit FIFO nearly empty interrupt enable
  4340. #define SPI_C3_RNFULLIEN ((uint8_t)0x02) // Receive FIFO nearly full interrupt enable
  4341. #define SPI_C3_FIFOMODE ((uint8_t)0x01) // FIFO mode enable
  4342. #define SPI1_S (KINETISL_SPI1.S) // Status
  4343. #define SPI1_BR (KINETISL_SPI1.BR) // Baud Rate
  4344. #define SPI1_C2 (KINETISL_SPI1.C2) // Control Register 2
  4345. #define SPI1_C1 (KINETISL_SPI1.C1) // Control Register 1
  4346. #define SPI1_ML (KINETISL_SPI1.ML) // Match Low
  4347. #define SPI1_MH (KINETISL_SPI1.MH) // Match High
  4348. #define SPI1_DL (KINETISL_SPI1.DL) // Data Low
  4349. #define SPI1_DH (KINETISL_SPI1.DH) // Data High
  4350. #define SPI1_CI (KINETISL_SPI1.CI) // Dlear Interrupt
  4351. #define SPI1_C3 (KINETISL_SPI1.C3) // Control Register 3
  4352. #endif
  4353. // Inter-Integrated Circuit (I2C)
  4354. typedef struct {
  4355. volatile uint8_t A1;
  4356. volatile uint8_t F;
  4357. volatile uint8_t C1;
  4358. volatile uint8_t S;
  4359. volatile uint8_t D;
  4360. volatile uint8_t C2;
  4361. volatile uint8_t FLT;
  4362. volatile uint8_t RA;
  4363. volatile uint8_t SMB;
  4364. volatile uint8_t A2;
  4365. volatile uint8_t SLTH;
  4366. volatile uint8_t SLTL;
  4367. } KINETIS_I2C_t;
  4368. #define KINETIS_I2C0 (*(KINETIS_I2C_t *)0x40066000)
  4369. #define KINETIS_I2C1 (*(KINETIS_I2C_t *)0x40067000)
  4370. #define KINETIS_I2C2 (*(KINETIS_I2C_t *)0x400E6000)
  4371. #define KINETIS_I2C3 (*(KINETIS_I2C_t *)0x400E7000)
  4372. #define I2C0_A1 (KINETIS_I2C0.A1) // I2C Address Register 1
  4373. #define I2C0_F (KINETIS_I2C0.F) // I2C Frequency Divider register
  4374. #define I2C_F_DIV20 ((uint8_t)0x00)
  4375. #define I2C_F_DIV22 ((uint8_t)0x01)
  4376. #define I2C_F_DIV24 ((uint8_t)0x02)
  4377. #define I2C_F_DIV26 ((uint8_t)0x03)
  4378. #define I2C_F_DIV28 ((uint8_t)0x04)
  4379. #define I2C_F_DIV30 ((uint8_t)0x05)
  4380. #define I2C_F_DIV32 ((uint8_t)0x09)
  4381. #define I2C_F_DIV34 ((uint8_t)0x06)
  4382. #define I2C_F_DIV36 ((uint8_t)0x0A)
  4383. #define I2C_F_DIV40 ((uint8_t)0x07)
  4384. #define I2C_F_DIV44 ((uint8_t)0x0C)
  4385. #define I2C_F_DIV48 ((uint8_t)0x0D)
  4386. #define I2C_F_DIV56 ((uint8_t)0x0E)
  4387. #define I2C_F_DIV64 ((uint8_t)0x12)
  4388. #define I2C_F_DIV68 ((uint8_t)0x0F)
  4389. #define I2C_F_DIV72 ((uint8_t)0x13)
  4390. #define I2C_F_DIV80 ((uint8_t)0x14)
  4391. #define I2C_F_DIV88 ((uint8_t)0x15)
  4392. #define I2C_F_DIV96 ((uint8_t)0x19)
  4393. #define I2C_F_DIV104 ((uint8_t)0x16)
  4394. #define I2C_F_DIV112 ((uint8_t)0x1A)
  4395. #define I2C_F_DIV128 ((uint8_t)0x17)
  4396. #define I2C_F_DIV144 ((uint8_t)0x1C)
  4397. #define I2C_F_DIV160 ((uint8_t)0x1D)
  4398. #define I2C_F_DIV192 ((uint8_t)0x1E)
  4399. #define I2C_F_DIV224 ((uint8_t)0x22)
  4400. #define I2C_F_DIV240 ((uint8_t)0x1F)
  4401. #define I2C_F_DIV256 ((uint8_t)0x23)
  4402. #define I2C_F_DIV288 ((uint8_t)0x24)
  4403. #define I2C_F_DIV320 ((uint8_t)0x25)
  4404. #define I2C_F_DIV384 ((uint8_t)0x26)
  4405. #define I2C_F_DIV480 ((uint8_t)0x27)
  4406. #define I2C_F_DIV448 ((uint8_t)0x2A)
  4407. #define I2C_F_DIV512 ((uint8_t)0x2B)
  4408. #define I2C_F_DIV576 ((uint8_t)0x2C)
  4409. #define I2C_F_DIV640 ((uint8_t)0x2D)
  4410. #define I2C_F_DIV768 ((uint8_t)0x2E)
  4411. #define I2C_F_DIV896 ((uint8_t)0x32)
  4412. #define I2C_F_DIV960 ((uint8_t)0x2F)
  4413. #define I2C_F_DIV1024 ((uint8_t)0x33)
  4414. #define I2C_F_DIV1152 ((uint8_t)0x34)
  4415. #define I2C_F_DIV1280 ((uint8_t)0x35)
  4416. #define I2C_F_DIV1536 ((uint8_t)0x36)
  4417. #define I2C_F_DIV1920 ((uint8_t)0x37)
  4418. #define I2C_F_DIV1792 ((uint8_t)0x3A)
  4419. #define I2C_F_DIV2048 ((uint8_t)0x3B)
  4420. #define I2C_F_DIV2304 ((uint8_t)0x3C)
  4421. #define I2C_F_DIV2560 ((uint8_t)0x3D)
  4422. #define I2C_F_DIV3072 ((uint8_t)0x3E)
  4423. #define I2C_F_DIV3840 ((uint8_t)0x3F)
  4424. //#define I2C_F_DIV28 ((uint8_t)0x08)
  4425. //#define I2C_F_DIV40 ((uint8_t)0x0B)
  4426. //#define I2C_F_DIV48 ((uint8_t)0x10)
  4427. //#define I2C_F_DIV56 ((uint8_t)0x11)
  4428. //#define I2C_F_DIV80 ((uint8_t)0x18)
  4429. //#define I2C_F_DIV128 ((uint8_t)0x1B)
  4430. //#define I2C_F_DIV160 ((uint8_t)0x20)
  4431. //#define I2C_F_DIV192 ((uint8_t)0x21)
  4432. //#define I2C_F_DIV320 ((uint8_t)0x28)
  4433. //#define I2C_F_DIV384 ((uint8_t)0x29)
  4434. //#define I2C_F_DIV640 ((uint8_t)0x30)
  4435. //#define I2C_F_DIV768 ((uint8_t)0x31)
  4436. //#define I2C_F_DIV1280 ((uint8_t)0x38)
  4437. //#define I2C_F_DIV1536 ((uint8_t)0x39)
  4438. #define I2C0_C1 (KINETIS_I2C0.C1) // I2C Control Register 1
  4439. #define I2C_C1_IICEN ((uint8_t)0x80) // I2C Enable
  4440. #define I2C_C1_IICIE ((uint8_t)0x40) // I2C Interrupt Enable
  4441. #define I2C_C1_MST ((uint8_t)0x20) // Master Mode Select
  4442. #define I2C_C1_TX ((uint8_t)0x10) // Transmit Mode Select
  4443. #define I2C_C1_TXAK ((uint8_t)0x08) // Transmit Acknowledge Enable
  4444. #define I2C_C1_RSTA ((uint8_t)0x04) // Repeat START
  4445. #define I2C_C1_WUEN ((uint8_t)0x02) // Wakeup Enable
  4446. #define I2C_C1_DMAEN ((uint8_t)0x01) // DMA Enable
  4447. #define I2C0_S (KINETIS_I2C0.S) // I2C Status register
  4448. #define I2C_S_TCF ((uint8_t)0x80) // Transfer Complete Flag
  4449. #define I2C_S_IAAS ((uint8_t)0x40) // Addressed As A Slave
  4450. #define I2C_S_BUSY ((uint8_t)0x20) // Bus Busy
  4451. #define I2C_S_ARBL ((uint8_t)0x10) // Arbitration Lost
  4452. #define I2C_S_RAM ((uint8_t)0x08) // Range Address Match
  4453. #define I2C_S_SRW ((uint8_t)0x04) // Slave Read/Write
  4454. #define I2C_S_IICIF ((uint8_t)0x02) // Interrupt Flag
  4455. #define I2C_S_RXAK ((uint8_t)0x01) // Receive Acknowledge
  4456. #define I2C0_D (KINETIS_I2C0.D) // I2C Data I/O register
  4457. #define I2C0_C2 (KINETIS_I2C0.C2) // I2C Control Register 2
  4458. #define I2C_C2_GCAEN ((uint8_t)0x80) // General Call Address Enable
  4459. #define I2C_C2_ADEXT ((uint8_t)0x40) // Address Extension
  4460. #define I2C_C2_HDRS ((uint8_t)0x20) // High Drive Select
  4461. #define I2C_C2_SBRC ((uint8_t)0x10) // Slave Baud Rate Control
  4462. #define I2C_C2_RMEN ((uint8_t)0x08) // Range Address Matching Enable
  4463. #define I2C_C2_AD(n) ((n) & 7) // Slave Address, upper 3 bits
  4464. #define I2C0_FLT (KINETIS_I2C0.FLT) // I2C Programmable Input Glitch Filter register
  4465. #define I2C_FLT_SHEN ((uint8_t)0x80) // Stop Hold Enable
  4466. #define I2C_FLT_STOPF ((uint8_t)0x40) // Stop Detect Flag
  4467. #define I2C_FLT_STOPIE ((uint8_t)0x20) // Stop Interrupt Enable
  4468. #define I2C_FLT_FTL(n) ((n) & 0x1F) // Programmable Filter Factor
  4469. #define I2C0_RA (KINETIS_I2C0.RA) // I2C Range Address register
  4470. #define I2C0_SMB (KINETIS_I2C0.SMB) // I2C SMBus Control and Status register
  4471. #define I2C0_A2 (KINETIS_I2C0.A2) // I2C Address Register 2
  4472. #define I2C0_SLTH (KINETIS_I2C0.SLTH) // I2C SCL Low Timeout Register High
  4473. #define I2C0_SLTL (KINETIS_I2C0.SLTL) // I2C SCL Low Timeout Register Low
  4474. #define I2C1_A1 (KINETIS_I2C1.A1) // I2C Address Register 1
  4475. #define I2C1_F (KINETIS_I2C1.F) // I2C Frequency Divider register
  4476. #define I2C1_C1 (KINETIS_I2C1.C1) // I2C Control Register 1
  4477. #define I2C1_S (KINETIS_I2C1.S) // I2C Status register
  4478. #define I2C1_D (KINETIS_I2C1.D) // I2C Data I/O register
  4479. #define I2C1_C2 (KINETIS_I2C1.C2) // I2C Control Register 2
  4480. #define I2C1_FLT (KINETIS_I2C1.FLT) // I2C Programmable Input Glitch Filter register
  4481. #define I2C1_RA (KINETIS_I2C1.RA) // I2C Range Address register
  4482. #define I2C1_SMB (KINETIS_I2C1.SMB) // I2C SMBus Control and Status register
  4483. #define I2C1_A2 (KINETIS_I2C1.A2) // I2C Address Register 2
  4484. #define I2C1_SLTH (KINETIS_I2C1.SLTH) // I2C SCL Low Timeout Register High
  4485. #define I2C1_SLTL (KINETIS_I2C1.SLTL) // I2C SCL Low Timeout Register Low
  4486. #define I2C2_A1 (KINETIS_I2C2.A1) // I2C Address Register 1
  4487. #define I2C2_F (KINETIS_I2C2.F) // I2C Frequency Divider register
  4488. #define I2C2_C1 (KINETIS_I2C2.C1) // I2C Control Register 1
  4489. #define I2C2_S (KINETIS_I2C2.S) // I2C Status register
  4490. #define I2C2_D (KINETIS_I2C2.D) // I2C Data I/O register
  4491. #define I2C2_C2 (KINETIS_I2C2.C2) // I2C Control Register 2
  4492. #define I2C2_FLT (KINETIS_I2C2.FLT) // I2C Programmable Input Glitch Filter register
  4493. #define I2C2_RA (KINETIS_I2C2.RA) // I2C Range Address register
  4494. #define I2C2_SMB (KINETIS_I2C2.SMB) // I2C SMBus Control and Status register
  4495. #define I2C2_A2 (KINETIS_I2C2.A2) // I2C Address Register 2
  4496. #define I2C2_SLTH (KINETIS_I2C2.SLTH) // I2C SCL Low Timeout Register High
  4497. #define I2C2_SLTL (KINETIS_I2C2.SLTL) // I2C SCL Low Timeout Register Low
  4498. #define I2C3_A1 (KINETIS_I2C3.A1) // I2C Address Register 1
  4499. #define I2C3_F (KINETIS_I2C3.F) // I2C Frequency Divider register
  4500. #define I2C3_C1 (KINETIS_I2C3.C1) // I2C Control Register 1
  4501. #define I2C3_S (KINETIS_I2C3.S) // I2C Status register
  4502. #define I2C3_D (KINETIS_I2C3.D) // I2C Data I/O register
  4503. #define I2C3_C2 (KINETIS_I2C3.C2) // I2C Control Register 2
  4504. #define I2C3_FLT (KINETIS_I2C3.FLT) // I2C Programmable Input Glitch Filter register
  4505. #define I2C3_RA (KINETIS_I2C3.RA) // I2C Range Address register
  4506. #define I2C3_SMB (KINETIS_I2C3.SMB) // I2C SMBus Control and Status register
  4507. #define I2C3_A2 (KINETIS_I2C3.A2) // I2C Address Register 2
  4508. #define I2C3_SLTH (KINETIS_I2C3.SLTH) // I2C SCL Low Timeout Register High
  4509. #define I2C3_SLTL (KINETIS_I2C3.SLTL) // I2C SCL Low Timeout Register Low
  4510. // Universal Asynchronous Receiver/Transmitter (UART)
  4511. typedef struct __attribute__((packed)) {
  4512. volatile uint8_t BDH;
  4513. volatile uint8_t BDL;
  4514. volatile uint8_t C1;
  4515. volatile uint8_t C2;
  4516. volatile uint8_t S1;
  4517. volatile uint8_t S2;
  4518. volatile uint8_t C3;
  4519. volatile uint8_t D;
  4520. volatile uint8_t MA1;
  4521. volatile uint8_t MA2;
  4522. volatile uint8_t C4;
  4523. volatile uint8_t C5;
  4524. volatile uint8_t ED;
  4525. volatile uint8_t MODEM;
  4526. volatile uint8_t IR;
  4527. volatile uint8_t unused1;
  4528. volatile uint8_t PFIFO;
  4529. volatile uint8_t CFIFO;
  4530. volatile uint8_t SFIFO;
  4531. volatile uint8_t TWFIFO;
  4532. volatile uint8_t TCFIFO;
  4533. volatile uint8_t RWFIFO;
  4534. volatile uint8_t RCFIFO;
  4535. volatile uint8_t unused2;
  4536. volatile uint8_t C7816;
  4537. volatile uint8_t IE7816;
  4538. volatile uint8_t IS7816;
  4539. union { volatile uint8_t WP7816T0; volatile uint8_t WP7816T1; };
  4540. volatile uint8_t WN7816;
  4541. volatile uint8_t WF7816;
  4542. volatile uint8_t ET7816;
  4543. volatile uint8_t TL7816;
  4544. volatile uint8_t unused3;
  4545. volatile uint8_t C6;
  4546. volatile uint8_t PCTH;
  4547. volatile uint8_t PCTL;
  4548. volatile uint8_t B1T;
  4549. volatile uint8_t SDTH;
  4550. volatile uint8_t SDTL;
  4551. volatile uint8_t PRE;
  4552. volatile uint8_t TPL;
  4553. volatile uint8_t IE;
  4554. volatile uint8_t WB;
  4555. volatile uint8_t S3;
  4556. volatile uint8_t S4;
  4557. volatile uint8_t RPL;
  4558. volatile uint8_t RPREL;
  4559. volatile uint8_t CPW;
  4560. volatile uint8_t RIDT;
  4561. volatile uint8_t TIDT;
  4562. } KINETISK_UART_t;
  4563. #define KINETISK_UART0 (*(KINETISK_UART_t *)0x4006A000)
  4564. #define UART0_BDH (KINETISK_UART0.BDH) // UART Baud Rate Registers: High
  4565. #define UART_BDH_SBNS 0x20 // UART Stop Bit Number Select (TLC T3.5 T3.6)
  4566. #define UART0_BDL (KINETISK_UART0.BDL) // UART Baud Rate Registers: Low
  4567. #define UART0_C1 (KINETISK_UART0.C1) // UART Control Register 1
  4568. #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
  4569. #define UART_C1_UARTSWAI 0x40 // UART Stops in Wait Mode
  4570. #define UART_C1_RSRC 0x20 // When LOOPS is set, the RSRC field determines the source for the receiver shift register input
  4571. #define UART_C1_M 0x10 // 9-bit or 8-bit Mode Select
  4572. #define UART_C1_WAKE 0x08 // Determines which condition wakes the UART
  4573. #define UART_C1_ILT 0x04 // Idle Line Type Select
  4574. #define UART_C1_PE 0x02 // Parity Enable
  4575. #define UART_C1_PT 0x01 // Parity Type, 0=even, 1=odd
  4576. #define UART0_C2 (KINETISK_UART0.C2) // UART Control Register 2
  4577. #define UART_C2_TIE 0x80 // Transmitter Interrupt or DMA Transfer Enable.
  4578. #define UART_C2_TCIE 0x40 // Transmission Complete Interrupt Enable
  4579. #define UART_C2_RIE 0x20 // Receiver Full Interrupt or DMA Transfer Enable
  4580. #define UART_C2_ILIE 0x10 // Idle Line Interrupt Enable
  4581. #define UART_C2_TE 0x08 // Transmitter Enable
  4582. #define UART_C2_RE 0x04 // Receiver Enable
  4583. #define UART_C2_RWU 0x02 // Receiver Wakeup Control
  4584. #define UART_C2_SBK 0x01 // Send Break
  4585. #define UART0_S1 (KINETISK_UART0.S1) // UART Status Register 1
  4586. #define UART_S1_TDRE 0x80 // Transmit Data Register Empty Flag
  4587. #define UART_S1_TC 0x40 // Transmit Complete Flag
  4588. #define UART_S1_RDRF 0x20 // Receive Data Register Full Flag
  4589. #define UART_S1_IDLE 0x10 // Idle Line Flag
  4590. #define UART_S1_OR 0x08 // Receiver Overrun Flag
  4591. #define UART_S1_NF 0x04 // Noise Flag
  4592. #define UART_S1_FE 0x02 // Framing Error Flag
  4593. #define UART_S1_PF 0x01 // Parity Error Flag
  4594. #define UART0_S2 (KINETISK_UART0.S2) // UART Status Register 2
  4595. #define UART_S2_LBKDIF 0x80 // LIN Break Detect Interrupt Flag
  4596. #define UART_S2_RXEDGIF 0x40 // RxD Pin Active Edge Interrupt Flag
  4597. #define UART_S2_MSBF 0x20 // Most Significant Bit First
  4598. #define UART_S2_RXINV 0x10 // Receive Data Inversion
  4599. #define UART_S2_RWUID 0x08 // Receive Wakeup Idle Detect
  4600. #define UART_S2_BRK13 0x04 // Break Transmit Character Length
  4601. #define UART_S2_LBKDE 0x02 // LIN Break Detection Enable
  4602. #define UART_S2_RAF 0x01 // Receiver Active Flag
  4603. #define UART0_C3 (KINETISK_UART0.C3) // UART Control Register 3
  4604. #define UART_C3_R8 0x80 // Received Bit 8
  4605. #define UART_C3_T8 0x40 // Transmit Bit 8
  4606. #define UART_C3_TXDIR 0x20 // TX Pin Direction in Single-Wire mode
  4607. #define UART_C3_TXINV 0x10 // Transmit Data Inversion
  4608. #define UART_C3_ORIE 0x08 // Overrun Error Interrupt Enable
  4609. #define UART_C3_NEIE 0x04 // Noise Error Interrupt Enable
  4610. #define UART_C3_FEIE 0x02 // Framing Error Interrupt Enable
  4611. #define UART_C3_PEIE 0x01 // Parity Error Interrupt Enable
  4612. #define UART0_D (KINETISK_UART0.D) // UART Data Register
  4613. #define UART0_MA1 (KINETISK_UART0.MA1) // UART Match Address Registers 1
  4614. #define UART0_MA2 (KINETISK_UART0.MA2) // UART Match Address Registers 2
  4615. #define UART0_C4 (KINETISK_UART0.C4) // UART Control Register 4
  4616. #define UART_C4_MAEN1 0x80 // Match Address Mode Enable 1
  4617. #define UART_C4_MAEN2 0x40 // Match Address Mode Enable 2
  4618. #define UART_C4_M10 0x20 // 10-bit Mode select
  4619. #define UART_C4_BRFA(n) ((n) & 31) // Baud Rate Fine Adjust
  4620. #define UART0_C5 (KINETISK_UART0.C5) // UART Control Register 5
  4621. #define UART_C5_TDMAS 0x80 // Transmitter DMA Select
  4622. #define UART_C5_RDMAS 0x20 // Receiver Full DMA Select
  4623. #define UART0_ED (KINETISK_UART0.ED) // UART Extended Data Register
  4624. #define UART_ED_NOISY 0x80 // data received with noise
  4625. #define UART_ED_PARITYE 0x40 // data received with a parity error
  4626. #define UART0_MODEM (KINETISK_UART0.MODEM) // UART Modem Register
  4627. #define UART_MODEM_RXRTSE 0x08 // Receiver request-to-send enable
  4628. #define UART_MODEM_TXRTSPOL 0x04 // Transmitter request-to-send polarity
  4629. #define UART_MODEM_TXRTSE 0x02 // Transmitter request-to-send enable
  4630. #define UART_MODEM_TXCTSE 0x01 // Transmitter clear-to-send enable
  4631. #define UART0_IR (KINETISK_UART0.IR) // UART Infrared Register
  4632. #define UART_IR_IREN 0x04 // Infrared enable
  4633. #define UART_IR_TNP(n) ((n) & 3) // TX narrow pulse, 0=3/16, 1=1/16, 2=1/32, 3=1/4
  4634. #define UART0_PFIFO (KINETISK_UART0.PFIFO) // UART FIFO Parameters
  4635. #define UART_PFIFO_TXFE 0x80 // Transmit FIFO Enable
  4636. #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
  4637. #define UART_PFIFO_RXFE 0x08 // Receive FIFO Enable
  4638. #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
  4639. #define UART0_CFIFO (KINETISK_UART0.CFIFO) // UART FIFO Control Register
  4640. #define UART_CFIFO_TXFLUSH 0x80 // Transmit FIFO/Buffer Flush
  4641. #define UART_CFIFO_RXFLUSH 0x40 // Receive FIFO/Buffer Flush
  4642. #define UART_CFIFO_RXOFE 0x04 // Receive FIFO Overflow Interrupt Enable
  4643. #define UART_CFIFO_TXOFE 0x02 // Transmit FIFO Overflow Interrupt Enable
  4644. #define UART_CFIFO_RXUFE 0x01 // Receive FIFO Underflow Interrupt Enable
  4645. #define UART0_SFIFO (KINETISK_UART0.SFIFO) // UART FIFO Status Register
  4646. #define UART_SFIFO_TXEMPT 0x80 // Transmit Buffer/FIFO Empty
  4647. #define UART_SFIFO_RXEMPT 0x40 // Receive Buffer/FIFO Empty
  4648. #define UART_SFIFO_RXOF 0x04 // Receiver Buffer Overflow Flag
  4649. #define UART_SFIFO_TXOF 0x02 // Transmitter Buffer Overflow Flag
  4650. #define UART_SFIFO_RXUF 0x01 // Receiver Buffer Underflow Flag
  4651. #define UART0_TWFIFO (KINETISK_UART0.TWFIFO) // UART FIFO Transmit Watermark
  4652. #define UART0_TCFIFO (KINETISK_UART0.TCFIFO) // UART FIFO Transmit Count
  4653. #define UART0_RWFIFO (KINETISK_UART0.RWFIFO) // UART FIFO Receive Watermark
  4654. #define UART0_RCFIFO (KINETISK_UART0.RCFIFO) // UART FIFO Receive Count
  4655. #define UART0_C7816 (KINETISK_UART0.C7816) // UART 7816 Control Register
  4656. #define UART_C7816_ONACK 0x10 // Generate NACK on Overflow
  4657. #define UART_C7816_ANACK 0x08 // Generate NACK on Error
  4658. #define UART_C7816_INIT 0x04 // Detect Initial Character
  4659. #define UART_C7816_TTYPE 0x02 // Transfer Type
  4660. #define UART_C7816_ISO_7816E 0x01 // ISO-7816 Functionality Enabled
  4661. #define UART0_IE7816 (KINETISK_UART0.IE7816) // UART 7816 Interrupt Enable Register
  4662. #define UART_IE7816_WTE 0x80 // Wait Timer Interrupt Enable
  4663. #define UART_IE7816_CWTE 0x40 // Character Wait Timer Interrupt Enable
  4664. #define UART_IE7816_BWTE 0x20 // Block Wait Timer Interrupt Enable
  4665. #define UART_IE7816_INITDE 0x10 // Initial Character Detected Interrupt Enable
  4666. #define UART_IE7816_GTVE 0x04 // Guard Timer Violated Interrupt Enable
  4667. #define UART_IE7816_TXTE 0x02 // Transmit Threshold Exceeded Interrupt Enable
  4668. #define UART_IE7816_RXTE 0x01 // Receive Threshold Exceeded Interrupt Enable
  4669. #define UART0_IS7816 (KINETISK_UART0.IS7816) // UART 7816 Interrupt Status Register
  4670. #define UART_IS7816_WT 0x80 // Wait Timer Interrupt
  4671. #define UART_IS7816_CWT 0x40 // Character Wait Timer Interrupt
  4672. #define UART_IS7816_BWT 0x20 // Block Wait Timer Interrupt
  4673. #define UART_IS7816_INITD 0x10 // Initial Character Detected Interrupt
  4674. #define UART_IS7816_GTV 0x04 // Guard Timer Violated Interrupt
  4675. #define UART_IS7816_TXT 0x02 // Transmit Threshold Exceeded Interrupt
  4676. #define UART_IS7816_RXT 0x01 // Receive Threshold Exceeded Interrupt
  4677. #define UART0_WP7816T0 (KINETISK_UART0.WP7816T0) // UART 7816 Wait Parameter Register
  4678. #define UART0_WP7816T1 (KINETISK_UART0.WP7816T1) // UART 7816 Wait Parameter Register
  4679. #define UART_WP7816T1_CWI(n) (((n) & 15) << 4) // Character Wait Time Integer (C7816[TTYPE] = 1)
  4680. #define UART_WP7816T1_BWI(n) (((n) & 15) << 0) // Block Wait Time Integer(C7816[TTYPE] = 1)
  4681. #define UART0_WN7816 (KINETISK_UART0.WN7816) // UART 7816 Wait N Register
  4682. #define UART0_WF7816 (KINETISK_UART0.WF7816) // UART 7816 Wait FD Register
  4683. #define UART0_ET7816 (KINETISK_UART0.ET7816) // UART 7816 Error Threshold Register
  4684. #define UART_ET7816_TXTHRESHOLD(n) (((n) & 15) << 4) // Transmit NACK Threshold
  4685. #define UART_ET7816_RXTHRESHOLD(n) (((n) & 15) << 0) // Receive NACK Threshold
  4686. #define UART0_TL7816 (KINETISK_UART0.TL7816) // UART 7816 Transmit Length Register
  4687. #define UART0_C6 (KINETISK_UART0.C6) // UART CEA709.1-B Control Register 6
  4688. #define UART_C6_EN709 0x80 // Enables the CEA709.1-B feature.
  4689. #define UART_C6_TX709 0x40 // Starts CEA709.1-B transmission.
  4690. #define UART_C6_CE 0x20 // Collision Enable
  4691. #define UART_C6_CP 0x10 // Collision Signal Polarity
  4692. #define UART0_PCTH (KINETISK_UART0.PCTH) // UART CEA709.1-B Packet Cycle Time Counter High
  4693. #define UART0_PCTL (KINETISK_UART0.PCTL) // UART CEA709.1-B Packet Cycle Time Counter Low
  4694. #define UART0_B1T (KINETISK_UART0.B1T) // UART CEA709.1-B Beta1 Timer
  4695. #define UART0_SDTH (KINETISK_UART0.SDTH) // UART CEA709.1-B Secondary Delay Timer High
  4696. #define UART0_SDTL (KINETISK_UART0.SDTL) // UART CEA709.1-B Secondary Delay Timer Low
  4697. #define UART0_PRE (KINETISK_UART0.PRE) // UART CEA709.1-B Preamble
  4698. #define UART0_TPL (KINETISK_UART0.TPL) // UART CEA709.1-B Transmit Packet Length
  4699. #define UART0_IE (KINETISK_UART0.IE) // UART CEA709.1-B Interrupt Enable Register
  4700. #define UART_IE_WBEIE 0x40 // WBASE Expired Interrupt Enable
  4701. #define UART_IE_ISDIE 0x20 // Initial Sync Detection Interrupt Enable
  4702. #define UART_IE_PRXIE 0x10 // Packet Received Interrupt Enable
  4703. #define UART_IE_PTXIE 0x08 // Packet Transmitted Interrupt Enable
  4704. #define UART_IE_PCTEIE 0x04 // Packet Cycle Timer Interrupt Enable
  4705. #define UART_IE_PSIE 0x02 // Preamble Start Interrupt Enable
  4706. #define UART_IE_TXFIE 0x01 // Transmission Fail Interrupt Enable
  4707. #define UART0_WB (KINETISK_UART0.WB) // UART CEA709.1-B WBASE
  4708. #define UART0_S3 (KINETISK_UART0.S3) // UART CEA709.1-B Status Register
  4709. #define UART_S3_PEF 0x80 // Preamble Error Flag
  4710. #define UART_S3_WBEF 0x40 // Wbase Expired Flag
  4711. #define UART_S3_ISD 0x20 // Initial Sync Detect
  4712. #define UART_S3_PRXF 0x10 // Packet Received Flag
  4713. #define UART_S3_PTXF 0x08 // Packet Transmitted Flag
  4714. #define UART_S3_PCTEF 0x04 // Packet Cycle Timer Expired Flag
  4715. #define UART_S3_PSF 0x02 // Preamble Start Flag
  4716. #define UART_S3_TXFF 0x01 // Transmission Fail Flag
  4717. #define UART0_S4 (KINETISK_UART0.S4) // UART CEA709.1-B Status Register
  4718. #define UART_S4_INITF 0x10 // Initial Synchronization Fail Flag
  4719. #define UART_S4_CDET(n) (((n) & 3) << 2) // Indicates collision: 0=none, 1=preamble, 2=data, 3=line code violation
  4720. #define UART_S4_ILCV 0x02 // Improper Line Code Violation
  4721. #define UART_S4_FE 0x01 // Framing Error
  4722. #define UART0_RPL (KINETISK_UART0.RPL) // UART CEA709.1-B Received Packet Length
  4723. #define UART0_RPREL (KINETISK_UART0.RPREL) // UART CEA709.1-B Received Preamble Length
  4724. #define UART0_CPW (KINETISK_UART0.CPW) // UART CEA709.1-B Collision Pulse Width
  4725. #define UART0_RIDT (KINETISK_UART0.RIDT) // UART CEA709.1-B Receive Indeterminate Time
  4726. #define UART0_TIDT (KINETISK_UART0.TIDT) // UART CEA709.1-B Transmit Indeterminate Time
  4727. #define KINETISK_UART1 (*(KINETISK_UART_t *)0x4006B000)
  4728. #define UART1_BDH (KINETISK_UART1.BDH) // UART Baud Rate Registers: High
  4729. #define UART1_BDL (KINETISK_UART1.BDL) // UART Baud Rate Registers: Low
  4730. #define UART1_C1 (KINETISK_UART1.C1) // UART Control Register 1
  4731. #define UART1_C2 (KINETISK_UART1.C2) // UART Control Register 2
  4732. #define UART1_S1 (KINETISK_UART1.S1) // UART Status Register 1
  4733. #define UART1_S2 (KINETISK_UART1.S2) // UART Status Register 2
  4734. #define UART1_C3 (KINETISK_UART1.C3) // UART Control Register 3
  4735. #define UART1_D (KINETISK_UART1.D) // UART Data Register
  4736. #define UART1_MA1 (KINETISK_UART1.MA1) // UART Match Address Registers 1
  4737. #define UART1_MA2 (KINETISK_UART1.MA2) // UART Match Address Registers 2
  4738. #define UART1_C4 (KINETISK_UART1.C4) // UART Control Register 4
  4739. #define UART1_C5 (KINETISK_UART1.C5) // UART Control Register 5
  4740. #define UART1_ED (KINETISK_UART1.ED) // UART Extended Data Register
  4741. #define UART1_MODEM (KINETISK_UART1.MODEM) // UART Modem Register
  4742. #define UART1_IR (KINETISK_UART1.IR) // UART Infrared Register
  4743. #define UART1_PFIFO (KINETISK_UART1.PFIFO) // UART FIFO Parameters
  4744. #define UART1_CFIFO (KINETISK_UART1.CFIFO) // UART FIFO Control Register
  4745. #define UART1_SFIFO (KINETISK_UART1.SFIFO) // UART FIFO Status Register
  4746. #define UART1_TWFIFO (KINETISK_UART1.TWFIFO) // UART FIFO Transmit Watermark
  4747. #define UART1_TCFIFO (KINETISK_UART1.TCFIFO) // UART FIFO Transmit Count
  4748. #define UART1_RWFIFO (KINETISK_UART1.RWFIFO) // UART FIFO Receive Watermark
  4749. #define UART1_RCFIFO (KINETISK_UART1.RCFIFO) // UART FIFO Receive Count
  4750. #define UART1_C7816 (KINETISK_UART1.C7816) // UART 7816 Control Register
  4751. #define UART1_IE7816 (KINETISK_UART1.IE7816) // UART 7816 Interrupt Enable Register
  4752. #define UART1_IS7816 (KINETISK_UART1.IS7816) // UART 7816 Interrupt Status Register
  4753. #define UART1_WP7816T0 (KINETISK_UART1.WP7816T0)// UART 7816 Wait Parameter Register
  4754. #define UART1_WP7816T1 (KINETISK_UART1.WP7816T1)// UART 7816 Wait Parameter Register
  4755. #define UART1_WN7816 (KINETISK_UART1.WN7816) // UART 7816 Wait N Register
  4756. #define UART1_WF7816 (KINETISK_UART1.WF7816) // UART 7816 Wait FD Register
  4757. #define UART1_ET7816 (KINETISK_UART1.ET7816) // UART 7816 Error Threshold Register
  4758. #define UART1_TL7816 (KINETISK_UART1.TL7816) // UART 7816 Transmit Length Register
  4759. #define UART1_C6 (KINETISK_UART1.C6) // UART CEA709.1-B Control Register 6
  4760. #define UART1_PCTH (KINETISK_UART1.PCTH) // UART CEA709.1-B Packet Cycle Time Counter High
  4761. #define UART1_PCTL (KINETISK_UART1.PCTL) // UART CEA709.1-B Packet Cycle Time Counter Low
  4762. #define UART1_B1T (KINETISK_UART1.B1T) // UART CEA709.1-B Beta1 Timer
  4763. #define UART1_SDTH (KINETISK_UART1.SDTH) // UART CEA709.1-B Secondary Delay Timer High
  4764. #define UART1_SDTL (KINETISK_UART1.SDTL) // UART CEA709.1-B Secondary Delay Timer Low
  4765. #define UART1_PRE (KINETISK_UART1.PRE) // UART CEA709.1-B Preamble
  4766. #define UART1_TPL (KINETISK_UART1.TPL) // UART CEA709.1-B Transmit Packet Length
  4767. #define UART1_IE (KINETISK_UART1.IE) // UART CEA709.1-B Interrupt Enable Register
  4768. #define UART1_WB (KINETISK_UART1.WB) // UART CEA709.1-B WBASE
  4769. #define UART1_S3 (KINETISK_UART1.S3) // UART CEA709.1-B Status Register
  4770. #define UART1_S4 (KINETISK_UART1.S4) // UART CEA709.1-B Status Register
  4771. #define UART1_RPL (KINETISK_UART1.RPL) // UART CEA709.1-B Received Packet Length
  4772. #define UART1_RPREL (KINETISK_UART1.RPREL) // UART CEA709.1-B Received Preamble Length
  4773. #define UART1_CPW (KINETISK_UART1.CPW) // UART CEA709.1-B Collision Pulse Width
  4774. #define UART1_RIDT (KINETISK_UART1.RIDT) // UART CEA709.1-B Receive Indeterminate Time
  4775. #define UART1_TIDT (KINETISK_UART1.TIDT) // UART CEA709.1-B Transmit Indeterminate Time
  4776. #define KINETISK_UART2 (*(KINETISK_UART_t *)0x4006C000)
  4777. #define UART2_BDH (KINETISK_UART2.BDH) // UART Baud Rate Registers: High
  4778. #define UART2_BDL (KINETISK_UART2.BDL) // UART Baud Rate Registers: Low
  4779. #define UART2_C1 (KINETISK_UART2.C1) // UART Control Register 1
  4780. #define UART2_C2 (KINETISK_UART2.C2) // UART Control Register 2
  4781. #define UART2_S1 (KINETISK_UART2.S1) // UART Status Register 1
  4782. #define UART2_S2 (KINETISK_UART2.S2) // UART Status Register 2
  4783. #define UART2_C3 (KINETISK_UART2.C3) // UART Control Register 3
  4784. #define UART2_D (KINETISK_UART2.D) // UART Data Register
  4785. #define UART2_MA1 (KINETISK_UART2.MA1) // UART Match Address Registers 1
  4786. #define UART2_MA2 (KINETISK_UART2.MA2) // UART Match Address Registers 2
  4787. #define UART2_C4 (KINETISK_UART2.C4) // UART Control Register 4
  4788. #define UART2_C5 (KINETISK_UART2.C5) // UART Control Register 5
  4789. #define UART2_ED (KINETISK_UART2.ED) // UART Extended Data Register
  4790. #define UART2_MODEM (KINETISK_UART2.MODEM) // UART Modem Register
  4791. #define UART2_IR (KINETISK_UART2.IR) // UART Infrared Register
  4792. #define UART2_PFIFO (KINETISK_UART2.PFIFO) // UART FIFO Parameters
  4793. #define UART2_CFIFO (KINETISK_UART2.CFIFO) // UART FIFO Control Register
  4794. #define UART2_SFIFO (KINETISK_UART2.SFIFO) // UART FIFO Status Register
  4795. #define UART2_TWFIFO (KINETISK_UART2.TWFIFO) // UART FIFO Transmit Watermark
  4796. #define UART2_TCFIFO (KINETISK_UART2.TCFIFO) // UART FIFO Transmit Count
  4797. #define UART2_RWFIFO (KINETISK_UART2.RWFIFO) // UART FIFO Receive Watermark
  4798. #define UART2_RCFIFO (KINETISK_UART2.RCFIFO) // UART FIFO Receive Count
  4799. #define UART2_C7816 (KINETISK_UART2.C7816) // UART 7816 Control Register
  4800. #define UART2_IE7816 (KINETISK_UART2.IE7816) // UART 7816 Interrupt Enable Register
  4801. #define UART2_IS7816 (KINETISK_UART2.IS7816) // UART 7816 Interrupt Status Register
  4802. #define UART2_WP7816T0 (KINETISK_UART2.WP7816T0)// UART 7816 Wait Parameter Register
  4803. #define UART2_WP7816T1 (KINETISK_UART2.WP7816T1)// UART 7816 Wait Parameter Register
  4804. #define UART2_WN7816 (KINETISK_UART2.WN7816) // UART 7816 Wait N Register
  4805. #define UART2_WF7816 (KINETISK_UART2.WF7816) // UART 7816 Wait FD Register
  4806. #define UART2_ET7816 (KINETISK_UART2.ET7816) // UART 7816 Error Threshold Register
  4807. #define UART2_TL7816 (KINETISK_UART2.TL7816) // UART 7816 Transmit Length Register
  4808. #define UART2_C6 (KINETISK_UART2.C6) // UART CEA709.1-B Control Register 6
  4809. #define UART2_PCTH (KINETISK_UART2.PCTH) // UART CEA709.1-B Packet Cycle Time Counter High
  4810. #define UART2_PCTL (KINETISK_UART2.PCTL) // UART CEA709.1-B Packet Cycle Time Counter Low
  4811. #define UART2_B1T (KINETISK_UART2.B1T) // UART CEA709.1-B Beta1 Timer
  4812. #define UART2_SDTH (KINETISK_UART2.SDTH) // UART CEA709.1-B Secondary Delay Timer High
  4813. #define UART2_SDTL (KINETISK_UART2.SDTL) // UART CEA709.1-B Secondary Delay Timer Low
  4814. #define UART2_PRE (KINETISK_UART2.PRE) // UART CEA709.1-B Preamble
  4815. #define UART2_TPL (KINETISK_UART2.TPL) // UART CEA709.1-B Transmit Packet Length
  4816. #define UART2_IE (KINETISK_UART2.IE) // UART CEA709.1-B Interrupt Enable Register
  4817. #define UART2_WB (KINETISK_UART2.WB) // UART CEA709.1-B WBASE
  4818. #define UART2_S3 (KINETISK_UART2.S3) // UART CEA709.1-B Status Register
  4819. #define UART2_S4 (KINETISK_UART2.S4) // UART CEA709.1-B Status Register
  4820. #define UART2_RPL (KINETISK_UART2.RPL) // UART CEA709.1-B Received Packet Length
  4821. #define UART2_RPREL (KINETISK_UART2.RPREL) // UART CEA709.1-B Received Preamble Length
  4822. #define UART2_CPW (KINETISK_UART2.CPW) // UART CEA709.1-B Collision Pulse Width
  4823. #define UART2_RIDT (KINETISK_UART2.RIDT) // UART CEA709.1-B Receive Indeterminate Time
  4824. #define UART2_TIDT (KINETISK_UART2.TIDT) // UART CEA709.1-B Transmit Indeterminate Time
  4825. #define KINETISK_UART3 (*(KINETISK_UART_t *)0x4006D000)
  4826. #define UART3_BDH (KINETISK_UART3.BDH) // UART Baud Rate Registers: High
  4827. #define UART3_BDL (KINETISK_UART3.BDL) // UART Baud Rate Registers: Low
  4828. #define UART3_C1 (KINETISK_UART3.C1) // UART Control Register 1
  4829. #define UART3_C2 (KINETISK_UART3.C2) // UART Control Register 2
  4830. #define UART3_S1 (KINETISK_UART3.S1) // UART Status Register 1
  4831. #define UART3_S2 (KINETISK_UART3.S2) // UART Status Register 2
  4832. #define UART3_C3 (KINETISK_UART3.C3) // UART Control Register 3
  4833. #define UART3_D (KINETISK_UART3.D) // UART Data Register
  4834. #define UART3_MA1 (KINETISK_UART3.MA1) // UART Match Address Registers 1
  4835. #define UART3_MA2 (KINETISK_UART3.MA2) // UART Match Address Registers 2
  4836. #define UART3_C4 (KINETISK_UART3.C4) // UART Control Register 4
  4837. #define UART3_C5 (KINETISK_UART3.C5) // UART Control Register 5
  4838. #define UART3_ED (KINETISK_UART3.ED) // UART Extended Data Register
  4839. #define UART3_MODEM (KINETISK_UART3.MODEM) // UART Modem Register
  4840. #define UART3_IR (KINETISK_UART3.IR) // UART Infrared Register
  4841. #define UART3_PFIFO (KINETISK_UART3.PFIFO) // UART FIFO Parameters
  4842. #define UART3_CFIFO (KINETISK_UART3.CFIFO) // UART FIFO Control Register
  4843. #define UART3_SFIFO (KINETISK_UART3.SFIFO) // UART FIFO Status Register
  4844. #define UART3_TWFIFO (KINETISK_UART3.TWFIFO) // UART FIFO Transmit Watermark
  4845. #define UART3_TCFIFO (KINETISK_UART3.TCFIFO) // UART FIFO Transmit Count
  4846. #define UART3_RWFIFO (KINETISK_UART3.RWFIFO) // UART FIFO Receive Watermark
  4847. #define UART3_RCFIFO (KINETISK_UART3.RCFIFO) // UART FIFO Receive Count
  4848. #define UART3_C7816 (KINETISK_UART3.C7816) // UART 7816 Control Register
  4849. #define UART3_IE7816 (KINETISK_UART3.IE7816) // UART 7816 Interrupt Enable Register
  4850. #define UART3_IS7816 (KINETISK_UART3.IS7816) // UART 7816 Interrupt Status Register
  4851. #define UART3_WP7816T0 (KINETISK_UART3.WP7816T0)// UART 7816 Wait Parameter Register
  4852. #define UART3_WP7816T1 (KINETISK_UART3.WP7816T1)// UART 7816 Wait Parameter Register
  4853. #define UART3_WN7816 (KINETISK_UART3.WN7816) // UART 7816 Wait N Register
  4854. #define UART3_WF7816 (KINETISK_UART3.WF7816) // UART 7816 Wait FD Register
  4855. #define UART3_ET7816 (KINETISK_UART3.ET7816) // UART 7816 Error Threshold Register
  4856. #define UART3_TL7816 (KINETISK_UART3.TL7816) // UART 7816 Transmit Length Register
  4857. #define KINETISK_UART4 (*(KINETISK_UART_t *)0x400EA000)
  4858. #define UART4_BDH (KINETISK_UART4.BDH) // UART Baud Rate Registers: High
  4859. #define UART4_BDL (KINETISK_UART4.BDL) // UART Baud Rate Registers: Low
  4860. #define UART4_C1 (KINETISK_UART4.C1) // UART Control Register 1
  4861. #define UART4_C2 (KINETISK_UART4.C2) // UART Control Register 2
  4862. #define UART4_S1 (KINETISK_UART4.S1) // UART Status Register 1
  4863. #define UART4_S2 (KINETISK_UART4.S2) // UART Status Register 2
  4864. #define UART4_C3 (KINETISK_UART4.C3) // UART Control Register 3
  4865. #define UART4_D (KINETISK_UART4.D) // UART Data Register
  4866. #define UART4_MA1 (KINETISK_UART4.MA1) // UART Match Address Registers 1
  4867. #define UART4_MA2 (KINETISK_UART4.MA2) // UART Match Address Registers 2
  4868. #define UART4_C4 (KINETISK_UART4.C4) // UART Control Register 4
  4869. #define UART4_C5 (KINETISK_UART4.C5) // UART Control Register 5
  4870. #define UART4_ED (KINETISK_UART4.ED) // UART Extended Data Register
  4871. #define UART4_MODEM (KINETISK_UART4.MODEM) // UART Modem Register
  4872. #define UART4_IR (KINETISK_UART4.IR) // UART Infrared Register
  4873. #define UART4_PFIFO (KINETISK_UART4.PFIFO) // UART FIFO Parameters
  4874. #define UART4_CFIFO (KINETISK_UART4.CFIFO) // UART FIFO Control Register
  4875. #define UART4_SFIFO (KINETISK_UART4.SFIFO) // UART FIFO Status Register
  4876. #define UART4_TWFIFO (KINETISK_UART4.TWFIFO) // UART FIFO Transmit Watermark
  4877. #define UART4_TCFIFO (KINETISK_UART4.TCFIFO) // UART FIFO Transmit Count
  4878. #define UART4_RWFIFO (KINETISK_UART4.RWFIFO) // UART FIFO Receive Watermark
  4879. #define UART4_RCFIFO (KINETISK_UART4.RCFIFO) // UART FIFO Receive Count
  4880. #define UART4_C7816 (KINETISK_UART4.C7816) // UART 7816 Control Register
  4881. #define UART4_IE7816 (KINETISK_UART4.IE7816) // UART 7816 Interrupt Enable Register
  4882. #define UART4_IS7816 (KINETISK_UART4.IS7816) // UART 7816 Interrupt Status Register
  4883. #define UART4_WP7816T0 (KINETISK_UART4.WP7816T0)// UART 7816 Wait Parameter Register
  4884. #define UART4_WP7816T1 (KINETISK_UART4.WP7816T1)// UART 7816 Wait Parameter Register
  4885. #define UART4_WN7816 (KINETISK_UART4.WN7816) // UART 7816 Wait N Register
  4886. #define UART4_WF7816 (KINETISK_UART4.WF7816) // UART 7816 Wait FD Register
  4887. #define UART4_ET7816 (KINETISK_UART4.ET7816) // UART 7816 Error Threshold Register
  4888. #define UART4_TL7816 (KINETISK_UART4.TL7816) // UART 7816 Transmit Length Register
  4889. #define KINETISK_UART5 (*(KINETISK_UART_t *)0x400EB000)
  4890. #define UART5_BDH (KINETISK_UART5.BDH) // UART Baud Rate Registers: High
  4891. #define UART5_BDL (KINETISK_UART5.BDL) // UART Baud Rate Registers: Low
  4892. #define UART5_C1 (KINETISK_UART5.C1) // UART Control Register 1
  4893. #define UART5_C2 (KINETISK_UART5.C2) // UART Control Register 2
  4894. #define UART5_S1 (KINETISK_UART5.S1) // UART Status Register 1
  4895. #define UART5_S2 (KINETISK_UART5.S2) // UART Status Register 2
  4896. #define UART5_C3 (KINETISK_UART5.C3) // UART Control Register 3
  4897. #define UART5_D (KINETISK_UART5.D) // UART Data Register
  4898. #define UART5_MA1 (KINETISK_UART5.MA1) // UART Match Address Registers 1
  4899. #define UART5_MA2 (KINETISK_UART5.MA2) // UART Match Address Registers 2
  4900. #define UART5_C4 (KINETISK_UART5.C4) // UART Control Register 4
  4901. #define UART5_C5 (KINETISK_UART5.C5) // UART Control Register 5
  4902. #define UART5_ED (KINETISK_UART5.ED) // UART Extended Data Register
  4903. #define UART5_MODEM (KINETISK_UART5.MODEM) // UART Modem Register
  4904. #define UART5_IR (KINETISK_UART5.IR) // UART Infrared Register
  4905. #define UART5_PFIFO (KINETISK_UART5.PFIFO) // UART FIFO Parameters
  4906. #define UART5_CFIFO (KINETISK_UART5.CFIFO) // UART FIFO Control Register
  4907. #define UART5_SFIFO (KINETISK_UART5.SFIFO) // UART FIFO Status Register
  4908. #define UART5_TWFIFO (KINETISK_UART5.TWFIFO) // UART FIFO Transmit Watermark
  4909. #define UART5_TCFIFO (KINETISK_UART5.TCFIFO) // UART FIFO Transmit Count
  4910. #define UART5_RWFIFO (KINETISK_UART5.RWFIFO) // UART FIFO Receive Watermark
  4911. #define UART5_RCFIFO (KINETISK_UART5.RCFIFO) // UART FIFO Receive Count
  4912. #define UART5_C7816 (KINETISK_UART5.C7816) // UART 7816 Control Register
  4913. #define UART5_IE7816 (KINETISK_UART5.IE7816) // UART 7816 Interrupt Enable Register
  4914. #define UART5_IS7816 (KINETISK_UART5.IS7816) // UART 7816 Interrupt Status Register
  4915. #define UART5_WP7816T0 (KINETISK_UART5.WP7816T0)// UART 7816 Wait Parameter Register
  4916. #define UART5_WP7816T1 (KINETISK_UART5.WP7816T1)// UART 7816 Wait Parameter Register
  4917. #define UART5_WN7816 (KINETISK_UART5.WN7816) // UART 7816 Wait N Register
  4918. #define UART5_WF7816 (KINETISK_UART5.WF7816) // UART 7816 Wait FD Register
  4919. #define UART5_ET7816 (KINETISK_UART5.ET7816) // UART 7816 Error Threshold Register
  4920. #define UART5_TL7816 (KINETISK_UART5.TL7816) // UART 7816 Transmit Length Register
  4921. // Secured digital host controller (SDHC)
  4922. #define SDHC_DSADDR (*(volatile uint32_t *)0x400B1000) // DMA System Address register
  4923. #define SDHC_BLKATTR (*(volatile uint32_t *)0x400B1004) // Block Attributes register
  4924. #define SDHC_BLKATTR_BLKCNT(n) (uint32_t)(((n) & 0xFFFF)<<16) // Blocks Count For Current Transfer
  4925. #define SDHC_BLKATTR_BLKCNT_MASK ((uint32_t)0xFFFF0000)
  4926. #define SDHC_BLKATTR_BLKSIZE(n) (uint32_t)(((n) & 0x1FFF)<<0) // Transfer Block Size
  4927. #define SDHC_CMDARG (*(volatile uint32_t *)0x400B1008) // Command Argument register
  4928. #define SDHC_XFERTYP (*(volatile uint32_t *)0x400B100C) // Transfer Type register
  4929. #define SDHC_XFERTYP_CMDINX(n) (uint32_t)(((n) & 0x3F)<<24) // Command Index
  4930. #define SDHC_XFERTYP_CMDTYP(n) (uint32_t)(((n) & 0x3)<<22) // Command Type
  4931. #define SDHC_XFERTYP_DPSEL ((uint32_t)0x00200000) // Data Present Select
  4932. #define SDHC_XFERTYP_CICEN ((uint32_t)0x00100000) // Command Index Check Enable
  4933. #define SDHC_XFERTYP_CCCEN ((uint32_t)0x00080000) // Command CRC Check Enable
  4934. #define SDHC_XFERTYP_RSPTYP(n) (uint32_t)(((n) & 0x3)<<16) // Response Type Select
  4935. #define SDHC_XFERTYP_MSBSEL ((uint32_t)0x00000020) // Multi/Single Block Select
  4936. #define SDHC_XFERTYP_DTDSEL ((uint32_t)0x00000010) // Data Transfer Direction Select
  4937. #define SDHC_XFERTYP_AC12EN ((uint32_t)0x00000004) // Auto CMD12 Enable
  4938. #define SDHC_XFERTYP_BCEN ((uint32_t)0x00000002) // Block Count Enable
  4939. #define SDHC_XFERTYP_DMAEN ((uint32_t)0x00000001) // DMA Enable
  4940. #define SDHC_CMDRSP0 (*(volatile uint32_t *)0x400B1010) // Command Response 0
  4941. #define SDHC_CMDRSP1 (*(volatile uint32_t *)0x400B1014) // Command Response 1
  4942. #define SDHC_CMDRSP2 (*(volatile uint32_t *)0x400B1018) // Command Response 2
  4943. #define SDHC_CMDRSP3 (*(volatile uint32_t *)0x400B101C) // Command Response 3
  4944. #define SDHC_DATPORT (*(volatile uint32_t *)0x400B1020) // Buffer Data Port register
  4945. #define SDHC_PRSSTAT (*(volatile uint32_t *)0x400B1024) // Present State register
  4946. #define SDHC_PRSSTAT_DLSL_MASK ((uint32_t)0xFF000000) // DAT Line Signal Level
  4947. #define SDHC_PRSSTAT_CLSL ((uint32_t)0x00800000) // CMD Line Signal Level
  4948. #define SDHC_PRSSTAT_CINS ((uint32_t)0x00010000) // Card Inserted
  4949. #define SDHC_PRSSTAT_BREN ((uint32_t)0x00000800) // Buffer Read Enable
  4950. #define SDHC_PRSSTAT_BWEN ((uint32_t)0x00000400) // Buffer Write Enable
  4951. #define SDHC_PRSSTAT_RTA ((uint32_t)0x00000200) // Read Transfer Active
  4952. #define SDHC_PRSSTAT_WTA ((uint32_t)0x00000100) // Write Transfer Active
  4953. #define SDHC_PRSSTAT_SDOFF ((uint32_t)0x00000080) // SD Clock Gated Off Internally
  4954. #define SDHC_PRSSTAT_PEROFF ((uint32_t)0x00000040) // SDHC clock Gated Off Internally
  4955. #define SDHC_PRSSTAT_HCKOFF ((uint32_t)0x00000020) // System Clock Gated Off Internally
  4956. #define SDHC_PRSSTAT_IPGOFF ((uint32_t)0x00000010) // Bus Clock Gated Off Internally
  4957. #define SDHC_PRSSTAT_SDSTB ((uint32_t)0x00000008) // SD Clock Stable
  4958. #define SDHC_PRSSTAT_DLA ((uint32_t)0x00000004) // Data Line Active
  4959. #define SDHC_PRSSTAT_CDIHB ((uint32_t)0x00000002) // Command Inhibit (DAT)
  4960. #define SDHC_PRSSTAT_CIHB ((uint32_t)0x00000001) // Command Inhibit (CMD)
  4961. #define SDHC_PROCTL (*(volatile uint32_t *)0x400B1028) // Protocol Control register
  4962. #define SDHC_PROCTL_WECRM ((uint32_t)0x04000000) // Wakeup Event Enable On SD Card Removal
  4963. #define SDHC_PROCTL_WECINS ((uint32_t)0x02000000) // Wakeup Event Enable On SD Card Insertion
  4964. #define SDHC_PROCTL_WECINT ((uint32_t)0x01000000) // Wakeup Event Enable On Card Interrupt
  4965. #define SDHC_PROCTL_IABG ((uint32_t)0x00080000) // Interrupt At Block Gap
  4966. #define SDHC_PROCTL_RWCTL ((uint32_t)0x00040000) // Read Wait Control
  4967. #define SDHC_PROCTL_CREQ ((uint32_t)0x00020000) // Continue Request
  4968. #define SDHC_PROCTL_SABGREQ ((uint32_t)0x00010000) // Stop At Block Gap Request
  4969. #define SDHC_PROCTL_DMAS(n) (uint32_t)(((n) & 0x3)<<8) // DMA Select
  4970. #define SDHC_PROCTL_CDSS ((uint32_t)0x00000080) // Card Detect Signal Selection
  4971. #define SDHC_PROCTL_CDTL ((uint32_t)0x00000040) // Card Detect Test Level
  4972. #define SDHC_PROCTL_EMODE(n) (uint32_t)(((n) & 0x3)<<4) // Endian Mode
  4973. #define SDHC_PROCTL_D3CD ((uint32_t)0x00000008) // DAT3 As Card Detection Pin
  4974. #define SDHC_PROCTL_DTW(n) (uint32_t)(((n) & 0x3)<<1) // Data Transfer Width, 0=1bit, 1=4bit, 2=8bit
  4975. #define SDHC_PROCTL_DTW_MASK ((uint32_t)0x00000006)
  4976. #define SDHC_PROCTL_LCTL ((uint32_t)0x00000001) // LED Control
  4977. #define SDHC_SYSCTL (*(volatile uint32_t *)0x400B102C) // System Control register
  4978. #define SDHC_SYSCTL_INITA ((uint32_t)0x08000000) // Initialization Active
  4979. #define SDHC_SYSCTL_RSTD ((uint32_t)0x04000000) // Software Reset For DAT Line
  4980. #define SDHC_SYSCTL_RSTC ((uint32_t)0x02000000) // Software Reset For CMD Line
  4981. #define SDHC_SYSCTL_RSTA ((uint32_t)0x01000000) // Software Reset For ALL
  4982. #define SDHC_SYSCTL_DTOCV(n) (uint32_t)(((n) & 0xF)<<16) // Data Timeout Counter Value
  4983. #define SDHC_SYSCTL_DTOCV_MASK ((uint32_t)0x000F0000)
  4984. #define SDHC_SYSCTL_SDCLKFS(n) (uint32_t)(((n) & 0xFF)<<8) // SDCLK Frequency Select
  4985. #define SDHC_SYSCTL_SDCLKFS_MASK ((uint32_t)0x0000FF00)
  4986. #define SDHC_SYSCTL_DVS(n) (uint32_t)(((n) & 0xF)<<4) // Divisor
  4987. #define SDHC_SYSCTL_DVS_MASK ((uint32_t)0x000000F0)
  4988. #define SDHC_SYSCTL_SDCLKEN ((uint32_t)0x00000008) // SD Clock Enable
  4989. #define SDHC_SYSCTL_PEREN ((uint32_t)0x00000004) // Peripheral Clock Enable
  4990. #define SDHC_SYSCTL_HCKEN ((uint32_t)0x00000002) // System Clock Enable
  4991. #define SDHC_SYSCTL_IPGEN ((uint32_t)0x00000001) // IPG Clock Enable
  4992. #define SDHC_IRQSTAT (*(volatile uint32_t *)0x400B1030) // Interrupt Status register
  4993. #define SDHC_IRQSTAT_DMAE ((uint32_t)0x10000000) // DMA Error
  4994. #define SDHC_IRQSTAT_AC12E ((uint32_t)0x01000000) // Auto CMD12 Error
  4995. #define SDHC_IRQSTAT_DEBE ((uint32_t)0x00400000) // Data End Bit Error
  4996. #define SDHC_IRQSTAT_DCE ((uint32_t)0x00200000) // Data CRC Error
  4997. #define SDHC_IRQSTAT_DTOE ((uint32_t)0x00100000) // Data Timeout Error
  4998. #define SDHC_IRQSTAT_CIE ((uint32_t)0x00080000) // Command Index Error
  4999. #define SDHC_IRQSTAT_CEBE ((uint32_t)0x00040000) // Command End Bit Error
  5000. #define SDHC_IRQSTAT_CCE ((uint32_t)0x00020000) // Command CRC Error
  5001. #define SDHC_IRQSTAT_CTOE ((uint32_t)0x00010000) // Command Timeout Error
  5002. #define SDHC_IRQSTAT_CINT ((uint32_t)0x00000100) // Card Interrupt
  5003. #define SDHC_IRQSTAT_CRM ((uint32_t)0x00000080) // Card Removal
  5004. #define SDHC_IRQSTAT_CINS ((uint32_t)0x00000040) // Card Insertion
  5005. #define SDHC_IRQSTAT_BRR ((uint32_t)0x00000020) // Buffer Read Ready
  5006. #define SDHC_IRQSTAT_BWR ((uint32_t)0x00000010) // Buffer Write Ready
  5007. #define SDHC_IRQSTAT_DINT ((uint32_t)0x00000008) // DMA Interrupt
  5008. #define SDHC_IRQSTAT_BGE ((uint32_t)0x00000004) // Block Gap Event
  5009. #define SDHC_IRQSTAT_TC ((uint32_t)0x00000002) // Transfer Complete
  5010. #define SDHC_IRQSTAT_CC ((uint32_t)0x00000001) // Command Complete
  5011. #define SDHC_IRQSTATEN (*(volatile uint32_t *)0x400B1034) // Interrupt Status Enable register
  5012. #define SDHC_IRQSTATEN_DMAESEN ((uint32_t)0x10000000) // DMA Error Status Enable
  5013. #define SDHC_IRQSTATEN_AC12ESEN ((uint32_t)0x01000000) // Auto CMD12 Error Status Enable
  5014. #define SDHC_IRQSTATEN_DEBESEN ((uint32_t)0x00400000) // Data End Bit Error Status Enable
  5015. #define SDHC_IRQSTATEN_DCESEN ((uint32_t)0x00200000) // Data CRC Error Status Enable
  5016. #define SDHC_IRQSTATEN_DTOESEN ((uint32_t)0x00100000) // Data Timeout Error Status Enable
  5017. #define SDHC_IRQSTATEN_CIESEN ((uint32_t)0x00080000) // Command Index Error Status Enable
  5018. #define SDHC_IRQSTATEN_CEBESEN ((uint32_t)0x00040000) // Command End Bit Error Status Enable
  5019. #define SDHC_IRQSTATEN_CCESEN ((uint32_t)0x00020000) // Command CRC Error Status Enable
  5020. #define SDHC_IRQSTATEN_CTOESEN ((uint32_t)0x00010000) // Command Timeout Error Status Enable
  5021. #define SDHC_IRQSTATEN_CINTSEN ((uint32_t)0x00000100) // Card Interrupt Status Enable
  5022. #define SDHC_IRQSTATEN_CRMSEN ((uint32_t)0x00000080) // Card Removal Status Enable
  5023. #define SDHC_IRQSTATEN_CINSEN ((uint32_t)0x00000040) // Card Insertion Status Enable
  5024. #define SDHC_IRQSTATEN_BRRSEN ((uint32_t)0x00000020) // Buffer Read Ready Status Enable
  5025. #define SDHC_IRQSTATEN_BWRSEN ((uint32_t)0x00000010) // Buffer Write Ready Status Enable
  5026. #define SDHC_IRQSTATEN_DINTSEN ((uint32_t)0x00000008) // DMA Interrupt Status Enable
  5027. #define SDHC_IRQSTATEN_BGESEN ((uint32_t)0x00000004) // Block Gap Event Status Enable
  5028. #define SDHC_IRQSTATEN_TCSEN ((uint32_t)0x00000002) // Transfer Complete Status Enable
  5029. #define SDHC_IRQSTATEN_CCSEN ((uint32_t)0x00000001) // Command Complete Status Enable
  5030. #define SDHC_IRQSIGEN (*(volatile uint32_t *)0x400B1038) // Interrupt Signal Enable register
  5031. #define SDHC_IRQSIGEN_DMAEIEN ((uint32_t)0x10000000) // DMA Error Interrupt Enable
  5032. #define SDHC_IRQSIGEN_AC12EIEN ((uint32_t)0x01000000) // Auto CMD12 Error Interrupt Enable
  5033. #define SDHC_IRQSIGEN_DEBEIEN ((uint32_t)0x00400000) // Data End Bit Error Interrupt Enable
  5034. #define SDHC_IRQSIGEN_DCEIEN ((uint32_t)0x00200000) // Data CRC Error Interrupt Enable
  5035. #define SDHC_IRQSIGEN_DTOEIEN ((uint32_t)0x00100000) // Data Timeout Error Interrupt Enable
  5036. #define SDHC_IRQSIGEN_CIEIEN ((uint32_t)0x00080000) // Command Index Error Interrupt Enable
  5037. #define SDHC_IRQSIGEN_CEBEIEN ((uint32_t)0x00040000) // Command End Bit Error Interrupt Enable
  5038. #define SDHC_IRQSIGEN_CCEIEN ((uint32_t)0x00020000) // Command CRC Error Interrupt Enable
  5039. #define SDHC_IRQSIGEN_CTOEIEN ((uint32_t)0x00010000) // Command Timeout Error Interrupt Enable
  5040. #define SDHC_IRQSIGEN_CINTIEN ((uint32_t)0x00000100) // Card Interrupt Interrupt Enable
  5041. #define SDHC_IRQSIGEN_CRMIEN ((uint32_t)0x00000080) // Card Removal Interrupt Enable
  5042. #define SDHC_IRQSIGEN_CINSIEN ((uint32_t)0x00000040) // Card Insertion Interrupt Enable
  5043. #define SDHC_IRQSIGEN_BRRIEN ((uint32_t)0x00000020) // Buffer Read Ready Interrupt Enable
  5044. #define SDHC_IRQSIGEN_BWRIEN ((uint32_t)0x00000010) // Buffer Write Ready Interrupt Enable
  5045. #define SDHC_IRQSIGEN_DINTIEN ((uint32_t)0x00000008) // DMA Interrupt Interrupt Enable
  5046. #define SDHC_IRQSIGEN_BGEIEN ((uint32_t)0x00000004) // Block Gap Event Interrupt Enable
  5047. #define SDHC_IRQSIGEN_TCIEN ((uint32_t)0x00000002) // Transfer Complete Interrupt Enable
  5048. #define SDHC_IRQSIGEN_CCIEN ((uint32_t)0x00000001) // Command Complete Interrupt Enable
  5049. #define SDHC_AC12ERR (*(volatile uint32_t *)0x400B103C) // Auto CMD12 Error Status Register
  5050. #define SDHC_AC12ERR_CNIBAC12E ((uint32_t)0x00000080) // Command Not Issued By Auto CMD12 Error
  5051. #define SDHC_AC12ERR_AC12IE ((uint32_t)0x00000010) // Auto CMD12 Index Error
  5052. #define SDHC_AC12ERR_AC12CE ((uint32_t)0x00000008) // Auto CMD12 CRC Error
  5053. #define SDHC_AC12ERR_AC12EBE ((uint32_t)0x00000004) // Auto CMD12 End Bit Error
  5054. #define SDHC_AC12ERR_AC12TOE ((uint32_t)0x00000002) // Auto CMD12 Timeout Error
  5055. #define SDHC_AC12ERR_AC12NE ((uint32_t)0x00000001) // Auto CMD12 Not Executed
  5056. #define SDHC_HTCAPBLT (*(volatile uint32_t *)0x400B1040) // Host Controller Capabilities
  5057. #define SDHC_WML (*(volatile uint32_t *)0x400B1044) // Watermark Level Register
  5058. #define SDHC_WML_WRWML(n) (uint32_t)(((n) & 0x7F)<<16) // Write Watermark Level
  5059. #define SDHC_WML_RDWML(n) (uint32_t)(((n) & 0x7F)<<0) // Read Watermark Level
  5060. #define SDHC_FEVT (*(volatile uint32_t *)0x400B1050) // Force Event register
  5061. #define SDHC_FEVT_CINT ((uint32_t)0x80000000) // Force Event Card Interrupt
  5062. #define SDHC_FEVT_DMAE ((uint32_t)0x10000000) // Force Event DMA Error
  5063. #define SDHC_FEVT_AC12E ((uint32_t)0x01000000) // Force Event Auto CMD12 Error
  5064. #define SDHC_FEVT_DEBE ((uint32_t)0x00400000) // Force Event Data End Bit Error
  5065. #define SDHC_FEVT_DCE ((uint32_t)0x00200000) // Force Event Data CRC Error
  5066. #define SDHC_FEVT_DTOE ((uint32_t)0x00100000) // Force Event Data Timeout Error
  5067. #define SDHC_FEVT_CIE ((uint32_t)0x00080000) // Force Event Command Index Error
  5068. #define SDHC_FEVT_CEBE ((uint32_t)0x00040000) // Force Event Command End Bit Error
  5069. #define SDHC_FEVT_CCE ((uint32_t)0x00020000) // Force Event Command CRC Error
  5070. #define SDHC_FEVT_CTOE ((uint32_t)0x00010000) // Force Event Command Timeout Error
  5071. #define SDHC_FEVT_CNIBAC12E ((uint32_t)0x00000080) // Force Event Command Not Executed By Auto Command 12 Error
  5072. #define SDHC_FEVT_AC12IE ((uint32_t)0x00000010) // Force Event Auto Command 12 Index Error
  5073. #define SDHC_FEVT_AC12EBE ((uint32_t)0x00000008) // Force Event Auto Command 12 End Bit Error
  5074. #define SDHC_FEVT_AC12CE ((uint32_t)0x00000004) // Force Event Auto Command 12 CRC Error
  5075. #define SDHC_FEVT_AC12TOE ((uint32_t)0x00000002) // Force Event Auto Command 12 Time Out Error
  5076. #define SDHC_FEVT_AC12NE ((uint32_t)0x00000001) // Force Event Auto Command 12 Not Executed
  5077. #define SDHC_ADMAES (*(volatile uint32_t *)0x400B1054) // ADMA Error Status register
  5078. #define SDHC_ADMAES_ADMADCE ((uint32_t)0x00000008)
  5079. #define SDHC_ADMAES_ADMALME ((uint32_t)0x00000004)
  5080. #define SDHC_ADMAES_ADMAES_MASK ((uint32_t)0x00000003)
  5081. #define SDHC_ADSADDR (*(volatile uint32_t *)0x400B1058) // ADMA System Addressregister
  5082. #define SDHC_VENDOR (*(volatile uint32_t *)0x400B10C0) // Vendor Specific register
  5083. #define SDHC_VENDOR_INTSTVAL_MASK ((uint32_t)0x00FF0000)
  5084. #define SDHC_VENDOR_EXBLKNU ((uint32_t)0x00000002)
  5085. #define SDHC_MMCBOOT (*(volatile uint32_t *)0x400B10C4) // MMC Boot register
  5086. #define SDHC_MMCBOOT_BOOTBLKCNT(n) (uint32_t)(((n) & 0xFFF)<<16) // stop at block gap value of automatic mode
  5087. #define SDHC_MMCBOOT_AUTOSABGEN ((uint32_t)0x00000080) // enable auto stop at block gap function
  5088. #define SDHC_MMCBOOT_BOOTEN ((uint32_t)0x00000040) // Boot Mode Enable
  5089. #define SDHC_MMCBOOT_BOOTMODE ((uint32_t)0x00000020) // Boot Mode Select
  5090. #define SDHC_MMCBOOT_BOOTACK ((uint32_t)0x00000010) // Boot Ack Mode Select
  5091. #define SDHC_MMCBOOT_DTOCVACK(n) (uint32_t)(((n) & 0xF)<<0) // Boot ACK Time Out Counter Value
  5092. #define SDHC_HOSTVER (*(volatile uint32_t *)0x400B10FC) // Host Controller Version
  5093. ///////////////////////////////////
  5094. // Low Power Asynchronous Receiver/Transmitter (LPUART)
  5095. typedef struct __attribute__((packed)) {
  5096. volatile uint32_t BAUD;
  5097. volatile uint32_t STAT;
  5098. volatile uint32_t CTRL;
  5099. volatile uint32_t DATA;
  5100. volatile uint32_t MATCH;
  5101. volatile uint32_t MODIR;
  5102. } KINETISK_LPUART_t;
  5103. #define KINETISK_LPUART0 (*(KINETISK_LPUART_t *)0x400C4000)
  5104. #define LPUART0_BAUD (KINETISK_LPUART0.BAUD) // LPUART Baud Register
  5105. #define LPUART_BAUD_MAEN1 ((uint32_t)0x80000000) // Enable automatic address or data maching
  5106. #define LPUART_BAUD_MAEN2 ((uint32_t)0x40000000) // Enable automatic address or data maching
  5107. #define LPUART_BAUD_M10 ((uint32_t)0x20000000) // 10-bit Mode select
  5108. #define LPUART_BAUD_OSR(n) ((uint32_t)((n) & 0x1f) << 24) // Over sampling ratio
  5109. #define LPUART_BAUD_TDMAE ((uint32_t)0x00800000) // Transmitter Dma Enable
  5110. #define LPUART_BAUD_RDMAE ((uint32_t)0x00400000) // Receiver Dma Enable
  5111. #define LPUART_BAUD_BOTHEDGE ((uint32_t)0x00020000) // Both edge sampling needed OSR 4-7
  5112. #define LPUART_BAUD_SBNS ((uint32_t)0x00002000) // UART Stop Bit Number Select
  5113. #define LPUART_BAUD_SBR(n) ((uint32_t)((n) & 0x1fff) << 0) // set baud rate divisor
  5114. #define LPUART0_STAT (KINETISK_LPUART0.STAT) // LPUART Status register
  5115. #define LPUART_STAT_LBKDIF ((uint32_t)0x80000000) // LIN Break Detect Interrupt Flag
  5116. #define LPUART_STAT_RXEDGIF ((uint32_t)0x40000000) // RxD Pin Active Edge Interrupt Flag
  5117. #define LPUART_STAT_MSBF ((uint32_t)0x20000000) // Most Significant Bit First
  5118. #define LPUART_STAT_RXINV ((uint32_t)0x10000000) // Receive Data Inversion
  5119. #define LPUART_STAT_RWUID ((uint32_t)0x08000000) // Receive Wakeup Idle Detect
  5120. #define LPUART_STAT_BRK13 ((uint32_t)0x04000000) // Break Transmit Character Length
  5121. #define LPUART_STAT_LBKDE ((uint32_t)0x02000000) // LIN Break Detection Enable
  5122. #define LPUART_STAT_RAF ((uint32_t)0x01000000) // Receiver Active Flag
  5123. #define LPUART_STAT_TDRE ((uint32_t)0x00800000) // Transmit Data Register Empty Flag
  5124. #define LPUART_STAT_TC ((uint32_t)0x00400000) // Transmit Complete Flag
  5125. #define LPUART_STAT_RDRF ((uint32_t)0x00200000) // Receive Data Register Full Flag
  5126. #define LPUART_STAT_IDLE ((uint32_t)0x00100000) // Idle Line Flag
  5127. #define LPUART_STAT_OR ((uint32_t)0x00080000) // Receiver Overrun Flag
  5128. #define LPUART_STAT_NF ((uint32_t)0x00040000) // Noise Flag
  5129. #define LPUART_STAT_FE ((uint32_t)0x00020000) // Framing Error Flag
  5130. #define LPUART_STAT_PF ((uint32_t)0x00010000) // Parity Error Flag
  5131. #define LPUART_STAT_MA1F ((uint32_t)0x00008000) // Match 1 Flag
  5132. #define LPUART_STAT_MA2F ((uint32_t)0x00004000) // Match 2 Flag
  5133. #define LPUART0_CTRL (KINETISK_LPUART0.CTRL) // LPUART Control register
  5134. #define LPUART_CTRL_R8 ((uint32_t)0x80000000) // Received Bit 8
  5135. #define LPUART_CTRL_T8 ((uint32_t)0x40000000) // Transmit Bit 8
  5136. #define LPUART_CTRL_TXDIR ((uint32_t)0x20000000) // TX Pin Direction in Single-Wire mode
  5137. #define LPUART_CTRL_TXINV ((uint32_t)0x10000000) // Transmit Data Inversion
  5138. #define LPUART_CTRL_ORIE ((uint32_t)0x08000000) // Overrun Error Interrupt Enable
  5139. #define LPUART_CTRL_NEIE ((uint32_t)0x04000000) // Noise Error Interrupt Enable
  5140. #define LPUART_CTRL_FEIE ((uint32_t)0x02000000) // Framing Error Interrupt Enable
  5141. #define LPUART_CTRL_PEIE ((uint32_t)0x01000000) // Parity Error Interrupt Enable
  5142. #define LPUART_CTRL_TIE ((uint32_t)0x00800000) // Transmitter Interrupt or DMA Transfer Enable.
  5143. #define LPUART_CTRL_TCIE ((uint32_t)0x00400000) // Transmission Complete Interrupt Enable
  5144. #define LPUART_CTRL_RIE ((uint32_t)0x00200000) // Receiver Full Interrupt or DMA Transfer Enable
  5145. #define LPUART_CTRL_ILIE ((uint32_t)0x00100000) // Idle Line Interrupt Enable
  5146. #define LPUART_CTRL_TE ((uint32_t)0x00080000) // Transmitter Enable
  5147. #define LPUART_CTRL_RE ((uint32_t)0x00040000) // Receiver Enable
  5148. #define LPUART_CTRL_RWU ((uint32_t)0x00020000) // Receiver Wakeup Control
  5149. #define LPUART_CTRL_SBK ((uint32_t)0x00010000) // Send Break
  5150. #define LPUART_CTRL_MAEN1 ((uint32_t)0x00008000) // Match Address Mode Enable 1
  5151. #define LPUART_CTRL_MAEN2 ((uint32_t)0x00004000) // Match Address Mode Enable 2
  5152. #define LPUART_CTRL_LOOPS ((uint32_t)0x00000080) // When LOOPS is set, the RxD pin is disconnected from the UART and the transmitter output is internally connected to the receiver input
  5153. #define LPUART_CTRL_UARTSWAI ((uint32_t)0x00000040) // UART Stops in Wait Mode
  5154. #define LPUART_CTRL_RSRC ((uint32_t)0x00000020) // When LOOPS is set, the RSRC field determines the source for the receiver shift register input
  5155. #define LPUART_CTRL_M ((uint32_t)0x00000010) // 9-bit or 8-bit Mode Select
  5156. #define LPUART_CTRL_WAKE ((uint32_t)0x00000008) // Determines which condition wakes the UART
  5157. #define LPUART_CTRL_ILT ((uint32_t)0x00000004) // Idle Line Type Select
  5158. #define LPUART_CTRL_PE ((uint32_t)0x00000002) // Parity Enable
  5159. #define LPUART_CTRL_PT ((uint32_t)0x00000001) // Parity Type, 0=even, 1=odd
  5160. #define LPUART0_DATA (KINETISK_LPUART0.DATA) // LPUART Data register
  5161. #define LPUART_DATA_NOISY ((uint32_t)0x00080000) // Data received with noise
  5162. #define LPUART_DATA_PARITY ((uint32_t)0x00040000) // Data received with Parity error
  5163. #define LPUART_DATA_FRETSC ((uint32_t)0x00020000) // Frame error/Transmit Special char
  5164. #define LPUART_DATA_RXEMPT ((uint32_t)0x00010000) // receive buffer empty
  5165. #define LPUART_DATA_IDLINE ((uint32_t)0x00008000) // Match Address Mode Enable 1
  5166. #define LPUART0_MATCH (KINETISK_LPUART0.MATCH) // LPUART Match register
  5167. #define LPUART0_MODIR (KINETISK_LPUART0.MODIR) // LPUART Modem IrDA Register
  5168. // Synchronous Audio Interface (SAI)
  5169. #define I2S0_TCSR (*(volatile uint32_t *)0x4002F000) // SAI Transmit Control Register
  5170. #define I2S_TCSR_TE ((uint32_t)0x80000000) // Transmitter Enable
  5171. #define I2S_TCSR_STOPE ((uint32_t)0x40000000) // Transmitter Enable in Stop mode
  5172. #define I2S_TCSR_DBGE ((uint32_t)0x20000000) // Transmitter Enable in Debug mode
  5173. #define I2S_TCSR_BCE ((uint32_t)0x10000000) // Bit Clock Enable
  5174. #define I2S_TCSR_FR ((uint32_t)0x02000000) // FIFO Reset
  5175. #define I2S_TCSR_SR ((uint32_t)0x01000000) // Software Reset
  5176. #define I2S_TCSR_WSF ((uint32_t)0x00100000) // Word Start Flag
  5177. #define I2S_TCSR_SEF ((uint32_t)0x00080000) // Sync Error Flag
  5178. #define I2S_TCSR_FEF ((uint32_t)0x00040000) // FIFO Error Flag (underrun)
  5179. #define I2S_TCSR_FWF ((uint32_t)0x00020000) // FIFO Warning Flag (empty)
  5180. #define I2S_TCSR_FRF ((uint32_t)0x00010000) // FIFO Request Flag (Data Ready)
  5181. #define I2S_TCSR_WSIE ((uint32_t)0x00001000) // Word Start Interrupt Enable
  5182. #define I2S_TCSR_SEIE ((uint32_t)0x00000800) // Sync Error Interrupt Enable
  5183. #define I2S_TCSR_FEIE ((uint32_t)0x00000400) // FIFO Error Interrupt Enable
  5184. #define I2S_TCSR_FWIE ((uint32_t)0x00000200) // FIFO Warning Interrupt Enable
  5185. #define I2S_TCSR_FRIE ((uint32_t)0x00000100) // FIFO Request Interrupt Enable
  5186. #define I2S_TCSR_FWDE ((uint32_t)0x00000002) // FIFO Warning DMA Enable
  5187. #define I2S_TCSR_FRDE ((uint32_t)0x00000001) // FIFO Request DMA Enable
  5188. #define I2S0_TCR1 (*(volatile uint32_t *)0x4002F004) // SAI Transmit Configuration 1 Register
  5189. #define I2S_TCR1_TFW(n) ((uint32_t)n & 0x03) // Transmit FIFO watermark
  5190. #define I2S0_TCR2 (*(volatile uint32_t *)0x4002F008) // SAI Transmit Configuration 2 Register
  5191. #define I2S_TCR2_DIV(n) ((uint32_t)n & 0xff) // Bit clock divide by (DIV+1)*2
  5192. #define I2S_TCR2_BCD ((uint32_t)1<<24) // Bit clock direction
  5193. #define I2S_TCR2_BCP ((uint32_t)1<<25) // Bit clock polarity
  5194. #define I2S_TCR2_MSEL(n) ((uint32_t)(n & 3)<<26) // MCLK select, 0=bus clock, 1=I2S0_MCLK
  5195. #define I2S_TCR2_BCI ((uint32_t)1<<28) // Bit clock input
  5196. #define I2S_TCR2_BCS ((uint32_t)1<<29) // Bit clock swap
  5197. #define I2S_TCR2_SYNC(n) ((uint32_t)(n & 3)<<30) // 0=async 1=sync with receiver
  5198. #define I2S0_TCR3 (*(volatile uint32_t *)0x4002F00C) // SAI Transmit Configuration 3 Register
  5199. #define I2S_TCR3_WDFL(n) ((uint32_t)n & 0x0f) // word flag configuration
  5200. #define I2S_TCR3_TCE ((uint32_t)0x10000) // transmit channel enable
  5201. #define I2S_TCR3_TCE_2CH ((uint32_t)0x30000) // transmit 2 channel enable
  5202. #define I2S0_TCR4 (*(volatile uint32_t *)0x4002F010) // SAI Transmit Configuration 4 Register
  5203. #define I2S_TCR4_FSD ((uint32_t)1) // Frame Sync Direction
  5204. #define I2S_TCR4_FSP ((uint32_t)2) // Frame Sync Polarity
  5205. #define I2S_TCR4_FSE ((uint32_t)8) // Frame Sync Early
  5206. #define I2S_TCR4_MF ((uint32_t)0x10) // MSB First
  5207. #define I2S_TCR4_SYWD(n) ((uint32_t)(n & 0x1f)<<8) // Sync Width
  5208. #define I2S_TCR4_FRSZ(n) ((uint32_t)(n & 0x0f)<<16) // Frame Size
  5209. #define I2S0_TCR5 (*(volatile uint32_t *)0x4002F014) // SAI Transmit Configuration 5 Register
  5210. #define I2S_TCR5_FBT(n) ((uint32_t)(n & 0x1f)<<8) // First Bit Shifted
  5211. #define I2S_TCR5_W0W(n) ((uint32_t)(n & 0x1f)<<16) // Word 0 Width
  5212. #define I2S_TCR5_WNW(n) ((uint32_t)(n & 0x1f)<<24) // Word N Width
  5213. #define I2S0_TDR0 (*(volatile uint32_t *)0x4002F020) // SAI Transmit Data Register
  5214. #define I2S0_TDR1 (*(volatile uint32_t *)0x4002F024) // SAI Transmit Data Register
  5215. #define I2S0_TFR0 (*(volatile uint32_t *)0x4002F040) // SAI Transmit FIFO Register
  5216. #define I2S0_TFR1 (*(volatile uint32_t *)0x4002F044) // SAI Transmit FIFO Register
  5217. #define I2S_TFR_RFP(n) ((uint32_t)n & 7) // read FIFO pointer
  5218. #define I2S_TFR_WFP(n) ((uint32_t)(n & 7)<<16) // write FIFO pointer
  5219. #define I2S0_TMR (*(volatile uint32_t *)0x4002F060) // SAI Transmit Mask Register
  5220. #define I2S_TMR_TWM(n) ((uint32_t)n & 0xFFFFFFFF) //
  5221. #define I2S0_RCSR (*(volatile uint32_t *)0x4002F080) // SAI Receive Control Register
  5222. #define I2S_RCSR_RE ((uint32_t)0x80000000) // Receiver Enable
  5223. #define I2S_RCSR_STOPE ((uint32_t)0x40000000) // Receiver Enable in Stop mode
  5224. #define I2S_RCSR_DBGE ((uint32_t)0x20000000) // Receiver Enable in Debug mode
  5225. #define I2S_RCSR_BCE ((uint32_t)0x10000000) // Bit Clock Enable
  5226. #define I2S_RCSR_FR ((uint32_t)0x02000000) // FIFO Reset
  5227. #define I2S_RCSR_SR ((uint32_t)0x01000000) // Software Reset
  5228. #define I2S_RCSR_WSF ((uint32_t)0x00100000) // Word Start Flag
  5229. #define I2S_RCSR_SEF ((uint32_t)0x00080000) // Sync Error Flag
  5230. #define I2S_RCSR_FEF ((uint32_t)0x00040000) // FIFO Error Flag (underrun)
  5231. #define I2S_RCSR_FWF ((uint32_t)0x00020000) // FIFO Warning Flag (empty)
  5232. #define I2S_RCSR_FRF ((uint32_t)0x00010000) // FIFO Request Flag (Data Ready)
  5233. #define I2S_RCSR_WSIE ((uint32_t)0x00001000) // Word Start Interrupt Enable
  5234. #define I2S_RCSR_SEIE ((uint32_t)0x00000800) // Sync Error Interrupt Enable
  5235. #define I2S_RCSR_FEIE ((uint32_t)0x00000400) // FIFO Error Interrupt Enable
  5236. #define I2S_RCSR_FWIE ((uint32_t)0x00000200) // FIFO Warning Interrupt Enable
  5237. #define I2S_RCSR_FRIE ((uint32_t)0x00000100) // FIFO Request Interrupt Enable
  5238. #define I2S_RCSR_FWDE ((uint32_t)0x00000002) // FIFO Warning DMA Enable
  5239. #define I2S_RCSR_FRDE ((uint32_t)0x00000001) // FIFO Request DMA Enable
  5240. #define I2S0_RCR1 (*(volatile uint32_t *)0x4002F084) // SAI Receive Configuration 1 Register
  5241. #define I2S_RCR1_RFW(n) ((uint32_t)n & 0x03) // Receive FIFO watermark
  5242. #define I2S0_RCR2 (*(volatile uint32_t *)0x4002F088) // SAI Receive Configuration 2 Register
  5243. #define I2S_RCR2_DIV(n) ((uint32_t)n & 0xff) // Bit clock divide by (DIV+1)*2
  5244. #define I2S_RCR2_BCD ((uint32_t)1<<24) // Bit clock direction
  5245. #define I2S_RCR2_BCP ((uint32_t)1<<25) // Bit clock polarity
  5246. #define I2S_RCR2_MSEL(n) ((uint32_t)(n & 3)<<26) // MCLK select, 0=bus clock, 1=I2S0_MCLK
  5247. #define I2S_RCR2_BCI ((uint32_t)1<<28) // Bit clock input
  5248. #define I2S_RCR2_BCS ((uint32_t)1<<29) // Bit clock swap
  5249. #define I2S_RCR2_SYNC(n) ((uint32_t)(n & 3)<<30) // 0=async 1=sync with receiver
  5250. #define I2S0_RCR3 (*(volatile uint32_t *)0x4002F08C) // SAI Receive Configuration 3 Register
  5251. #define I2S_RCR3_WDFL(n) ((uint32_t)n & 0x0f) // word flag configuration
  5252. #define I2S_RCR3_RCE ((uint32_t)0x10000) // receive channel enable
  5253. #define I2S_RCR3_RCE_2CH ((uint32_t)0x30000) // receive 2 channel enable
  5254. #define I2S0_RCR4 (*(volatile uint32_t *)0x4002F090) // SAI Receive Configuration 4 Register
  5255. #define I2S_RCR4_FSD ((uint32_t)1) // Frame Sync Direction
  5256. #define I2S_RCR4_FSP ((uint32_t)2) // Frame Sync Polarity
  5257. #define I2S_RCR4_FSE ((uint32_t)8) // Frame Sync Early
  5258. #define I2S_RCR4_MF ((uint32_t)0x10) // MSB First
  5259. #define I2S_RCR4_SYWD(n) ((uint32_t)(n & 0x1f)<<8) // Sync Width
  5260. #define I2S_RCR4_FRSZ(n) ((uint32_t)(n & 0x0f)<<16) // Frame Size
  5261. #define I2S0_RCR5 (*(volatile uint32_t *)0x4002F094) // SAI Receive Configuration 5 Register
  5262. #define I2S_RCR5_FBT(n) ((uint32_t)(n & 0x1f)<<8) // First Bit Shifted
  5263. #define I2S_RCR5_W0W(n) ((uint32_t)(n & 0x1f)<<16) // Word 0 Width
  5264. #define I2S_RCR5_WNW(n) ((uint32_t)(n & 0x1f)<<24) // Word N Width
  5265. #define I2S0_RDR0 (*(volatile uint32_t *)0x4002F0A0) // SAI Receive Data Register
  5266. #define I2S0_RDR1 (*(volatile uint32_t *)0x4002F0A4) // SAI Receive Data Register
  5267. #define I2S0_RFR0 (*(volatile uint32_t *)0x4002F0C0) // SAI Receive FIFO Register
  5268. #define I2S0_RFR1 (*(volatile uint32_t *)0x4002F0C4) // SAI Receive FIFO Register
  5269. #define I2S_RFR_RFP(n) ((uint32_t)n & 7) // read FIFO pointer
  5270. #define I2S_RFR_WFP(n) ((uint32_t)(n & 7)<<16) // write FIFO pointer
  5271. #define I2S0_RMR (*(volatile uint32_t *)0x4002F0E0) // SAI Receive Mask Register
  5272. #define I2S_RMR_RWM(n) ((uint32_t)n & 0xFFFFFFFF) //
  5273. #define I2S0_MCR (*(volatile uint32_t *)0x4002F100) // SAI MCLK Control Register
  5274. #define I2S_MCR_DUF ((uint32_t)1<<31) // Divider Update Flag
  5275. #define I2S_MCR_MOE ((uint32_t)1<<30) // MCLK Output Enable
  5276. #define I2S_MCR_MICS(n) ((uint32_t)(n & 3)<<24) // MCLK Input Clock Select
  5277. #define I2S0_MDR (*(volatile uint32_t *)0x4002F104) // SAI MCLK Divide Register
  5278. #define I2S_MDR_FRACT(n) ((uint32_t)(n & 0xff)<<12) // MCLK Fraction
  5279. #define I2S_MDR_DIVIDE(n) ((uint32_t)(n & 0xfff)) // MCLK Divide
  5280. // General-Purpose Input/Output (GPIO)
  5281. #define GPIOA_PDOR (*(volatile uint32_t *)0x400FF000) // Port Data Output Register
  5282. #define GPIOA_PSOR (*(volatile uint32_t *)0x400FF004) // Port Set Output Register
  5283. #define GPIOA_PCOR (*(volatile uint32_t *)0x400FF008) // Port Clear Output Register
  5284. #define GPIOA_PTOR (*(volatile uint32_t *)0x400FF00C) // Port Toggle Output Register
  5285. #define GPIOA_PDIR (*(volatile uint32_t *)0x400FF010) // Port Data Input Register
  5286. #define GPIOA_PDDR (*(volatile uint32_t *)0x400FF014) // Port Data Direction Register
  5287. #define GPIOB_PDOR (*(volatile uint32_t *)0x400FF040) // Port Data Output Register
  5288. #define GPIOB_PSOR (*(volatile uint32_t *)0x400FF044) // Port Set Output Register
  5289. #define GPIOB_PCOR (*(volatile uint32_t *)0x400FF048) // Port Clear Output Register
  5290. #define GPIOB_PTOR (*(volatile uint32_t *)0x400FF04C) // Port Toggle Output Register
  5291. #define GPIOB_PDIR (*(volatile uint32_t *)0x400FF050) // Port Data Input Register
  5292. #define GPIOB_PDDR (*(volatile uint32_t *)0x400FF054) // Port Data Direction Register
  5293. #define GPIOC_PDOR (*(volatile uint32_t *)0x400FF080) // Port Data Output Register
  5294. #define GPIOC_PSOR (*(volatile uint32_t *)0x400FF084) // Port Set Output Register
  5295. #define GPIOC_PCOR (*(volatile uint32_t *)0x400FF088) // Port Clear Output Register
  5296. #define GPIOC_PTOR (*(volatile uint32_t *)0x400FF08C) // Port Toggle Output Register
  5297. #define GPIOC_PDIR (*(volatile uint32_t *)0x400FF090) // Port Data Input Register
  5298. #define GPIOC_PDDR (*(volatile uint32_t *)0x400FF094) // Port Data Direction Register
  5299. #define GPIOD_PDOR (*(volatile uint32_t *)0x400FF0C0) // Port Data Output Register
  5300. #define GPIOD_PSOR (*(volatile uint32_t *)0x400FF0C4) // Port Set Output Register
  5301. #define GPIOD_PCOR (*(volatile uint32_t *)0x400FF0C8) // Port Clear Output Register
  5302. #define GPIOD_PTOR (*(volatile uint32_t *)0x400FF0CC) // Port Toggle Output Register
  5303. #define GPIOD_PDIR (*(volatile uint32_t *)0x400FF0D0) // Port Data Input Register
  5304. #define GPIOD_PDDR (*(volatile uint32_t *)0x400FF0D4) // Port Data Direction Register
  5305. #define GPIOE_PDOR (*(volatile uint32_t *)0x400FF100) // Port Data Output Register
  5306. #define GPIOE_PSOR (*(volatile uint32_t *)0x400FF104) // Port Set Output Register
  5307. #define GPIOE_PCOR (*(volatile uint32_t *)0x400FF108) // Port Clear Output Register
  5308. #define GPIOE_PTOR (*(volatile uint32_t *)0x400FF10C) // Port Toggle Output Register
  5309. #define GPIOE_PDIR (*(volatile uint32_t *)0x400FF110) // Port Data Input Register
  5310. #define GPIOE_PDDR (*(volatile uint32_t *)0x400FF114) // Port Data Direction Register
  5311. #if defined(KINETISL)
  5312. #define FGPIOA_PDOR (*(volatile uint32_t *)0xF8000000) // Port Data Output Register
  5313. #define FGPIOA_PSOR (*(volatile uint32_t *)0xF8000004) // Port Set Output Register
  5314. #define FGPIOA_PCOR (*(volatile uint32_t *)0xF8000008) // Port Clear Output Register
  5315. #define FGPIOA_PTOR (*(volatile uint32_t *)0xF800000C) // Port Toggle Output Register
  5316. #define FGPIOA_PDIR (*(volatile uint32_t *)0xF8000010) // Port Data Input Register
  5317. #define FGPIOA_PDDR (*(volatile uint32_t *)0xF8000014) // Port Data Direction Register
  5318. #define FGPIOB_PDOR (*(volatile uint32_t *)0xF8000040) // Port Data Output Register
  5319. #define FGPIOB_PSOR (*(volatile uint32_t *)0xF8000044) // Port Set Output Register
  5320. #define FGPIOB_PCOR (*(volatile uint32_t *)0xF8000048) // Port Clear Output Register
  5321. #define FGPIOB_PTOR (*(volatile uint32_t *)0xF800004C) // Port Toggle Output Register
  5322. #define FGPIOB_PDIR (*(volatile uint32_t *)0xF8000050) // Port Data Input Register
  5323. #define FGPIOB_PDDR (*(volatile uint32_t *)0xF8000054) // Port Data Direction Register
  5324. #define FGPIOC_PDOR (*(volatile uint32_t *)0xF8000080) // Port Data Output Register
  5325. #define FGPIOC_PSOR (*(volatile uint32_t *)0xF8000084) // Port Set Output Register
  5326. #define FGPIOC_PCOR (*(volatile uint32_t *)0xF8000088) // Port Clear Output Register
  5327. #define FGPIOC_PTOR (*(volatile uint32_t *)0xF800008C) // Port Toggle Output Register
  5328. #define FGPIOC_PDIR (*(volatile uint32_t *)0xF8000090) // Port Data Input Register
  5329. #define FGPIOC_PDDR (*(volatile uint32_t *)0xF8000094) // Port Data Direction Register
  5330. #define FGPIOD_PDOR (*(volatile uint32_t *)0xF80000C0) // Port Data Output Register
  5331. #define FGPIOD_PSOR (*(volatile uint32_t *)0xF80000C4) // Port Set Output Register
  5332. #define FGPIOD_PCOR (*(volatile uint32_t *)0xF80000C8) // Port Clear Output Register
  5333. #define FGPIOD_PTOR (*(volatile uint32_t *)0xF80000CC) // Port Toggle Output Register
  5334. #define FGPIOD_PDIR (*(volatile uint32_t *)0xF80000D0) // Port Data Input Register
  5335. #define FGPIOD_PDDR (*(volatile uint32_t *)0xF80000D4) // Port Data Direction Register
  5336. #define FGPIOE_PDOR (*(volatile uint32_t *)0xF8000100) // Port Data Output Register
  5337. #define FGPIOE_PSOR (*(volatile uint32_t *)0xF8000104) // Port Set Output Register
  5338. #define FGPIOE_PCOR (*(volatile uint32_t *)0xF8000108) // Port Clear Output Register
  5339. #define FGPIOE_PTOR (*(volatile uint32_t *)0xF800010C) // Port Toggle Output Register
  5340. #define FGPIOE_PDIR (*(volatile uint32_t *)0xF8000110) // Port Data Input Register
  5341. #define FGPIOE_PDDR (*(volatile uint32_t *)0xF8000114) // Port Data Direction Register
  5342. #endif
  5343. // Touch sense input (TSI)
  5344. #if defined(HAS_KINETIS_TSI)
  5345. #define TSI0_GENCS (*(volatile uint32_t *)0x40045000) // General Control and Status Register
  5346. #define TSI_GENCS_LPCLKS ((uint32_t)0x10000000) //
  5347. #define TSI_GENCS_LPSCNITV(n) (((n) & 15) << 24) //
  5348. #define TSI_GENCS_NSCN(n) (((n) & 31) << 19) //
  5349. #define TSI_GENCS_PS(n) (((n) & 7) << 16) //
  5350. #define TSI_GENCS_EOSF ((uint32_t)0x00008000) //
  5351. #define TSI_GENCS_OUTRGF ((uint32_t)0x00004000) //
  5352. #define TSI_GENCS_EXTERF ((uint32_t)0x00002000) //
  5353. #define TSI_GENCS_OVRF ((uint32_t)0x00001000) //
  5354. #define TSI_GENCS_SCNIP ((uint32_t)0x00000200) //
  5355. #define TSI_GENCS_SWTS ((uint32_t)0x00000100) //
  5356. #define TSI_GENCS_TSIEN ((uint32_t)0x00000080) //
  5357. #define TSI_GENCS_TSIIE ((uint32_t)0x00000040) //
  5358. #define TSI_GENCS_ERIE ((uint32_t)0x00000020) //
  5359. #define TSI_GENCS_ESOR ((uint32_t)0x00000010) //
  5360. #define TSI_GENCS_STM ((uint32_t)0x00000002) //
  5361. #define TSI_GENCS_STPE ((uint32_t)0x00000001) //
  5362. #define TSI0_SCANC (*(volatile uint32_t *)0x40045004) // SCAN Control Register
  5363. #define TSI_SCANC_REFCHRG(n) (((n) & 15) << 24) //
  5364. #define TSI_SCANC_EXTCHRG(n) (((n) & 15) << 16) //
  5365. #define TSI_SCANC_SMOD(n) (((n) & 255) << 8) //
  5366. #define TSI_SCANC_AMCLKS(n) (((n) & 3) << 3) //
  5367. #define TSI_SCANC_AMPSC(n) (((n) & 7) << 0) //
  5368. #define TSI0_PEN (*(volatile uint32_t *)0x40045008) // Pin Enable Register
  5369. #define TSI0_WUCNTR (*(volatile uint32_t *)0x4004500C) // Wake-Up Channel Counter Register
  5370. #define TSI0_CNTR1 (*(volatile uint32_t *)0x40045100) // Counter Register
  5371. #define TSI0_CNTR3 (*(volatile uint32_t *)0x40045104) // Counter Register
  5372. #define TSI0_CNTR5 (*(volatile uint32_t *)0x40045108) // Counter Register
  5373. #define TSI0_CNTR7 (*(volatile uint32_t *)0x4004510C) // Counter Register
  5374. #define TSI0_CNTR9 (*(volatile uint32_t *)0x40045110) // Counter Register
  5375. #define TSI0_CNTR11 (*(volatile uint32_t *)0x40045114) // Counter Register
  5376. #define TSI0_CNTR13 (*(volatile uint32_t *)0x40045118) // Counter Register
  5377. #define TSI0_CNTR15 (*(volatile uint32_t *)0x4004511C) // Counter Register
  5378. #define TSI0_THRESHOLD (*(volatile uint32_t *)0x40045120) // Low Power Channel Threshold Register
  5379. #elif defined(HAS_KINETIS_TSI_LITE)
  5380. #define TSI0_GENCS (*(volatile uint32_t *)0x40045000) // General Control and Status
  5381. #define TSI_GENCS_OUTRGF ((uint32_t)0x80000000) // Out of Range Flag
  5382. #define TSI_GENCS_ESOR ((uint32_t)0x10000000) // End-of-scan or Out-of-Range Interrupt Selection
  5383. #define TSI_GENCS_MODE(n) (((n) & 15) << 24) // analog modes & status
  5384. #define TSI_GENCS_REFCHRG(n) (((n) & 7) << 21) // reference charge and discharge current
  5385. #define TSI_GENCS_DVOLT(n) (((n) & 3) << 19) // voltage rails
  5386. #define TSI_GENCS_EXTCHRG(n) (((n) & 7) << 16) // electrode charge and discharge current
  5387. #define TSI_GENCS_PS(n) (((n) & 7) << 13) // prescaler
  5388. #define TSI_GENCS_NSCN(n) (((n) & 31) << 8) // scan number
  5389. #define TSI_GENCS_TSIEN ((uint32_t)0x00000080) // Enable
  5390. #define TSI_GENCS_TSIIEN ((uint32_t)0x00000040) // Interrupt Enable
  5391. #define TSI_GENCS_STPE ((uint32_t)0x00000020) // STOP Enable
  5392. #define TSI_GENCS_STM ((uint32_t)0x00000010) // Trigger Mode
  5393. #define TSI_GENCS_SCNIP ((uint32_t)0x00000008) // Scan In Progress Status
  5394. #define TSI_GENCS_EOSF ((uint32_t)0x00000004) // End of Scan Flag
  5395. #define TSI_GENCS_CURSW ((uint32_t)0x00000002) // current sources swapped
  5396. #define TSI0_DATA (*(volatile uint32_t *)0x40045004) // Data
  5397. #define TSI_DATA_TSICH(n) (((n) & 15) << 28) // channel
  5398. #define TSI_DATA_DMAEN ((uint32_t)0x00800000) // DMA Transfer Enabled
  5399. #define TSI_DATA_SWTS ((uint32_t)0x00400000) // Software Trigger Start
  5400. #define TSI_DATA_TSICNT(n) (((n) & 65535) << 0) // Conversion Counter Value
  5401. #define TSI0_TSHD (*(volatile uint32_t *)0x40045008) // Threshold
  5402. #define TSI_TSHD_THRESH(n) (((n) & 65535) << 16) // High wakeup threshold
  5403. #define TSI_TSHD_THRESL(n) (((n) & 65535) << 0) // Low wakeup threshold
  5404. #endif
  5405. // Nested Vectored Interrupt Controller, Table 3-4 & ARMv7 ref, appendix B3.4 (page 750)
  5406. #define NVIC_STIR (*(volatile uint32_t *)0xE000EF00)
  5407. #define NVIC_ENABLE_IRQ(n) (*((volatile uint32_t *)0xE000E100 + ((n) >> 5)) = (1 << ((n) & 31)))
  5408. #define NVIC_DISABLE_IRQ(n) (*((volatile uint32_t *)0xE000E180 + ((n) >> 5)) = (1 << ((n) & 31)))
  5409. #define NVIC_SET_PENDING(n) (*((volatile uint32_t *)0xE000E200 + ((n) >> 5)) = (1 << ((n) & 31)))
  5410. #define NVIC_CLEAR_PENDING(n) (*((volatile uint32_t *)0xE000E280 + ((n) >> 5)) = (1 << ((n) & 31)))
  5411. #define NVIC_IS_ENABLED(n) (*((volatile uint32_t *)0xE000E100 + ((n) >> 5)) & (1 << ((n) & 31)))
  5412. #define NVIC_IS_PENDING(n) (*((volatile uint32_t *)0xE000E200 + ((n) >> 5)) & (1 << ((n) & 31)))
  5413. #define NVIC_IS_ACTIVE(n) (*((volatile uint32_t *)0xE000E300 + ((n) >> 5)) & (1 << ((n) & 31)))
  5414. #ifdef KINETISK
  5415. #define NVIC_TRIGGER_IRQ(n) NVIC_STIR=(n)
  5416. #else
  5417. #define NVIC_TRIGGER_IRQ(n) NVIC_SET_PENDING(n)
  5418. #endif
  5419. #define NVIC_ISER0 (*(volatile uint32_t *)0xE000E100)
  5420. #define NVIC_ISER1 (*(volatile uint32_t *)0xE000E104)
  5421. #define NVIC_ISER2 (*(volatile uint32_t *)0xE000E108)
  5422. #define NVIC_ISER3 (*(volatile uint32_t *)0xE000E10C)
  5423. #define NVIC_ICER0 (*(volatile uint32_t *)0xE000E180)
  5424. #define NVIC_ICER1 (*(volatile uint32_t *)0xE000E184)
  5425. #define NVIC_ICER2 (*(volatile uint32_t *)0xE000E188)
  5426. #define NVIC_ICER3 (*(volatile uint32_t *)0xE000E18C)
  5427. // 0 = highest priority
  5428. // Cortex-M4: 0,16,32,48,64,80,96,112,128,144,160,176,192,208,224,240
  5429. // Cortex-M0: 0,64,128,192
  5430. #ifdef KINETISK
  5431. #define NVIC_SET_PRIORITY(irqnum, priority) (*((volatile uint8_t *)0xE000E400 + (irqnum)) = (uint8_t)(priority))
  5432. #define NVIC_GET_PRIORITY(irqnum) (*((uint8_t *)0xE000E400 + (irqnum)))
  5433. #else
  5434. #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))))
  5435. #define NVIC_GET_PRIORITY(irqnum) (*((uint32_t *)0xE000E400 + ((irqnum) >> 2)) >> (8 * ((irqnum) & 3)) & 255)
  5436. #endif
  5437. #define __disable_irq() __asm__ volatile("CPSID i":::"memory");
  5438. #define __enable_irq() __asm__ volatile("CPSIE i":::"memory");
  5439. // System Control Space (SCS), ARMv7 ref manual, B3.2, page 708
  5440. #define SCB_CPUID (*(const uint32_t *)0xE000ED00) // CPUID Base Register
  5441. #define SCB_ICSR (*(volatile uint32_t *)0xE000ED04) // Interrupt Control and State
  5442. #define SCB_ICSR_PENDSTSET ((uint32_t)0x04000000)
  5443. #define SCB_VTOR (*(volatile uint32_t *)0xE000ED08) // Vector Table Offset
  5444. #define SCB_AIRCR (*(volatile uint32_t *)0xE000ED0C) // Application Interrupt and Reset Control
  5445. #define SCB_SCR (*(volatile uint32_t *)0xE000ED10) // System Control Register
  5446. #define SCB_SCR_SEVONPEND ((uint8_t)0x10) // Send Event on Pending bit
  5447. #define SCB_SCR_SLEEPDEEP ((uint8_t)0x04) // Sleep or Deep Sleep
  5448. #define SCB_SCR_SLEEPONEXIT ((uint8_t)0x02) // Sleep-on-exit
  5449. #define SCB_CCR (*(volatile uint32_t *)0xE000ED14) // Configuration and Control
  5450. #define SCB_SHPR1 (*(volatile uint32_t *)0xE000ED18) // System Handler Priority Register 1
  5451. #define SCB_SHPR2 (*(volatile uint32_t *)0xE000ED1C) // System Handler Priority Register 2
  5452. #define SCB_SHPR3 (*(volatile uint32_t *)0xE000ED20) // System Handler Priority Register 3
  5453. #define SCB_SHCSR (*(volatile uint32_t *)0xE000ED24) // System Handler Control and State
  5454. #define SCB_CFSR (*(volatile uint32_t *)0xE000ED28) // Configurable Fault Status Register
  5455. #define SCB_HFSR (*(volatile uint32_t *)0xE000ED2C) // HardFault Status
  5456. #define SCB_DFSR (*(volatile uint32_t *)0xE000ED30) // Debug Fault Status
  5457. #define SCB_MMFAR (*(volatile uint32_t *)0xE000ED34) // MemManage Fault Address
  5458. #define SCB_BFAR (*(volatile uint32_t *)0xE000ED38) // Bus Fault Address
  5459. #define SCB_AFAR (*(volatile uint32_t *)0xE000ED3C) // Aux Fault Address
  5460. #define SCB_CPACR (*(volatile uint32_t *)0xE000ED88) // Coprocessor Access Control
  5461. #define SCB_FPCCR (*(volatile uint32_t *)0xE000EF34) // FP Context Control
  5462. #define SCB_FPCAR (*(volatile uint32_t *)0xE000EF38) // FP Context Address
  5463. #define SCB_FPDSCR (*(volatile uint32_t *)0xE000EF3C) // FP Default Status Control
  5464. #define SCB_MVFR0 (*(volatile uint32_t *)0xE000EF40) // Media & FP Feature 0
  5465. #define SCB_MVFR1 (*(volatile uint32_t *)0xE000EF44) // Media & FP Feature 1
  5466. #define SCB_MVFR2 (*(volatile uint32_t *)0xE000EF48) // Media & FP Feature 2
  5467. #define SYST_CSR (*(volatile uint32_t *)0xE000E010) // SysTick Control and Status
  5468. #define SYST_CSR_COUNTFLAG ((uint32_t)0x00010000)
  5469. #define SYST_CSR_CLKSOURCE ((uint32_t)0x00000004)
  5470. #define SYST_CSR_TICKINT ((uint32_t)0x00000002)
  5471. #define SYST_CSR_ENABLE ((uint32_t)0x00000001)
  5472. #define SYST_RVR (*(volatile uint32_t *)0xE000E014) // SysTick Reload Value Register
  5473. #define SYST_CVR (*(volatile uint32_t *)0xE000E018) // SysTick Current Value Register
  5474. #define SYST_CALIB (*(const uint32_t *)0xE000E01C) // SysTick Calibration Value
  5475. #define ARM_DEMCR (*(volatile uint32_t *)0xE000EDFC) // Debug Exception and Monitor Control
  5476. #define ARM_DEMCR_TRCENA (1 << 24) // Enable debugging & monitoring blocks
  5477. #define ARM_DWT_CTRL (*(volatile uint32_t *)0xE0001000) // DWT control register
  5478. #define ARM_DWT_CTRL_CYCCNTENA (1 << 0) // Enable cycle count
  5479. #define ARM_DWT_CYCCNT (*(volatile uint32_t *)0xE0001004) // Cycle count register
  5480. #ifdef __cplusplus
  5481. extern "C" {
  5482. #endif
  5483. extern int nvic_execution_priority(void);
  5484. #if defined(HAS_KINETIS_HSRUN) && F_CPU > 120000000
  5485. extern int kinetis_hsrun_disable(void);
  5486. extern int kinetis_hsrun_enable(void);
  5487. #else
  5488. __attribute__((always_inline)) static inline int kinetis_hsrun_disable(void) { return 0; }
  5489. __attribute__((always_inline)) static inline int kinetis_hsrun_enable(void) { return 0; }
  5490. #endif
  5491. extern void nmi_isr(void);
  5492. extern void hard_fault_isr(void);
  5493. extern void memmanage_fault_isr(void);
  5494. extern void bus_fault_isr(void);
  5495. extern void usage_fault_isr(void);
  5496. extern void svcall_isr(void);
  5497. extern void debugmonitor_isr(void);
  5498. extern void pendablesrvreq_isr(void);
  5499. extern void systick_isr(void);
  5500. extern void dma_ch0_isr(void);
  5501. extern void dma_ch1_isr(void);
  5502. extern void dma_ch2_isr(void);
  5503. extern void dma_ch3_isr(void);
  5504. extern void dma_ch4_isr(void);
  5505. extern void dma_ch5_isr(void);
  5506. extern void dma_ch6_isr(void);
  5507. extern void dma_ch7_isr(void);
  5508. extern void dma_ch8_isr(void);
  5509. extern void dma_ch9_isr(void);
  5510. extern void dma_ch10_isr(void);
  5511. extern void dma_ch11_isr(void);
  5512. extern void dma_ch12_isr(void);
  5513. extern void dma_ch13_isr(void);
  5514. extern void dma_ch14_isr(void);
  5515. extern void dma_ch15_isr(void);
  5516. extern void dma_error_isr(void);
  5517. extern void mcm_isr(void);
  5518. extern void randnum_isr(void);
  5519. extern void flash_cmd_isr(void);
  5520. extern void flash_error_isr(void);
  5521. extern void low_voltage_isr(void);
  5522. extern void wakeup_isr(void);
  5523. extern void watchdog_isr(void);
  5524. extern void i2c0_isr(void);
  5525. extern void i2c1_isr(void);
  5526. extern void i2c2_isr(void);
  5527. extern void i2c3_isr(void);
  5528. extern void spi0_isr(void);
  5529. extern void spi1_isr(void);
  5530. extern void spi2_isr(void);
  5531. extern void sdhc_isr(void);
  5532. extern void enet_timer_isr(void);
  5533. extern void enet_tx_isr(void);
  5534. extern void enet_rx_isr(void);
  5535. extern void enet_error_isr(void);
  5536. extern void can0_message_isr(void);
  5537. extern void can0_bus_off_isr(void);
  5538. extern void can0_error_isr(void);
  5539. extern void can0_tx_warn_isr(void);
  5540. extern void can0_rx_warn_isr(void);
  5541. extern void can0_wakeup_isr(void);
  5542. extern void can1_message_isr(void);
  5543. extern void can1_bus_off_isr(void);
  5544. extern void can1_error_isr(void);
  5545. extern void can1_tx_warn_isr(void);
  5546. extern void can1_rx_warn_isr(void);
  5547. extern void can1_wakeup_isr(void);
  5548. extern void i2s0_tx_isr(void);
  5549. extern void i2s0_rx_isr(void);
  5550. extern void i2s0_isr(void);
  5551. extern void uart0_lon_isr(void);
  5552. extern void uart0_status_isr(void);
  5553. extern void uart0_error_isr(void);
  5554. extern void uart1_status_isr(void);
  5555. extern void uart1_error_isr(void);
  5556. extern void uart2_status_isr(void);
  5557. extern void uart2_error_isr(void);
  5558. extern void uart3_status_isr(void);
  5559. extern void uart3_error_isr(void);
  5560. extern void uart4_status_isr(void);
  5561. extern void uart4_error_isr(void);
  5562. extern void uart5_status_isr(void);
  5563. extern void uart5_error_isr(void);
  5564. extern void lpuart0_status_isr(void);
  5565. extern void adc0_isr(void);
  5566. extern void adc1_isr(void);
  5567. extern void cmp0_isr(void);
  5568. extern void cmp1_isr(void);
  5569. extern void cmp2_isr(void);
  5570. extern void cmp3_isr(void);
  5571. extern void ftm0_isr(void);
  5572. extern void ftm1_isr(void);
  5573. extern void ftm2_isr(void);
  5574. extern void ftm3_isr(void);
  5575. extern void tpm0_isr(void);
  5576. extern void tpm1_isr(void);
  5577. extern void tpm2_isr(void);
  5578. extern void cmt_isr(void);
  5579. extern void rtc_alarm_isr(void);
  5580. extern void rtc_seconds_isr(void);
  5581. extern void pit0_isr(void);
  5582. extern void pit1_isr(void);
  5583. extern void pit2_isr(void);
  5584. extern void pit3_isr(void);
  5585. extern void pit_isr(void);
  5586. extern void pdb_isr(void);
  5587. extern void usb_isr(void);
  5588. extern void usb_charge_isr(void);
  5589. extern void usbhs_isr(void);
  5590. extern void usbhs_phy_isr(void);
  5591. extern void dac0_isr(void);
  5592. extern void dac1_isr(void);
  5593. extern void tsi0_isr(void);
  5594. extern void mcg_isr(void);
  5595. extern void lptmr_isr(void);
  5596. extern void porta_isr(void);
  5597. extern void portb_isr(void);
  5598. extern void portc_isr(void);
  5599. extern void portd_isr(void);
  5600. extern void porte_isr(void);
  5601. extern void portcd_isr(void);
  5602. extern void software_isr(void);
  5603. extern void (* _VectorsRam[NVIC_NUM_INTERRUPTS+16])(void);
  5604. extern void (* const _VectorsFlash[NVIC_NUM_INTERRUPTS+16])(void);
  5605. #ifdef __cplusplus
  5606. }
  5607. #endif
  5608. #undef BEGIN_ENUM
  5609. #undef END_ENUM
  5610. #endif