atxmega32e5.pp 87 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749175017511752175317541755175617571758175917601761176217631764176517661767176817691770177117721773177417751776177717781779178017811782178317841785178617871788178917901791179217931794179517961797179817991800180118021803180418051806180718081809181018111812181318141815181618171818181918201821182218231824182518261827182818291830183118321833183418351836183718381839184018411842184318441845184618471848184918501851185218531854185518561857185818591860186118621863186418651866186718681869187018711872187318741875187618771878187918801881188218831884188518861887188818891890189118921893189418951896189718981899190019011902190319041905190619071908190919101911191219131914191519161917191819191920192119221923192419251926192719281929193019311932193319341935193619371938193919401941194219431944194519461947194819491950195119521953195419551956195719581959196019611962196319641965196619671968196919701971197219731974197519761977197819791980198119821983198419851986198719881989199019911992199319941995199619971998199920002001200220032004200520062007200820092010201120122013201420152016201720182019202020212022202320242025202620272028202920302031203220332034203520362037203820392040204120422043204420452046204720482049205020512052205320542055205620572058205920602061206220632064206520662067206820692070207120722073207420752076207720782079208020812082208320842085208620872088208920902091209220932094209520962097209820992100210121022103210421052106210721082109211021112112211321142115211621172118211921202121212221232124212521262127212821292130213121322133213421352136213721382139214021412142214321442145214621472148214921502151215221532154215521562157215821592160216121622163216421652166216721682169217021712172217321742175217621772178217921802181218221832184218521862187218821892190219121922193219421952196219721982199220022012202220322042205220622072208220922102211221222132214221522162217221822192220222122222223222422252226222722282229223022312232223322342235223622372238223922402241224222432244224522462247224822492250225122522253225422552256225722582259226022612262226322642265226622672268226922702271227222732274227522762277227822792280228122822283228422852286228722882289229022912292229322942295229622972298229923002301230223032304230523062307230823092310231123122313231423152316231723182319232023212322232323242325232623272328232923302331233223332334233523362337233823392340234123422343234423452346234723482349235023512352235323542355235623572358235923602361236223632364236523662367236823692370237123722373237423752376237723782379238023812382238323842385238623872388238923902391239223932394239523962397239823992400240124022403240424052406240724082409241024112412241324142415241624172418241924202421242224232424242524262427242824292430243124322433243424352436243724382439244024412442244324442445244624472448244924502451245224532454245524562457245824592460246124622463246424652466246724682469247024712472247324742475247624772478247924802481248224832484248524862487248824892490249124922493249424952496249724982499250025012502250325042505250625072508250925102511251225132514251525162517251825192520252125222523252425252526252725282529253025312532253325342535253625372538253925402541254225432544254525462547254825492550255125522553255425552556255725582559256025612562256325642565256625672568256925702571257225732574257525762577257825792580258125822583258425852586258725882589259025912592259325942595259625972598259926002601260226032604260526062607260826092610261126122613261426152616261726182619262026212622262326242625262626272628262926302631263226332634263526362637263826392640264126422643264426452646264726482649265026512652265326542655265626572658265926602661266226632664266526662667266826692670267126722673267426752676267726782679268026812682268326842685268626872688268926902691269226932694269526962697269826992700270127022703270427052706270727082709271027112712271327142715271627172718271927202721272227232724272527262727272827292730273127322733273427352736273727382739274027412742274327442745274627472748274927502751275227532754275527562757275827592760276127622763276427652766276727682769277027712772277327742775277627772778277927802781278227832784278527862787278827892790279127922793279427952796279727982799280028012802280328042805280628072808280928102811281228132814281528162817281828192820282128222823282428252826282728282829283028312832283328342835283628372838283928402841284228432844284528462847284828492850285128522853285428552856285728582859286028612862286328642865286628672868286928702871287228732874287528762877287828792880288128822883288428852886288728882889289028912892289328942895289628972898289929002901290229032904290529062907290829092910291129122913291429152916291729182919292029212922292329242925292629272928292929302931293229332934293529362937293829392940294129422943294429452946294729482949295029512952295329542955295629572958295929602961296229632964296529662967296829692970297129722973297429752976297729782979298029812982298329842985298629872988298929902991299229932994299529962997299829993000300130023003300430053006300730083009301030113012301330143015301630173018301930203021302230233024302530263027302830293030303130323033303430353036303730383039304030413042304330443045304630473048304930503051305230533054305530563057305830593060306130623063306430653066306730683069307030713072307330743075307630773078307930803081308230833084308530863087308830893090309130923093309430953096309730983099310031013102310331043105310631073108310931103111311231133114311531163117311831193120312131223123312431253126312731283129313031313132313331343135313631373138313931403141314231433144314531463147314831493150315131523153315431553156315731583159316031613162316331643165316631673168316931703171317231733174317531763177317831793180318131823183318431853186318731883189319031913192319331943195319631973198319932003201320232033204320532063207320832093210321132123213321432153216321732183219322032213222322332243225322632273228322932303231323232333234323532363237323832393240324132423243324432453246324732483249325032513252325332543255325632573258325932603261326232633264326532663267326832693270327132723273327432753276327732783279328032813282328332843285328632873288328932903291329232933294329532963297329832993300330133023303330433053306330733083309
  1. unit ATxmega32E5;
  2. interface
  3. type
  4. TGPIO = object //General Purpose IO Registers
  5. GPIOR0: byte; //General Purpose IO Register 0
  6. GPIOR1: byte; //General Purpose IO Register 1
  7. GPIOR2: byte; //General Purpose IO Register 2
  8. GPIOR3: byte; //General Purpose IO Register 3
  9. end;
  10. TVPORT = object //Virtual Port
  11. DIR: byte; //I/O Port Data Direction
  12. OUT_: byte; //I/O Port Output
  13. IN_: byte; //I/O Port Input
  14. INTFLAGS: byte; //Interrupt Flag Register
  15. const
  16. // Interrupt Pin 7 Flag
  17. INT7IFbm = $80;
  18. // Interrupt Pin 6 Flag
  19. INT6IFbm = $40;
  20. // Interrupt Pin 5 Flag
  21. INT5IFbm = $20;
  22. // Interrupt Pin 4 Flag
  23. INT4IFbm = $10;
  24. // Interrupt Pin 3 Flag
  25. INT3IFbm = $08;
  26. // Interrupt Pin 2 Flag
  27. INT2IFbm = $04;
  28. // Interrupt Pin 1 Flag
  29. INT1IFbm = $02;
  30. // Interrupt Pin 0 Flag
  31. INT0IFbm = $01;
  32. end;
  33. TOCD = object //On-Chip Debug System
  34. OCDR0: byte; //OCD Register 0
  35. OCDR1: byte; //OCD Register 1
  36. end;
  37. TCPU = object //CPU registers
  38. Reserved0: byte;
  39. Reserved1: byte;
  40. Reserved2: byte;
  41. Reserved3: byte;
  42. CCP: byte; //Configuration Change Protection
  43. Reserved5: byte;
  44. Reserved6: byte;
  45. Reserved7: byte;
  46. RAMPD: byte; //Ramp D
  47. RAMPX: byte; //Ramp X
  48. RAMPY: byte; //Ramp Y
  49. RAMPZ: byte; //Ramp Z
  50. EIND: byte; //Extended Indirect Jump
  51. SPL: byte; //Stack Pointer Low
  52. SPH: byte; //Stack Pointer High
  53. SREG: byte; //Status Register
  54. const
  55. // CCP
  56. CCPmask = $FF;
  57. CCP_SPM = $9D;
  58. CCP_IOREG = $D8;
  59. // Global Interrupt Enable Flag
  60. Ibm = $80;
  61. // Transfer Bit
  62. Tbm = $40;
  63. // Half Carry Flag
  64. Hbm = $20;
  65. // N Exclusive Or V Flag
  66. Sbm = $10;
  67. // Two's Complement Overflow Flag
  68. Vbm = $08;
  69. // Negative Flag
  70. Nbm = $04;
  71. // Zero Flag
  72. Zbm = $02;
  73. // Carry Flag
  74. Cbm = $01;
  75. end;
  76. TCLK = object //Clock System
  77. CTRL: byte; //Control Register
  78. PSCTRL: byte; //Prescaler Control Register
  79. LOCK: byte; //Lock register
  80. RTCCTRL: byte; //RTC Control Register
  81. const
  82. // CLK_SCLKSEL
  83. SCLKSELmask = $07;
  84. SCLKSEL_RC2M = $00;
  85. SCLKSEL_RC32M = $01;
  86. SCLKSEL_RC32K = $02;
  87. SCLKSEL_XOSC = $03;
  88. SCLKSEL_PLL = $04;
  89. SCLKSEL_RC8M = $05;
  90. // CLK_PSADIV
  91. PSADIVmask = $7C;
  92. PSADIV_1 = $00;
  93. PSADIV_2 = $04;
  94. PSADIV_4 = $0C;
  95. PSADIV_8 = $14;
  96. PSADIV_16 = $1C;
  97. PSADIV_32 = $24;
  98. PSADIV_64 = $2C;
  99. PSADIV_128 = $34;
  100. PSADIV_256 = $3C;
  101. PSADIV_512 = $44;
  102. PSADIV_6 = $4C;
  103. PSADIV_10 = $54;
  104. PSADIV_12 = $5C;
  105. PSADIV_24 = $64;
  106. PSADIV_48 = $6C;
  107. // CLK_PSBCDIV
  108. PSBCDIVmask = $03;
  109. PSBCDIV_1_1 = $00;
  110. PSBCDIV_1_2 = $01;
  111. PSBCDIV_4_1 = $02;
  112. PSBCDIV_2_2 = $03;
  113. // Clock System Lock
  114. LOCKbm = $01;
  115. // CLK_RTCSRC
  116. RTCSRCmask = $0E;
  117. RTCSRC_ULP = $00;
  118. RTCSRC_TOSC = $02;
  119. RTCSRC_RCOSC = $04;
  120. RTCSRC_TOSC32 = $0A;
  121. RTCSRC_RCOSC32 = $0C;
  122. RTCSRC_EXTCLK = $0E;
  123. // Clock Source Enable
  124. RTCENbm = $01;
  125. end;
  126. TPR = object //Power Reduction
  127. PRGEN: byte; //General Power Reduction
  128. PRPA: byte; //Power Reduction Port A
  129. Reserved2: byte;
  130. PRPC: byte; //Power Reduction Port C
  131. PRPD: byte; //Power Reduction Port D
  132. const
  133. // XMEGA Custom Logic
  134. XCLbm = $80;
  135. // Real-time Counter
  136. RTCbm = $04;
  137. // Event System
  138. EVSYSbm = $02;
  139. // Enhanced DMA-Controller
  140. EDMAbm = $01;
  141. // Port A DAC
  142. DACbm = $04;
  143. // Port A ADC
  144. ADCbm = $02;
  145. // Port A Analog Comparator
  146. ACbm = $01;
  147. // Port C Two-wire Interface
  148. TWIbm = $40;
  149. // Port C USART0
  150. USART0bm = $10;
  151. // Port C SPI
  152. SPIbm = $08;
  153. // Port C WEX
  154. HIRESbm = $04;
  155. // Port C Timer/Counter5
  156. TC5bm = $02;
  157. // Port C Timer/Counter4
  158. TC4bm = $01;
  159. end;
  160. TSLEEP = object //Sleep Controller
  161. CTRL: byte; //Control Register
  162. const
  163. // SLEEP_SMODE
  164. SMODEmask = $0E;
  165. SMODE_IDLE = $00;
  166. SMODE_PDOWN = $04;
  167. SMODE_PSAVE = $06;
  168. SMODE_STDBY = $0C;
  169. SMODE_ESTDBY = $0E;
  170. // Sleep Enable
  171. SENbm = $01;
  172. end;
  173. TOSC = object //Oscillator
  174. CTRL: byte; //Control Register
  175. STATUS: byte; //Status Register
  176. XOSCCTRL: byte; //External Oscillator Control Register
  177. XOSCFAIL: byte; //Oscillator Failure Detection Register
  178. RC32KCAL: byte; //32.768 kHz Internal Oscillator Calibration Register
  179. PLLCTRL: byte; //PLL Control Register
  180. DFLLCTRL: byte; //DFLL Control Register
  181. RC8MCAL: byte; //Internal 8 MHz RC Oscillator Calibration Register
  182. const
  183. // Internal 8 MHz RC Low Power Mode Enable
  184. RC8MLPMbm = $40;
  185. // Internal 8 MHz RC Oscillator Enable
  186. RC8MENbm = $20;
  187. // PLL Enable
  188. PLLENbm = $10;
  189. // External Oscillator Enable
  190. XOSCENbm = $08;
  191. // Internal 32.768 kHz RC Oscillator Enable
  192. RC32KENbm = $04;
  193. // Internal 32 MHz RC Oscillator Enable
  194. RC32MENbm = $02;
  195. // Internal 2 MHz RC Oscillator Enable
  196. RC2MENbm = $01;
  197. // Internal 8 MHz RC Oscillator Ready
  198. RC8MRDYbm = $20;
  199. // PLL Ready
  200. PLLRDYbm = $10;
  201. // External Oscillator Ready
  202. XOSCRDYbm = $08;
  203. // Internal 32.768 kHz RC Oscillator Ready
  204. RC32KRDYbm = $04;
  205. // Internal 32 MHz RC Oscillator Ready
  206. RC32MRDYbm = $02;
  207. // Internal 2 MHz RC Oscillator Ready
  208. RC2MRDYbm = $01;
  209. // OSC_FRQRANGE
  210. FRQRANGEmask = $C0;
  211. FRQRANGE_04TO2 = $00;
  212. FRQRANGE_2TO9 = $40;
  213. FRQRANGE_9TO12 = $80;
  214. FRQRANGE_12TO16 = $C0;
  215. // 32.768 kHz XTAL OSC Low-power Mode
  216. X32KLPMbm = $20;
  217. // 16 MHz Crystal Oscillator High Power mode
  218. XOSCPWRbm = $10;
  219. // OSC_XOSCSEL
  220. XOSCSELmask = $1F;
  221. XOSCSEL_EXTCLK = $00;
  222. XOSCSEL_32KHz = $02;
  223. XOSCSEL_XTAL_256CLK = $03;
  224. XOSCSEL_XTAL_1KCLK = $07;
  225. XOSCSEL_XTAL_16KCLK = $0B;
  226. XOSCSEL_EXTCLK_C4 = $14;
  227. // PLL Failure Detection Interrupt Flag
  228. PLLFDIFbm = $08;
  229. // PLL Failure Detection Enable
  230. PLLFDENbm = $04;
  231. // XOSC Failure Detection Interrupt Flag
  232. XOSCFDIFbm = $02;
  233. // XOSC Failure Detection Enable
  234. XOSCFDENbm = $01;
  235. // OSC_PLLSRC
  236. PLLSRCmask = $C0;
  237. PLLSRC_RC2M = $00;
  238. PLLSRC_RC8M = $40;
  239. PLLSRC_RC32M = $80;
  240. PLLSRC_XOSC = $C0;
  241. // Divide by 2
  242. PLLDIVbm = $20;
  243. // Multiplication Factor
  244. PLLFAC0bm = $01;
  245. PLLFAC1bm = $02;
  246. PLLFAC2bm = $04;
  247. PLLFAC3bm = $08;
  248. PLLFAC4bm = $10;
  249. // OSC_RC32MCREF
  250. RC32MCREFmask = $06;
  251. RC32MCREF_RC32K = $00;
  252. RC32MCREF_XOSC32K = $02;
  253. end;
  254. TDFLL = object //DFLL
  255. CTRL: byte; //Control Register
  256. Reserved1: byte;
  257. CALA: byte; //Calibration Register A
  258. CALB: byte; //Calibration Register B
  259. COMP0: byte; //Oscillator Compare Register 0
  260. COMP1: byte; //Oscillator Compare Register 1
  261. COMP2: byte; //Oscillator Compare Register 2
  262. const
  263. // DFLL Enable
  264. ENABLEbm = $01;
  265. // DFLL Calibration Value A
  266. CALL0bm = $01;
  267. CALL1bm = $02;
  268. CALL2bm = $04;
  269. CALL3bm = $08;
  270. CALL4bm = $10;
  271. CALL5bm = $20;
  272. CALL6bm = $40;
  273. // DFLL Calibration Value B
  274. CALH0bm = $01;
  275. CALH1bm = $02;
  276. CALH2bm = $04;
  277. CALH3bm = $08;
  278. CALH4bm = $10;
  279. CALH5bm = $20;
  280. end;
  281. TRST = object //Reset
  282. STATUS: byte; //Status Register
  283. CTRL: byte; //Control Register
  284. const
  285. // Spike Detection Reset Flag
  286. SDRFbm = $40;
  287. // Software Reset Flag
  288. SRFbm = $20;
  289. // Programming and Debug Interface Interface Reset Flag
  290. PDIRFbm = $10;
  291. // Watchdog Reset Flag
  292. WDRFbm = $08;
  293. // Brown-out Reset Flag
  294. BORFbm = $04;
  295. // External Reset Flag
  296. EXTRFbm = $02;
  297. // Power-on Reset Flag
  298. PORFbm = $01;
  299. // Software Reset
  300. SWRSTbm = $01;
  301. end;
  302. TWDT = object //Watch-Dog Timer
  303. CTRL: byte; //Control
  304. WINCTRL: byte; //Windowed Mode Control
  305. STATUS: byte; //Status
  306. const
  307. // WDT_PER
  308. PERmask = $3C;
  309. PER_8CLK = $00;
  310. PER_16CLK = $04;
  311. PER_32CLK = $08;
  312. PER_64CLK = $0C;
  313. PER_128CLK = $10;
  314. PER_256CLK = $14;
  315. PER_512CLK = $18;
  316. PER_1KCLK = $1C;
  317. PER_2KCLK = $20;
  318. PER_4KCLK = $24;
  319. PER_8KCLK = $28;
  320. // Enable
  321. ENABLEbm = $02;
  322. // Change Enable
  323. CENbm = $01;
  324. // WDT_WPER
  325. WPERmask = $3C;
  326. WPER_8CLK = $00;
  327. WPER_16CLK = $04;
  328. WPER_32CLK = $08;
  329. WPER_64CLK = $0C;
  330. WPER_128CLK = $10;
  331. WPER_256CLK = $14;
  332. WPER_512CLK = $18;
  333. WPER_1KCLK = $1C;
  334. WPER_2KCLK = $20;
  335. WPER_4KCLK = $24;
  336. WPER_8KCLK = $28;
  337. // Windowed Mode Enable
  338. WENbm = $02;
  339. // Windowed Mode Change Enable
  340. WCENbm = $01;
  341. // Synchronization busy
  342. SYNCBUSYbm = $01;
  343. end;
  344. TMCU = object //MCU Control
  345. DEVID0: byte; //Device ID byte 0
  346. DEVID1: byte; //Device ID byte 1
  347. DEVID2: byte; //Device ID byte 2
  348. REVID: byte; //Revision ID
  349. Reserved4: byte;
  350. Reserved5: byte;
  351. Reserved6: byte;
  352. ANAINIT: byte; //Analog Startup Delay
  353. EVSYSLOCK: byte; //Event System Lock
  354. WEXLOCK: byte; //WEX Lock
  355. FAULTLOCK: byte; //FAULT Lock
  356. const
  357. // Analog startup delay Port A
  358. STARTUPDLYA0bm = $01;
  359. STARTUPDLYA1bm = $02;
  360. // Event Channel 4-7 Lock
  361. EVSYS1LOCKbm = $10;
  362. // Event Channel 0-3 Lock
  363. EVSYS0LOCKbm = $01;
  364. // WeX on T/C C4 Lock
  365. WEXCLOCKbm = $01;
  366. // Fault on T/C C5 Lock
  367. FAULTC5LOCKbm = $02;
  368. // Fault on T/C C4 Lock
  369. FAULTC4LOCKbm = $01;
  370. end;
  371. TPMIC = object //Programmable Multi-level Interrupt Controller
  372. STATUS: byte; //Status Register
  373. INTPRI: byte; //Interrupt Priority
  374. CTRL: byte; //Control Register
  375. const
  376. // Non-maskable Interrupt Executing
  377. NMIEXbm = $80;
  378. // High Level Interrupt Executing
  379. HILVLEXbm = $04;
  380. // Medium Level Interrupt Executing
  381. MEDLVLEXbm = $02;
  382. // Low Level Interrupt Executing
  383. LOLVLEXbm = $01;
  384. // Round-Robin Priority Enable
  385. RRENbm = $80;
  386. // Interrupt Vector Select
  387. IVSELbm = $40;
  388. // High Level Enable
  389. HILVLENbm = $04;
  390. // Medium Level Enable
  391. MEDLVLENbm = $02;
  392. // Low Level Enable
  393. LOLVLENbm = $01;
  394. end;
  395. TPORTCFG = object //I/O port Configuration
  396. MPCMASK: byte; //Multi-pin Configuration Mask
  397. Reserved1: byte;
  398. Reserved2: byte;
  399. Reserved3: byte;
  400. CLKOUT: byte; //Clock Out Register
  401. Reserved5: byte;
  402. ACEVOUT: byte; //Analog Comparator and Event Out Register
  403. SRLCTRL: byte; //Slew Rate Limit Control Register
  404. const
  405. // PORTCFG_CLKEVPIN
  406. CLKEVPINmask = $80;
  407. CLKEVPIN_PIN7 = $00;
  408. CLKEVPIN_PIN4 = $80;
  409. // RTCOUT
  410. RTCOUTmask = $60;
  411. RTCOUTOFF = $00;
  412. RTCOUTPC6 = $20;
  413. RTCOUTPD6 = $40;
  414. RTCOUTPR0 = $60;
  415. // PORTCFG_CLKOUTSEL
  416. CLKOUTSELmask = $0C;
  417. CLKOUTSEL_CLK1X = $00;
  418. CLKOUTSEL_CLK2X = $04;
  419. CLKOUTSEL_CLK4X = $08;
  420. // PORTCFG_CLKOUT
  421. CLKOUTmask = $03;
  422. CLKOUT_OFF = $00;
  423. CLKOUT_PC7 = $01;
  424. CLKOUT_PD7 = $02;
  425. CLKOUT_PR0 = $03;
  426. // PORTCFG_ACOUT
  427. ACOUTmask = $C0;
  428. ACOUT_PA = $00;
  429. ACOUT_PC = $40;
  430. ACOUT_PD = $80;
  431. ACOUT_PR = $C0;
  432. // PORTCFG_EVOUT
  433. EVOUTmask = $30;
  434. EVOUT_OFF = $00;
  435. EVOUT_PC7 = $10;
  436. EVOUT_PD7 = $20;
  437. EVOUT_PR0 = $30;
  438. // Asynchronous Event Enabled
  439. EVASYENbm = $08;
  440. // PORTCFG_EVOUTSEL
  441. EVOUTSELmask = $07;
  442. EVOUTSEL_0 = $00;
  443. EVOUTSEL_1 = $01;
  444. EVOUTSEL_2 = $02;
  445. EVOUTSEL_3 = $03;
  446. EVOUTSEL_4 = $04;
  447. EVOUTSEL_5 = $05;
  448. EVOUTSEL_6 = $06;
  449. EVOUTSEL_7 = $07;
  450. // Slew Rate Limit Enable on PORTA
  451. SRLENRAbm = $01;
  452. // Slew Rate Limit Enable on PORTC
  453. SRLENRCbm = $04;
  454. // Slew Rate Limit Enable on PORTD
  455. SRLENRDbm = $08;
  456. // Slew Rate Limit Enable on PORTR
  457. SRLENRRbm = $80;
  458. end;
  459. TCRC = object //Cyclic Redundancy Checker
  460. CTRL: byte; //Control Register
  461. STATUS: byte; //Status Register
  462. Reserved2: byte;
  463. DATAIN: byte; //Data Input
  464. CHECKSUM0: byte; //Checksum byte 0
  465. CHECKSUM1: byte; //Checksum byte 1
  466. CHECKSUM2: byte; //Checksum byte 2
  467. CHECKSUM3: byte; //Checksum byte 3
  468. const
  469. // CRC_RESET
  470. RESETmask = $C0;
  471. RESET_NO = $00;
  472. RESET_RESET0 = $80;
  473. RESET_RESET1 = $C0;
  474. // CRC Mode
  475. CRC32bm = $20;
  476. // CRC_SOURCE
  477. SOURCEmask = $0F;
  478. SOURCE_DISABLE = $00;
  479. SOURCE_IO = $01;
  480. SOURCE_FLASH = $02;
  481. SOURCE_DMAC0 = $04;
  482. SOURCE_DMAC1 = $05;
  483. SOURCE_DMAC2 = $06;
  484. SOURCE_DMAC3 = $07;
  485. // Zero detection
  486. ZERObm = $02;
  487. // Busy
  488. BUSYbm = $01;
  489. end;
  490. TEDMA_CH = object //EDMA Channel
  491. CTRLA: byte; //Channel Control A
  492. CTRLB: byte; //Channel Control
  493. ADDRCTRL: byte; //Memory Address Control for Peripheral Ch., or Source Address Control for Standard Ch.
  494. DESTADDRCTRL: byte; //Destination Address Control for Standard Channels Only.
  495. TRIGSRC: byte; //Channel Trigger Source
  496. Reserved5: byte;
  497. TRFCNT: word; //Channel Block Transfer Count for Peripheral Ch., or Channel Block Transfer Count Low for Standard Ch.
  498. ADDR: word; //Channel Memory Address for Peripheral Ch., or Channel Source Address Low for Standard Ch.
  499. Reserved10: byte;
  500. Reserved11: byte;
  501. DESTADDR: word; //Channel Destination Address for Standard Channels Only.
  502. const
  503. // Channel Enable
  504. ENABLEbm = $80;
  505. // Channel Software Reset
  506. RESETbm = $40;
  507. // Channel Repeat Mode
  508. REPEATbm = $20;
  509. // Channel Transfer Request
  510. TRFREQbm = $10;
  511. // Channel Single Shot Data Transfer
  512. SINGLEbm = $04;
  513. // Channel 2-bytes Burst Length
  514. BURSTLENbm = $01;
  515. // Channel Block Transfer Busy
  516. CHBUSYbm = $80;
  517. // Channel Block Transfer Pending
  518. CHPENDbm = $40;
  519. // Channel Transaction Error Interrupt Flag
  520. ERRIFbm = $20;
  521. // Channel Transaction Complete Interrupt Flag
  522. TRNIFbm = $10;
  523. // ERRINTLVL
  524. ERRINTLVLmask = $0C;
  525. ERRINTLVLOFF = $00;
  526. ERRINTLVLLO = $04;
  527. ERRINTLVLMED = $08;
  528. ERRINTLVLHI = $0C;
  529. // TRNINTLVL
  530. TRNINTLVLmask = $03;
  531. TRNINTLVLOFF = $00;
  532. TRNINTLVLLO = $01;
  533. TRNINTLVLMED = $02;
  534. TRNINTLVLHI = $03;
  535. // RELOAD
  536. RELOADmask = $30;
  537. RELOADNONE = $00;
  538. RELOADBLOCK = $10;
  539. RELOADBURST = $20;
  540. RELOADTRANSACTION = $30;
  541. // DIR
  542. DIRmask = $07;
  543. DIRFIXED = $00;
  544. DIRINC = $01;
  545. DIRMP1 = $04;
  546. DIRMP2 = $05;
  547. DIRMP3 = $06;
  548. // DESTRELOAD
  549. DESTRELOADmask = $30;
  550. DESTRELOADNONE = $00;
  551. DESTRELOADBLOCK = $10;
  552. DESTRELOADBURST = $20;
  553. DESTRELOADTRANSACTION = $30;
  554. // DESTDIR
  555. DESTDIRmask = $07;
  556. DESTDIRFIXED = $00;
  557. DESTDIRINC = $01;
  558. DESTDIRMP1 = $04;
  559. DESTDIRMP2 = $05;
  560. DESTDIRMP3 = $06;
  561. // TRIGSRC
  562. TRIGSRCmask = $FF;
  563. TRIGSRCOFF = $00;
  564. TRIGSRCEVSYS_CH0 = $01;
  565. TRIGSRCEVSYS_CH1 = $02;
  566. TRIGSRCEVSYS_CH2 = $03;
  567. TRIGSRCADCA_CH0 = $10;
  568. TRIGSRCDACA_CH0 = $15;
  569. TRIGSRCDACA_CH1 = $16;
  570. TRIGSRCTCC4_OVF = $40;
  571. TRIGSRCTCC4_ERR = $41;
  572. TRIGSRCTCC4_CCA = $42;
  573. TRIGSRCTCC4_CCB = $43;
  574. TRIGSRCTCC4_CCC = $44;
  575. TRIGSRCTCC4_CCD = $45;
  576. TRIGSRCTCC5_OVF = $46;
  577. TRIGSRCTCC5_ERR = $47;
  578. TRIGSRCTCC5_CCA = $48;
  579. TRIGSRCTCC5_CCB = $49;
  580. TRIGSRCSPIC_RXC = $4A;
  581. TRIGSRCSPIC_DRE = $4B;
  582. TRIGSRCUSARTC0_RXC = $4C;
  583. TRIGSRCUSARTC0_DRE = $4D;
  584. TRIGSRCTCD5_OVF = $66;
  585. TRIGSRCTCD5_ERR = $67;
  586. TRIGSRCTCD5_CCA = $68;
  587. TRIGSRCTCD5_CCB = $69;
  588. TRIGSRCUSARTD0_RXC = $6C;
  589. TRIGSRCUSARTD0_DRE = $6D;
  590. end;
  591. TEDMA = object //Enhanced DMA Controller
  592. CTRL: byte; //Control
  593. Reserved1: byte;
  594. Reserved2: byte;
  595. INTFLAGS: byte; //Transfer Interrupt Status
  596. STATUS: byte; //Status
  597. Reserved5: byte;
  598. TEMP: byte; //Temporary Register For 16-bit Access
  599. Reserved7: byte;
  600. Reserved8: byte;
  601. Reserved9: byte;
  602. Reserved10: byte;
  603. Reserved11: byte;
  604. Reserved12: byte;
  605. Reserved13: byte;
  606. Reserved14: byte;
  607. Reserved15: byte;
  608. CH0: TEDMA_CH; //EDMA Channel 0
  609. CH1: TEDMA_CH; //EDMA Channel 1
  610. CH2: TEDMA_CH; //EDMA Channel 2
  611. CH3: TEDMA_CH; //EDMA Channel 3
  612. const
  613. // Enable
  614. ENABLEbm = $80;
  615. // Software Reset
  616. RESETbm = $40;
  617. // EDMA_CHMODE
  618. CHMODEmask = $30;
  619. CHMODE_PER0123 = $00;
  620. CHMODE_STD0 = $10;
  621. CHMODE_STD2 = $20;
  622. CHMODE_STD02 = $30;
  623. // EDMA_DBUFMODE
  624. DBUFMODEmask = $0C;
  625. DBUFMODE_DISABLE = $00;
  626. DBUFMODE_BUF01 = $04;
  627. DBUFMODE_BUF23 = $08;
  628. DBUFMODE_BUF0123 = $0C;
  629. // EDMA_PRIMODE
  630. PRIMODEmask = $03;
  631. PRIMODE_RR0123 = $00;
  632. PRIMODE_RR123 = $01;
  633. PRIMODE_RR23 = $02;
  634. PRIMODE_CH0123 = $03;
  635. // Channel 3 Transaction Error Interrupt Flag
  636. CH3ERRIFbm = $80;
  637. // Channel 2 Transaction Error Interrupt Flag
  638. CH2ERRIFbm = $40;
  639. // Channel 1 Transaction Error Interrupt Flag
  640. CH1ERRIFbm = $20;
  641. // Channel 0 Transaction Error Interrupt Flag
  642. CH0ERRIFbm = $10;
  643. // Channel 3 Transaction Complete Interrupt Flag
  644. CH3TRNFIFbm = $08;
  645. // Channel 2 Transaction Complete Interrupt Flag
  646. CH2TRNFIFbm = $04;
  647. // Channel 1 Transaction Complete Interrupt Flag
  648. CH1TRNFIFbm = $02;
  649. // Channel 0 Transaction Complete Interrupt Flag
  650. CH0TRNFIFbm = $01;
  651. // Channel 3 Busy Flag
  652. CH3BUSYbm = $80;
  653. // Channel 2 Busy Flag
  654. CH2BUSYbm = $40;
  655. // Channel 1 Busy Flag
  656. CH1BUSYbm = $20;
  657. // Channel 0 Busy Flag
  658. CH0BUSYbm = $10;
  659. // Channel 3 Pending Flag
  660. CH3PENDbm = $08;
  661. // Channel 2 Pending Flag
  662. CH2PENDbm = $04;
  663. // Channel 1 Pending Flag
  664. CH1PENDbm = $02;
  665. // Channel 0 Pending Flag
  666. CH0PENDbm = $01;
  667. end;
  668. TEVSYS = object //Event System
  669. CH0MUX: byte; //Event Channel 0 Multiplexer
  670. CH1MUX: byte; //Event Channel 1 Multiplexer
  671. CH2MUX: byte; //Event Channel 2 Multiplexer
  672. CH3MUX: byte; //Event Channel 3 Multiplexer
  673. CH4MUX: byte; //Event Channel 4 Multiplexer
  674. CH5MUX: byte; //Event Channel 5 Multiplexer
  675. CH6MUX: byte; //Event Channel 6 Multiplexer
  676. CH7MUX: byte; //Event Channel 7 Multiplexer
  677. CH0CTRL: byte; //Channel 0 Control Register
  678. CH1CTRL: byte; //Channel 1 Control Register
  679. CH2CTRL: byte; //Channel 2 Control Register
  680. CH3CTRL: byte; //Channel 3 Control Register
  681. CH4CTRL: byte; //Channel 4 Control Register
  682. CH5CTRL: byte; //Channel 5 Control Register
  683. CH6CTRL: byte; //Channel 6 Control Register
  684. CH7CTRL: byte; //Channel 7 Control Register
  685. STROBE: byte; //Event Strobe
  686. DATA: byte; //Event Data
  687. DFCTRL: byte; //Digital Filter Control Register
  688. const
  689. // EVSYS_CHMUX
  690. CHMUXmask = $FF;
  691. CHMUX_OFF = $00;
  692. CHMUX_RTC_OVF = $08;
  693. CHMUX_RTC_CMP = $09;
  694. CHMUX_ACA_CH0 = $10;
  695. CHMUX_ACA_CH1 = $11;
  696. CHMUX_ACA_WIN = $12;
  697. CHMUX_ADCA_CH0 = $20;
  698. CHMUX_PORTA_PIN0 = $50;
  699. CHMUX_PORTA_PIN1 = $51;
  700. CHMUX_PORTA_PIN2 = $52;
  701. CHMUX_PORTA_PIN3 = $53;
  702. CHMUX_PORTA_PIN4 = $54;
  703. CHMUX_PORTA_PIN5 = $55;
  704. CHMUX_PORTA_PIN6 = $56;
  705. CHMUX_PORTA_PIN7 = $57;
  706. CHMUX_PORTC_PIN0 = $60;
  707. CHMUX_PORTC_PIN1 = $61;
  708. CHMUX_PORTC_PIN2 = $62;
  709. CHMUX_PORTC_PIN3 = $63;
  710. CHMUX_PORTC_PIN4 = $64;
  711. CHMUX_PORTC_PIN5 = $65;
  712. CHMUX_PORTC_PIN6 = $66;
  713. CHMUX_PORTC_PIN7 = $67;
  714. CHMUX_PORTD_PIN0 = $68;
  715. CHMUX_PORTD_PIN1 = $69;
  716. CHMUX_PORTD_PIN2 = $6A;
  717. CHMUX_PORTD_PIN3 = $6B;
  718. CHMUX_PORTD_PIN4 = $6C;
  719. CHMUX_PORTD_PIN5 = $6D;
  720. CHMUX_PORTD_PIN6 = $6E;
  721. CHMUX_PORTD_PIN7 = $6F;
  722. CHMUX_PRESCALER_1 = $80;
  723. CHMUX_PRESCALER_2 = $81;
  724. CHMUX_PRESCALER_4 = $82;
  725. CHMUX_PRESCALER_8 = $83;
  726. CHMUX_PRESCALER_16 = $84;
  727. CHMUX_PRESCALER_32 = $85;
  728. CHMUX_PRESCALER_64 = $86;
  729. CHMUX_PRESCALER_128 = $87;
  730. CHMUX_PRESCALER_256 = $88;
  731. CHMUX_PRESCALER_512 = $89;
  732. CHMUX_PRESCALER_1024 = $8A;
  733. CHMUX_PRESCALER_2048 = $8B;
  734. CHMUX_PRESCALER_4096 = $8C;
  735. CHMUX_PRESCALER_8192 = $8D;
  736. CHMUX_PRESCALER_16384 = $8E;
  737. CHMUX_PRESCALER_32768 = $8F;
  738. CHMUX_XCL_UNF0 = $B0;
  739. CHMUX_XCL_UNF1 = $B1;
  740. CHMUX_XCL_CC0 = $B2;
  741. CHMUX_XCL_CC1 = $B3;
  742. CHMUX_XCL_PEC0 = $B4;
  743. CHMUX_XCL_PEC1 = $B5;
  744. CHMUX_XCL_LUT0 = $B6;
  745. CHMUX_XCL_LUT1 = $B7;
  746. CHMUX_TCC4_OVF = $C0;
  747. CHMUX_TCC4_ERR = $C1;
  748. CHMUX_TCC4_CCA = $C4;
  749. CHMUX_TCC4_CCB = $C5;
  750. CHMUX_TCC4_CCC = $C6;
  751. CHMUX_TCC4_CCD = $C7;
  752. CHMUX_TCC5_OVF = $C8;
  753. CHMUX_TCC5_ERR = $C9;
  754. CHMUX_TCC5_CCA = $CC;
  755. CHMUX_TCC5_CCB = $CD;
  756. CHMUX_TCD5_OVF = $D8;
  757. CHMUX_TCD5_ERR = $D9;
  758. CHMUX_TCD5_CCA = $DC;
  759. CHMUX_TCD5_CCB = $DD;
  760. // Rotary Decoder Enable
  761. ROTARYbm = $80;
  762. // EVSYS_QDIRM
  763. QDIRMmask = $60;
  764. QDIRM_00 = $00;
  765. QDIRM_01 = $20;
  766. QDIRM_10 = $40;
  767. QDIRM_11 = $60;
  768. // Quadrature Decoder Index Enable
  769. QDIENbm = $10;
  770. // Quadrature Decoder Enable
  771. QDENbm = $08;
  772. // EVSYS_DIGFILT
  773. DIGFILTmask = $07;
  774. DIGFILT_1SAMPLE = $00;
  775. DIGFILT_2SAMPLES = $01;
  776. DIGFILT_3SAMPLES = $02;
  777. DIGFILT_4SAMPLES = $03;
  778. DIGFILT_5SAMPLES = $04;
  779. DIGFILT_6SAMPLES = $05;
  780. DIGFILT_7SAMPLES = $06;
  781. DIGFILT_8SAMPLES = $07;
  782. // EVSYS_PRESCFILT
  783. PRESCFILTmask = $F0;
  784. PRESCFILT_CH04 = $10;
  785. PRESCFILT_CH15 = $20;
  786. PRESCFILT_CH26 = $40;
  787. PRESCFILT_CH37 = $80;
  788. // Prescaler Filter Select
  789. FILTSELbm = $08;
  790. // PRESC
  791. PRESCmask = $07;
  792. PRESCCLKPER_8 = $00;
  793. PRESCCLKPER_64 = $01;
  794. PRESCCLKPER_512 = $02;
  795. PRESCCLKPER_4096 = $03;
  796. PRESCCLKPER_32768 = $04;
  797. end;
  798. TNVM = object //Non-volatile Memory Controller
  799. ADDR0: byte; //Address Register 0
  800. ADDR1: byte; //Address Register 1
  801. ADDR2: byte; //Address Register 2
  802. Reserved3: byte;
  803. DATA0: byte; //Data Register 0
  804. DATA1: byte; //Data Register 1
  805. DATA2: byte; //Data Register 2
  806. Reserved7: byte;
  807. Reserved8: byte;
  808. Reserved9: byte;
  809. CMD: byte; //Command
  810. CTRLA: byte; //Control Register A
  811. CTRLB: byte; //Control Register B
  812. INTCTRL: byte; //Interrupt Control
  813. Reserved14: byte;
  814. STATUS: byte; //Status
  815. LOCKBITS: byte; //Lock Bits
  816. const
  817. // NVM_CMD
  818. CMDmask = $7F;
  819. CMD_NO_OPERATION = $00;
  820. CMD_READ_USER_SIG_ROW = $01;
  821. CMD_READ_CALIB_ROW = $02;
  822. CMD_READ_FUSES = $07;
  823. CMD_WRITE_LOCK_BITS = $08;
  824. CMD_ERASE_USER_SIG_ROW = $18;
  825. CMD_WRITE_USER_SIG_ROW = $1A;
  826. CMD_ERASE_APP = $20;
  827. CMD_ERASE_APP_PAGE = $22;
  828. CMD_LOAD_FLASH_BUFFER = $23;
  829. CMD_WRITE_APP_PAGE = $24;
  830. CMD_ERASE_WRITE_APP_PAGE = $25;
  831. CMD_ERASE_FLASH_BUFFER = $26;
  832. CMD_ERASE_BOOT_PAGE = $2A;
  833. CMD_ERASE_FLASH_PAGE = $2B;
  834. CMD_WRITE_BOOT_PAGE = $2C;
  835. CMD_ERASE_WRITE_BOOT_PAGE = $2D;
  836. CMD_WRITE_FLASH_PAGE = $2E;
  837. CMD_ERASE_WRITE_FLASH_PAGE = $2F;
  838. CMD_ERASE_EEPROM = $30;
  839. CMD_ERASE_EEPROM_PAGE = $32;
  840. CMD_WRITE_EEPROM_PAGE = $34;
  841. CMD_ERASE_WRITE_EEPROM_PAGE = $35;
  842. CMD_ERASE_EEPROM_BUFFER = $36;
  843. CMD_APP_CRC = $38;
  844. CMD_BOOT_CRC = $39;
  845. CMD_FLASH_RANGE_CRC = $3A;
  846. CMD_CHIP_ERASE = $40;
  847. CMD_READ_NVM = $43;
  848. CMD_WRITE_FUSE = $4C;
  849. CMD_ERASE_BOOT = $68;
  850. CMD_FLASH_CRC = $78;
  851. // Command Execute
  852. CMDEXbm = $01;
  853. // EEPROM Power Reduction Enable
  854. EPRMbm = $02;
  855. // SPM Lock
  856. SPMLOCKbm = $01;
  857. // NVM_SPMLVL
  858. SPMLVLmask = $0C;
  859. SPMLVL_OFF = $00;
  860. SPMLVL_LO = $04;
  861. SPMLVL_MED = $08;
  862. SPMLVL_HI = $0C;
  863. // NVM_EELVL
  864. EELVLmask = $03;
  865. EELVL_OFF = $00;
  866. EELVL_LO = $01;
  867. EELVL_MED = $02;
  868. EELVL_HI = $03;
  869. // Non-volatile Memory Busy
  870. NVMBUSYbm = $80;
  871. // Flash Memory Busy
  872. FBUSYbm = $40;
  873. // EEPROM Page Buffer Active Loading
  874. EELOADbm = $02;
  875. // Flash Page Buffer Active Loading
  876. FLOADbm = $01;
  877. // NVM_BLBB
  878. BLBBmask = $C0;
  879. BLBB_RWLOCK = $00;
  880. BLBB_RLOCK = $40;
  881. BLBB_WLOCK = $80;
  882. BLBB_NOLOCK = $C0;
  883. // NVM_BLBA
  884. BLBAmask = $30;
  885. BLBA_RWLOCK = $00;
  886. BLBA_RLOCK = $10;
  887. BLBA_WLOCK = $20;
  888. BLBA_NOLOCK = $30;
  889. // NVM_BLBAT
  890. BLBATmask = $0C;
  891. BLBAT_RWLOCK = $00;
  892. BLBAT_RLOCK = $04;
  893. BLBAT_WLOCK = $08;
  894. BLBAT_NOLOCK = $0C;
  895. // NVM_LB
  896. LBmask = $03;
  897. LB_RWLOCK = $00;
  898. LB_WLOCK = $02;
  899. LB_NOLOCK = $03;
  900. end;
  901. TADC_CH = object //ADC Channel
  902. CTRL: byte; //Control Register
  903. MUXCTRL: byte; //MUX Control
  904. INTCTRL: byte; //Channel Interrupt Control Register
  905. INTFLAGS: byte; //Interrupt Flags
  906. RES: word; //Channel Result
  907. SCAN: byte; //Input Channel Scan
  908. CORRCTRL: byte; //Correction Control Register
  909. OFFSETCORR0: byte; //Offset Correction Register 0
  910. OFFSETCORR1: byte; //Offset Correction Register 1
  911. GAINCORR0: byte; //Gain Correction Register 0
  912. GAINCORR1: byte; //Gain Correction Register 1
  913. AVGCTRL: byte; //Average Control Register
  914. const
  915. // Channel Start Conversion
  916. STARTbm = $80;
  917. // GAIN
  918. GAINmask = $1C;
  919. GAIN1X = $00;
  920. GAIN2X = $04;
  921. GAIN4X = $08;
  922. GAIN8X = $0C;
  923. GAIN16X = $10;
  924. GAIN32X = $14;
  925. GAIN64X = $18;
  926. GAINDIV2 = $1C;
  927. // INPUTMODE
  928. INPUTMODEmask = $03;
  929. INPUTMODEINTERNAL = $00;
  930. INPUTMODESINGLEENDED = $01;
  931. INPUTMODEDIFFWGAINL = $02;
  932. INPUTMODEDIFFWGAINH = $03;
  933. // MUXPOS
  934. MUXPOSmask = $78;
  935. MUXPOSPIN0 = $00;
  936. MUXPOSPIN1 = $08;
  937. MUXPOSPIN2 = $10;
  938. MUXPOSPIN3 = $18;
  939. MUXPOSPIN4 = $20;
  940. MUXPOSPIN5 = $28;
  941. MUXPOSPIN6 = $30;
  942. MUXPOSPIN7 = $38;
  943. MUXPOSPIN8 = $40;
  944. MUXPOSPIN9 = $48;
  945. MUXPOSPIN10 = $50;
  946. MUXPOSPIN11 = $58;
  947. MUXPOSPIN12 = $60;
  948. MUXPOSPIN13 = $68;
  949. MUXPOSPIN14 = $70;
  950. MUXPOSPIN15 = $78;
  951. // MUXINT
  952. MUXINTmask = $78;
  953. MUXINTTEMP = $00;
  954. MUXINTBANDGAP = $08;
  955. MUXINTSCALEDVCC = $10;
  956. MUXINTDAC = $18;
  957. // MUXNEG
  958. MUXNEGmask = $07;
  959. MUXNEGPIN0 = $00;
  960. MUXNEGPIN1 = $01;
  961. MUXNEGPIN2 = $02;
  962. MUXNEGPIN3 = $03;
  963. MUXNEGPIN4 = $00;
  964. MUXNEGPIN5 = $01;
  965. MUXNEGPIN6 = $02;
  966. MUXNEGPIN7 = $03;
  967. MUXNEGGND_MODE3 = $05;
  968. MUXNEGINTGND_MODE3 = $07;
  969. MUXNEGINTGND_MODE4 = $04;
  970. MUXNEGGND_MODE4 = $07;
  971. // INTMODE
  972. INTMODEmask = $0C;
  973. INTMODECOMPLETE = $00;
  974. INTMODEBELOW = $04;
  975. INTMODEABOVE = $0C;
  976. // INTLVL
  977. INTLVLmask = $03;
  978. INTLVLOFF = $00;
  979. INTLVLLO = $01;
  980. INTLVLMED = $02;
  981. INTLVLHI = $03;
  982. // Channel Interrupt Flag
  983. IFbm = $01;
  984. // Positive MUX Setting Offset
  985. INPUTOFFSET0bm = $10;
  986. INPUTOFFSET1bm = $20;
  987. INPUTOFFSET2bm = $40;
  988. INPUTOFFSET3bm = $80;
  989. // Number of Channels Included in Scan
  990. INPUTSCAN0bm = $01;
  991. INPUTSCAN1bm = $02;
  992. INPUTSCAN2bm = $04;
  993. INPUTSCAN3bm = $08;
  994. // Correction Enable
  995. CORRENbm = $01;
  996. // Offset Correction Byte 1
  997. OFFSETCORR0bm = $01;
  998. OFFSETCORR1bm = $02;
  999. OFFSETCORR2bm = $04;
  1000. OFFSETCORR3bm = $08;
  1001. // Gain Correction Byte 1
  1002. GAINCORR0bm = $01;
  1003. GAINCORR1bm = $02;
  1004. GAINCORR2bm = $04;
  1005. GAINCORR3bm = $08;
  1006. // Right Shift
  1007. RIGHTSHIFT0bm = $10;
  1008. RIGHTSHIFT1bm = $20;
  1009. RIGHTSHIFT2bm = $40;
  1010. // ADC_SAMPNUM
  1011. SAMPNUMmask = $0F;
  1012. SAMPNUM_1X = $00;
  1013. SAMPNUM_2X = $01;
  1014. SAMPNUM_4X = $02;
  1015. SAMPNUM_8X = $03;
  1016. SAMPNUM_16X = $04;
  1017. SAMPNUM_32X = $05;
  1018. SAMPNUM_64X = $06;
  1019. SAMPNUM_128X = $07;
  1020. SAMPNUM_256X = $08;
  1021. SAMPNUM_512X = $09;
  1022. SAMPNUM_1024X = $0A;
  1023. end;
  1024. TADC = object //Analog-to-Digital Converter
  1025. CTRLA: byte; //Control Register A
  1026. CTRLB: byte; //Control Register B
  1027. REFCTRL: byte; //Reference Control
  1028. EVCTRL: byte; //Event Control
  1029. PRESCALER: byte; //Clock Prescaler
  1030. Reserved5: byte;
  1031. INTFLAGS: byte; //Interrupt Flags
  1032. TEMP: byte; //Temporary Register
  1033. SAMPCTRL: byte; //ADC Sampling Time Control Register
  1034. Reserved9: byte;
  1035. Reserved10: byte;
  1036. Reserved11: byte;
  1037. CAL: byte; //Calibration Value
  1038. Reserved13: byte;
  1039. Reserved14: byte;
  1040. Reserved15: byte;
  1041. CH0RES: word; //Channel 0 Result
  1042. Reserved18: byte;
  1043. Reserved19: byte;
  1044. Reserved20: byte;
  1045. Reserved21: byte;
  1046. Reserved22: byte;
  1047. Reserved23: byte;
  1048. CMP: word; //Compare Value
  1049. Reserved26: byte;
  1050. Reserved27: byte;
  1051. Reserved28: byte;
  1052. Reserved29: byte;
  1053. Reserved30: byte;
  1054. Reserved31: byte;
  1055. CH0: TADC_CH; //ADC Channel 0
  1056. const
  1057. // Start Conversion
  1058. STARTbm = $04;
  1059. // ADC Flush
  1060. FLUSHbm = $02;
  1061. // Enable ADC
  1062. ENABLEbm = $01;
  1063. // ADC_CURRLIMIT
  1064. CURRLIMITmask = $60;
  1065. CURRLIMIT_NO = $00;
  1066. CURRLIMIT_LOW = $20;
  1067. CURRLIMIT_MED = $40;
  1068. CURRLIMIT_HIGH = $60;
  1069. // Conversion Mode
  1070. CONMODEbm = $10;
  1071. // Free Running Mode Enable
  1072. FREERUNbm = $08;
  1073. // ADC_RESOLUTION
  1074. RESOLUTIONmask = $06;
  1075. RESOLUTION_12BIT = $00;
  1076. RESOLUTION_MT12BIT = $02;
  1077. RESOLUTION_8BIT = $04;
  1078. RESOLUTION_LEFT12BIT = $06;
  1079. // ADC_REFSEL
  1080. REFSELmask = $70;
  1081. REFSEL_INT1V = $00;
  1082. REFSEL_INTVCC = $10;
  1083. REFSEL_AREFA = $20;
  1084. REFSEL_AREFD = $30;
  1085. REFSEL_INTVCC2 = $40;
  1086. // Bandgap enable
  1087. BANDGAPbm = $02;
  1088. // Temperature Reference Enable
  1089. TEMPREFbm = $01;
  1090. // ADC_EVSEL
  1091. EVSELmask = $38;
  1092. EVSEL_0 = $00;
  1093. EVSEL_1 = $08;
  1094. EVSEL_2 = $10;
  1095. EVSEL_3 = $18;
  1096. EVSEL_4 = $20;
  1097. EVSEL_5 = $28;
  1098. EVSEL_6 = $30;
  1099. EVSEL_7 = $38;
  1100. // ADC_EVACT
  1101. EVACTmask = $07;
  1102. EVACT_NONE = $00;
  1103. EVACT_CH0 = $01;
  1104. EVACT_SYNCSWEEP = $06;
  1105. // ADC_PRESCALER
  1106. PRESCALERmask = $07;
  1107. PRESCALER_DIV4 = $00;
  1108. PRESCALER_DIV8 = $01;
  1109. PRESCALER_DIV16 = $02;
  1110. PRESCALER_DIV32 = $03;
  1111. PRESCALER_DIV64 = $04;
  1112. PRESCALER_DIV128 = $05;
  1113. PRESCALER_DIV256 = $06;
  1114. PRESCALER_DIV512 = $07;
  1115. // Channel 0 Interrupt Flag
  1116. CH0IFbm = $01;
  1117. // Sampling time control register
  1118. SAMPVAL0bm = $01;
  1119. SAMPVAL1bm = $02;
  1120. SAMPVAL2bm = $04;
  1121. SAMPVAL3bm = $08;
  1122. SAMPVAL4bm = $10;
  1123. SAMPVAL5bm = $20;
  1124. end;
  1125. TDAC = object //Digital-to-Analog Converter
  1126. CTRLA: byte; //Control Register A
  1127. CTRLB: byte; //Control Register B
  1128. CTRLC: byte; //Control Register C
  1129. EVCTRL: byte; //Event Input Control
  1130. Reserved4: byte;
  1131. STATUS: byte; //Status
  1132. Reserved6: byte;
  1133. Reserved7: byte;
  1134. CH0GAINCAL: byte; //Gain Calibration
  1135. CH0OFFSETCAL: byte; //Offset Calibration
  1136. CH1GAINCAL: byte; //Gain Calibration
  1137. CH1OFFSETCAL: byte; //Offset Calibration
  1138. Reserved12: byte;
  1139. Reserved13: byte;
  1140. Reserved14: byte;
  1141. Reserved15: byte;
  1142. Reserved16: byte;
  1143. Reserved17: byte;
  1144. Reserved18: byte;
  1145. Reserved19: byte;
  1146. Reserved20: byte;
  1147. Reserved21: byte;
  1148. Reserved22: byte;
  1149. Reserved23: byte;
  1150. CH0DATA: word; //Channel 0 Data
  1151. CH1DATA: word; //Channel 1 Data
  1152. const
  1153. // Internal Output Enable
  1154. IDOENbm = $10;
  1155. // Channel 1 Output Enable
  1156. CH1ENbm = $08;
  1157. // Channel 0 Output Enable
  1158. CH0ENbm = $04;
  1159. // Low Power Mode
  1160. LPMODEbm = $02;
  1161. // Enable
  1162. ENABLEbm = $01;
  1163. // DAC_CHSEL
  1164. CHSELmask = $60;
  1165. CHSEL_SINGLE = $00;
  1166. CHSEL_SINGLE1 = $20;
  1167. CHSEL_DUAL = $40;
  1168. // Channel 1 Event Trig Enable
  1169. CH1TRIGbm = $02;
  1170. // Channel 0 Event Trig Enable
  1171. CH0TRIGbm = $01;
  1172. // DAC_REFSEL
  1173. REFSELmask = $18;
  1174. REFSEL_INT1V = $00;
  1175. REFSEL_AVCC = $08;
  1176. REFSEL_AREFA = $10;
  1177. REFSEL_AREFD = $18;
  1178. REFSEL_AREFB = $18;
  1179. // Left-adjust Result
  1180. LEFTADJbm = $01;
  1181. // Separate Event Channel Input for Channel 1
  1182. EVSPLITbm = $08;
  1183. // DAC_EVSEL
  1184. EVSELmask = $07;
  1185. EVSEL_0 = $00;
  1186. EVSEL_1 = $01;
  1187. EVSEL_2 = $02;
  1188. EVSEL_3 = $03;
  1189. EVSEL_4 = $04;
  1190. EVSEL_5 = $05;
  1191. EVSEL_6 = $06;
  1192. EVSEL_7 = $07;
  1193. // Channel 1 Data Register Empty
  1194. CH1DREbm = $02;
  1195. // Channel 0 Data Register Empty
  1196. CH0DREbm = $01;
  1197. // Gain Calibration
  1198. CH0GAINCAL0bm = $01;
  1199. CH0GAINCAL1bm = $02;
  1200. CH0GAINCAL2bm = $04;
  1201. CH0GAINCAL3bm = $08;
  1202. CH0GAINCAL4bm = $10;
  1203. CH0GAINCAL5bm = $20;
  1204. CH0GAINCAL6bm = $40;
  1205. // Offset Calibration
  1206. CH0OFFSETCAL0bm = $01;
  1207. CH0OFFSETCAL1bm = $02;
  1208. CH0OFFSETCAL2bm = $04;
  1209. CH0OFFSETCAL3bm = $08;
  1210. CH0OFFSETCAL4bm = $10;
  1211. CH0OFFSETCAL5bm = $20;
  1212. CH0OFFSETCAL6bm = $40;
  1213. // Gain Calibration
  1214. CH1GAINCAL0bm = $01;
  1215. CH1GAINCAL1bm = $02;
  1216. CH1GAINCAL2bm = $04;
  1217. CH1GAINCAL3bm = $08;
  1218. CH1GAINCAL4bm = $10;
  1219. CH1GAINCAL5bm = $20;
  1220. CH1GAINCAL6bm = $40;
  1221. // Offset Calibration
  1222. CH1OFFSETCAL0bm = $01;
  1223. CH1OFFSETCAL1bm = $02;
  1224. CH1OFFSETCAL2bm = $04;
  1225. CH1OFFSETCAL3bm = $08;
  1226. CH1OFFSETCAL4bm = $10;
  1227. CH1OFFSETCAL5bm = $20;
  1228. CH1OFFSETCAL6bm = $40;
  1229. end;
  1230. TAC = object //Analog Comparator
  1231. AC0CTRL: byte; //Analog Comparator 0 Control
  1232. AC1CTRL: byte; //Analog Comparator 1 Control
  1233. AC0MUXCTRL: byte; //Analog Comparator 0 MUX Control
  1234. AC1MUXCTRL: byte; //Analog Comparator 1 MUX Control
  1235. CTRLA: byte; //Control Register A
  1236. CTRLB: byte; //Control Register B
  1237. WINCTRL: byte; //Window Mode Control
  1238. STATUS: byte; //Status
  1239. CURRCTRL: byte; //Current Source Control Register
  1240. CURRCALIB: byte; //Current Source Calibration Register
  1241. const
  1242. // AC_INTMODE
  1243. INTMODEmask = $C0;
  1244. INTMODE_BOTHEDGES = $00;
  1245. INTMODE_FALLING = $80;
  1246. INTMODE_RISING = $C0;
  1247. // AC_INTLVL
  1248. INTLVLmask = $30;
  1249. INTLVL_OFF = $00;
  1250. INTLVL_LO = $10;
  1251. INTLVL_MED = $20;
  1252. INTLVL_HI = $30;
  1253. // AC_HYSMODE
  1254. HYSMODEmask = $06;
  1255. HYSMODE_NO = $00;
  1256. HYSMODE_SMALL = $02;
  1257. HYSMODE_LARGE = $04;
  1258. // Enable
  1259. ENABLEbm = $01;
  1260. // AC_MUXPOS
  1261. MUXPOSmask = $38;
  1262. MUXPOS_PIN0 = $00;
  1263. MUXPOS_PIN1 = $08;
  1264. MUXPOS_PIN2 = $10;
  1265. MUXPOS_PIN3 = $18;
  1266. MUXPOS_PIN4 = $20;
  1267. MUXPOS_PIN5 = $28;
  1268. MUXPOS_PIN6 = $30;
  1269. MUXPOS_DAC = $38;
  1270. // AC_MUXNEG
  1271. MUXNEGmask = $07;
  1272. MUXNEG_PIN0 = $00;
  1273. MUXNEG_PIN1 = $01;
  1274. MUXNEG_PIN3 = $02;
  1275. MUXNEG_PIN5 = $03;
  1276. MUXNEG_PIN7 = $04;
  1277. MUXNEG_DAC = $05;
  1278. MUXNEG_BANDGAP = $06;
  1279. MUXNEG_SCALER = $07;
  1280. // Analog Comparator 1 Output Invert Enable
  1281. AC1INVENbm = $08;
  1282. // Analog Comparator 0 Output Invert Enable
  1283. AC0INVENbm = $04;
  1284. // Analog Comparator 1 Output Enable
  1285. AC1OUTbm = $02;
  1286. // Analog Comparator 0 Output Enable
  1287. AC0OUTbm = $01;
  1288. // VCC Voltage Scaler Factor
  1289. SCALEFAC0bm = $01;
  1290. SCALEFAC1bm = $02;
  1291. SCALEFAC2bm = $04;
  1292. SCALEFAC3bm = $08;
  1293. SCALEFAC4bm = $10;
  1294. SCALEFAC5bm = $20;
  1295. // Window Mode Enable
  1296. WENbm = $10;
  1297. // AC_WINTMODE
  1298. WINTMODEmask = $0C;
  1299. WINTMODE_ABOVE = $00;
  1300. WINTMODE_INSIDE = $04;
  1301. WINTMODE_BELOW = $08;
  1302. WINTMODE_OUTSIDE = $0C;
  1303. // AC_WINTLVL
  1304. WINTLVLmask = $03;
  1305. WINTLVL_OFF = $00;
  1306. WINTLVL_LO = $01;
  1307. WINTLVL_MED = $02;
  1308. WINTLVL_HI = $03;
  1309. // AC_WSTATE
  1310. WSTATEmask = $C0;
  1311. WSTATE_ABOVE = $00;
  1312. WSTATE_INSIDE = $40;
  1313. WSTATE_BELOW = $80;
  1314. // Analog Comparator 1 State
  1315. AC1STATEbm = $20;
  1316. // Analog Comparator 0 State
  1317. AC0STATEbm = $10;
  1318. // Window Mode Interrupt Flag
  1319. WIFbm = $04;
  1320. // Analog Comparator 1 Interrupt Flag
  1321. AC1IFbm = $02;
  1322. // Analog Comparator 0 Interrupt Flag
  1323. AC0IFbm = $01;
  1324. // Current Source Enable
  1325. CURRENTbm = $80;
  1326. // Current Mode
  1327. CURRMODEbm = $40;
  1328. // Analog Comparator 1 current source output
  1329. AC1CURRbm = $02;
  1330. // Analog Comparator 0 current source output
  1331. AC0CURRbm = $01;
  1332. // Current Source Calibration
  1333. CALIB0bm = $01;
  1334. CALIB1bm = $02;
  1335. CALIB2bm = $04;
  1336. CALIB3bm = $08;
  1337. end;
  1338. TRTC = object //Real-Time Counter
  1339. CTRL: byte; //Control Register
  1340. STATUS: byte; //Status Register
  1341. INTCTRL: byte; //Interrupt Control Register
  1342. INTFLAGS: byte; //Interrupt Flags
  1343. TEMP: byte; //Temporary register
  1344. Reserved5: byte;
  1345. CALIB: byte; //Calibration Register
  1346. Reserved7: byte;
  1347. CNT: word; //Count Register
  1348. PER: word; //Period Register
  1349. COMP: word; //Compare Register
  1350. const
  1351. // Correction Enable
  1352. CORRENbm = $08;
  1353. // RTC_PRESCALER
  1354. PRESCALERmask = $07;
  1355. PRESCALER_OFF = $00;
  1356. PRESCALER_DIV1 = $01;
  1357. PRESCALER_DIV2 = $02;
  1358. PRESCALER_DIV8 = $03;
  1359. PRESCALER_DIV16 = $04;
  1360. PRESCALER_DIV64 = $05;
  1361. PRESCALER_DIV256 = $06;
  1362. PRESCALER_DIV1024 = $07;
  1363. // Synchronization Busy Flag
  1364. SYNCBUSYbm = $01;
  1365. // RTC_COMPINTLVL
  1366. COMPINTLVLmask = $0C;
  1367. COMPINTLVL_OFF = $00;
  1368. COMPINTLVL_LO = $04;
  1369. COMPINTLVL_MED = $08;
  1370. COMPINTLVL_HI = $0C;
  1371. // RTC_OVFINTLVL
  1372. OVFINTLVLmask = $03;
  1373. OVFINTLVL_OFF = $00;
  1374. OVFINTLVL_LO = $01;
  1375. OVFINTLVL_MED = $02;
  1376. OVFINTLVL_HI = $03;
  1377. // Compare Match Interrupt Flag
  1378. COMPIFbm = $02;
  1379. // Overflow Interrupt Flag
  1380. OVFIFbm = $01;
  1381. // Correction Sign
  1382. SIGNbm = $80;
  1383. // Error Value
  1384. ERROR0bm = $01;
  1385. ERROR1bm = $02;
  1386. ERROR2bm = $04;
  1387. ERROR3bm = $08;
  1388. ERROR4bm = $10;
  1389. ERROR5bm = $20;
  1390. ERROR6bm = $40;
  1391. end;
  1392. TXCL = object //XMEGA Custom Logic
  1393. CTRLA: byte; //Control Register A
  1394. CTRLB: byte; //Control Register B
  1395. CTRLC: byte; //Control Register C
  1396. CTRLD: byte; //Control Register D
  1397. CTRLE: byte; //Control Register E
  1398. CTRLF: byte; //Control Register F
  1399. CTRLG: byte; //Control Register G
  1400. INTCTRL: byte; //Interrupt Control Register
  1401. INTFLAGS: byte; //Interrupt Flag Register
  1402. PLC: byte; //Peripheral Length Control Register
  1403. CNTL: byte; //Counter Register Low
  1404. CNTH: byte; //Counter Register High
  1405. CMPL: byte; //Compare Register Low
  1406. CMPH: byte; //Compare Register High
  1407. PERCAPTL: byte; //Period or Capture Register Low
  1408. PERCAPTH: byte; //Period or Capture Register High
  1409. const
  1410. // XCL_LUT0OUTEN
  1411. LUT0OUTENmask = $C0;
  1412. LUT0OUTEN_DISABLE = $00;
  1413. LUT0OUTEN_PIN0 = $40;
  1414. LUT0OUTEN_PIN4 = $80;
  1415. // XCL_PORTSEL
  1416. PORTSELmask = $30;
  1417. PORTSEL_PC = $00;
  1418. PORTSEL_PD = $10;
  1419. // XCL_LUTCONF
  1420. LUTCONFmask = $07;
  1421. LUTCONF_2LUT2IN = $00;
  1422. LUTCONF_2LUT1IN = $01;
  1423. LUTCONF_2LUT3IN = $02;
  1424. LUTCONF_1LUT3IN = $03;
  1425. LUTCONF_MUX = $04;
  1426. LUTCONF_DLATCH = $05;
  1427. LUTCONF_RSLATCH = $06;
  1428. LUTCONF_DFF = $07;
  1429. // IN3SEL
  1430. IN3SELmask = $C0;
  1431. IN3SELEVSYS = $00;
  1432. IN3SELXCL = $40;
  1433. IN3SELPINL = $80;
  1434. IN3SELPINH = $C0;
  1435. // IN2SEL
  1436. IN2SELmask = $30;
  1437. IN2SELEVSYS = $00;
  1438. IN2SELXCL = $10;
  1439. IN2SELPINL = $20;
  1440. IN2SELPINH = $30;
  1441. // IN1SEL
  1442. IN1SELmask = $0C;
  1443. IN1SELEVSYS = $00;
  1444. IN1SELXCL = $04;
  1445. IN1SELPINL = $08;
  1446. IN1SELPINH = $0C;
  1447. // IN0SEL
  1448. IN0SELmask = $03;
  1449. IN0SELEVSYS = $00;
  1450. IN0SELXCL = $01;
  1451. IN0SELPINL = $02;
  1452. IN0SELPINH = $03;
  1453. // Asynchronous Event Line Selection for LUT1
  1454. EVASYSEL1bm = $80;
  1455. // Asynchronous Event Line Selection for LUT0
  1456. EVASYSEL0bm = $40;
  1457. // XCL_DLYSEL
  1458. DLYSELmask = $30;
  1459. DLYSEL_DLY11 = $00;
  1460. DLYSEL_DLY12 = $10;
  1461. DLYSEL_DLY21 = $20;
  1462. DLYSEL_DLY22 = $30;
  1463. // DLY1CONF
  1464. DLY1CONFmask = $0C;
  1465. DLY1CONFDISABLE = $00;
  1466. DLY1CONFIN = $04;
  1467. DLY1CONFOUT = $08;
  1468. // DLY0CONF
  1469. DLY0CONFmask = $03;
  1470. DLY0CONFDISABLE = $00;
  1471. DLY0CONFIN = $01;
  1472. DLY0CONFOUT = $02;
  1473. // Truth Table of LUT1
  1474. TRUTH10bm = $10;
  1475. TRUTH11bm = $20;
  1476. TRUTH12bm = $40;
  1477. TRUTH13bm = $80;
  1478. // Truth Table of LUT0
  1479. TRUTH00bm = $01;
  1480. TRUTH01bm = $02;
  1481. TRUTH02bm = $04;
  1482. TRUTH03bm = $08;
  1483. // XCL_CMDSEL
  1484. CMDSELmask = $80;
  1485. CMDSEL_NONE = $00;
  1486. CMDSEL_RESTART = $80;
  1487. // XCL_TCSEL
  1488. TCSELmask = $70;
  1489. TCSEL_TC16 = $00;
  1490. TCSEL_BTC0 = $10;
  1491. TCSEL_BTC01 = $20;
  1492. TCSEL_BTC0PEC1 = $30;
  1493. TCSEL_PEC0BTC1 = $40;
  1494. TCSEL_PEC01 = $50;
  1495. TCSEL_BTC0PEC2 = $60;
  1496. // XCL_CLKSEL
  1497. CLKSELmask = $0F;
  1498. CLKSEL_OFF = $00;
  1499. CLKSEL_DIV1 = $01;
  1500. CLKSEL_DIV2 = $02;
  1501. CLKSEL_DIV4 = $03;
  1502. CLKSEL_DIV8 = $04;
  1503. CLKSEL_DIV64 = $05;
  1504. CLKSEL_DIV256 = $06;
  1505. CLKSEL_DIV1024 = $07;
  1506. CLKSEL_EVCH0 = $08;
  1507. CLKSEL_EVCH1 = $09;
  1508. CLKSEL_EVCH2 = $0A;
  1509. CLKSEL_EVCH3 = $0B;
  1510. CLKSEL_EVCH4 = $0C;
  1511. CLKSEL_EVCH5 = $0D;
  1512. CLKSEL_EVCH6 = $0E;
  1513. CLKSEL_EVCH7 = $0F;
  1514. // XCL_CMDEN
  1515. CMDENmask = $C0;
  1516. CMDEN_DISABLE = $00;
  1517. CMDEN_CMD0 = $40;
  1518. CMDEN_CMD1 = $80;
  1519. CMDEN_CMD01 = $C0;
  1520. // CMP1
  1521. CMP1mask = $20;
  1522. CMP1CLEAR = $00;
  1523. CMP1SET = $20;
  1524. // CMP0
  1525. CMP0mask = $10;
  1526. CMP0CLEAR = $00;
  1527. CMP0SET = $10;
  1528. // Compare or Capture Channel 1 Enable
  1529. CCEN1bm = $08;
  1530. // Compare or Capture Channel 0 Enable
  1531. CCEN0bm = $04;
  1532. // MODE
  1533. MODEmask = $03;
  1534. MODENORMAL = $00;
  1535. MODECAPT = $01;
  1536. MODEPWM = $02;
  1537. MODE1SHOT = $03;
  1538. // Event Action Enable
  1539. EVACTENbm = $80;
  1540. // EVACT1
  1541. EVACT1mask = $60;
  1542. EVACT1INPUT = $00;
  1543. EVACT1FREQ = $20;
  1544. EVACT1PW = $40;
  1545. EVACT1RESTART = $60;
  1546. // EVACT0
  1547. EVACT0mask = $18;
  1548. EVACT0INPUT = $00;
  1549. EVACT0FREQ = $08;
  1550. EVACT0PW = $10;
  1551. EVACT0RESTART = $18;
  1552. // XCL_EVSRC
  1553. EVSRCmask = $07;
  1554. EVSRC_EVCH0 = $00;
  1555. EVSRC_EVCH1 = $01;
  1556. EVSRC_EVCH2 = $02;
  1557. EVSRC_EVCH3 = $03;
  1558. EVSRC_EVCH4 = $04;
  1559. EVSRC_EVCH5 = $05;
  1560. EVSRC_EVCH6 = $06;
  1561. EVSRC_EVCH7 = $07;
  1562. // Underflow 1 Interrupt Enable
  1563. UNF1IEbm = $80;
  1564. // Peripheral Counter 1 Interrupt Enable
  1565. PEC1IEbm = $80;
  1566. // Peripheral High Counter 2 Interrupt Enable
  1567. PEC21IEbm = $80;
  1568. // Underflow 0 Interrupt Enable
  1569. UNF0IEbm = $40;
  1570. // Peripheral Counter 0 Interrupt Enable
  1571. PEC0IEbm = $40;
  1572. // Compare Or Capture 1 Interrupt Enable
  1573. CC1IEbm = $20;
  1574. // Peripheral Low Counter 2 Interrupt Enable
  1575. PEC20IEbm = $20;
  1576. // Compare Or Capture 0 Interrupt Enable
  1577. CC0IEbm = $10;
  1578. // UNFINTLVL
  1579. UNFINTLVLmask = $0C;
  1580. UNFINTLVLOFF = $00;
  1581. UNFINTLVLLO = $04;
  1582. UNFINTLVLMED = $08;
  1583. UNFINTLVLHI = $0C;
  1584. // CCINTLVL
  1585. CCINTLVLmask = $03;
  1586. CCINTLVLOFF = $00;
  1587. CCINTLVLLO = $01;
  1588. CCINTLVLMED = $02;
  1589. CCINTLVLHI = $03;
  1590. // Timer/Counter 1 Underflow Interrupt Flag
  1591. UNF1IFbm = $80;
  1592. // Peripheral Counter 1 Interrupt Flag
  1593. PEC1IFbm = $80;
  1594. // Peripheral High Counter 2 Interrupt Flag
  1595. PEC21IFbm = $80;
  1596. // Timer/Counter 0 Underflow Interrupt Flag
  1597. UNF0IFbm = $40;
  1598. // Peripheral Counter 0 Interrupt Flag
  1599. PEC0IFbm = $40;
  1600. // Compare or Capture Channel 1 Interrupt Flag
  1601. CC1IFbm = $20;
  1602. // Peripheral Low Counter 2 Interrupt Flag
  1603. PEC20IFbm = $20;
  1604. // Compare or Capture Channel 0 Interrupt Flag
  1605. CC0IFbm = $10;
  1606. // Peripheral High Counter 2 Bits
  1607. PCNT210bm = $10;
  1608. PCNT211bm = $20;
  1609. PCNT212bm = $40;
  1610. PCNT213bm = $80;
  1611. // Peripheral Low Counter 2 Bits
  1612. PCNT200bm = $01;
  1613. PCNT201bm = $02;
  1614. PCNT202bm = $04;
  1615. PCNT203bm = $08;
  1616. end;
  1617. TTWI_MASTER = object //
  1618. CTRLA: byte; //Control Register A
  1619. CTRLB: byte; //Control Register B
  1620. CTRLC: byte; //Control Register C
  1621. STATUS: byte; //Status Register
  1622. BAUD: byte; //Baud Rate Control Register
  1623. ADDR: byte; //Address Register
  1624. DATA: byte; //Data Register
  1625. const
  1626. // INTLVL
  1627. INTLVLmask = $C0;
  1628. INTLVLOFF = $00;
  1629. INTLVLLO = $40;
  1630. INTLVLMED = $80;
  1631. INTLVLHI = $C0;
  1632. // Read Interrupt Enable
  1633. RIENbm = $20;
  1634. // Write Interrupt Enable
  1635. WIENbm = $10;
  1636. // Enable TWI Master
  1637. ENABLEbm = $08;
  1638. // TIMEOUT
  1639. TIMEOUTmask = $0C;
  1640. TIMEOUTDISABLED = $00;
  1641. TIMEOUT50US = $04;
  1642. TIMEOUT100US = $08;
  1643. TIMEOUT200US = $0C;
  1644. // Quick Command Enable
  1645. QCENbm = $02;
  1646. // Smart Mode Enable
  1647. SMENbm = $01;
  1648. // Ttimeout Enable
  1649. TTOUTENbm = $10;
  1650. // Slave Extend Timeout Enable
  1651. TSEXTENbm = $20;
  1652. // Master Extend Timeout Enable
  1653. TMEXTENbm = $40;
  1654. // Timeout Interrupt Enable
  1655. TOIEbm = $80;
  1656. // Acknowledge Action
  1657. ACKACTbm = $04;
  1658. // CMD
  1659. CMDmask = $03;
  1660. CMDNOACT = $00;
  1661. CMDREPSTART = $01;
  1662. CMDRECVTRANS = $02;
  1663. CMDSTOP = $03;
  1664. // Read Interrupt Flag
  1665. RIFbm = $80;
  1666. // Write Interrupt Flag
  1667. WIFbm = $40;
  1668. // Clock Hold
  1669. CLKHOLDbm = $20;
  1670. // Received Acknowledge
  1671. RXACKbm = $10;
  1672. // Arbitration Lost
  1673. ARBLOSTbm = $08;
  1674. // Bus Error
  1675. BUSERRbm = $04;
  1676. // BUSSTATE
  1677. BUSSTATEmask = $03;
  1678. BUSSTATEUNKNOWN = $00;
  1679. BUSSTATEIDLE = $01;
  1680. BUSSTATEOWNER = $02;
  1681. BUSSTATEBUSY = $03;
  1682. end;
  1683. TTWI_SLAVE = object //
  1684. CTRLA: byte; //Control Register A
  1685. CTRLB: byte; //Control Register B
  1686. STATUS: byte; //Status Register
  1687. ADDR: byte; //Address Register
  1688. DATA: byte; //Data Register
  1689. ADDRMASK: byte; //Address Mask Register
  1690. const
  1691. // INTLVL
  1692. INTLVLmask = $C0;
  1693. INTLVLOFF = $00;
  1694. INTLVLLO = $40;
  1695. INTLVLMED = $80;
  1696. INTLVLHI = $C0;
  1697. // Data Interrupt Enable
  1698. DIENbm = $20;
  1699. // Address/Stop Interrupt Enable
  1700. APIENbm = $10;
  1701. // Enable TWI Slave
  1702. ENABLEbm = $08;
  1703. // Stop Interrupt Enable
  1704. PIENbm = $04;
  1705. // Promiscuous Mode Enable
  1706. PMENbm = $02;
  1707. // Smart Mode Enable
  1708. SMENbm = $01;
  1709. // Acknowledge Action
  1710. ACKACTbm = $04;
  1711. // CMD
  1712. CMDmask = $03;
  1713. CMDNOACT = $00;
  1714. CMDCOMPTRANS = $02;
  1715. CMDRESPONSE = $03;
  1716. // Ttimeout Enable
  1717. TTOUTENbm = $10;
  1718. // Timeout Interrupt Enable
  1719. TOIEbm = $80;
  1720. // Data Interrupt Flag
  1721. DIFbm = $80;
  1722. // Address/Stop Interrupt Flag
  1723. APIFbm = $40;
  1724. // Clock Hold
  1725. CLKHOLDbm = $20;
  1726. // Received Acknowledge
  1727. RXACKbm = $10;
  1728. // Collision
  1729. COLLbm = $08;
  1730. // Bus Error
  1731. BUSERRbm = $04;
  1732. // Read/Write Direction
  1733. DIRbm = $02;
  1734. // Slave Address or Stop
  1735. APbm = $01;
  1736. // Address Mask
  1737. ADDRMASK0bm = $02;
  1738. ADDRMASK1bm = $04;
  1739. ADDRMASK2bm = $08;
  1740. ADDRMASK3bm = $10;
  1741. ADDRMASK4bm = $20;
  1742. ADDRMASK5bm = $40;
  1743. ADDRMASK6bm = $80;
  1744. // Address Enable
  1745. ADDRENbm = $01;
  1746. end;
  1747. TTWI_TIMEOUT = object //
  1748. TOS: byte; //Timeout Status Register
  1749. TOCONF: byte; //Timeout Configuration Register
  1750. const
  1751. // Master Ttimeout Interrupt Flag
  1752. TTOUTMIFbm = $01;
  1753. // Slave Extend Interrupt Flag
  1754. TSEXTIFbm = $02;
  1755. // Master Extend Interrupt Flag
  1756. TMEXTIFbm = $04;
  1757. // Slave Ttimeout Interrupt Flag
  1758. TTOUTSIFbm = $10;
  1759. // TTOUTMSEL
  1760. TTOUTMSELmask = $07;
  1761. TTOUTMSEL25MS = $00;
  1762. TTOUTMSEL24MS = $01;
  1763. TTOUTMSEL23MS = $02;
  1764. TTOUTMSEL22MS = $03;
  1765. TTOUTMSEL26MS = $04;
  1766. TTOUTMSEL27MS = $05;
  1767. TTOUTMSEL28MS = $06;
  1768. TTOUTMSEL29MS = $07;
  1769. // TMSEXTSEL
  1770. TMSEXTSELmask = $18;
  1771. TMSEXTSEL10MS25MS = $00;
  1772. TMSEXTSEL9MS24MS = $08;
  1773. TMSEXTSEL11MS26MS = $10;
  1774. TMSEXTSEL12MS27MS = $18;
  1775. // TTOUTSSEL
  1776. TTOUTSSELmask = $E0;
  1777. TTOUTSSEL25MS = $00;
  1778. TTOUTSSEL24MS = $20;
  1779. TTOUTSSEL23MS = $40;
  1780. TTOUTSSEL22MS = $60;
  1781. TTOUTSSEL26MS = $80;
  1782. TTOUTSSEL27MS = $A0;
  1783. TTOUTSSEL28MS = $C0;
  1784. TTOUTSSEL29MS = $E0;
  1785. end;
  1786. TTWI = object //Two-Wire Interface
  1787. CTRL: byte; //TWI Common Control Register
  1788. MASTER: TTWI_MASTER; //TWI master module
  1789. SLAVE: TTWI_SLAVE; //TWI slave module
  1790. TIMEOUT: word; //TWI SMBUS timeout module
  1791. const
  1792. // Bridge Enable
  1793. BRIDGEENbm = $80;
  1794. // Slave Fast Mode Plus Enable
  1795. SFMPENbm = $40;
  1796. // SSDAHOLD
  1797. SSDAHOLDmask = $30;
  1798. SSDAHOLDOFF = $00;
  1799. SSDAHOLD50NS = $10;
  1800. SSDAHOLD300NS = $20;
  1801. SSDAHOLD400NS = $30;
  1802. // FMPLUS Enable
  1803. FMPENbm = $08;
  1804. // TWI_SDAHOLD
  1805. SDAHOLDmask = $06;
  1806. SDAHOLD_OFF = $00;
  1807. SDAHOLD_50NS = $02;
  1808. SDAHOLD_300NS = $04;
  1809. SDAHOLD_400NS = $06;
  1810. // External Driver Interface Enable
  1811. EDIENbm = $01;
  1812. end;
  1813. TPORT = object //I/O Ports
  1814. DIR: byte; //I/O Port Data Direction
  1815. DIRSET: byte; //I/O Port Data Direction Set
  1816. DIRCLR: byte; //I/O Port Data Direction Clear
  1817. DIRTGL: byte; //I/O Port Data Direction Toggle
  1818. OUT_: byte; //I/O Port Output
  1819. OUTSET: byte; //I/O Port Output Set
  1820. OUTCLR: byte; //I/O Port Output Clear
  1821. OUTTGL: byte; //I/O Port Output Toggle
  1822. IN_: byte; //I/O port Input
  1823. INTCTRL: byte; //Interrupt Control Register
  1824. INTMASK: byte; //Port Interrupt Mask
  1825. Reserved11: byte;
  1826. INTFLAGS: byte; //Interrupt Flag Register
  1827. Reserved13: byte;
  1828. REMAP: byte; //Pin Remap Register
  1829. Reserved15: byte;
  1830. PIN0CTRL: byte; //Pin 0 Control Register
  1831. PIN1CTRL: byte; //Pin 1 Control Register
  1832. PIN2CTRL: byte; //Pin 2 Control Register
  1833. PIN3CTRL: byte; //Pin 3 Control Register
  1834. PIN4CTRL: byte; //Pin 4 Control Register
  1835. PIN5CTRL: byte; //Pin 5 Control Register
  1836. PIN6CTRL: byte; //Pin 6 Control Register
  1837. PIN7CTRL: byte; //Pin 7 Control Register
  1838. const
  1839. // PORT_INTLVL
  1840. INTLVLmask = $03;
  1841. INTLVL_OFF = $00;
  1842. INTLVL_LO = $01;
  1843. INTLVL_MED = $02;
  1844. INTLVL_HI = $03;
  1845. // Pin 7 Interrupt Flag
  1846. INT7IFbm = $80;
  1847. // Pin 6 Interrupt Flag
  1848. INT6IFbm = $40;
  1849. // Pin 5 Interrupt Flag
  1850. INT5IFbm = $20;
  1851. // Pin 4 Interrupt Flag
  1852. INT4IFbm = $10;
  1853. // Pin 3 Interrupt Flag
  1854. INT3IFbm = $08;
  1855. // Pin 2 Interrupt Flag
  1856. INT2IFbm = $04;
  1857. // Pin 1 Interrupt Flag
  1858. INT1IFbm = $02;
  1859. // Pin 0 Interrupt Flag
  1860. INT0IFbm = $01;
  1861. // Usart0
  1862. USART0bm = $10;
  1863. // Timer/Counter 4 Output Compare D
  1864. TC4Dbm = $08;
  1865. // Timer/Counter 4 Output Compare C
  1866. TC4Cbm = $04;
  1867. // Timer/Counter 4 Output Compare B
  1868. TC4Bbm = $02;
  1869. // Timer/Counter 4 Output Compare A
  1870. TC4Abm = $01;
  1871. // Inverted I/O Enable
  1872. INVENbm = $40;
  1873. // PORT_OPC
  1874. OPCmask = $38;
  1875. OPC_TOTEM = $00;
  1876. OPC_BUSKEEPER = $08;
  1877. OPC_PULLDOWN = $10;
  1878. OPC_PULLUP = $18;
  1879. OPC_WIREDOR = $20;
  1880. OPC_WIREDAND = $28;
  1881. OPC_WIREDORPULL = $30;
  1882. OPC_WIREDANDPULL = $38;
  1883. // PORT_ISC
  1884. ISCmask = $07;
  1885. ISC_BOTHEDGES = $00;
  1886. ISC_RISING = $01;
  1887. ISC_FALLING = $02;
  1888. ISC_LEVEL = $03;
  1889. ISC_FORCE_ENABLE = $06;
  1890. ISC_INPUT_DISABLE = $07;
  1891. end;
  1892. TTC4 = object //16-bit Timer/Counter 4
  1893. CTRLA: byte; //Control Register A
  1894. CTRLB: byte; //Control Register B
  1895. CTRLC: byte; //Control register C
  1896. CTRLD: byte; //Control Register D
  1897. CTRLE: byte; //Control Register E
  1898. CTRLF: byte; //Control Register F
  1899. INTCTRLA: byte; //Interrupt Control Register A
  1900. INTCTRLB: byte; //Interrupt Control Register B
  1901. CTRLGCLR: byte; //Control Register G Clear
  1902. CTRLGSET: byte; //Control Register G Set
  1903. CTRLHCLR: byte; //Control Register H Clear
  1904. CTRLHSET: byte; //Control Register H Set
  1905. INTFLAGS: byte; //Interrupt Flag Register
  1906. Reserved13: byte;
  1907. Reserved14: byte;
  1908. TEMP: byte; //Temporary Register For 16-bit Access
  1909. Reserved16: byte;
  1910. Reserved17: byte;
  1911. Reserved18: byte;
  1912. Reserved19: byte;
  1913. Reserved20: byte;
  1914. Reserved21: byte;
  1915. Reserved22: byte;
  1916. Reserved23: byte;
  1917. Reserved24: byte;
  1918. Reserved25: byte;
  1919. Reserved26: byte;
  1920. Reserved27: byte;
  1921. Reserved28: byte;
  1922. Reserved29: byte;
  1923. Reserved30: byte;
  1924. Reserved31: byte;
  1925. CNT: word; //Count
  1926. Reserved34: byte;
  1927. Reserved35: byte;
  1928. Reserved36: byte;
  1929. Reserved37: byte;
  1930. PER: word; //Period
  1931. CCA: word; //Compare or Capture A
  1932. CCB: word; //Compare or Capture B
  1933. CCC: word; //Compare or Capture C
  1934. CCD: word; //Compare or Capture D
  1935. Reserved48: byte;
  1936. Reserved49: byte;
  1937. Reserved50: byte;
  1938. Reserved51: byte;
  1939. Reserved52: byte;
  1940. Reserved53: byte;
  1941. PERBUF: word; //Period Buffer
  1942. CCABUF: word; //Compare Or Capture A Buffer
  1943. CCBBUF: word; //Compare Or Capture B Buffer
  1944. CCCBUF: word; //Compare Or Capture C Buffer
  1945. CCDBUF: word; //Compare Or Capture D Buffer
  1946. const
  1947. // Synchronization Enabled
  1948. SYNCHENbm = $40;
  1949. // Start on Next Event
  1950. EVSTARTbm = $20;
  1951. // Stop on Next Update
  1952. UPSTOPbm = $10;
  1953. // TC45_CLKSEL
  1954. CLKSELmask = $0F;
  1955. CLKSEL_OFF = $00;
  1956. CLKSEL_DIV1 = $01;
  1957. CLKSEL_DIV2 = $02;
  1958. CLKSEL_DIV4 = $03;
  1959. CLKSEL_DIV8 = $04;
  1960. CLKSEL_DIV64 = $05;
  1961. CLKSEL_DIV256 = $06;
  1962. CLKSEL_DIV1024 = $07;
  1963. CLKSEL_EVCH0 = $08;
  1964. CLKSEL_EVCH1 = $09;
  1965. CLKSEL_EVCH2 = $0A;
  1966. CLKSEL_EVCH3 = $0B;
  1967. CLKSEL_EVCH4 = $0C;
  1968. CLKSEL_EVCH5 = $0D;
  1969. CLKSEL_EVCH6 = $0E;
  1970. CLKSEL_EVCH7 = $0F;
  1971. // TC45_BYTEM
  1972. BYTEMmask = $C0;
  1973. BYTEM_NORMAL = $00;
  1974. BYTEM_BYTEMODE = $40;
  1975. // TC45_CIRCEN
  1976. CIRCENmask = $30;
  1977. CIRCEN_DISABLE = $00;
  1978. CIRCEN_PER = $10;
  1979. CIRCEN_CCA = $20;
  1980. CIRCEN_BOTH = $30;
  1981. // TC45_WGMODE
  1982. WGMODEmask = $07;
  1983. WGMODE_NORMAL = $00;
  1984. WGMODE_FRQ = $01;
  1985. WGMODE_SINGLESLOPE = $03;
  1986. WGMODE_DSTOP = $05;
  1987. WGMODE_DSBOTH = $06;
  1988. WGMODE_DSBOTTOM = $07;
  1989. // Channel D Output Polarity
  1990. POLDbm = $80;
  1991. // Channel C Output Polarity
  1992. POLCbm = $40;
  1993. // Channel B Output Polarity
  1994. POLBbm = $20;
  1995. // Channel A Output Polarity
  1996. POLAbm = $10;
  1997. // Channel D Compare Output Value
  1998. CMPDbm = $08;
  1999. // Channel C Compare Output Value
  2000. CMPCbm = $04;
  2001. // Channel B Compare Output Value
  2002. CMPBbm = $02;
  2003. // Channel A Compare Output Value
  2004. CMPAbm = $01;
  2005. // High Channel D Compare Output Value
  2006. HCMPDbm = $80;
  2007. // High Channel C Compare Output Value
  2008. HCMPCbm = $40;
  2009. // High Channel B Compare Output Value
  2010. HCMPBbm = $20;
  2011. // High Channel A Compare Output Value
  2012. HCMPAbm = $10;
  2013. // Low Channel D Compare Output Value
  2014. LCMPDbm = $08;
  2015. // Low Channel C Compare Output Value
  2016. LCMPCbm = $04;
  2017. // Low Channel B Compare Output Value
  2018. LCMPBbm = $02;
  2019. // Low Channel A Compare Output Value
  2020. LCMPAbm = $01;
  2021. // TC45_EVACT
  2022. EVACTmask = $E0;
  2023. EVACT_OFF = $00;
  2024. EVACT_FMODE1 = $20;
  2025. EVACT_FMODE2 = $40;
  2026. EVACT_UPDOWN = $60;
  2027. EVACT_QDEC = $80;
  2028. EVACT_RESTART = $A0;
  2029. EVACT_PWF = $C0;
  2030. // Event Delay
  2031. EVDLYbm = $10;
  2032. // TC45_EVSEL
  2033. EVSELmask = $0F;
  2034. EVSEL_OFF = $00;
  2035. EVSEL_CH0 = $08;
  2036. EVSEL_CH1 = $09;
  2037. EVSEL_CH2 = $0A;
  2038. EVSEL_CH3 = $0B;
  2039. EVSEL_CH4 = $0C;
  2040. EVSEL_CH5 = $0D;
  2041. EVSEL_CH6 = $0E;
  2042. EVSEL_CH7 = $0F;
  2043. // TC45_CCDMODE
  2044. CCDMODEmask = $C0;
  2045. CCDMODE_DISABLE = $00;
  2046. CCDMODE_COMP = $40;
  2047. CCDMODE_CAPT = $80;
  2048. CCDMODE_BOTHCC = $C0;
  2049. // TC45_CCCMODE
  2050. CCCMODEmask = $30;
  2051. CCCMODE_DISABLE = $00;
  2052. CCCMODE_COMP = $10;
  2053. CCCMODE_CAPT = $20;
  2054. CCCMODE_BOTHCC = $30;
  2055. // TC45_CCBMODE
  2056. CCBMODEmask = $0C;
  2057. CCBMODE_DISABLE = $00;
  2058. CCBMODE_COMP = $04;
  2059. CCBMODE_CAPT = $08;
  2060. CCBMODE_BOTHCC = $0C;
  2061. // TC45_CCAMODE
  2062. CCAMODEmask = $03;
  2063. CCAMODE_DISABLE = $00;
  2064. CCAMODE_COMP = $01;
  2065. CCAMODE_CAPT = $02;
  2066. CCAMODE_BOTHCC = $03;
  2067. // TC45_LCCDMODE
  2068. LCCDMODEmask = $C0;
  2069. LCCDMODE_DISABLE = $00;
  2070. LCCDMODE_COMP = $40;
  2071. LCCDMODE_CAPT = $80;
  2072. LCCDMODE_BOTHCC = $C0;
  2073. // TC45_LCCCMODE
  2074. LCCCMODEmask = $30;
  2075. LCCCMODE_DISABLE = $00;
  2076. LCCCMODE_COMP = $10;
  2077. LCCCMODE_CAPT = $20;
  2078. LCCCMODE_BOTHCC = $30;
  2079. // TC45_LCCBMODE
  2080. LCCBMODEmask = $0C;
  2081. LCCBMODE_DISABLE = $00;
  2082. LCCBMODE_COMP = $04;
  2083. LCCBMODE_CAPT = $08;
  2084. LCCBMODE_BOTHCC = $0C;
  2085. // TC45_LCCAMODE
  2086. LCCAMODEmask = $03;
  2087. LCCAMODE_DISABLE = $00;
  2088. LCCAMODE_COMP = $01;
  2089. LCCAMODE_CAPT = $02;
  2090. LCCAMODE_BOTHCC = $03;
  2091. // TC45_HCCDMODE
  2092. HCCDMODEmask = $C0;
  2093. HCCDMODE_DISABLE = $00;
  2094. HCCDMODE_COMP = $40;
  2095. HCCDMODE_CAPT = $80;
  2096. HCCDMODE_BOTHCC = $C0;
  2097. // TC45_HCCCMODE
  2098. HCCCMODEmask = $30;
  2099. HCCCMODE_DISABLE = $00;
  2100. HCCCMODE_COMP = $10;
  2101. HCCCMODE_CAPT = $20;
  2102. HCCCMODE_BOTHCC = $30;
  2103. // TC45_HCCBMODE
  2104. HCCBMODEmask = $0C;
  2105. HCCBMODE_DISABLE = $00;
  2106. HCCBMODE_COMP = $04;
  2107. HCCBMODE_CAPT = $08;
  2108. HCCBMODE_BOTHCC = $0C;
  2109. // TC45_HCCAMODE
  2110. HCCAMODEmask = $03;
  2111. HCCAMODE_DISABLE = $00;
  2112. HCCAMODE_COMP = $01;
  2113. HCCAMODE_CAPT = $02;
  2114. HCCAMODE_BOTHCC = $03;
  2115. // TC45_TRGINTLVL
  2116. TRGINTLVLmask = $30;
  2117. TRGINTLVL_OFF = $00;
  2118. TRGINTLVL_LO = $10;
  2119. TRGINTLVL_MED = $20;
  2120. TRGINTLVL_HI = $30;
  2121. // TC45_ERRINTLVL
  2122. ERRINTLVLmask = $0C;
  2123. ERRINTLVL_OFF = $00;
  2124. ERRINTLVL_LO = $04;
  2125. ERRINTLVL_MED = $08;
  2126. ERRINTLVL_HI = $0C;
  2127. // TC45_OVFINTLVL
  2128. OVFINTLVLmask = $03;
  2129. OVFINTLVL_OFF = $00;
  2130. OVFINTLVL_LO = $01;
  2131. OVFINTLVL_MED = $02;
  2132. OVFINTLVL_HI = $03;
  2133. // TC45_CCDINTLVL
  2134. CCDINTLVLmask = $C0;
  2135. CCDINTLVL_OFF = $00;
  2136. CCDINTLVL_LO = $40;
  2137. CCDINTLVL_MED = $80;
  2138. CCDINTLVL_HI = $C0;
  2139. // TC45_CCCINTLVL
  2140. CCCINTLVLmask = $30;
  2141. CCCINTLVL_OFF = $00;
  2142. CCCINTLVL_LO = $10;
  2143. CCCINTLVL_MED = $20;
  2144. CCCINTLVL_HI = $30;
  2145. // TC45_CCBINTLVL
  2146. CCBINTLVLmask = $0C;
  2147. CCBINTLVL_OFF = $00;
  2148. CCBINTLVL_LO = $04;
  2149. CCBINTLVL_MED = $08;
  2150. CCBINTLVL_HI = $0C;
  2151. // TC45_CCAINTLVL
  2152. CCAINTLVLmask = $03;
  2153. CCAINTLVL_OFF = $00;
  2154. CCAINTLVL_LO = $01;
  2155. CCAINTLVL_MED = $02;
  2156. CCAINTLVL_HI = $03;
  2157. // TC45_LCCDINTLVL
  2158. LCCDINTLVLmask = $C0;
  2159. LCCDINTLVL_OFF = $00;
  2160. LCCDINTLVL_LO = $40;
  2161. LCCDINTLVL_MED = $80;
  2162. LCCDINTLVL_HI = $C0;
  2163. // TC45_LCCCINTLVL
  2164. LCCCINTLVLmask = $30;
  2165. LCCCINTLVL_OFF = $00;
  2166. LCCCINTLVL_LO = $10;
  2167. LCCCINTLVL_MED = $20;
  2168. LCCCINTLVL_HI = $30;
  2169. // TC45_LCCBINTLVL
  2170. LCCBINTLVLmask = $0C;
  2171. LCCBINTLVL_OFF = $00;
  2172. LCCBINTLVL_LO = $04;
  2173. LCCBINTLVL_MED = $08;
  2174. LCCBINTLVL_HI = $0C;
  2175. // TC45_LCCAINTLVL
  2176. LCCAINTLVLmask = $03;
  2177. LCCAINTLVL_OFF = $00;
  2178. LCCAINTLVL_LO = $01;
  2179. LCCAINTLVL_MED = $02;
  2180. LCCAINTLVL_HI = $03;
  2181. // Timer/Counter Stop
  2182. STOPbm = $20;
  2183. // TC45_CMD
  2184. CMDmask = $0C;
  2185. CMD_NONE = $00;
  2186. CMD_UPDATE = $04;
  2187. CMD_RESTART = $08;
  2188. CMD_RESET = $0C;
  2189. // Lock Update
  2190. LUPDbm = $02;
  2191. // Counter Direction
  2192. DIRbm = $01;
  2193. // Channel D Compare or Capture Buffer Valid
  2194. CCDBVbm = $10;
  2195. // Channel C Compare or Capture Buffer Valid
  2196. CCCBVbm = $08;
  2197. // Channel B Compare or Capture Buffer Valid
  2198. CCBBVbm = $04;
  2199. // Channel A Compare or Capture Buffer Valid
  2200. CCABVbm = $02;
  2201. // Period Buffer Valid
  2202. PERBVbm = $01;
  2203. // Channel Low D Compare or Capture Buffer Valid
  2204. LCCDBVbm = $10;
  2205. // Channel Low C Compare or Capture Buffer Valid
  2206. LCCCBVbm = $08;
  2207. // Channel Low B Compare or Capture Buffer Valid
  2208. LCCBBVbm = $04;
  2209. // Channel Low A Compare or Capture Buffer Valid
  2210. LCCABVbm = $02;
  2211. // Period Low Buffer Valid
  2212. LPERBVbm = $01;
  2213. // Channel D Compare or Capture Interrupt Flag
  2214. CCDIFbm = $80;
  2215. // Channel C Compare or Capture Interrupt Flag
  2216. CCCIFbm = $40;
  2217. // Channel B Compare or Capture Interrupt Flag
  2218. CCBIFbm = $20;
  2219. // Channel A Compare or Capture Interrupt Flag
  2220. CCAIFbm = $10;
  2221. // Trigger Restart Interrupt Flag
  2222. TRGIFbm = $04;
  2223. // Error Interrupt Flag
  2224. ERRIFbm = $02;
  2225. // Overflow/Underflow Interrupt Flag
  2226. OVFIFbm = $01;
  2227. // Channel Low D Compare or Capture Interrupt Flag
  2228. LCCDIFbm = $80;
  2229. // Channel Low C Compare or Capture Interrupt Flag
  2230. LCCCIFbm = $40;
  2231. // Channel Low B Compare or Capture Interrupt Flag
  2232. LCCBIFbm = $20;
  2233. // Channel Low A Compare or Capture Interrupt Flag
  2234. LCCAIFbm = $10;
  2235. end;
  2236. TTC5 = object //16-bit Timer/Counter 5
  2237. CTRLA: byte; //Control Register A
  2238. CTRLB: byte; //Control Register B
  2239. CTRLC: byte; //Control register C
  2240. CTRLD: byte; //Control Register D
  2241. CTRLE: byte; //Control Register E
  2242. CTRLF: byte; //Control Register F
  2243. INTCTRLA: byte; //Interrupt Control Register A
  2244. INTCTRLB: byte; //Interrupt Control Register B
  2245. CTRLGCLR: byte; //Control Register G Clear
  2246. CTRLGSET: byte; //Control Register G Set
  2247. CTRLHCLR: byte; //Control Register H Clear
  2248. CTRLHSET: byte; //Control Register H Set
  2249. INTFLAGS: byte; //Interrupt Flag Register
  2250. Reserved13: byte;
  2251. Reserved14: byte;
  2252. TEMP: byte; //Temporary Register For 16-bit Access
  2253. Reserved16: byte;
  2254. Reserved17: byte;
  2255. Reserved18: byte;
  2256. Reserved19: byte;
  2257. Reserved20: byte;
  2258. Reserved21: byte;
  2259. Reserved22: byte;
  2260. Reserved23: byte;
  2261. Reserved24: byte;
  2262. Reserved25: byte;
  2263. Reserved26: byte;
  2264. Reserved27: byte;
  2265. Reserved28: byte;
  2266. Reserved29: byte;
  2267. Reserved30: byte;
  2268. Reserved31: byte;
  2269. CNT: word; //Count
  2270. Reserved34: byte;
  2271. Reserved35: byte;
  2272. Reserved36: byte;
  2273. Reserved37: byte;
  2274. PER: word; //Period
  2275. CCA: word; //Compare or Capture A
  2276. CCB: word; //Compare or Capture B
  2277. Reserved44: byte;
  2278. Reserved45: byte;
  2279. Reserved46: byte;
  2280. Reserved47: byte;
  2281. Reserved48: byte;
  2282. Reserved49: byte;
  2283. Reserved50: byte;
  2284. Reserved51: byte;
  2285. Reserved52: byte;
  2286. Reserved53: byte;
  2287. PERBUF: word; //Period Buffer
  2288. CCABUF: word; //Compare Or Capture A Buffer
  2289. CCBBUF: word; //Compare Or Capture B Buffer
  2290. const
  2291. // Synchronization Enabled
  2292. SYNCHENbm = $40;
  2293. // Start on Next Event
  2294. EVSTARTbm = $20;
  2295. // Stop on Next Update
  2296. UPSTOPbm = $10;
  2297. // TC45_CLKSEL
  2298. CLKSELmask = $0F;
  2299. CLKSEL_OFF = $00;
  2300. CLKSEL_DIV1 = $01;
  2301. CLKSEL_DIV2 = $02;
  2302. CLKSEL_DIV4 = $03;
  2303. CLKSEL_DIV8 = $04;
  2304. CLKSEL_DIV64 = $05;
  2305. CLKSEL_DIV256 = $06;
  2306. CLKSEL_DIV1024 = $07;
  2307. CLKSEL_EVCH0 = $08;
  2308. CLKSEL_EVCH1 = $09;
  2309. CLKSEL_EVCH2 = $0A;
  2310. CLKSEL_EVCH3 = $0B;
  2311. CLKSEL_EVCH4 = $0C;
  2312. CLKSEL_EVCH5 = $0D;
  2313. CLKSEL_EVCH6 = $0E;
  2314. CLKSEL_EVCH7 = $0F;
  2315. // TC45_BYTEM
  2316. BYTEMmask = $C0;
  2317. BYTEM_NORMAL = $00;
  2318. BYTEM_BYTEMODE = $40;
  2319. // TC45_CIRCEN
  2320. CIRCENmask = $30;
  2321. CIRCEN_DISABLE = $00;
  2322. CIRCEN_PER = $10;
  2323. CIRCEN_CCA = $20;
  2324. CIRCEN_BOTH = $30;
  2325. // TC45_WGMODE
  2326. WGMODEmask = $07;
  2327. WGMODE_NORMAL = $00;
  2328. WGMODE_FRQ = $01;
  2329. WGMODE_SINGLESLOPE = $03;
  2330. WGMODE_DSTOP = $05;
  2331. WGMODE_DSBOTH = $06;
  2332. WGMODE_DSBOTTOM = $07;
  2333. // Channel B Output Polarity
  2334. POLBbm = $20;
  2335. // Channel A Output Polarity
  2336. POLAbm = $10;
  2337. // Channel B Compare Output Value
  2338. CMPBbm = $02;
  2339. // Channel A Compare Output Value
  2340. CMPAbm = $01;
  2341. // High Channel B Compare Output Value
  2342. HCMPBbm = $20;
  2343. // High Channel A Compare Output Value
  2344. HCMPAbm = $10;
  2345. // Low Channel B Compare Output Value
  2346. LCMPBbm = $02;
  2347. // Low Channel A Compare Output Value
  2348. LCMPAbm = $01;
  2349. // TC45_EVACT
  2350. EVACTmask = $E0;
  2351. EVACT_OFF = $00;
  2352. EVACT_FMODE1 = $20;
  2353. EVACT_FMODE2 = $40;
  2354. EVACT_UPDOWN = $60;
  2355. EVACT_QDEC = $80;
  2356. EVACT_RESTART = $A0;
  2357. EVACT_PWF = $C0;
  2358. // Event Delay
  2359. EVDLYbm = $10;
  2360. // TC45_EVSEL
  2361. EVSELmask = $0F;
  2362. EVSEL_OFF = $00;
  2363. EVSEL_CH0 = $08;
  2364. EVSEL_CH1 = $09;
  2365. EVSEL_CH2 = $0A;
  2366. EVSEL_CH3 = $0B;
  2367. EVSEL_CH4 = $0C;
  2368. EVSEL_CH5 = $0D;
  2369. EVSEL_CH6 = $0E;
  2370. EVSEL_CH7 = $0F;
  2371. // TC45_CCBMODE
  2372. CCBMODEmask = $0C;
  2373. CCBMODE_DISABLE = $00;
  2374. CCBMODE_COMP = $04;
  2375. CCBMODE_CAPT = $08;
  2376. CCBMODE_BOTHCC = $0C;
  2377. // TC45_CCAMODE
  2378. CCAMODEmask = $03;
  2379. CCAMODE_DISABLE = $00;
  2380. CCAMODE_COMP = $01;
  2381. CCAMODE_CAPT = $02;
  2382. CCAMODE_BOTHCC = $03;
  2383. // TC45_LCCBMODE
  2384. LCCBMODEmask = $0C;
  2385. LCCBMODE_DISABLE = $00;
  2386. LCCBMODE_COMP = $04;
  2387. LCCBMODE_CAPT = $08;
  2388. LCCBMODE_BOTHCC = $0C;
  2389. // TC45_LCCAMODE
  2390. LCCAMODEmask = $03;
  2391. LCCAMODE_DISABLE = $00;
  2392. LCCAMODE_COMP = $01;
  2393. LCCAMODE_CAPT = $02;
  2394. LCCAMODE_BOTHCC = $03;
  2395. // TC45_HCCBMODE
  2396. HCCBMODEmask = $0C;
  2397. HCCBMODE_DISABLE = $00;
  2398. HCCBMODE_COMP = $04;
  2399. HCCBMODE_CAPT = $08;
  2400. HCCBMODE_BOTHCC = $0C;
  2401. // TC45_HCCAMODE
  2402. HCCAMODEmask = $03;
  2403. HCCAMODE_DISABLE = $00;
  2404. HCCAMODE_COMP = $01;
  2405. HCCAMODE_CAPT = $02;
  2406. HCCAMODE_BOTHCC = $03;
  2407. // TC45_TRGINTLVL
  2408. TRGINTLVLmask = $30;
  2409. TRGINTLVL_OFF = $00;
  2410. TRGINTLVL_LO = $10;
  2411. TRGINTLVL_MED = $20;
  2412. TRGINTLVL_HI = $30;
  2413. // TC45_ERRINTLVL
  2414. ERRINTLVLmask = $0C;
  2415. ERRINTLVL_OFF = $00;
  2416. ERRINTLVL_LO = $04;
  2417. ERRINTLVL_MED = $08;
  2418. ERRINTLVL_HI = $0C;
  2419. // TC45_OVFINTLVL
  2420. OVFINTLVLmask = $03;
  2421. OVFINTLVL_OFF = $00;
  2422. OVFINTLVL_LO = $01;
  2423. OVFINTLVL_MED = $02;
  2424. OVFINTLVL_HI = $03;
  2425. // TC45_CCBINTLVL
  2426. CCBINTLVLmask = $0C;
  2427. CCBINTLVL_OFF = $00;
  2428. CCBINTLVL_LO = $04;
  2429. CCBINTLVL_MED = $08;
  2430. CCBINTLVL_HI = $0C;
  2431. // TC45_CCAINTLVL
  2432. CCAINTLVLmask = $03;
  2433. CCAINTLVL_OFF = $00;
  2434. CCAINTLVL_LO = $01;
  2435. CCAINTLVL_MED = $02;
  2436. CCAINTLVL_HI = $03;
  2437. // TC45_LCCBINTLVL
  2438. LCCBINTLVLmask = $0C;
  2439. LCCBINTLVL_OFF = $00;
  2440. LCCBINTLVL_LO = $04;
  2441. LCCBINTLVL_MED = $08;
  2442. LCCBINTLVL_HI = $0C;
  2443. // TC45_LCCAINTLVL
  2444. LCCAINTLVLmask = $03;
  2445. LCCAINTLVL_OFF = $00;
  2446. LCCAINTLVL_LO = $01;
  2447. LCCAINTLVL_MED = $02;
  2448. LCCAINTLVL_HI = $03;
  2449. // Timer/Counter Stop
  2450. STOPbm = $20;
  2451. // TC45_CMD
  2452. CMDmask = $0C;
  2453. CMD_NONE = $00;
  2454. CMD_UPDATE = $04;
  2455. CMD_RESTART = $08;
  2456. CMD_RESET = $0C;
  2457. // Lock Update
  2458. LUPDbm = $02;
  2459. // Counter Direction
  2460. DIRbm = $01;
  2461. // Channel B Compare or Capture Buffer Valid
  2462. CCBBVbm = $04;
  2463. // Channel A Compare or Capture Buffer Valid
  2464. CCABVbm = $02;
  2465. // Period Buffer Valid
  2466. PERBVbm = $01;
  2467. // Channel Low B Compare or Capture Buffer Valid
  2468. LCCBBVbm = $04;
  2469. // Channel Low A Compare or Capture Buffer Valid
  2470. LCCABVbm = $02;
  2471. // Period Low Buffer Valid
  2472. LPERBVbm = $01;
  2473. // Channel B Compare or Capture Interrupt Flag
  2474. CCBIFbm = $20;
  2475. // Channel A Compare or Capture Interrupt Flag
  2476. CCAIFbm = $10;
  2477. // Trigger Restart Interrupt Flag
  2478. TRGIFbm = $04;
  2479. // Error Interrupt Flag
  2480. ERRIFbm = $02;
  2481. // Overflow/Underflow Interrupt Flag
  2482. OVFIFbm = $01;
  2483. // Channel Low B Compare or Capture Interrupt Flag
  2484. LCCBIFbm = $20;
  2485. // Channel Low A Compare or Capture Interrupt Flag
  2486. LCCAIFbm = $10;
  2487. end;
  2488. TFAULT = object //Fault Extension
  2489. CTRLA: byte; //Control A Register
  2490. CTRLB: byte; //Control B Register
  2491. CTRLC: byte; //Control C Register
  2492. CTRLD: byte; //Control D Register
  2493. CTRLE: byte; //Control E Register
  2494. STATUS: byte; //Status Register
  2495. CTRLGCLR: byte; //Control Register G Clear
  2496. CTRLGSET: byte; //Control Register G set
  2497. const
  2498. // FAULT_RAMP
  2499. RAMPmask = $C0;
  2500. RAMP_RAMP1 = $00;
  2501. RAMP_RAMP2 = $80;
  2502. // Fault on Debug Break Detection
  2503. FDDBDbm = $20;
  2504. // Port Control Mode
  2505. PORTCTRLbm = $10;
  2506. // Fuse State
  2507. FUSEbm = $08;
  2508. // Fault E Digital Filter Selection
  2509. FILTEREbm = $04;
  2510. // FAULT_SRCE
  2511. SRCEmask = $03;
  2512. SRCE_DISABLE = $00;
  2513. SRCE_CHN = $01;
  2514. SRCE_CHN1 = $02;
  2515. SRCE_CHN2 = $03;
  2516. // Fault A Software Mode
  2517. SOFTAbm = $80;
  2518. // FAULT_HALTA
  2519. HALTAmask = $60;
  2520. HALTA_DISABLE = $00;
  2521. HALTA_HW = $20;
  2522. HALTA_SW = $40;
  2523. // Fault A Restart Action
  2524. RESTARTAbm = $10;
  2525. // Fault A Keep Action
  2526. KEEPAbm = $08;
  2527. // FAULT_SRCA
  2528. SRCAmask = $03;
  2529. SRCA_DISABLE = $00;
  2530. SRCA_CHN = $01;
  2531. SRCA_CHN1 = $02;
  2532. SRCA_LINK = $03;
  2533. // Fault A Capture
  2534. CAPTAbm = $20;
  2535. // Fault A Digital Filter Selection
  2536. FILTERAbm = $04;
  2537. // Fault A Blanking
  2538. BLANKAbm = $02;
  2539. // Fault A Qualification
  2540. QUALAbm = $01;
  2541. // Fault B Software Mode
  2542. SOFTBbm = $80;
  2543. // FAULT_HALTB
  2544. HALTBmask = $60;
  2545. HALTB_DISABLE = $00;
  2546. HALTB_HW = $20;
  2547. HALTB_SW = $40;
  2548. // Fault B Restart Action
  2549. RESTARTBbm = $10;
  2550. // Fault B Keep Action
  2551. KEEPBbm = $08;
  2552. // FAULT_SRCB
  2553. SRCBmask = $03;
  2554. SRCB_DISABLE = $00;
  2555. SRCB_CHN = $01;
  2556. SRCB_CHN1 = $02;
  2557. SRCB_LINK = $03;
  2558. // Fault B Capture
  2559. CAPTBbm = $20;
  2560. // Fault B Digital Filter Selection
  2561. FILTERBbm = $04;
  2562. // Fault B Blanking
  2563. BLANKBbm = $02;
  2564. // Fault B Qualification
  2565. QUALBbm = $01;
  2566. // Fault B State
  2567. STATEBbm = $80;
  2568. // Fault A State
  2569. STATEAbm = $40;
  2570. // Fault E State
  2571. STATEEbm = $20;
  2572. // Channel Index Flag
  2573. IDXbm = $08;
  2574. // Fault B Flag
  2575. FAULTBINbm = $04;
  2576. // Fault A Flag
  2577. FAULTAINbm = $02;
  2578. // Fault E Flag
  2579. FAULTEINbm = $01;
  2580. // State B Clear
  2581. HALTBCLRbm = $80;
  2582. // State A Clear
  2583. HALTACLRbm = $40;
  2584. // State E Clear
  2585. STATEECLRbm = $20;
  2586. // Fault B Flag
  2587. FAULTBbm = $04;
  2588. // Fault A Flag
  2589. FAULTAbm = $02;
  2590. // Fault E Flag
  2591. FAULTEbm = $01;
  2592. // Software Fault B
  2593. FAULTBSWbm = $80;
  2594. // Software Fault A
  2595. FAULTASWbm = $40;
  2596. // Software Fault E
  2597. FAULTESWbm = $20;
  2598. // FAULT_IDXCMD
  2599. IDXCMDmask = $18;
  2600. IDXCMD_DISABLE = $00;
  2601. IDXCMD_SET = $08;
  2602. IDXCMD_CLEAR = $10;
  2603. IDXCMD_HOLD = $18;
  2604. end;
  2605. TWEX = object //Waveform Extension
  2606. CTRL: byte; //Control Register
  2607. DTBOTH: byte; //Dead-time Concurrent Write to Both Sides Register
  2608. DTLS: byte; //Dead-time Low Side Register
  2609. DTHS: byte; //Dead-time High Side Register
  2610. STATUSCLR: byte; //Status Clear Register
  2611. STATUSSET: byte; //Status Set Register
  2612. SWAP: byte; //Swap Register
  2613. PGO: byte; //Pattern Generation Override Register
  2614. PGV: byte; //Pattern Generation Value Register
  2615. Reserved9: byte;
  2616. SWAPBUF: byte; //Dead Time Low Side Buffer
  2617. PGOBUF: byte; //Pattern Generation Overwrite Buffer Register
  2618. PGVBUF: byte; //Pattern Generation Value Buffer Register
  2619. Reserved13: byte;
  2620. Reserved14: byte;
  2621. OUTOVDIS: byte; //Output Override Disable Register
  2622. const
  2623. // Update Source Selection
  2624. UPSELbm = $80;
  2625. // WEX_OTMX
  2626. OTMXmask = $70;
  2627. OTMX_DEFAULT = $00;
  2628. OTMX_FIRST = $10;
  2629. OTMX_SECOND = $20;
  2630. OTMX_THIRD = $30;
  2631. OTMX_FOURTH = $40;
  2632. // Dead-Time Insertion Generator 3 Enable
  2633. DTI3ENbm = $08;
  2634. // Dead-Time Insertion Generator 2 Enable
  2635. DTI2ENbm = $04;
  2636. // Dead-Time Insertion Generator 1 Enable
  2637. DTI1ENbm = $02;
  2638. // Dead-Time Insertion Generator 0 Enable
  2639. DTI0ENbm = $01;
  2640. // Swap Buffer Valid
  2641. SWAPBUFbm = $04;
  2642. // Pattern Generator Value Buffer Valid
  2643. PGVBUFVbm = $02;
  2644. // Pattern Generator Overwrite Buffer Valid
  2645. PGOBUFVbm = $01;
  2646. // Swap DTI output pair 3
  2647. SWAP3bm = $08;
  2648. // Swap DTI output pair 2
  2649. SWAP2bm = $04;
  2650. // Swap DTI output pair 1
  2651. SWAP1bm = $02;
  2652. // Swap DTI output pair 0
  2653. SWAP0bm = $01;
  2654. // Swap DTI output pair 3
  2655. SWAP3BUFbm = $08;
  2656. // Swap DTI output pair 2
  2657. SWAP2BUFbm = $04;
  2658. // Swap DTI output pair 1
  2659. SWAP1BUFbm = $02;
  2660. // Swap DTI output pair 0
  2661. SWAP0BUFbm = $01;
  2662. end;
  2663. THIRES = object //High-Resolution Extension
  2664. CTRLA: byte; //Control Register A
  2665. const
  2666. // HIRES_HRPLUS
  2667. HRPLUSmask = $0C;
  2668. HRPLUS_NONE = $00;
  2669. HRPLUS_HRP4 = $04;
  2670. HRPLUS_HRP5 = $08;
  2671. HRPLUS_BOTH = $0C;
  2672. // HIRES_HREN
  2673. HRENmask = $03;
  2674. HREN_NONE = $00;
  2675. HREN_HRP4 = $01;
  2676. HREN_HRP5 = $02;
  2677. HREN_BOTH = $03;
  2678. end;
  2679. TUSART = object //Universal Synchronous/Asynchronous Receiver/Transmitter
  2680. DATA: byte; //Data Register
  2681. STATUS: byte; //Status Register
  2682. CTRLA: byte; //Control Register A
  2683. CTRLB: byte; //Control Register B
  2684. CTRLC: byte; //Control Register C
  2685. CTRLD: byte; //Control Register D
  2686. BAUDCTRLA: byte; //Baud Rate Control Register A
  2687. BAUDCTRLB: byte; //Baud Rate Control Register B
  2688. const
  2689. // Receive Interrupt Flag
  2690. RXCIFbm = $80;
  2691. // Transmit Interrupt Flag
  2692. TXCIFbm = $40;
  2693. // Data Register Empty Flag
  2694. DREIFbm = $20;
  2695. // Frame Error
  2696. FERRbm = $10;
  2697. // Buffer Overflow
  2698. BUFOVFbm = $08;
  2699. // Parity Error
  2700. PERRbm = $04;
  2701. // Receive Start Bit Interrupt Flag
  2702. RXSIFbm = $02;
  2703. // Receive Bit 8
  2704. RXB8bm = $01;
  2705. // Data Reception Flag
  2706. DRIFbm = $01;
  2707. // Receive Start Interrupt Enable
  2708. RXSIEbm = $80;
  2709. // Data Reception Interrupt Enable
  2710. DRIEbm = $40;
  2711. // USART_RXCINTLVL
  2712. RXCINTLVLmask = $30;
  2713. RXCINTLVL_OFF = $00;
  2714. RXCINTLVL_LO = $10;
  2715. RXCINTLVL_MED = $20;
  2716. RXCINTLVL_HI = $30;
  2717. // USART_TXCINTLVL
  2718. TXCINTLVLmask = $0C;
  2719. TXCINTLVL_OFF = $00;
  2720. TXCINTLVL_LO = $04;
  2721. TXCINTLVL_MED = $08;
  2722. TXCINTLVL_HI = $0C;
  2723. // USART_DREINTLVL
  2724. DREINTLVLmask = $03;
  2725. DREINTLVL_OFF = $00;
  2726. DREINTLVL_LO = $01;
  2727. DREINTLVL_MED = $02;
  2728. DREINTLVL_HI = $03;
  2729. // One Wire Mode
  2730. ONEWIREbm = $80;
  2731. // Start Frame Detection Enable
  2732. SFDENbm = $40;
  2733. // Receiver Enable
  2734. RXENbm = $10;
  2735. // Transmitter Enable
  2736. TXENbm = $08;
  2737. // Double transmission speed
  2738. CLK2Xbm = $04;
  2739. // Multi-processor Communication Mode
  2740. MPCMbm = $02;
  2741. // Transmit bit 8
  2742. TXB8bm = $01;
  2743. // USART_CMODE
  2744. CMODEmask = $C0;
  2745. CMODE_ASYNCHRONOUS = $00;
  2746. CMODE_SYNCHRONOUS = $40;
  2747. CMODE_IRDA = $80;
  2748. CMODE_MSPI = $C0;
  2749. // USART_PMODE
  2750. PMODEmask = $30;
  2751. PMODE_DISABLED = $00;
  2752. PMODE_EVEN = $20;
  2753. PMODE_ODD = $30;
  2754. // Stop Bit Mode
  2755. SBMODEbm = $08;
  2756. // USART_CHSIZE
  2757. CHSIZEmask = $07;
  2758. CHSIZE_5BIT = $00;
  2759. CHSIZE_6BIT = $01;
  2760. CHSIZE_7BIT = $02;
  2761. CHSIZE_8BIT = $03;
  2762. CHSIZE_9BIT = $07;
  2763. // USART_DECTYPE
  2764. DECTYPEmask = $30;
  2765. DECTYPE_DATA = $00;
  2766. DECTYPE_SDATA = $20;
  2767. DECTYPE_NOTSDATA = $30;
  2768. // USART_LUTACT
  2769. LUTACTmask = $0C;
  2770. LUTACT_OFF = $00;
  2771. LUTACT_RX = $04;
  2772. LUTACT_TX = $08;
  2773. LUTACT_BOTH = $0C;
  2774. // USART_PECACT
  2775. PECACTmask = $03;
  2776. PECACT_OFF = $00;
  2777. PECACT_PEC0 = $01;
  2778. PECACT_PEC1 = $02;
  2779. PECACT_PERC01 = $03;
  2780. // Baud Rate Scale
  2781. BSCALE0bm = $10;
  2782. BSCALE1bm = $20;
  2783. BSCALE2bm = $40;
  2784. BSCALE3bm = $80;
  2785. end;
  2786. TSPI = object //Serial Peripheral Interface with Buffer Modes
  2787. CTRL: byte; //Control Register
  2788. INTCTRL: byte; //Interrupt Control Register
  2789. STATUS: byte; //Status Register
  2790. DATA: byte; //Data Register
  2791. CTRLB: byte; //Control Register B
  2792. const
  2793. // Enable Double Speed
  2794. CLK2Xbm = $80;
  2795. // Enable SPI Module
  2796. ENABLEbm = $40;
  2797. // Data Order Setting
  2798. DORDbm = $20;
  2799. // Master Operation Enable
  2800. MASTERbm = $10;
  2801. // SPI_MODE
  2802. MODEmask = $0C;
  2803. MODE_0 = $00;
  2804. MODE_1 = $04;
  2805. MODE_2 = $08;
  2806. MODE_3 = $0C;
  2807. // SPI_PRESCALER
  2808. PRESCALERmask = $03;
  2809. PRESCALER_DIV4 = $00;
  2810. PRESCALER_DIV16 = $01;
  2811. PRESCALER_DIV64 = $02;
  2812. PRESCALER_DIV128 = $03;
  2813. // Receive Complete Interrupt Enable (In Buffer Modes Only).
  2814. RXCIEbm = $80;
  2815. // Transmit Complete Interrupt Enable (In Buffer Modes Only).
  2816. TXCIEbm = $40;
  2817. // Data Register Empty Interrupt Enable (In Buffer Modes Only).
  2818. DREIEbm = $20;
  2819. // Slave Select Trigger Interrupt Enable (In Buffer Modes Only).
  2820. SSIEbm = $10;
  2821. // SPI_INTLVL
  2822. INTLVLmask = $03;
  2823. INTLVL_OFF = $00;
  2824. INTLVL_LO = $01;
  2825. INTLVL_MED = $02;
  2826. INTLVL_HI = $03;
  2827. // Interrupt Flag (In Standard Mode Only).
  2828. IFbm = $80;
  2829. // Receive Complete Interrupt Flag (In Buffer Modes Only).
  2830. RXCIFbm = $80;
  2831. // Write Collision Flag (In Standard Mode Only).
  2832. WRCOLbm = $40;
  2833. // Transmit Complete Interrupt Flag (In Buffer Modes Only).
  2834. TXCIFbm = $40;
  2835. // Data Register Empty Interrupt Flag (In Buffer Modes Only).
  2836. DREIFbm = $20;
  2837. // Slave Select Trigger Interrupt Flag (In Buffer Modes Only).
  2838. SSIFbm = $10;
  2839. // Buffer Overflow (In Buffer Modes Only).
  2840. BUFOVFbm = $01;
  2841. // SPI_BUFMODE
  2842. BUFMODEmask = $C0;
  2843. BUFMODE_OFF = $00;
  2844. BUFMODE_BUFMODE1 = $80;
  2845. BUFMODE_BUFMODE2 = $C0;
  2846. // Slave Select Disable
  2847. SSDbm = $04;
  2848. end;
  2849. TIRCOM = object //IR Communication Module
  2850. CTRL: byte; //Control Register
  2851. TXPLCTRL: byte; //IrDA Transmitter Pulse Length Control Register
  2852. RXPLCTRL: byte; //IrDA Receiver Pulse Length Control Register
  2853. const
  2854. // IRDA_EVSEL
  2855. EVSELmask = $0F;
  2856. EVSEL_OFF = $00;
  2857. EVSEL_0 = $08;
  2858. EVSEL_1 = $09;
  2859. EVSEL_2 = $0A;
  2860. EVSEL_3 = $0B;
  2861. EVSEL_4 = $0C;
  2862. EVSEL_5 = $0D;
  2863. EVSEL_6 = $0E;
  2864. EVSEL_7 = $0F;
  2865. end;
  2866. TNVM_LOCKBITS = object //Lock Bits
  2867. LOCKBITS: byte; //Lock Bits
  2868. const
  2869. // FUSE_BLBB
  2870. BLBBmask = $C0;
  2871. BLBB_RWLOCK = $00;
  2872. BLBB_RLOCK = $40;
  2873. BLBB_WLOCK = $80;
  2874. BLBB_NOLOCK = $C0;
  2875. // FUSE_BLBA
  2876. BLBAmask = $30;
  2877. BLBA_RWLOCK = $00;
  2878. BLBA_RLOCK = $10;
  2879. BLBA_WLOCK = $20;
  2880. BLBA_NOLOCK = $30;
  2881. // FUSE_BLBAT
  2882. BLBATmask = $0C;
  2883. BLBAT_RWLOCK = $00;
  2884. BLBAT_RLOCK = $04;
  2885. BLBAT_WLOCK = $08;
  2886. BLBAT_NOLOCK = $0C;
  2887. // FUSE_LB
  2888. LBmask = $03;
  2889. LB_RWLOCK = $00;
  2890. LB_WLOCK = $02;
  2891. LB_NOLOCK = $03;
  2892. end;
  2893. TNVM_FUSES = object //Fuses
  2894. Reserved0: byte;
  2895. FUSEBYTE1: byte; //Watchdog Configuration
  2896. FUSEBYTE2: byte; //Reset Configuration
  2897. Reserved3: byte;
  2898. FUSEBYTE4: byte; //Start-up Configuration
  2899. FUSEBYTE5: byte; //EESAVE and BOD Level
  2900. FUSEBYTE6: byte; //Fault State
  2901. const
  2902. // WDWPER
  2903. WDWPERmask = $F0;
  2904. WDWPER_8CLK = $00;
  2905. WDWPER_16CLK = $10;
  2906. WDWPER_32CLK = $20;
  2907. WDWPER_64CLK = $30;
  2908. WDWPER_128CLK = $40;
  2909. WDWPER_256CLK = $50;
  2910. WDWPER_512CLK = $60;
  2911. WDWPER_1KCLK = $70;
  2912. WDWPER_2KCLK = $80;
  2913. WDWPER_4KCLK = $90;
  2914. WDWPER_8KCLK = $A0;
  2915. // WDPER
  2916. WDPERmask = $0F;
  2917. WDPER_8CLK = $00;
  2918. WDPER_16CLK = $01;
  2919. WDPER_32CLK = $02;
  2920. WDPER_64CLK = $03;
  2921. WDPER_128CLK = $04;
  2922. WDPER_256CLK = $05;
  2923. WDPER_512CLK = $06;
  2924. WDPER_1KCLK = $07;
  2925. WDPER_2KCLK = $08;
  2926. WDPER_4KCLK = $09;
  2927. WDPER_8KCLK = $0A;
  2928. // BOOTRST
  2929. BOOTRSTmask = $40;
  2930. BOOTRST_BOOTLDR = $00;
  2931. BOOTRST_APPLICATION = $40;
  2932. // BODPD
  2933. BODPDmask = $03;
  2934. BODPD_SAMPLED = $01;
  2935. BODPD_CONTINUOUS = $02;
  2936. BODPD_DISABLED = $03;
  2937. // External Reset Disable
  2938. RSTDISBLbm = $10;
  2939. // STARTUPTIME
  2940. STARTUPTIMEmask = $0C;
  2941. STARTUPTIME0MS = $0C;
  2942. STARTUPTIME4MS = $04;
  2943. STARTUPTIME64MS = $00;
  2944. // Watchdog Timer Lock
  2945. WDLOCKbm = $02;
  2946. // BODACT
  2947. BODACTmask = $30;
  2948. BODACT_SAMPLED = $10;
  2949. BODACT_CONTINUOUS = $20;
  2950. BODACT_DISABLED = $30;
  2951. // Preserve EEPROM Through Chip Erase
  2952. EESAVEbm = $08;
  2953. // BODLEVEL
  2954. BODLEVELmask = $07;
  2955. BODLEVEL1V6 = $07;
  2956. BODLEVEL1V8 = $06;
  2957. BODLEVEL2V0 = $05;
  2958. BODLEVEL2V2 = $04;
  2959. BODLEVEL2V4 = $03;
  2960. BODLEVEL2V6 = $02;
  2961. BODLEVEL2V8 = $01;
  2962. BODLEVEL3V0 = $00;
  2963. // Fault Detection Action on TC5
  2964. FDACT5bm = $80;
  2965. // Fault Detection Action on TC4
  2966. FDACT4bm = $40;
  2967. // Port Pin Value
  2968. VALUE0bm = $01;
  2969. VALUE1bm = $02;
  2970. VALUE2bm = $04;
  2971. VALUE3bm = $08;
  2972. VALUE4bm = $10;
  2973. VALUE5bm = $20;
  2974. end;
  2975. TNVM_PROD_SIGNATURES = object //Production Signatures
  2976. RCOSC8M: byte; //RCOSC 8MHz Calibration Value
  2977. Reserved1: byte;
  2978. RCOSC32K: byte; //RCOSC 32.768 kHz Calibration Value
  2979. RCOSC32M: byte; //RCOSC 32 MHz Calibration Value B
  2980. RCOSC32MA: byte; //RCOSC 32 MHz Calibration Value A
  2981. Reserved5: byte;
  2982. Reserved6: byte;
  2983. Reserved7: byte;
  2984. LOTNUM0: byte; //Lot Number Byte 0, ASCII
  2985. LOTNUM1: byte; //Lot Number Byte 1, ASCII
  2986. LOTNUM2: byte; //Lot Number Byte 2, ASCII
  2987. LOTNUM3: byte; //Lot Number Byte 3, ASCII
  2988. LOTNUM4: byte; //Lot Number Byte 4, ASCII
  2989. LOTNUM5: byte; //Lot Number Byte 5, ASCII
  2990. Reserved14: byte;
  2991. Reserved15: byte;
  2992. WAFNUM: byte; //Wafer Number
  2993. Reserved17: byte;
  2994. COORDX0: byte; //Wafer Coordinate X Byte 0
  2995. COORDX1: byte; //Wafer Coordinate X Byte 1
  2996. COORDY0: byte; //Wafer Coordinate Y Byte 0
  2997. COORDY1: byte; //Wafer Coordinate Y Byte 1
  2998. Reserved22: byte;
  2999. Reserved23: byte;
  3000. Reserved24: byte;
  3001. Reserved25: byte;
  3002. Reserved26: byte;
  3003. Reserved27: byte;
  3004. Reserved28: byte;
  3005. Reserved29: byte;
  3006. ROOMTEMP: byte; //Temperature corresponds to TEMPSENSE3/2
  3007. HOTTEMP: byte; //Temperature corresponds to TEMPSENSE1/0
  3008. ADCACAL0: byte; //ADCA Calibration Byte 0
  3009. ADCACAL1: byte; //ADCA Calibration Byte 1
  3010. Reserved34: byte;
  3011. Reserved35: byte;
  3012. Reserved36: byte;
  3013. Reserved37: byte;
  3014. Reserved38: byte;
  3015. Reserved39: byte;
  3016. ACACURRCAL: byte; //ACA Current Calibration Byte
  3017. Reserved41: byte;
  3018. Reserved42: byte;
  3019. Reserved43: byte;
  3020. TEMPSENSE2: byte; //Temperature Sensor Calibration Byte 2
  3021. TEMPSENSE3: byte; //Temperature Sensor Calibration Byte 3
  3022. TEMPSENSE0: byte; //Temperature Sensor Calibration Byte 0
  3023. TEMPSENSE1: byte; //Temperature Sensor Calibration Byte 1
  3024. DACA0OFFCAL: byte; //DACA0 Calibration Byte 0
  3025. DACA0GAINCAL: byte; //DACA0 Calibration Byte 1
  3026. Reserved50: byte;
  3027. Reserved51: byte;
  3028. DACA1OFFCAL: byte; //DACA1 Calibration Byte 0
  3029. DACA1GAINCAL: byte; //DACA1 Calibration Byte 1
  3030. end;
  3031. const
  3032. Pin0idx = 0; Pin0bm = 1;
  3033. Pin1idx = 1; Pin1bm = 2;
  3034. Pin2idx = 2; Pin2bm = 4;
  3035. Pin3idx = 3; Pin3bm = 8;
  3036. Pin4idx = 4; Pin4bm = 16;
  3037. Pin5idx = 5; Pin5bm = 32;
  3038. Pin6idx = 6; Pin6bm = 64;
  3039. Pin7idx = 7; Pin7bm = 128;
  3040. var
  3041. GPIO: TGPIO absolute $0000;
  3042. VPORT0: TVPORT absolute $0010;
  3043. VPORT1: TVPORT absolute $0014;
  3044. VPORT2: TVPORT absolute $0018;
  3045. VPORT3: TVPORT absolute $001C;
  3046. OCD: TOCD absolute $002E;
  3047. CPU: TCPU absolute $0030;
  3048. CLK: TCLK absolute $0040;
  3049. SLEEP: TSLEEP absolute $0048;
  3050. OSC: TOSC absolute $0050;
  3051. DFLLRC32M: TDFLL absolute $0060;
  3052. PR: TPR absolute $0070;
  3053. RST: TRST absolute $0078;
  3054. WDT: TWDT absolute $0080;
  3055. MCU: TMCU absolute $0090;
  3056. PMIC: TPMIC absolute $00A0;
  3057. PORTCFG: TPORTCFG absolute $00B0;
  3058. CRC: TCRC absolute $00D0;
  3059. EDMA: TEDMA absolute $0100;
  3060. EVSYS: TEVSYS absolute $0180;
  3061. NVM: TNVM absolute $01C0;
  3062. ADCA: TADC absolute $0200;
  3063. DACA: TDAC absolute $0300;
  3064. ACA: TAC absolute $0380;
  3065. RTC: TRTC absolute $0400;
  3066. XCL: TXCL absolute $0460;
  3067. TWIC: TTWI absolute $0480;
  3068. PORTA: TPORT absolute $0600;
  3069. PORTC: TPORT absolute $0640;
  3070. PORTD: TPORT absolute $0660;
  3071. PORTR: TPORT absolute $07E0;
  3072. TCC4: TTC4 absolute $0800;
  3073. TCC5: TTC5 absolute $0840;
  3074. FAULTC4: TFAULT absolute $0880;
  3075. FAULTC5: TFAULT absolute $0890;
  3076. WEXC: TWEX absolute $08A0;
  3077. HIRESC: THIRES absolute $08B0;
  3078. USARTC0: TUSART absolute $08C0;
  3079. SPIC: TSPI absolute $08E0;
  3080. IRCOM: TIRCOM absolute $08F8;
  3081. TCD5: TTC5 absolute $0940;
  3082. USARTD0: TUSART absolute $09C0;
  3083. implementation
  3084. {$i avrcommon.inc}
  3085. procedure OSC_OSCF_ISR; external name 'OSC_OSCF_ISR'; // Interrupt 1 Oscillator Failure Interrupt (NMI)
  3086. procedure PORTR_INT_ISR; external name 'PORTR_INT_ISR'; // Interrupt 2 External Interrupt
  3087. procedure EDMA_CH0_ISR; external name 'EDMA_CH0_ISR'; // Interrupt 3 EDMA Channel 0 Interrupt
  3088. procedure EDMA_CH1_ISR; external name 'EDMA_CH1_ISR'; // Interrupt 4 EDMA Channel 1 Interrupt
  3089. procedure EDMA_CH2_ISR; external name 'EDMA_CH2_ISR'; // Interrupt 5 EDMA Channel 2 Interrupt
  3090. procedure EDMA_CH3_ISR; external name 'EDMA_CH3_ISR'; // Interrupt 6 EDMA Channel 3 Interrupt
  3091. procedure RTC_OVF_ISR; external name 'RTC_OVF_ISR'; // Interrupt 7 Overflow Interrupt
  3092. procedure RTC_COMP_ISR; external name 'RTC_COMP_ISR'; // Interrupt 8 Compare Interrupt
  3093. procedure PORTC_INT_ISR; external name 'PORTC_INT_ISR'; // Interrupt 9 External Interrupt
  3094. procedure TWIC_TWIS_ISR; external name 'TWIC_TWIS_ISR'; // Interrupt 10 TWI Slave Interrupt
  3095. procedure TWIC_TWIM_ISR; external name 'TWIC_TWIM_ISR'; // Interrupt 11 TWI Master Interrupt
  3096. procedure TCC4_OVF_ISR; external name 'TCC4_OVF_ISR'; // Interrupt 12 Overflow Interrupt
  3097. procedure TCC4_ERR_ISR; external name 'TCC4_ERR_ISR'; // Interrupt 13 Error Interrupt
  3098. procedure TCC4_CCA_ISR; external name 'TCC4_CCA_ISR'; // Interrupt 14 Channel A Compare or Capture Interrupt
  3099. procedure TCC4_CCB_ISR; external name 'TCC4_CCB_ISR'; // Interrupt 15 Channel B Compare or Capture Interrupt
  3100. procedure TCC4_CCC_ISR; external name 'TCC4_CCC_ISR'; // Interrupt 16 Channel C Compare or Capture Interrupt
  3101. procedure TCC4_CCD_ISR; external name 'TCC4_CCD_ISR'; // Interrupt 17 Channel D Compare or Capture Interrupt
  3102. procedure TCC5_OVF_ISR; external name 'TCC5_OVF_ISR'; // Interrupt 18 Overflow Interrupt
  3103. procedure TCC5_ERR_ISR; external name 'TCC5_ERR_ISR'; // Interrupt 19 Error Interrupt
  3104. procedure TCC5_CCA_ISR; external name 'TCC5_CCA_ISR'; // Interrupt 20 Channel A Compare or Capture Interrupt
  3105. procedure TCC5_CCB_ISR; external name 'TCC5_CCB_ISR'; // Interrupt 21 Channel B Compare or Capture Interrupt
  3106. procedure SPIC_INT_ISR; external name 'SPIC_INT_ISR'; // Interrupt 22 SPI Interrupt
  3107. procedure USARTC0_RXC_ISR; external name 'USARTC0_RXC_ISR'; // Interrupt 23 Reception Complete Interrupt
  3108. procedure USARTC0_DRE_ISR; external name 'USARTC0_DRE_ISR'; // Interrupt 24 Data Register Empty Interrupt
  3109. procedure USARTC0_TXC_ISR; external name 'USARTC0_TXC_ISR'; // Interrupt 25 Transmission Complete Interrupt
  3110. procedure NVM_EE_ISR; external name 'NVM_EE_ISR'; // Interrupt 26 EE Interrupt
  3111. procedure NVM_SPM_ISR; external name 'NVM_SPM_ISR'; // Interrupt 27 SPM Interrupt
  3112. procedure XCL_UNF_ISR; external name 'XCL_UNF_ISR'; // Interrupt 28 Timer/Counter Underflow Interrupt
  3113. procedure XCL_CC_ISR; external name 'XCL_CC_ISR'; // Interrupt 29 Timer/Counter Compare or Capture Interrupt
  3114. procedure PORTA_INT_ISR; external name 'PORTA_INT_ISR'; // Interrupt 30 External Interrupt
  3115. procedure ACA_AC0_ISR; external name 'ACA_AC0_ISR'; // Interrupt 31 AC0 Interrupt
  3116. procedure ACA_AC1_ISR; external name 'ACA_AC1_ISR'; // Interrupt 32 AC1 Interrupt
  3117. procedure ACA_ACW_ISR; external name 'ACA_ACW_ISR'; // Interrupt 33 ACW Window Mode Interrupt
  3118. procedure ADCA_CH0_ISR; external name 'ADCA_CH0_ISR'; // Interrupt 34 ADC Channel Interrupt
  3119. procedure PORTD_INT_ISR; external name 'PORTD_INT_ISR'; // Interrupt 35 External Interrupt
  3120. procedure TCD5_OVF_ISR; external name 'TCD5_OVF_ISR'; // Interrupt 36 Overflow Interrupt
  3121. procedure TCD5_ERR_ISR; external name 'TCD5_ERR_ISR'; // Interrupt 37 Error Interrupt
  3122. procedure TCD5_CCA_ISR; external name 'TCD5_CCA_ISR'; // Interrupt 38 Channel A Compare or Capture Interrupt
  3123. procedure TCD5_CCB_ISR; external name 'TCD5_CCB_ISR'; // Interrupt 39 Channel B Compare or Capture Interrupt
  3124. procedure USARTD0_RXC_ISR; external name 'USARTD0_RXC_ISR'; // Interrupt 40 Reception Complete Interrupt
  3125. procedure USARTD0_DRE_ISR; external name 'USARTD0_DRE_ISR'; // Interrupt 41 Data Register Empty Interrupt
  3126. procedure USARTD0_TXC_ISR; external name 'USARTD0_TXC_ISR'; // Interrupt 42 Transmission Complete Interrupt
  3127. procedure _FPC_start; assembler; nostackframe; noreturn; public name '_START'; section '.init';
  3128. asm
  3129. jmp __dtors_end
  3130. jmp OSC_OSCF_ISR
  3131. jmp PORTR_INT_ISR
  3132. jmp EDMA_CH0_ISR
  3133. jmp EDMA_CH1_ISR
  3134. jmp EDMA_CH2_ISR
  3135. jmp EDMA_CH3_ISR
  3136. jmp RTC_OVF_ISR
  3137. jmp RTC_COMP_ISR
  3138. jmp PORTC_INT_ISR
  3139. jmp TWIC_TWIS_ISR
  3140. jmp TWIC_TWIM_ISR
  3141. jmp TCC4_OVF_ISR
  3142. jmp TCC4_ERR_ISR
  3143. jmp TCC4_CCA_ISR
  3144. jmp TCC4_CCB_ISR
  3145. jmp TCC4_CCC_ISR
  3146. jmp TCC4_CCD_ISR
  3147. jmp TCC5_OVF_ISR
  3148. jmp TCC5_ERR_ISR
  3149. jmp TCC5_CCA_ISR
  3150. jmp TCC5_CCB_ISR
  3151. jmp SPIC_INT_ISR
  3152. jmp USARTC0_RXC_ISR
  3153. jmp USARTC0_DRE_ISR
  3154. jmp USARTC0_TXC_ISR
  3155. jmp NVM_EE_ISR
  3156. jmp NVM_SPM_ISR
  3157. jmp XCL_UNF_ISR
  3158. jmp XCL_CC_ISR
  3159. jmp PORTA_INT_ISR
  3160. jmp ACA_AC0_ISR
  3161. jmp ACA_AC1_ISR
  3162. jmp ACA_ACW_ISR
  3163. jmp ADCA_CH0_ISR
  3164. jmp PORTD_INT_ISR
  3165. jmp TCD5_OVF_ISR
  3166. jmp TCD5_ERR_ISR
  3167. jmp TCD5_CCA_ISR
  3168. jmp TCD5_CCB_ISR
  3169. jmp USARTD0_RXC_ISR
  3170. jmp USARTD0_DRE_ISR
  3171. jmp USARTD0_TXC_ISR
  3172. .weak OSC_OSCF_ISR
  3173. .weak PORTR_INT_ISR
  3174. .weak EDMA_CH0_ISR
  3175. .weak EDMA_CH1_ISR
  3176. .weak EDMA_CH2_ISR
  3177. .weak EDMA_CH3_ISR
  3178. .weak RTC_OVF_ISR
  3179. .weak RTC_COMP_ISR
  3180. .weak PORTC_INT_ISR
  3181. .weak TWIC_TWIS_ISR
  3182. .weak TWIC_TWIM_ISR
  3183. .weak TCC4_OVF_ISR
  3184. .weak TCC4_ERR_ISR
  3185. .weak TCC4_CCA_ISR
  3186. .weak TCC4_CCB_ISR
  3187. .weak TCC4_CCC_ISR
  3188. .weak TCC4_CCD_ISR
  3189. .weak TCC5_OVF_ISR
  3190. .weak TCC5_ERR_ISR
  3191. .weak TCC5_CCA_ISR
  3192. .weak TCC5_CCB_ISR
  3193. .weak SPIC_INT_ISR
  3194. .weak USARTC0_RXC_ISR
  3195. .weak USARTC0_DRE_ISR
  3196. .weak USARTC0_TXC_ISR
  3197. .weak NVM_EE_ISR
  3198. .weak NVM_SPM_ISR
  3199. .weak XCL_UNF_ISR
  3200. .weak XCL_CC_ISR
  3201. .weak PORTA_INT_ISR
  3202. .weak ACA_AC0_ISR
  3203. .weak ACA_AC1_ISR
  3204. .weak ACA_ACW_ISR
  3205. .weak ADCA_CH0_ISR
  3206. .weak PORTD_INT_ISR
  3207. .weak TCD5_OVF_ISR
  3208. .weak TCD5_ERR_ISR
  3209. .weak TCD5_CCA_ISR
  3210. .weak TCD5_CCB_ISR
  3211. .weak USARTD0_RXC_ISR
  3212. .weak USARTD0_DRE_ISR
  3213. .weak USARTD0_TXC_ISR
  3214. .set OSC_OSCF_ISR, Default_IRQ_handler
  3215. .set PORTR_INT_ISR, Default_IRQ_handler
  3216. .set EDMA_CH0_ISR, Default_IRQ_handler
  3217. .set EDMA_CH1_ISR, Default_IRQ_handler
  3218. .set EDMA_CH2_ISR, Default_IRQ_handler
  3219. .set EDMA_CH3_ISR, Default_IRQ_handler
  3220. .set RTC_OVF_ISR, Default_IRQ_handler
  3221. .set RTC_COMP_ISR, Default_IRQ_handler
  3222. .set PORTC_INT_ISR, Default_IRQ_handler
  3223. .set TWIC_TWIS_ISR, Default_IRQ_handler
  3224. .set TWIC_TWIM_ISR, Default_IRQ_handler
  3225. .set TCC4_OVF_ISR, Default_IRQ_handler
  3226. .set TCC4_ERR_ISR, Default_IRQ_handler
  3227. .set TCC4_CCA_ISR, Default_IRQ_handler
  3228. .set TCC4_CCB_ISR, Default_IRQ_handler
  3229. .set TCC4_CCC_ISR, Default_IRQ_handler
  3230. .set TCC4_CCD_ISR, Default_IRQ_handler
  3231. .set TCC5_OVF_ISR, Default_IRQ_handler
  3232. .set TCC5_ERR_ISR, Default_IRQ_handler
  3233. .set TCC5_CCA_ISR, Default_IRQ_handler
  3234. .set TCC5_CCB_ISR, Default_IRQ_handler
  3235. .set SPIC_INT_ISR, Default_IRQ_handler
  3236. .set USARTC0_RXC_ISR, Default_IRQ_handler
  3237. .set USARTC0_DRE_ISR, Default_IRQ_handler
  3238. .set USARTC0_TXC_ISR, Default_IRQ_handler
  3239. .set NVM_EE_ISR, Default_IRQ_handler
  3240. .set NVM_SPM_ISR, Default_IRQ_handler
  3241. .set XCL_UNF_ISR, Default_IRQ_handler
  3242. .set XCL_CC_ISR, Default_IRQ_handler
  3243. .set PORTA_INT_ISR, Default_IRQ_handler
  3244. .set ACA_AC0_ISR, Default_IRQ_handler
  3245. .set ACA_AC1_ISR, Default_IRQ_handler
  3246. .set ACA_ACW_ISR, Default_IRQ_handler
  3247. .set ADCA_CH0_ISR, Default_IRQ_handler
  3248. .set PORTD_INT_ISR, Default_IRQ_handler
  3249. .set TCD5_OVF_ISR, Default_IRQ_handler
  3250. .set TCD5_ERR_ISR, Default_IRQ_handler
  3251. .set TCD5_CCA_ISR, Default_IRQ_handler
  3252. .set TCD5_CCB_ISR, Default_IRQ_handler
  3253. .set USARTD0_RXC_ISR, Default_IRQ_handler
  3254. .set USARTD0_DRE_ISR, Default_IRQ_handler
  3255. .set USARTD0_TXC_ISR, Default_IRQ_handler
  3256. end;
  3257. end.