atxmega64d4.pp 65 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749175017511752175317541755175617571758175917601761176217631764176517661767176817691770177117721773177417751776177717781779178017811782178317841785178617871788178917901791179217931794179517961797179817991800180118021803180418051806180718081809181018111812181318141815181618171818181918201821182218231824182518261827182818291830183118321833183418351836183718381839184018411842184318441845184618471848184918501851185218531854185518561857185818591860186118621863186418651866186718681869187018711872187318741875187618771878187918801881188218831884188518861887188818891890189118921893189418951896189718981899190019011902190319041905190619071908190919101911191219131914191519161917191819191920192119221923192419251926192719281929193019311932193319341935193619371938193919401941194219431944194519461947194819491950195119521953195419551956195719581959196019611962196319641965196619671968196919701971197219731974197519761977197819791980198119821983198419851986198719881989199019911992199319941995199619971998199920002001200220032004200520062007200820092010201120122013201420152016201720182019202020212022202320242025202620272028202920302031203220332034203520362037203820392040204120422043204420452046204720482049205020512052205320542055205620572058205920602061206220632064206520662067206820692070207120722073207420752076207720782079208020812082208320842085208620872088208920902091209220932094209520962097209820992100210121022103210421052106210721082109211021112112211321142115211621172118211921202121212221232124212521262127212821292130213121322133213421352136213721382139214021412142214321442145214621472148214921502151215221532154215521562157215821592160216121622163216421652166216721682169217021712172217321742175217621772178217921802181218221832184218521862187218821892190219121922193219421952196219721982199220022012202220322042205220622072208220922102211221222132214221522162217221822192220222122222223222422252226222722282229223022312232223322342235223622372238223922402241224222432244224522462247224822492250225122522253225422552256225722582259226022612262226322642265226622672268226922702271227222732274227522762277227822792280228122822283228422852286228722882289229022912292229322942295229622972298229923002301230223032304230523062307230823092310231123122313231423152316231723182319232023212322232323242325232623272328232923302331233223332334233523362337233823392340234123422343234423452346234723482349235023512352235323542355235623572358235923602361236223632364236523662367236823692370237123722373237423752376237723782379238023812382238323842385238623872388238923902391239223932394239523962397239823992400240124022403240424052406240724082409241024112412241324142415241624172418241924202421242224232424242524262427242824292430243124322433243424352436
  1. unit ATxmega64D4;
  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. // Port Interrupt 1 Flag
  17. INT1IFbm = $02;
  18. // Port Interrupt 0 Flag
  19. INT0IFbm = $01;
  20. end;
  21. TOCD = object //On-Chip Debug System
  22. OCDR0: byte; //OCD Register 0
  23. OCDR1: byte; //OCD Register 1
  24. end;
  25. TCPU = object //CPU registers
  26. Reserved0: byte;
  27. Reserved1: byte;
  28. Reserved2: byte;
  29. Reserved3: byte;
  30. CCP: byte; //Configuration Change Protection
  31. Reserved5: byte;
  32. Reserved6: byte;
  33. Reserved7: byte;
  34. RAMPD: byte; //Ramp D
  35. RAMPX: byte; //Ramp X
  36. RAMPY: byte; //Ramp Y
  37. RAMPZ: byte; //Ramp Z
  38. EIND: byte; //Extended Indirect Jump
  39. SPL: byte; //Stack Pointer Low
  40. SPH: byte; //Stack Pointer High
  41. SREG: byte; //Status Register
  42. const
  43. // CCP
  44. CCPmask = $FF;
  45. CCP_SPM = $9D;
  46. CCP_IOREG = $D8;
  47. // Global Interrupt Enable Flag
  48. Ibm = $80;
  49. // Transfer Bit
  50. Tbm = $40;
  51. // Half Carry Flag
  52. Hbm = $20;
  53. // N Exclusive Or V Flag
  54. Sbm = $10;
  55. // Two's Complement Overflow Flag
  56. Vbm = $08;
  57. // Negative Flag
  58. Nbm = $04;
  59. // Zero Flag
  60. Zbm = $02;
  61. // Carry Flag
  62. Cbm = $01;
  63. end;
  64. TCLK = object //Clock System
  65. CTRL: byte; //Control Register
  66. PSCTRL: byte; //Prescaler Control Register
  67. LOCK: byte; //Lock register
  68. RTCCTRL: byte; //RTC Control Register
  69. const
  70. // CLK_SCLKSEL
  71. SCLKSELmask = $07;
  72. SCLKSEL_RC2M = $00;
  73. SCLKSEL_RC32M = $01;
  74. SCLKSEL_RC32K = $02;
  75. SCLKSEL_XOSC = $03;
  76. SCLKSEL_PLL = $04;
  77. // CLK_PSADIV
  78. PSADIVmask = $7C;
  79. PSADIV_1 = $00;
  80. PSADIV_2 = $04;
  81. PSADIV_4 = $0C;
  82. PSADIV_8 = $14;
  83. PSADIV_16 = $1C;
  84. PSADIV_32 = $24;
  85. PSADIV_64 = $2C;
  86. PSADIV_128 = $34;
  87. PSADIV_256 = $3C;
  88. PSADIV_512 = $44;
  89. // CLK_PSBCDIV
  90. PSBCDIVmask = $03;
  91. PSBCDIV_1_1 = $00;
  92. PSBCDIV_1_2 = $01;
  93. PSBCDIV_4_1 = $02;
  94. PSBCDIV_2_2 = $03;
  95. // Clock System Lock
  96. LOCKbm = $01;
  97. // CLK_RTCSRC
  98. RTCSRCmask = $0E;
  99. RTCSRC_ULP = $00;
  100. RTCSRC_TOSC = $02;
  101. RTCSRC_RCOSC = $04;
  102. RTCSRC_TOSC32 = $0A;
  103. RTCSRC_RCOSC32 = $0C;
  104. RTCSRC_EXTCLK = $0E;
  105. // Clock Source Enable
  106. RTCENbm = $01;
  107. end;
  108. TPR = object //Power Reduction
  109. PRGEN: byte; //General Power Reduction
  110. PRPA: byte; //Power Reduction Port A
  111. Reserved2: byte;
  112. PRPC: byte; //Power Reduction Port C
  113. PRPD: byte; //Power Reduction Port D
  114. PRPE: byte; //Power Reduction Port E
  115. PRPF: byte; //Power Reduction Port F
  116. const
  117. // Real-time Counter
  118. RTCbm = $04;
  119. // Event System
  120. EVSYSbm = $02;
  121. // Port A ADC
  122. ADCbm = $02;
  123. // Port A Analog Comparator
  124. ACbm = $01;
  125. // Port C Two-wire Interface
  126. TWIbm = $40;
  127. // Port C USART0
  128. USART0bm = $10;
  129. // Port C SPI
  130. SPIbm = $08;
  131. // Port C HIRES
  132. HIRESbm = $04;
  133. // Port C Timer/Counter1
  134. TC1bm = $02;
  135. // Port C Timer/Counter0
  136. TC0bm = $01;
  137. end;
  138. TSLEEP = object //Sleep Controller
  139. CTRL: byte; //Control Register
  140. const
  141. // SLEEP_SMODE
  142. SMODEmask = $0E;
  143. SMODE_IDLE = $00;
  144. SMODE_PDOWN = $04;
  145. SMODE_PSAVE = $06;
  146. SMODE_STDBY = $0C;
  147. SMODE_ESTDBY = $0E;
  148. // Sleep Enable
  149. SENbm = $01;
  150. end;
  151. TOSC = object //Oscillator
  152. CTRL: byte; //Control Register
  153. STATUS: byte; //Status Register
  154. XOSCCTRL: byte; //External Oscillator Control Register
  155. XOSCFAIL: byte; //Oscillator Failure Detection Register
  156. RC32KCAL: byte; //32.768 kHz Internal Oscillator Calibration Register
  157. PLLCTRL: byte; //PLL Control Register
  158. DFLLCTRL: byte; //DFLL Control Register
  159. const
  160. // PLL Enable
  161. PLLENbm = $10;
  162. // External Oscillator Enable
  163. XOSCENbm = $08;
  164. // Internal 32.768 kHz RC Oscillator Enable
  165. RC32KENbm = $04;
  166. // Internal 32 MHz RC Oscillator Enable
  167. RC32MENbm = $02;
  168. // Internal 2 MHz RC Oscillator Enable
  169. RC2MENbm = $01;
  170. // PLL Ready
  171. PLLRDYbm = $10;
  172. // External Oscillator Ready
  173. XOSCRDYbm = $08;
  174. // Internal 32.768 kHz RC Oscillator Ready
  175. RC32KRDYbm = $04;
  176. // Internal 32 MHz RC Oscillator Ready
  177. RC32MRDYbm = $02;
  178. // Internal 2 MHz RC Oscillator Ready
  179. RC2MRDYbm = $01;
  180. // OSC_FRQRANGE
  181. FRQRANGEmask = $C0;
  182. FRQRANGE_04TO2 = $00;
  183. FRQRANGE_2TO9 = $40;
  184. FRQRANGE_9TO12 = $80;
  185. FRQRANGE_12TO16 = $C0;
  186. // 32.768 kHz XTAL OSC Low-power Mode
  187. X32KLPMbm = $20;
  188. // 16 MHz Crystal Oscillator High Power mode
  189. XOSCPWRbm = $10;
  190. // OSC_XOSCSEL
  191. XOSCSELmask = $0F;
  192. XOSCSEL_EXTCLK = $00;
  193. XOSCSEL_32KHz = $02;
  194. XOSCSEL_XTAL_256CLK = $03;
  195. XOSCSEL_XTAL_1KCLK = $07;
  196. XOSCSEL_XTAL_16KCLK = $0B;
  197. // PLL Failure Detection Interrupt Flag
  198. PLLFDIFbm = $08;
  199. // PLL Failure Detection Enable
  200. PLLFDENbm = $04;
  201. // XOSC Failure Detection Interrupt Flag
  202. XOSCFDIFbm = $02;
  203. // XOSC Failure Detection Enable
  204. XOSCFDENbm = $01;
  205. // OSC_PLLSRC
  206. PLLSRCmask = $C0;
  207. PLLSRC_RC2M = $00;
  208. PLLSRC_RC32M = $80;
  209. PLLSRC_XOSC = $C0;
  210. // Divide by 2
  211. PLLDIVbm = $20;
  212. // Multiplication Factor
  213. PLLFAC0bm = $01;
  214. PLLFAC1bm = $02;
  215. PLLFAC2bm = $04;
  216. PLLFAC3bm = $08;
  217. PLLFAC4bm = $10;
  218. // OSC_RC32MCREF
  219. RC32MCREFmask = $06;
  220. RC32MCREF_RC32K = $00;
  221. RC32MCREF_XOSC32K = $02;
  222. // OSC_RC2MCREF
  223. RC2MCREFmask = $01;
  224. RC2MCREF_RC32K = $00;
  225. RC2MCREF_XOSC32K = $01;
  226. end;
  227. TDFLL = object //DFLL
  228. CTRL: byte; //Control Register
  229. Reserved1: byte;
  230. CALA: byte; //Calibration Register A
  231. CALB: byte; //Calibration Register B
  232. COMP0: byte; //Oscillator Compare Register 0
  233. COMP1: byte; //Oscillator Compare Register 1
  234. COMP2: byte; //Oscillator Compare Register 2
  235. const
  236. // DFLL Enable
  237. ENABLEbm = $01;
  238. // DFLL Calibration Value A
  239. CALL0bm = $01;
  240. CALL1bm = $02;
  241. CALL2bm = $04;
  242. CALL3bm = $08;
  243. CALL4bm = $10;
  244. CALL5bm = $20;
  245. CALL6bm = $40;
  246. // DFLL Calibration Value B
  247. CALH0bm = $01;
  248. CALH1bm = $02;
  249. CALH2bm = $04;
  250. CALH3bm = $08;
  251. CALH4bm = $10;
  252. CALH5bm = $20;
  253. end;
  254. TRST = object //Reset
  255. STATUS: byte; //Status Register
  256. CTRL: byte; //Control Register
  257. const
  258. // Spike Detection Reset Flag
  259. SDRFbm = $40;
  260. // Software Reset Flag
  261. SRFbm = $20;
  262. // Programming and Debug Interface Interface Reset Flag
  263. PDIRFbm = $10;
  264. // Watchdog Reset Flag
  265. WDRFbm = $08;
  266. // Brown-out Reset Flag
  267. BORFbm = $04;
  268. // External Reset Flag
  269. EXTRFbm = $02;
  270. // Power-on Reset Flag
  271. PORFbm = $01;
  272. // Software Reset
  273. SWRSTbm = $01;
  274. end;
  275. TWDT = object //Watch-Dog Timer
  276. CTRL: byte; //Control
  277. WINCTRL: byte; //Windowed Mode Control
  278. STATUS: byte; //Status
  279. const
  280. // WDT_PER
  281. PERmask = $3C;
  282. PER_8CLK = $00;
  283. PER_16CLK = $04;
  284. PER_32CLK = $08;
  285. PER_64CLK = $0C;
  286. PER_128CLK = $10;
  287. PER_256CLK = $14;
  288. PER_512CLK = $18;
  289. PER_1KCLK = $1C;
  290. PER_2KCLK = $20;
  291. PER_4KCLK = $24;
  292. PER_8KCLK = $28;
  293. // Enable
  294. ENABLEbm = $02;
  295. // Change Enable
  296. CENbm = $01;
  297. // WDT_WPER
  298. WPERmask = $3C;
  299. WPER_8CLK = $00;
  300. WPER_16CLK = $04;
  301. WPER_32CLK = $08;
  302. WPER_64CLK = $0C;
  303. WPER_128CLK = $10;
  304. WPER_256CLK = $14;
  305. WPER_512CLK = $18;
  306. WPER_1KCLK = $1C;
  307. WPER_2KCLK = $20;
  308. WPER_4KCLK = $24;
  309. WPER_8KCLK = $28;
  310. // Windowed Mode Enable
  311. WENbm = $02;
  312. // Windowed Mode Change Enable
  313. WCENbm = $01;
  314. // Synchronization busy
  315. SYNCBUSYbm = $01;
  316. end;
  317. TMCU = object //MCU Control
  318. DEVID0: byte; //Device ID byte 0
  319. DEVID1: byte; //Device ID byte 1
  320. DEVID2: byte; //Device ID byte 2
  321. REVID: byte; //Revision ID
  322. Reserved4: byte;
  323. Reserved5: byte;
  324. Reserved6: byte;
  325. ANAINIT: byte; //Analog Startup Delay
  326. EVSYSLOCK: byte; //Event System Lock
  327. AWEXLOCK: byte; //AWEX Lock
  328. const
  329. // Analog startup delay Port A
  330. STARTUPDLYA0bm = $01;
  331. STARTUPDLYA1bm = $02;
  332. // Event Channel 0-3 Lock
  333. EVSYS0LOCKbm = $01;
  334. // AWeX on T/C C0 Lock
  335. AWEXCLOCKbm = $01;
  336. end;
  337. TPMIC = object //Programmable Multi-level Interrupt Controller
  338. STATUS: byte; //Status Register
  339. INTPRI: byte; //Interrupt Priority
  340. CTRL: byte; //Control Register
  341. const
  342. // Non-maskable Interrupt Executing
  343. NMIEXbm = $80;
  344. // High Level Interrupt Executing
  345. HILVLEXbm = $04;
  346. // Medium Level Interrupt Executing
  347. MEDLVLEXbm = $02;
  348. // Low Level Interrupt Executing
  349. LOLVLEXbm = $01;
  350. // Round-Robin Priority Enable
  351. RRENbm = $80;
  352. // Interrupt Vector Select
  353. IVSELbm = $40;
  354. // High Level Enable
  355. HILVLENbm = $04;
  356. // Medium Level Enable
  357. MEDLVLENbm = $02;
  358. // Low Level Enable
  359. LOLVLENbm = $01;
  360. end;
  361. TPORTCFG = object //I/O port Configuration
  362. MPCMASK: byte; //Multi-pin Configuration Mask
  363. Reserved1: byte;
  364. VPCTRLA: byte; //Virtual Port Control Register A
  365. VPCTRLB: byte; //Virtual Port Control Register B
  366. CLKEVOUT: byte; //Clock and Event Out Register
  367. Reserved5: byte;
  368. EVOUTSEL: byte; //Event Output Select
  369. const
  370. // VP1MAP
  371. VP1MAPmask = $F0;
  372. VP1MAPPORTA = $00;
  373. VP1MAPPORTB = $10;
  374. VP1MAPPORTC = $20;
  375. VP1MAPPORTD = $30;
  376. VP1MAPPORTE = $40;
  377. VP1MAPPORTF = $50;
  378. VP1MAPPORTG = $60;
  379. VP1MAPPORTH = $70;
  380. VP1MAPPORTJ = $80;
  381. VP1MAPPORTK = $90;
  382. VP1MAPPORTL = $A0;
  383. VP1MAPPORTM = $B0;
  384. VP1MAPPORTN = $C0;
  385. VP1MAPPORTP = $D0;
  386. VP1MAPPORTQ = $E0;
  387. VP1MAPPORTR = $F0;
  388. // VP0MAP
  389. VP0MAPmask = $0F;
  390. VP0MAPPORTA = $00;
  391. VP0MAPPORTB = $01;
  392. VP0MAPPORTC = $02;
  393. VP0MAPPORTD = $03;
  394. VP0MAPPORTE = $04;
  395. VP0MAPPORTF = $05;
  396. VP0MAPPORTG = $06;
  397. VP0MAPPORTH = $07;
  398. VP0MAPPORTJ = $08;
  399. VP0MAPPORTK = $09;
  400. VP0MAPPORTL = $0A;
  401. VP0MAPPORTM = $0B;
  402. VP0MAPPORTN = $0C;
  403. VP0MAPPORTP = $0D;
  404. VP0MAPPORTQ = $0E;
  405. VP0MAPPORTR = $0F;
  406. // VP3MAP
  407. VP3MAPmask = $F0;
  408. VP3MAPPORTA = $00;
  409. VP3MAPPORTB = $10;
  410. VP3MAPPORTC = $20;
  411. VP3MAPPORTD = $30;
  412. VP3MAPPORTE = $40;
  413. VP3MAPPORTF = $50;
  414. VP3MAPPORTG = $60;
  415. VP3MAPPORTH = $70;
  416. VP3MAPPORTJ = $80;
  417. VP3MAPPORTK = $90;
  418. VP3MAPPORTL = $A0;
  419. VP3MAPPORTM = $B0;
  420. VP3MAPPORTN = $C0;
  421. VP3MAPPORTP = $D0;
  422. VP3MAPPORTQ = $E0;
  423. VP3MAPPORTR = $F0;
  424. // VP2MAP
  425. VP2MAPmask = $0F;
  426. VP2MAPPORTA = $00;
  427. VP2MAPPORTB = $01;
  428. VP2MAPPORTC = $02;
  429. VP2MAPPORTD = $03;
  430. VP2MAPPORTE = $04;
  431. VP2MAPPORTF = $05;
  432. VP2MAPPORTG = $06;
  433. VP2MAPPORTH = $07;
  434. VP2MAPPORTJ = $08;
  435. VP2MAPPORTK = $09;
  436. VP2MAPPORTL = $0A;
  437. VP2MAPPORTM = $0B;
  438. VP2MAPPORTN = $0C;
  439. VP2MAPPORTP = $0D;
  440. VP2MAPPORTQ = $0E;
  441. VP2MAPPORTR = $0F;
  442. // PORTCFG_CLKOUT
  443. CLKOUTmask = $03;
  444. CLKOUT_OFF = $00;
  445. CLKOUT_PC7 = $01;
  446. CLKOUT_PD7 = $02;
  447. CLKOUT_PE7 = $03;
  448. // PORTCFG_CLKOUTSEL
  449. CLKOUTSELmask = $0C;
  450. CLKOUTSEL_CLK1X = $00;
  451. CLKOUTSEL_CLK2X = $04;
  452. CLKOUTSEL_CLK4X = $08;
  453. // PORTCFG_EVOUT
  454. EVOUTmask = $30;
  455. EVOUT_OFF = $00;
  456. EVOUT_PC7 = $10;
  457. EVOUT_PD7 = $20;
  458. EVOUT_PE7 = $30;
  459. // RTC Clock Output
  460. RTCOUTbm = $40;
  461. // Peripheral Clock and Event Output pin Select
  462. CLKEVPINbm = $80;
  463. // PORTCFG_EVOUTSEL
  464. EVOUTSELmask = $07;
  465. EVOUTSEL_0 = $00;
  466. EVOUTSEL_1 = $01;
  467. EVOUTSEL_2 = $02;
  468. EVOUTSEL_3 = $03;
  469. end;
  470. TCRC = object //Cyclic Redundancy Checker
  471. CTRL: byte; //Control Register
  472. STATUS: byte; //Status Register
  473. Reserved2: byte;
  474. DATAIN: byte; //Data Input
  475. CHECKSUM0: byte; //Checksum byte 0
  476. CHECKSUM1: byte; //Checksum byte 1
  477. CHECKSUM2: byte; //Checksum byte 2
  478. CHECKSUM3: byte; //Checksum byte 3
  479. const
  480. // CRC_RESET
  481. RESETmask = $C0;
  482. RESET_NO = $00;
  483. RESET_RESET0 = $80;
  484. RESET_RESET1 = $C0;
  485. // CRC Mode
  486. CRC32bm = $20;
  487. // CRC_SOURCE
  488. SOURCEmask = $0F;
  489. SOURCE_DISABLE = $00;
  490. SOURCE_IO = $01;
  491. SOURCE_FLASH = $02;
  492. // Zero detection
  493. ZERObm = $02;
  494. // Busy
  495. BUSYbm = $01;
  496. end;
  497. TEVSYS = object //Event System
  498. CH0MUX: byte; //Event Channel 0 Multiplexer
  499. CH1MUX: byte; //Event Channel 1 Multiplexer
  500. CH2MUX: byte; //Event Channel 2 Multiplexer
  501. CH3MUX: byte; //Event Channel 3 Multiplexer
  502. Reserved4: byte;
  503. Reserved5: byte;
  504. Reserved6: byte;
  505. Reserved7: byte;
  506. CH0CTRL: byte; //Channel 0 Control Register
  507. CH1CTRL: byte; //Channel 1 Control Register
  508. CH2CTRL: byte; //Channel 2 Control Register
  509. CH3CTRL: byte; //Channel 3 Control Register
  510. Reserved12: byte;
  511. Reserved13: byte;
  512. Reserved14: byte;
  513. Reserved15: byte;
  514. STROBE: byte; //Event Strobe
  515. DATA: byte; //Event Data
  516. const
  517. // EVSYS_CHMUX
  518. CHMUXmask = $FF;
  519. CHMUX_OFF = $00;
  520. CHMUX_RTC_OVF = $08;
  521. CHMUX_RTC_CMP = $09;
  522. CHMUX_ACA_CH0 = $10;
  523. CHMUX_ACA_CH1 = $11;
  524. CHMUX_ACA_WIN = $12;
  525. CHMUX_ADCA_CH0 = $20;
  526. CHMUX_PORTA_PIN0 = $50;
  527. CHMUX_PORTA_PIN1 = $51;
  528. CHMUX_PORTA_PIN2 = $52;
  529. CHMUX_PORTA_PIN3 = $53;
  530. CHMUX_PORTA_PIN4 = $54;
  531. CHMUX_PORTA_PIN5 = $55;
  532. CHMUX_PORTA_PIN6 = $56;
  533. CHMUX_PORTA_PIN7 = $57;
  534. CHMUX_PORTB_PIN0 = $58;
  535. CHMUX_PORTB_PIN1 = $59;
  536. CHMUX_PORTB_PIN2 = $5A;
  537. CHMUX_PORTB_PIN3 = $5B;
  538. CHMUX_PORTB_PIN4 = $5C;
  539. CHMUX_PORTB_PIN5 = $5D;
  540. CHMUX_PORTB_PIN6 = $5E;
  541. CHMUX_PORTB_PIN7 = $5F;
  542. CHMUX_PORTC_PIN0 = $60;
  543. CHMUX_PORTC_PIN1 = $61;
  544. CHMUX_PORTC_PIN2 = $62;
  545. CHMUX_PORTC_PIN3 = $63;
  546. CHMUX_PORTC_PIN4 = $64;
  547. CHMUX_PORTC_PIN5 = $65;
  548. CHMUX_PORTC_PIN6 = $66;
  549. CHMUX_PORTC_PIN7 = $67;
  550. CHMUX_PORTD_PIN0 = $68;
  551. CHMUX_PORTD_PIN1 = $69;
  552. CHMUX_PORTD_PIN2 = $6A;
  553. CHMUX_PORTD_PIN3 = $6B;
  554. CHMUX_PORTD_PIN4 = $6C;
  555. CHMUX_PORTD_PIN5 = $6D;
  556. CHMUX_PORTD_PIN6 = $6E;
  557. CHMUX_PORTD_PIN7 = $6F;
  558. CHMUX_PORTE_PIN0 = $70;
  559. CHMUX_PORTE_PIN1 = $71;
  560. CHMUX_PORTE_PIN2 = $72;
  561. CHMUX_PORTE_PIN3 = $73;
  562. CHMUX_PORTE_PIN4 = $74;
  563. CHMUX_PORTE_PIN5 = $75;
  564. CHMUX_PORTE_PIN6 = $76;
  565. CHMUX_PORTE_PIN7 = $77;
  566. CHMUX_PORTF_PIN0 = $78;
  567. CHMUX_PORTF_PIN1 = $79;
  568. CHMUX_PORTF_PIN2 = $7A;
  569. CHMUX_PORTF_PIN3 = $7B;
  570. CHMUX_PORTF_PIN4 = $7C;
  571. CHMUX_PORTF_PIN5 = $7D;
  572. CHMUX_PORTF_PIN6 = $7E;
  573. CHMUX_PORTF_PIN7 = $7F;
  574. CHMUX_PRESCALER_1 = $80;
  575. CHMUX_PRESCALER_2 = $81;
  576. CHMUX_PRESCALER_4 = $82;
  577. CHMUX_PRESCALER_8 = $83;
  578. CHMUX_PRESCALER_16 = $84;
  579. CHMUX_PRESCALER_32 = $85;
  580. CHMUX_PRESCALER_64 = $86;
  581. CHMUX_PRESCALER_128 = $87;
  582. CHMUX_PRESCALER_256 = $88;
  583. CHMUX_PRESCALER_512 = $89;
  584. CHMUX_PRESCALER_1024 = $8A;
  585. CHMUX_PRESCALER_2048 = $8B;
  586. CHMUX_PRESCALER_4096 = $8C;
  587. CHMUX_PRESCALER_8192 = $8D;
  588. CHMUX_PRESCALER_16384 = $8E;
  589. CHMUX_PRESCALER_32768 = $8F;
  590. CHMUX_TCC0_OVF = $C0;
  591. CHMUX_TCC0_ERR = $C1;
  592. CHMUX_TCC0_CCA = $C4;
  593. CHMUX_TCC0_CCB = $C5;
  594. CHMUX_TCC0_CCC = $C6;
  595. CHMUX_TCC0_CCD = $C7;
  596. CHMUX_TCC1_OVF = $C8;
  597. CHMUX_TCC1_ERR = $C9;
  598. CHMUX_TCC1_CCA = $CC;
  599. CHMUX_TCC1_CCB = $CD;
  600. CHMUX_TCD0_OVF = $D0;
  601. CHMUX_TCD0_ERR = $D1;
  602. CHMUX_TCD0_CCA = $D4;
  603. CHMUX_TCD0_CCB = $D5;
  604. CHMUX_TCD0_CCC = $D6;
  605. CHMUX_TCD0_CCD = $D7;
  606. CHMUX_TCE0_OVF = $E0;
  607. CHMUX_TCE0_ERR = $E1;
  608. CHMUX_TCE0_CCA = $E4;
  609. CHMUX_TCE0_CCB = $E5;
  610. CHMUX_TCE0_CCC = $E6;
  611. CHMUX_TCE0_CCD = $E7;
  612. CHMUX_TCF0_OVF = $F0;
  613. CHMUX_TCF0_ERR = $F1;
  614. CHMUX_TCF0_CCA = $F4;
  615. CHMUX_TCF0_CCB = $F5;
  616. CHMUX_TCF0_CCC = $F6;
  617. CHMUX_TCF0_CCD = $F7;
  618. // EVSYS_QDIRM
  619. QDIRMmask = $60;
  620. QDIRM_00 = $00;
  621. QDIRM_01 = $20;
  622. QDIRM_10 = $40;
  623. QDIRM_11 = $60;
  624. // Quadrature Decoder Index Enable
  625. QDIENbm = $10;
  626. // Quadrature Decoder Enable
  627. QDENbm = $08;
  628. // EVSYS_DIGFILT
  629. DIGFILTmask = $07;
  630. DIGFILT_1SAMPLE = $00;
  631. DIGFILT_2SAMPLES = $01;
  632. DIGFILT_3SAMPLES = $02;
  633. DIGFILT_4SAMPLES = $03;
  634. DIGFILT_5SAMPLES = $04;
  635. DIGFILT_6SAMPLES = $05;
  636. DIGFILT_7SAMPLES = $06;
  637. DIGFILT_8SAMPLES = $07;
  638. end;
  639. TNVM = object //Non-volatile Memory Controller
  640. ADDR0: byte; //Address Register 0
  641. ADDR1: byte; //Address Register 1
  642. ADDR2: byte; //Address Register 2
  643. Reserved3: byte;
  644. DATA0: byte; //Data Register 0
  645. DATA1: byte; //Data Register 1
  646. DATA2: byte; //Data Register 2
  647. Reserved7: byte;
  648. Reserved8: byte;
  649. Reserved9: byte;
  650. CMD: byte; //Command
  651. CTRLA: byte; //Control Register A
  652. CTRLB: byte; //Control Register B
  653. INTCTRL: byte; //Interrupt Control
  654. Reserved14: byte;
  655. STATUS: byte; //Status
  656. LOCKBITS: byte; //Lock Bits
  657. const
  658. // NVM_CMD
  659. CMDmask = $7F;
  660. CMD_NO_OPERATION = $00;
  661. CMD_READ_USER_SIG_ROW = $01;
  662. CMD_READ_CALIB_ROW = $02;
  663. CMD_READ_EEPROM = $06;
  664. CMD_READ_FUSES = $07;
  665. CMD_WRITE_LOCK_BITS = $08;
  666. CMD_ERASE_USER_SIG_ROW = $18;
  667. CMD_WRITE_USER_SIG_ROW = $1A;
  668. CMD_ERASE_APP = $20;
  669. CMD_ERASE_APP_PAGE = $22;
  670. CMD_LOAD_FLASH_BUFFER = $23;
  671. CMD_WRITE_APP_PAGE = $24;
  672. CMD_ERASE_WRITE_APP_PAGE = $25;
  673. CMD_ERASE_FLASH_BUFFER = $26;
  674. CMD_ERASE_BOOT_PAGE = $2A;
  675. CMD_ERASE_FLASH_PAGE = $2B;
  676. CMD_WRITE_BOOT_PAGE = $2C;
  677. CMD_ERASE_WRITE_BOOT_PAGE = $2D;
  678. CMD_WRITE_FLASH_PAGE = $2E;
  679. CMD_ERASE_WRITE_FLASH_PAGE = $2F;
  680. CMD_ERASE_EEPROM = $30;
  681. CMD_ERASE_EEPROM_PAGE = $32;
  682. CMD_LOAD_EEPROM_BUFFER = $33;
  683. CMD_WRITE_EEPROM_PAGE = $34;
  684. CMD_ERASE_WRITE_EEPROM_PAGE = $35;
  685. CMD_ERASE_EEPROM_BUFFER = $36;
  686. CMD_APP_CRC = $38;
  687. CMD_BOOT_CRC = $39;
  688. CMD_FLASH_RANGE_CRC = $3A;
  689. CMD_CHIP_ERASE = $40;
  690. CMD_READ_NVM = $43;
  691. CMD_WRITE_FUSE = $4C;
  692. CMD_ERASE_BOOT = $68;
  693. CMD_FLASH_CRC = $78;
  694. // Command Execute
  695. CMDEXbm = $01;
  696. // EEPROM Mapping Enable
  697. EEMAPENbm = $08;
  698. // Flash Power Reduction Enable
  699. FPRMbm = $04;
  700. // EEPROM Power Reduction Enable
  701. EPRMbm = $02;
  702. // SPM Lock
  703. SPMLOCKbm = $01;
  704. // NVM_SPMLVL
  705. SPMLVLmask = $0C;
  706. SPMLVL_OFF = $00;
  707. SPMLVL_LO = $04;
  708. SPMLVL_MED = $08;
  709. SPMLVL_HI = $0C;
  710. // NVM_EELVL
  711. EELVLmask = $03;
  712. EELVL_OFF = $00;
  713. EELVL_LO = $01;
  714. EELVL_MED = $02;
  715. EELVL_HI = $03;
  716. // Non-volatile Memory Busy
  717. NVMBUSYbm = $80;
  718. // Flash Memory Busy
  719. FBUSYbm = $40;
  720. // EEPROM Page Buffer Active Loading
  721. EELOADbm = $02;
  722. // Flash Page Buffer Active Loading
  723. FLOADbm = $01;
  724. // NVM_BLBB
  725. BLBBmask = $C0;
  726. BLBB_RWLOCK = $00;
  727. BLBB_RLOCK = $40;
  728. BLBB_WLOCK = $80;
  729. BLBB_NOLOCK = $C0;
  730. // NVM_BLBA
  731. BLBAmask = $30;
  732. BLBA_RWLOCK = $00;
  733. BLBA_RLOCK = $10;
  734. BLBA_WLOCK = $20;
  735. BLBA_NOLOCK = $30;
  736. // NVM_BLBAT
  737. BLBATmask = $0C;
  738. BLBAT_RWLOCK = $00;
  739. BLBAT_RLOCK = $04;
  740. BLBAT_WLOCK = $08;
  741. BLBAT_NOLOCK = $0C;
  742. // NVM_LB
  743. LBmask = $03;
  744. LB_RWLOCK = $00;
  745. LB_WLOCK = $02;
  746. LB_NOLOCK = $03;
  747. end;
  748. TADC_CH = object //ADC Channel
  749. CTRL: byte; //Control Register
  750. MUXCTRL: byte; //MUX Control
  751. INTCTRL: byte; //Channel Interrupt Control Register
  752. INTFLAGS: byte; //Interrupt Flags
  753. RES: word; //Channel Result
  754. SCAN: byte; //Input Channel Scan
  755. const
  756. // Channel Start Conversion
  757. STARTbm = $80;
  758. // GAIN
  759. GAINmask = $1C;
  760. GAIN1X = $00;
  761. GAIN2X = $04;
  762. GAIN4X = $08;
  763. GAIN8X = $0C;
  764. GAIN16X = $10;
  765. GAIN32X = $14;
  766. GAIN64X = $18;
  767. GAINDIV2 = $1C;
  768. // INPUTMODE
  769. INPUTMODEmask = $03;
  770. INPUTMODEINTERNAL = $00;
  771. INPUTMODESINGLEENDED = $01;
  772. INPUTMODEDIFF = $02;
  773. INPUTMODEDIFFWGAIN = $03;
  774. // MUXPOS
  775. MUXPOSmask = $78;
  776. MUXPOSPIN0 = $00;
  777. MUXPOSPIN1 = $08;
  778. MUXPOSPIN2 = $10;
  779. MUXPOSPIN3 = $18;
  780. MUXPOSPIN4 = $20;
  781. MUXPOSPIN5 = $28;
  782. MUXPOSPIN6 = $30;
  783. MUXPOSPIN7 = $38;
  784. MUXPOSPIN8 = $40;
  785. MUXPOSPIN9 = $48;
  786. MUXPOSPIN10 = $50;
  787. MUXPOSPIN11 = $58;
  788. // MUXINT
  789. MUXINTmask = $78;
  790. MUXINTTEMP = $00;
  791. MUXINTBANDGAP = $08;
  792. MUXINTSCALEDVCC = $10;
  793. // MUXNEG
  794. MUXNEGmask = $07;
  795. MUXNEGPIN0 = $00;
  796. MUXNEGPIN1 = $01;
  797. MUXNEGPIN2 = $02;
  798. MUXNEGPIN3 = $03;
  799. MUXNEGPIN4 = $00;
  800. MUXNEGPIN5 = $01;
  801. MUXNEGPIN6 = $02;
  802. MUXNEGPIN7 = $03;
  803. // MUXNEGL
  804. MUXNEGLmask = $07;
  805. MUXNEGLPIN0 = $00;
  806. MUXNEGLPIN1 = $01;
  807. MUXNEGLPIN2 = $02;
  808. MUXNEGLPIN3 = $03;
  809. MUXNEGLGND = $05;
  810. MUXNEGLINTGND = $07;
  811. // MUXNEGH
  812. MUXNEGHmask = $07;
  813. MUXNEGHPIN4 = $00;
  814. MUXNEGHPIN5 = $01;
  815. MUXNEGHPIN6 = $02;
  816. MUXNEGHPIN7 = $03;
  817. MUXNEGHINTGND = $04;
  818. MUXNEGHGND = $07;
  819. // INTMODE
  820. INTMODEmask = $0C;
  821. INTMODECOMPLETE = $00;
  822. INTMODEBELOW = $04;
  823. INTMODEABOVE = $0C;
  824. // INTLVL
  825. INTLVLmask = $03;
  826. INTLVLOFF = $00;
  827. INTLVLLO = $01;
  828. INTLVLMED = $02;
  829. INTLVLHI = $03;
  830. // Channel Interrupt Flag
  831. CHIFbm = $01;
  832. // Positive MUX setting offset
  833. OFFSET0bm = $10;
  834. OFFSET1bm = $20;
  835. OFFSET2bm = $40;
  836. OFFSET3bm = $80;
  837. // Number of Channels included in scan
  838. SCANNUM0bm = $01;
  839. SCANNUM1bm = $02;
  840. SCANNUM2bm = $04;
  841. SCANNUM3bm = $08;
  842. end;
  843. TADC = object //Analog-to-Digital Converter
  844. CTRLA: byte; //Control Register A
  845. CTRLB: byte; //Control Register B
  846. REFCTRL: byte; //Reference Control
  847. EVCTRL: byte; //Event Control
  848. PRESCALER: byte; //Clock Prescaler
  849. Reserved5: byte;
  850. INTFLAGS: byte; //Interrupt Flags
  851. TEMP: byte; //Temporary Register
  852. SAMPCTRL: byte; //Sampling Time Control Register
  853. Reserved9: byte;
  854. Reserved10: byte;
  855. Reserved11: byte;
  856. CAL: word; //Calibration Value
  857. Reserved14: byte;
  858. Reserved15: byte;
  859. CH0RES: word; //Channel 0 Result
  860. Reserved18: byte;
  861. Reserved19: byte;
  862. Reserved20: byte;
  863. Reserved21: byte;
  864. Reserved22: byte;
  865. Reserved23: byte;
  866. CMP: word; //Compare Value
  867. Reserved26: byte;
  868. Reserved27: byte;
  869. Reserved28: byte;
  870. Reserved29: byte;
  871. Reserved30: byte;
  872. Reserved31: byte;
  873. CH0: TADC_CH; //ADC Channel 0
  874. const
  875. // Channel 0 Start Conversion
  876. CH0STARTbm = $04;
  877. // ADC Flush
  878. FLUSHbm = $02;
  879. // Enable ADC
  880. ENABLEbm = $01;
  881. // ADC_CURRLIMIT
  882. CURRLIMITmask = $60;
  883. CURRLIMIT_NO = $00;
  884. CURRLIMIT_LOW = $20;
  885. CURRLIMIT_MED = $40;
  886. CURRLIMIT_HIGH = $60;
  887. // Conversion Mode
  888. CONMODEbm = $10;
  889. // Free Running Mode Enable
  890. FREERUNbm = $08;
  891. // ADC_RESOLUTION
  892. RESOLUTIONmask = $06;
  893. RESOLUTION_12BIT = $00;
  894. RESOLUTION_8BIT = $04;
  895. RESOLUTION_LEFT12BIT = $06;
  896. // ADC_REFSEL
  897. REFSELmask = $70;
  898. REFSEL_INT1V = $00;
  899. REFSEL_INTVCC = $10;
  900. REFSEL_AREFA = $20;
  901. REFSEL_AREFB = $30;
  902. REFSEL_INTVCC2 = $40;
  903. // Bandgap enable
  904. BANDGAPbm = $02;
  905. // Temperature Reference Enable
  906. TEMPREFbm = $01;
  907. // ADC_EVSEL
  908. EVSELmask = $18;
  909. EVSEL_0 = $00;
  910. EVSEL_1 = $08;
  911. EVSEL_2 = $10;
  912. EVSEL_3 = $18;
  913. // ADC_EVACT
  914. EVACTmask = $07;
  915. EVACT_NONE = $00;
  916. EVACT_CH0 = $01;
  917. EVACT_SYNCSWEEP = $06;
  918. // ADC_PRESCALER
  919. PRESCALERmask = $07;
  920. PRESCALER_DIV4 = $00;
  921. PRESCALER_DIV8 = $01;
  922. PRESCALER_DIV16 = $02;
  923. PRESCALER_DIV32 = $03;
  924. PRESCALER_DIV64 = $04;
  925. PRESCALER_DIV128 = $05;
  926. PRESCALER_DIV256 = $06;
  927. PRESCALER_DIV512 = $07;
  928. // Channel 0 Interrupt Flag
  929. CH0IFbm = $01;
  930. // Sampling Time Control
  931. SAMPVAL0bm = $01;
  932. SAMPVAL1bm = $02;
  933. SAMPVAL2bm = $04;
  934. SAMPVAL3bm = $08;
  935. SAMPVAL4bm = $10;
  936. SAMPVAL5bm = $20;
  937. end;
  938. TAC = object //Analog Comparator
  939. AC0CTRL: byte; //Analog Comparator 0 Control
  940. AC1CTRL: byte; //Analog Comparator 1 Control
  941. AC0MUXCTRL: byte; //Analog Comparator 0 MUX Control
  942. AC1MUXCTRL: byte; //Analog Comparator 1 MUX Control
  943. CTRLA: byte; //Control Register A
  944. CTRLB: byte; //Control Register B
  945. WINCTRL: byte; //Window Mode Control
  946. STATUS: byte; //Status
  947. const
  948. // AC_INTMODE
  949. INTMODEmask = $C0;
  950. INTMODE_BOTHEDGES = $00;
  951. INTMODE_FALLING = $80;
  952. INTMODE_RISING = $C0;
  953. // AC_INTLVL
  954. INTLVLmask = $30;
  955. INTLVL_OFF = $00;
  956. INTLVL_LO = $10;
  957. INTLVL_MED = $20;
  958. INTLVL_HI = $30;
  959. // AC_HYSMODE
  960. HYSMODEmask = $06;
  961. HYSMODE_NO = $00;
  962. HYSMODE_SMALL = $02;
  963. HYSMODE_LARGE = $04;
  964. // Enable
  965. ENABLEbm = $01;
  966. // AC_MUXPOS
  967. MUXPOSmask = $38;
  968. MUXPOS_PIN0 = $00;
  969. MUXPOS_PIN1 = $08;
  970. MUXPOS_PIN2 = $10;
  971. MUXPOS_PIN3 = $18;
  972. MUXPOS_PIN4 = $20;
  973. MUXPOS_PIN5 = $28;
  974. MUXPOS_PIN6 = $30;
  975. // AC_MUXNEG
  976. MUXNEGmask = $07;
  977. MUXNEG_PIN0 = $00;
  978. MUXNEG_PIN1 = $01;
  979. MUXNEG_PIN3 = $02;
  980. MUXNEG_PIN5 = $03;
  981. MUXNEG_PIN7 = $04;
  982. MUXNEG_BANDGAP = $06;
  983. MUXNEG_SCALER = $07;
  984. // Analog Comparator 1 Output Enable
  985. AC1OUTbm = $02;
  986. // Analog Comparator 0 Output Enable
  987. AC0OUTbm = $01;
  988. // VCC Voltage Scaler Factor
  989. SCALEFAC0bm = $01;
  990. SCALEFAC1bm = $02;
  991. SCALEFAC2bm = $04;
  992. SCALEFAC3bm = $08;
  993. SCALEFAC4bm = $10;
  994. SCALEFAC5bm = $20;
  995. // Window Mode Enable
  996. WENbm = $10;
  997. // AC_WINTMODE
  998. WINTMODEmask = $0C;
  999. WINTMODE_ABOVE = $00;
  1000. WINTMODE_INSIDE = $04;
  1001. WINTMODE_BELOW = $08;
  1002. WINTMODE_OUTSIDE = $0C;
  1003. // AC_WINTLVL
  1004. WINTLVLmask = $03;
  1005. WINTLVL_OFF = $00;
  1006. WINTLVL_LO = $01;
  1007. WINTLVL_MED = $02;
  1008. WINTLVL_HI = $03;
  1009. // AC_WSTATE
  1010. WSTATEmask = $C0;
  1011. WSTATE_ABOVE = $00;
  1012. WSTATE_INSIDE = $40;
  1013. WSTATE_BELOW = $80;
  1014. // Analog Comparator 1 State
  1015. AC1STATEbm = $20;
  1016. // Analog Comparator 0 State
  1017. AC0STATEbm = $10;
  1018. // Window Mode Interrupt Flag
  1019. WIFbm = $04;
  1020. // Analog Comparator 1 Interrupt Flag
  1021. AC1IFbm = $02;
  1022. // Analog Comparator 0 Interrupt Flag
  1023. AC0IFbm = $01;
  1024. end;
  1025. TRTC = object //Real-Time Counter
  1026. CTRL: byte; //Control Register
  1027. STATUS: byte; //Status Register
  1028. INTCTRL: byte; //Interrupt Control Register
  1029. INTFLAGS: byte; //Interrupt Flags
  1030. TEMP: byte; //Temporary register
  1031. Reserved5: byte;
  1032. Reserved6: byte;
  1033. Reserved7: byte;
  1034. CNT: word; //Count Register
  1035. PER: word; //Period Register
  1036. COMP: word; //Compare Register
  1037. const
  1038. // RTC_PRESCALER
  1039. PRESCALERmask = $07;
  1040. PRESCALER_OFF = $00;
  1041. PRESCALER_DIV1 = $01;
  1042. PRESCALER_DIV2 = $02;
  1043. PRESCALER_DIV8 = $03;
  1044. PRESCALER_DIV16 = $04;
  1045. PRESCALER_DIV64 = $05;
  1046. PRESCALER_DIV256 = $06;
  1047. PRESCALER_DIV1024 = $07;
  1048. // Synchronization Busy Flag
  1049. SYNCBUSYbm = $01;
  1050. // RTC_COMPINTLVL
  1051. COMPINTLVLmask = $0C;
  1052. COMPINTLVL_OFF = $00;
  1053. COMPINTLVL_LO = $04;
  1054. COMPINTLVL_MED = $08;
  1055. COMPINTLVL_HI = $0C;
  1056. // RTC_OVFINTLVL
  1057. OVFINTLVLmask = $03;
  1058. OVFINTLVL_OFF = $00;
  1059. OVFINTLVL_LO = $01;
  1060. OVFINTLVL_MED = $02;
  1061. OVFINTLVL_HI = $03;
  1062. // Compare Match Interrupt Flag
  1063. COMPIFbm = $02;
  1064. // Overflow Interrupt Flag
  1065. OVFIFbm = $01;
  1066. end;
  1067. TTWI_MASTER = object //
  1068. CTRLA: byte; //Control Register A
  1069. CTRLB: byte; //Control Register B
  1070. CTRLC: byte; //Control Register C
  1071. STATUS: byte; //Status Register
  1072. BAUD: byte; //Baud Rate Control Register
  1073. ADDR: byte; //Address Register
  1074. DATA: byte; //Data Register
  1075. const
  1076. // INTLVL
  1077. INTLVLmask = $C0;
  1078. INTLVLOFF = $00;
  1079. INTLVLLO = $40;
  1080. INTLVLMED = $80;
  1081. INTLVLHI = $C0;
  1082. // Read Interrupt Enable
  1083. RIENbm = $20;
  1084. // Write Interrupt Enable
  1085. WIENbm = $10;
  1086. // Enable TWI Master
  1087. ENABLEbm = $08;
  1088. // TIMEOUT
  1089. TIMEOUTmask = $0C;
  1090. TIMEOUTDISABLED = $00;
  1091. TIMEOUT50US = $04;
  1092. TIMEOUT100US = $08;
  1093. TIMEOUT200US = $0C;
  1094. // Quick Command Enable
  1095. QCENbm = $02;
  1096. // Smart Mode Enable
  1097. SMENbm = $01;
  1098. // Acknowledge Action
  1099. ACKACTbm = $04;
  1100. // CMD
  1101. CMDmask = $03;
  1102. CMDNOACT = $00;
  1103. CMDREPSTART = $01;
  1104. CMDRECVTRANS = $02;
  1105. CMDSTOP = $03;
  1106. // Read Interrupt Flag
  1107. RIFbm = $80;
  1108. // Write Interrupt Flag
  1109. WIFbm = $40;
  1110. // Clock Hold
  1111. CLKHOLDbm = $20;
  1112. // Received Acknowledge
  1113. RXACKbm = $10;
  1114. // Arbitration Lost
  1115. ARBLOSTbm = $08;
  1116. // Bus Error
  1117. BUSERRbm = $04;
  1118. // BUSSTATE
  1119. BUSSTATEmask = $03;
  1120. BUSSTATEUNKNOWN = $00;
  1121. BUSSTATEIDLE = $01;
  1122. BUSSTATEOWNER = $02;
  1123. BUSSTATEBUSY = $03;
  1124. end;
  1125. TTWI_SLAVE = object //
  1126. CTRLA: byte; //Control Register A
  1127. CTRLB: byte; //Control Register B
  1128. STATUS: byte; //Status Register
  1129. ADDR: byte; //Address Register
  1130. DATA: byte; //Data Register
  1131. ADDRMASK: byte; //Address Mask Register
  1132. const
  1133. // INTLVL
  1134. INTLVLmask = $C0;
  1135. INTLVLOFF = $00;
  1136. INTLVLLO = $40;
  1137. INTLVLMED = $80;
  1138. INTLVLHI = $C0;
  1139. // Data Interrupt Enable
  1140. DIENbm = $20;
  1141. // Address/Stop Interrupt Enable
  1142. APIENbm = $10;
  1143. // Enable TWI Slave
  1144. ENABLEbm = $08;
  1145. // Stop Interrupt Enable
  1146. PIENbm = $04;
  1147. // Promiscuous Mode Enable
  1148. PMENbm = $02;
  1149. // Smart Mode Enable
  1150. SMENbm = $01;
  1151. // Acknowledge Action
  1152. ACKACTbm = $04;
  1153. // CMD
  1154. CMDmask = $03;
  1155. CMDNOACT = $00;
  1156. CMDCOMPTRANS = $02;
  1157. CMDRESPONSE = $03;
  1158. // Data Interrupt Flag
  1159. DIFbm = $80;
  1160. // Address/Stop Interrupt Flag
  1161. APIFbm = $40;
  1162. // Clock Hold
  1163. CLKHOLDbm = $20;
  1164. // Received Acknowledge
  1165. RXACKbm = $10;
  1166. // Collision
  1167. COLLbm = $08;
  1168. // Bus Error
  1169. BUSERRbm = $04;
  1170. // Read/Write Direction
  1171. DIRbm = $02;
  1172. // Slave Address or Stop
  1173. APbm = $01;
  1174. // Address Mask
  1175. ADDRMASK0bm = $02;
  1176. ADDRMASK1bm = $04;
  1177. ADDRMASK2bm = $08;
  1178. ADDRMASK3bm = $10;
  1179. ADDRMASK4bm = $20;
  1180. ADDRMASK5bm = $40;
  1181. ADDRMASK6bm = $80;
  1182. // Address Enable
  1183. ADDRENbm = $01;
  1184. end;
  1185. TTWI = object //Two-Wire Interface
  1186. CTRL: byte; //TWI Common Control Register
  1187. MASTER: TTWI_MASTER; //TWI master module
  1188. SLAVE: TTWI_SLAVE; //TWI slave module
  1189. const
  1190. // TWI_SDAHOLD
  1191. SDAHOLDmask = $06;
  1192. SDAHOLD_OFF = $00;
  1193. SDAHOLD_50NS = $02;
  1194. SDAHOLD_300NS = $04;
  1195. SDAHOLD_400NS = $06;
  1196. // External Driver Interface Enable
  1197. EDIENbm = $01;
  1198. end;
  1199. TPORT = object //I/O Ports
  1200. DIR: byte; //I/O Port Data Direction
  1201. DIRSET: byte; //I/O Port Data Direction Set
  1202. DIRCLR: byte; //I/O Port Data Direction Clear
  1203. DIRTGL: byte; //I/O Port Data Direction Toggle
  1204. OUT_: byte; //I/O Port Output
  1205. OUTSET: byte; //I/O Port Output Set
  1206. OUTCLR: byte; //I/O Port Output Clear
  1207. OUTTGL: byte; //I/O Port Output Toggle
  1208. IN_: byte; //I/O port Input
  1209. INTCTRL: byte; //Interrupt Control Register
  1210. INT0MASK: byte; //Port Interrupt 0 Mask
  1211. INT1MASK: byte; //Port Interrupt 1 Mask
  1212. INTFLAGS: byte; //Interrupt Flag Register
  1213. Reserved13: byte;
  1214. REMAP: byte; //I/O Port Pin Remap Register
  1215. Reserved15: byte;
  1216. PIN0CTRL: byte; //Pin 0 Control Register
  1217. PIN1CTRL: byte; //Pin 1 Control Register
  1218. PIN2CTRL: byte; //Pin 2 Control Register
  1219. PIN3CTRL: byte; //Pin 3 Control Register
  1220. PIN4CTRL: byte; //Pin 4 Control Register
  1221. PIN5CTRL: byte; //Pin 5 Control Register
  1222. PIN6CTRL: byte; //Pin 6 Control Register
  1223. PIN7CTRL: byte; //Pin 7 Control Register
  1224. const
  1225. // PORT_INT1LVL
  1226. INT1LVLmask = $0C;
  1227. INT1LVL_OFF = $00;
  1228. INT1LVL_LO = $04;
  1229. INT1LVL_MED = $08;
  1230. INT1LVL_HI = $0C;
  1231. // PORT_INT0LVL
  1232. INT0LVLmask = $03;
  1233. INT0LVL_OFF = $00;
  1234. INT0LVL_LO = $01;
  1235. INT0LVL_MED = $02;
  1236. INT0LVL_HI = $03;
  1237. // Port Interrupt 1 Flag
  1238. INT1IFbm = $02;
  1239. // Port Interrupt 0 Flag
  1240. INT0IFbm = $01;
  1241. // SPI
  1242. SPIbm = $20;
  1243. // USART0
  1244. USART0bm = $10;
  1245. // Timer/Counter 0 Output Compare D
  1246. TC0Dbm = $08;
  1247. // Timer/Counter 0 Output Compare C
  1248. TC0Cbm = $04;
  1249. // Timer/Counter 0 Output Compare B
  1250. TC0Bbm = $02;
  1251. // Timer/Counter 0 Output Compare A
  1252. TC0Abm = $01;
  1253. // Slew Rate Enable
  1254. SRLENbm = $80;
  1255. // Inverted I/O Enable
  1256. INVENbm = $40;
  1257. // PORT_OPC
  1258. OPCmask = $38;
  1259. OPC_TOTEM = $00;
  1260. OPC_BUSKEEPER = $08;
  1261. OPC_PULLDOWN = $10;
  1262. OPC_PULLUP = $18;
  1263. OPC_WIREDOR = $20;
  1264. OPC_WIREDAND = $28;
  1265. OPC_WIREDORPULL = $30;
  1266. OPC_WIREDANDPULL = $38;
  1267. // PORT_ISC
  1268. ISCmask = $07;
  1269. ISC_BOTHEDGES = $00;
  1270. ISC_RISING = $01;
  1271. ISC_FALLING = $02;
  1272. ISC_LEVEL = $03;
  1273. ISC_INPUT_DISABLE = $07;
  1274. end;
  1275. TTC0 = object //16-bit Timer/Counter 0
  1276. CTRLA: byte; //Control Register A
  1277. CTRLB: byte; //Control Register B
  1278. CTRLC: byte; //Control register C
  1279. CTRLD: byte; //Control Register D
  1280. CTRLE: byte; //Control Register E
  1281. Reserved5: byte;
  1282. INTCTRLA: byte; //Interrupt Control Register A
  1283. INTCTRLB: byte; //Interrupt Control Register B
  1284. CTRLFCLR: byte; //Control Register F Clear
  1285. CTRLFSET: byte; //Control Register F Set
  1286. CTRLGCLR: byte; //Control Register G Clear
  1287. CTRLGSET: byte; //Control Register G Set
  1288. INTFLAGS: byte; //Interrupt Flag Register
  1289. Reserved13: byte;
  1290. Reserved14: byte;
  1291. TEMP: byte; //Temporary Register For 16-bit Access
  1292. Reserved16: byte;
  1293. Reserved17: byte;
  1294. Reserved18: byte;
  1295. Reserved19: byte;
  1296. Reserved20: byte;
  1297. Reserved21: byte;
  1298. Reserved22: byte;
  1299. Reserved23: byte;
  1300. Reserved24: byte;
  1301. Reserved25: byte;
  1302. Reserved26: byte;
  1303. Reserved27: byte;
  1304. Reserved28: byte;
  1305. Reserved29: byte;
  1306. Reserved30: byte;
  1307. Reserved31: byte;
  1308. CNT: word; //Count
  1309. Reserved34: byte;
  1310. Reserved35: byte;
  1311. Reserved36: byte;
  1312. Reserved37: byte;
  1313. PER: word; //Period
  1314. CCA: word; //Compare or Capture A
  1315. CCB: word; //Compare or Capture B
  1316. CCC: word; //Compare or Capture C
  1317. CCD: word; //Compare or Capture D
  1318. Reserved48: byte;
  1319. Reserved49: byte;
  1320. Reserved50: byte;
  1321. Reserved51: byte;
  1322. Reserved52: byte;
  1323. Reserved53: byte;
  1324. PERBUF: word; //Period Buffer
  1325. CCABUF: word; //Compare Or Capture A Buffer
  1326. CCBBUF: word; //Compare Or Capture B Buffer
  1327. CCCBUF: word; //Compare Or Capture C Buffer
  1328. CCDBUF: word; //Compare Or Capture D Buffer
  1329. const
  1330. // TC_CLKSEL
  1331. CLKSELmask = $0F;
  1332. CLKSEL_OFF = $00;
  1333. CLKSEL_DIV1 = $01;
  1334. CLKSEL_DIV2 = $02;
  1335. CLKSEL_DIV4 = $03;
  1336. CLKSEL_DIV8 = $04;
  1337. CLKSEL_DIV64 = $05;
  1338. CLKSEL_DIV256 = $06;
  1339. CLKSEL_DIV1024 = $07;
  1340. CLKSEL_EVCH0 = $08;
  1341. CLKSEL_EVCH1 = $09;
  1342. CLKSEL_EVCH2 = $0A;
  1343. CLKSEL_EVCH3 = $0B;
  1344. // Compare or Capture D Enable
  1345. CCDENbm = $80;
  1346. // Compare or Capture C Enable
  1347. CCCENbm = $40;
  1348. // Compare or Capture B Enable
  1349. CCBENbm = $20;
  1350. // Compare or Capture A Enable
  1351. CCAENbm = $10;
  1352. // TC_WGMODE
  1353. WGMODEmask = $07;
  1354. WGMODE_NORMAL = $00;
  1355. WGMODE_FRQ = $01;
  1356. WGMODE_SINGLESLOPE = $03;
  1357. WGMODE_SS = $03;
  1358. WGMODE_DSTOP = $05;
  1359. WGMODE_DS_T = $05;
  1360. WGMODE_DSBOTH = $06;
  1361. WGMODE_DS_TB = $06;
  1362. WGMODE_DSBOTTOM = $07;
  1363. WGMODE_DS_B = $07;
  1364. // Compare D Output Value
  1365. CMPDbm = $08;
  1366. // Compare C Output Value
  1367. CMPCbm = $04;
  1368. // Compare B Output Value
  1369. CMPBbm = $02;
  1370. // Compare A Output Value
  1371. CMPAbm = $01;
  1372. // TC_EVACT
  1373. EVACTmask = $E0;
  1374. EVACT_OFF = $00;
  1375. EVACT_CAPT = $20;
  1376. EVACT_UPDOWN = $40;
  1377. EVACT_QDEC = $60;
  1378. EVACT_RESTART = $80;
  1379. EVACT_FRQ = $A0;
  1380. EVACT_PW = $C0;
  1381. // Event Delay
  1382. EVDLYbm = $10;
  1383. // TC_EVSEL
  1384. EVSELmask = $0F;
  1385. EVSEL_OFF = $00;
  1386. EVSEL_CH0 = $08;
  1387. EVSEL_CH1 = $09;
  1388. EVSEL_CH2 = $0A;
  1389. EVSEL_CH3 = $0B;
  1390. // TC_BYTEM
  1391. BYTEMmask = $03;
  1392. BYTEM_NORMAL = $00;
  1393. BYTEM_BYTEMODE = $01;
  1394. BYTEM_SPLITMODE = $02;
  1395. // TC_ERRINTLVL
  1396. ERRINTLVLmask = $0C;
  1397. ERRINTLVL_OFF = $00;
  1398. ERRINTLVL_LO = $04;
  1399. ERRINTLVL_MED = $08;
  1400. ERRINTLVL_HI = $0C;
  1401. // TC_OVFINTLVL
  1402. OVFINTLVLmask = $03;
  1403. OVFINTLVL_OFF = $00;
  1404. OVFINTLVL_LO = $01;
  1405. OVFINTLVL_MED = $02;
  1406. OVFINTLVL_HI = $03;
  1407. // TC_CCDINTLVL
  1408. CCDINTLVLmask = $C0;
  1409. CCDINTLVL_OFF = $00;
  1410. CCDINTLVL_LO = $40;
  1411. CCDINTLVL_MED = $80;
  1412. CCDINTLVL_HI = $C0;
  1413. // TC_CCCINTLVL
  1414. CCCINTLVLmask = $30;
  1415. CCCINTLVL_OFF = $00;
  1416. CCCINTLVL_LO = $10;
  1417. CCCINTLVL_MED = $20;
  1418. CCCINTLVL_HI = $30;
  1419. // TC_CCBINTLVL
  1420. CCBINTLVLmask = $0C;
  1421. CCBINTLVL_OFF = $00;
  1422. CCBINTLVL_LO = $04;
  1423. CCBINTLVL_MED = $08;
  1424. CCBINTLVL_HI = $0C;
  1425. // TC_CCAINTLVL
  1426. CCAINTLVLmask = $03;
  1427. CCAINTLVL_OFF = $00;
  1428. CCAINTLVL_LO = $01;
  1429. CCAINTLVL_MED = $02;
  1430. CCAINTLVL_HI = $03;
  1431. // Command
  1432. CMD0bm = $04;
  1433. CMD1bm = $08;
  1434. // Lock Update
  1435. LUPDbm = $02;
  1436. // Direction
  1437. DIRbm = $01;
  1438. // Compare or Capture D Buffer Valid
  1439. CCDBVbm = $10;
  1440. // Compare or Capture C Buffer Valid
  1441. CCCBVbm = $08;
  1442. // Compare or Capture B Buffer Valid
  1443. CCBBVbm = $04;
  1444. // Compare or Capture A Buffer Valid
  1445. CCABVbm = $02;
  1446. // Period Buffer Valid
  1447. PERBVbm = $01;
  1448. // Compare or Capture D Interrupt Flag
  1449. CCDIFbm = $80;
  1450. // Compare or Capture C Interrupt Flag
  1451. CCCIFbm = $40;
  1452. // Compare or Capture B Interrupt Flag
  1453. CCBIFbm = $20;
  1454. // Compare or Capture A Interrupt Flag
  1455. CCAIFbm = $10;
  1456. // Error Interrupt Flag
  1457. ERRIFbm = $02;
  1458. // Overflow Interrupt Flag
  1459. OVFIFbm = $01;
  1460. end;
  1461. TTC1 = object //16-bit Timer/Counter 1
  1462. CTRLA: byte; //Control Register A
  1463. CTRLB: byte; //Control Register B
  1464. CTRLC: byte; //Control register C
  1465. CTRLD: byte; //Control Register D
  1466. CTRLE: byte; //Control Register E
  1467. Reserved5: byte;
  1468. INTCTRLA: byte; //Interrupt Control Register A
  1469. INTCTRLB: byte; //Interrupt Control Register B
  1470. CTRLFCLR: byte; //Control Register F Clear
  1471. CTRLFSET: byte; //Control Register F Set
  1472. CTRLGCLR: byte; //Control Register G Clear
  1473. CTRLGSET: byte; //Control Register G Set
  1474. INTFLAGS: byte; //Interrupt Flag Register
  1475. Reserved13: byte;
  1476. Reserved14: byte;
  1477. TEMP: byte; //Temporary Register For 16-bit Access
  1478. Reserved16: byte;
  1479. Reserved17: byte;
  1480. Reserved18: byte;
  1481. Reserved19: byte;
  1482. Reserved20: byte;
  1483. Reserved21: byte;
  1484. Reserved22: byte;
  1485. Reserved23: byte;
  1486. Reserved24: byte;
  1487. Reserved25: byte;
  1488. Reserved26: byte;
  1489. Reserved27: byte;
  1490. Reserved28: byte;
  1491. Reserved29: byte;
  1492. Reserved30: byte;
  1493. Reserved31: byte;
  1494. CNT: word; //Count
  1495. Reserved34: byte;
  1496. Reserved35: byte;
  1497. Reserved36: byte;
  1498. Reserved37: byte;
  1499. PER: word; //Period
  1500. CCA: word; //Compare or Capture A
  1501. CCB: word; //Compare or Capture B
  1502. Reserved44: byte;
  1503. Reserved45: byte;
  1504. Reserved46: byte;
  1505. Reserved47: byte;
  1506. Reserved48: byte;
  1507. Reserved49: byte;
  1508. Reserved50: byte;
  1509. Reserved51: byte;
  1510. Reserved52: byte;
  1511. Reserved53: byte;
  1512. PERBUF: word; //Period Buffer
  1513. CCABUF: word; //Compare Or Capture A Buffer
  1514. CCBBUF: word; //Compare Or Capture B Buffer
  1515. const
  1516. // TC_CLKSEL
  1517. CLKSELmask = $0F;
  1518. CLKSEL_OFF = $00;
  1519. CLKSEL_DIV1 = $01;
  1520. CLKSEL_DIV2 = $02;
  1521. CLKSEL_DIV4 = $03;
  1522. CLKSEL_DIV8 = $04;
  1523. CLKSEL_DIV64 = $05;
  1524. CLKSEL_DIV256 = $06;
  1525. CLKSEL_DIV1024 = $07;
  1526. CLKSEL_EVCH0 = $08;
  1527. CLKSEL_EVCH1 = $09;
  1528. CLKSEL_EVCH2 = $0A;
  1529. CLKSEL_EVCH3 = $0B;
  1530. // Compare or Capture B Enable
  1531. CCBENbm = $20;
  1532. // Compare or Capture A Enable
  1533. CCAENbm = $10;
  1534. // TC_WGMODE
  1535. WGMODEmask = $07;
  1536. WGMODE_NORMAL = $00;
  1537. WGMODE_FRQ = $01;
  1538. WGMODE_SINGLESLOPE = $03;
  1539. WGMODE_SS = $03;
  1540. WGMODE_DSTOP = $05;
  1541. WGMODE_DS_T = $05;
  1542. WGMODE_DSBOTH = $06;
  1543. WGMODE_DS_TB = $06;
  1544. WGMODE_DSBOTTOM = $07;
  1545. WGMODE_DS_B = $07;
  1546. // Compare B Output Value
  1547. CMPBbm = $02;
  1548. // Compare A Output Value
  1549. CMPAbm = $01;
  1550. // TC_EVACT
  1551. EVACTmask = $E0;
  1552. EVACT_OFF = $00;
  1553. EVACT_CAPT = $20;
  1554. EVACT_UPDOWN = $40;
  1555. EVACT_QDEC = $60;
  1556. EVACT_RESTART = $80;
  1557. EVACT_FRQ = $A0;
  1558. EVACT_PW = $C0;
  1559. // Event Delay
  1560. EVDLYbm = $10;
  1561. // TC_EVSEL
  1562. EVSELmask = $0F;
  1563. EVSEL_OFF = $00;
  1564. EVSEL_CH0 = $08;
  1565. EVSEL_CH1 = $09;
  1566. EVSEL_CH2 = $0A;
  1567. EVSEL_CH3 = $0B;
  1568. // Byte Mode
  1569. BYTEMbm = $01;
  1570. // TC_ERRINTLVL
  1571. ERRINTLVLmask = $0C;
  1572. ERRINTLVL_OFF = $00;
  1573. ERRINTLVL_LO = $04;
  1574. ERRINTLVL_MED = $08;
  1575. ERRINTLVL_HI = $0C;
  1576. // TC_OVFINTLVL
  1577. OVFINTLVLmask = $03;
  1578. OVFINTLVL_OFF = $00;
  1579. OVFINTLVL_LO = $01;
  1580. OVFINTLVL_MED = $02;
  1581. OVFINTLVL_HI = $03;
  1582. // TC_CCBINTLVL
  1583. CCBINTLVLmask = $0C;
  1584. CCBINTLVL_OFF = $00;
  1585. CCBINTLVL_LO = $04;
  1586. CCBINTLVL_MED = $08;
  1587. CCBINTLVL_HI = $0C;
  1588. // TC_CCAINTLVL
  1589. CCAINTLVLmask = $03;
  1590. CCAINTLVL_OFF = $00;
  1591. CCAINTLVL_LO = $01;
  1592. CCAINTLVL_MED = $02;
  1593. CCAINTLVL_HI = $03;
  1594. // Command
  1595. CMD0bm = $04;
  1596. CMD1bm = $08;
  1597. // Lock Update
  1598. LUPDbm = $02;
  1599. // Direction
  1600. DIRbm = $01;
  1601. // Compare or Capture B Buffer Valid
  1602. CCBBVbm = $04;
  1603. // Compare or Capture A Buffer Valid
  1604. CCABVbm = $02;
  1605. // Period Buffer Valid
  1606. PERBVbm = $01;
  1607. // Compare or Capture B Interrupt Flag
  1608. CCBIFbm = $20;
  1609. // Compare or Capture A Interrupt Flag
  1610. CCAIFbm = $10;
  1611. // Error Interrupt Flag
  1612. ERRIFbm = $02;
  1613. // Overflow Interrupt Flag
  1614. OVFIFbm = $01;
  1615. end;
  1616. TTC2 = object //16-bit Timer/Counter type 2
  1617. CTRLA: byte; //Control Register A
  1618. CTRLB: byte; //Control Register B
  1619. CTRLC: byte; //Control register C
  1620. Reserved3: byte;
  1621. CTRLE: byte; //Control Register E
  1622. Reserved5: byte;
  1623. INTCTRLA: byte; //Interrupt Control Register A
  1624. INTCTRLB: byte; //Interrupt Control Register B
  1625. Reserved8: byte;
  1626. CTRLF: byte; //Control Register F
  1627. Reserved10: byte;
  1628. Reserved11: byte;
  1629. INTFLAGS: byte; //Interrupt Flag Register
  1630. Reserved13: byte;
  1631. Reserved14: byte;
  1632. Reserved15: byte;
  1633. Reserved16: byte;
  1634. Reserved17: byte;
  1635. Reserved18: byte;
  1636. Reserved19: byte;
  1637. Reserved20: byte;
  1638. Reserved21: byte;
  1639. Reserved22: byte;
  1640. Reserved23: byte;
  1641. Reserved24: byte;
  1642. Reserved25: byte;
  1643. Reserved26: byte;
  1644. Reserved27: byte;
  1645. Reserved28: byte;
  1646. Reserved29: byte;
  1647. Reserved30: byte;
  1648. Reserved31: byte;
  1649. LCNT: byte; //Low Byte Count
  1650. HCNT: byte; //High Byte Count
  1651. Reserved34: byte;
  1652. Reserved35: byte;
  1653. Reserved36: byte;
  1654. Reserved37: byte;
  1655. LPER: byte; //Low Byte Period
  1656. HPER: byte; //High Byte Period
  1657. LCMPA: byte; //Low Byte Compare A
  1658. HCMPA: byte; //High Byte Compare A
  1659. LCMPB: byte; //Low Byte Compare B
  1660. HCMPB: byte; //High Byte Compare B
  1661. LCMPC: byte; //Low Byte Compare C
  1662. HCMPC: byte; //High Byte Compare C
  1663. LCMPD: byte; //Low Byte Compare D
  1664. HCMPD: byte; //High Byte Compare D
  1665. const
  1666. // TC2_CLKSEL
  1667. CLKSELmask = $0F;
  1668. CLKSEL_OFF = $00;
  1669. CLKSEL_DIV1 = $01;
  1670. CLKSEL_DIV2 = $02;
  1671. CLKSEL_DIV4 = $03;
  1672. CLKSEL_DIV8 = $04;
  1673. CLKSEL_DIV64 = $05;
  1674. CLKSEL_DIV256 = $06;
  1675. CLKSEL_DIV1024 = $07;
  1676. CLKSEL_EVCH0 = $08;
  1677. CLKSEL_EVCH1 = $09;
  1678. CLKSEL_EVCH2 = $0A;
  1679. CLKSEL_EVCH3 = $0B;
  1680. // High Byte Compare D Enable
  1681. HCMPDENbm = $80;
  1682. // High Byte Compare C Enable
  1683. HCMPCENbm = $40;
  1684. // High Byte Compare B Enable
  1685. HCMPBENbm = $20;
  1686. // High Byte Compare A Enable
  1687. HCMPAENbm = $10;
  1688. // Low Byte Compare D Enable
  1689. LCMPDENbm = $08;
  1690. // Low Byte Compare C Enable
  1691. LCMPCENbm = $04;
  1692. // Low Byte Compare B Enable
  1693. LCMPBENbm = $02;
  1694. // Low Byte Compare A Enable
  1695. LCMPAENbm = $01;
  1696. // High Byte Compare D Output Value
  1697. HCMPDbm = $80;
  1698. // High Byte Compare C Output Value
  1699. HCMPCbm = $40;
  1700. // High Byte Compare B Output Value
  1701. HCMPBbm = $20;
  1702. // High Byte Compare A Output Value
  1703. HCMPAbm = $10;
  1704. // Low Byte Compare D Output Value
  1705. LCMPDbm = $08;
  1706. // Low Byte Compare C Output Value
  1707. LCMPCbm = $04;
  1708. // Low Byte Compare B Output Value
  1709. LCMPBbm = $02;
  1710. // Low Byte Compare A Output Value
  1711. LCMPAbm = $01;
  1712. // TC2_BYTEM
  1713. BYTEMmask = $03;
  1714. BYTEM_NORMAL = $00;
  1715. BYTEM_BYTEMODE = $01;
  1716. BYTEM_SPLITMODE = $02;
  1717. // TC2_HUNFINTLVL
  1718. HUNFINTLVLmask = $0C;
  1719. HUNFINTLVL_OFF = $00;
  1720. HUNFINTLVL_LO = $04;
  1721. HUNFINTLVL_MED = $08;
  1722. HUNFINTLVL_HI = $0C;
  1723. // TC2_LUNFINTLVL
  1724. LUNFINTLVLmask = $03;
  1725. LUNFINTLVL_OFF = $00;
  1726. LUNFINTLVL_LO = $01;
  1727. LUNFINTLVL_MED = $02;
  1728. LUNFINTLVL_HI = $03;
  1729. // TC2_LCMPDINTLVL
  1730. LCMPDINTLVLmask = $C0;
  1731. LCMPDINTLVL_OFF = $00;
  1732. LCMPDINTLVL_LO = $40;
  1733. LCMPDINTLVL_MED = $80;
  1734. LCMPDINTLVL_HI = $C0;
  1735. // TC2_LCMPCINTLVL
  1736. LCMPCINTLVLmask = $30;
  1737. LCMPCINTLVL_OFF = $00;
  1738. LCMPCINTLVL_LO = $10;
  1739. LCMPCINTLVL_MED = $20;
  1740. LCMPCINTLVL_HI = $30;
  1741. // TC2_LCMPBINTLVL
  1742. LCMPBINTLVLmask = $0C;
  1743. LCMPBINTLVL_OFF = $00;
  1744. LCMPBINTLVL_LO = $04;
  1745. LCMPBINTLVL_MED = $08;
  1746. LCMPBINTLVL_HI = $0C;
  1747. // TC2_LCMPAINTLVL
  1748. LCMPAINTLVLmask = $03;
  1749. LCMPAINTLVL_OFF = $00;
  1750. LCMPAINTLVL_LO = $01;
  1751. LCMPAINTLVL_MED = $02;
  1752. LCMPAINTLVL_HI = $03;
  1753. // TC2_CMD
  1754. CMDmask = $0C;
  1755. CMD_NONE = $00;
  1756. CMD_RESTART = $08;
  1757. CMD_RESET = $0C;
  1758. // TC2_CMDEN
  1759. CMDENmask = $03;
  1760. CMDEN_LOW = $01;
  1761. CMDEN_HIGH = $02;
  1762. CMDEN_BOTH = $03;
  1763. // Low Byte Compare D Interrupt Flag
  1764. LCMPDIFbm = $80;
  1765. // Low Byte Compare C Interrupt Flag
  1766. LCMPCIFbm = $40;
  1767. // Low Byte Compare B Interrupt Flag
  1768. LCMPBIFbm = $20;
  1769. // Low Byte Compare A Interrupt Flag
  1770. LCMPAIFbm = $10;
  1771. // High Byte Underflow Interrupt Flag
  1772. HUNFIFbm = $02;
  1773. // Low Byte Underflow Interrupt Flag
  1774. LUNFIFbm = $01;
  1775. end;
  1776. TAWEX = object //Advanced Waveform Extension
  1777. CTRL: byte; //Control Register
  1778. Reserved1: byte;
  1779. FDEMASK: byte; //Fault Detection Event Mask
  1780. FDCTRL: byte; //Fault Detection Control Register
  1781. STATUS: byte; //Status Register
  1782. STATUSSET: byte; //Status Set Register
  1783. DTBOTH: byte; //Dead Time Both Sides
  1784. DTBOTHBUF: byte; //Dead Time Both Sides Buffer
  1785. DTLS: byte; //Dead Time Low Side
  1786. DTHS: byte; //Dead Time High Side
  1787. DTLSBUF: byte; //Dead Time Low Side Buffer
  1788. DTHSBUF: byte; //Dead Time High Side Buffer
  1789. OUTOVEN: byte; //Output Override Enable
  1790. const
  1791. // Pattern Generation Mode
  1792. PGMbm = $20;
  1793. // Common Waveform Channel Mode
  1794. CWCMbm = $10;
  1795. // Dead Time Insertion Compare Channel D Enable
  1796. DTICCDENbm = $08;
  1797. // Dead Time Insertion Compare Channel C Enable
  1798. DTICCCENbm = $04;
  1799. // Dead Time Insertion Compare Channel B Enable
  1800. DTICCBENbm = $02;
  1801. // Dead Time Insertion Compare Channel A Enable
  1802. DTICCAENbm = $01;
  1803. // Fault Detect on Disable Break Disable
  1804. FDDBDbm = $10;
  1805. // Fault Detect Mode
  1806. FDMODEbm = $04;
  1807. // AWEX_FDACT
  1808. FDACTmask = $03;
  1809. FDACT_NONE = $00;
  1810. FDACT_CLEAROE = $01;
  1811. FDACT_CLEARDIR = $03;
  1812. // Fault Detect Flag
  1813. FDFbm = $04;
  1814. // Dead Time High Side Buffer Valid
  1815. DTHSBUFVbm = $02;
  1816. // Dead Time Low Side Buffer Valid
  1817. DTLSBUFVbm = $01;
  1818. end;
  1819. THIRES = object //High-Resolution Extension
  1820. CTRLA: byte; //Control Register
  1821. const
  1822. // HIRES_HREN
  1823. HRENmask = $03;
  1824. HREN_NONE = $00;
  1825. HREN_TC0 = $01;
  1826. HREN_TC1 = $02;
  1827. HREN_BOTH = $03;
  1828. end;
  1829. TUSART = object //Universal Synchronous/Asynchronous Receiver/Transmitter
  1830. DATA: byte; //Data Register
  1831. STATUS: byte; //Status Register
  1832. Reserved2: byte;
  1833. CTRLA: byte; //Control Register A
  1834. CTRLB: byte; //Control Register B
  1835. CTRLC: byte; //Control Register C
  1836. BAUDCTRLA: byte; //Baud Rate Control Register A
  1837. BAUDCTRLB: byte; //Baud Rate Control Register B
  1838. const
  1839. // Receive Interrupt Flag
  1840. RXCIFbm = $80;
  1841. // Transmit Interrupt Flag
  1842. TXCIFbm = $40;
  1843. // Data Register Empty Flag
  1844. DREIFbm = $20;
  1845. // Frame Error
  1846. FERRbm = $10;
  1847. // Buffer Overflow
  1848. BUFOVFbm = $08;
  1849. // Parity Error
  1850. PERRbm = $04;
  1851. // Receive Bit 8
  1852. RXB8bm = $01;
  1853. // USART_RXCINTLVL
  1854. RXCINTLVLmask = $30;
  1855. RXCINTLVL_OFF = $00;
  1856. RXCINTLVL_LO = $10;
  1857. RXCINTLVL_MED = $20;
  1858. RXCINTLVL_HI = $30;
  1859. // USART_TXCINTLVL
  1860. TXCINTLVLmask = $0C;
  1861. TXCINTLVL_OFF = $00;
  1862. TXCINTLVL_LO = $04;
  1863. TXCINTLVL_MED = $08;
  1864. TXCINTLVL_HI = $0C;
  1865. // USART_DREINTLVL
  1866. DREINTLVLmask = $03;
  1867. DREINTLVL_OFF = $00;
  1868. DREINTLVL_LO = $01;
  1869. DREINTLVL_MED = $02;
  1870. DREINTLVL_HI = $03;
  1871. // Receiver Enable
  1872. RXENbm = $10;
  1873. // Transmitter Enable
  1874. TXENbm = $08;
  1875. // Double transmission speed
  1876. CLK2Xbm = $04;
  1877. // Multi-processor Communication Mode
  1878. MPCMbm = $02;
  1879. // Transmit bit 8
  1880. TXB8bm = $01;
  1881. // USART_CMODE
  1882. CMODEmask = $C0;
  1883. CMODE_ASYNCHRONOUS = $00;
  1884. CMODE_SYNCHRONOUS = $40;
  1885. CMODE_IRDA = $80;
  1886. CMODE_MSPI = $C0;
  1887. // USART_PMODE
  1888. PMODEmask = $30;
  1889. PMODE_DISABLED = $00;
  1890. PMODE_EVEN = $20;
  1891. PMODE_ODD = $30;
  1892. // Stop Bit Mode
  1893. SBMODEbm = $08;
  1894. // USART_CHSIZE
  1895. CHSIZEmask = $07;
  1896. CHSIZE_5BIT = $00;
  1897. CHSIZE_6BIT = $01;
  1898. CHSIZE_7BIT = $02;
  1899. CHSIZE_8BIT = $03;
  1900. CHSIZE_9BIT = $07;
  1901. // Baud Rate Scale
  1902. BSCALE0bm = $10;
  1903. BSCALE1bm = $20;
  1904. BSCALE2bm = $40;
  1905. BSCALE3bm = $80;
  1906. end;
  1907. TSPI = object //Serial Peripheral Interface
  1908. CTRL: byte; //Control Register
  1909. INTCTRL: byte; //Interrupt Control Register
  1910. STATUS: byte; //Status Register
  1911. DATA: byte; //Data Register
  1912. const
  1913. // Enable Double Speed
  1914. CLK2Xbm = $80;
  1915. // Enable Module
  1916. ENABLEbm = $40;
  1917. // Data Order Setting
  1918. DORDbm = $20;
  1919. // Master Operation Enable
  1920. MASTERbm = $10;
  1921. // SPI_MODE
  1922. MODEmask = $0C;
  1923. MODE_0 = $00;
  1924. MODE_1 = $04;
  1925. MODE_2 = $08;
  1926. MODE_3 = $0C;
  1927. // SPI_PRESCALER
  1928. PRESCALERmask = $03;
  1929. PRESCALER_DIV4 = $00;
  1930. PRESCALER_DIV16 = $01;
  1931. PRESCALER_DIV64 = $02;
  1932. PRESCALER_DIV128 = $03;
  1933. // SPI_INTLVL
  1934. INTLVLmask = $03;
  1935. INTLVL_OFF = $00;
  1936. INTLVL_LO = $01;
  1937. INTLVL_MED = $02;
  1938. INTLVL_HI = $03;
  1939. // Interrupt Flag
  1940. IFbm = $80;
  1941. // Write Collision
  1942. WRCOLbm = $40;
  1943. end;
  1944. TIRCOM = object //IR Communication Module
  1945. CTRL: byte; //Control Register
  1946. TXPLCTRL: byte; //IrDA Transmitter Pulse Length Control Register
  1947. RXPLCTRL: byte; //IrDA Receiver Pulse Length Control Register
  1948. const
  1949. // IRDA_EVSEL
  1950. EVSELmask = $0F;
  1951. EVSEL_OFF = $00;
  1952. EVSEL_0 = $08;
  1953. EVSEL_1 = $09;
  1954. EVSEL_2 = $0A;
  1955. EVSEL_3 = $0B;
  1956. end;
  1957. TNVM_FUSES = object //Fuses
  1958. Reserved0: byte;
  1959. FUSEBYTE1: byte; //Watchdog Configuration
  1960. FUSEBYTE2: byte; //Reset Configuration
  1961. Reserved3: byte;
  1962. FUSEBYTE4: byte; //Start-up Configuration
  1963. FUSEBYTE5: byte; //EESAVE and BOD Level
  1964. const
  1965. // WDWPER
  1966. WDWPERmask = $F0;
  1967. WDWPER_8CLK = $00;
  1968. WDWPER_16CLK = $10;
  1969. WDWPER_32CLK = $20;
  1970. WDWPER_64CLK = $30;
  1971. WDWPER_128CLK = $40;
  1972. WDWPER_256CLK = $50;
  1973. WDWPER_512CLK = $60;
  1974. WDWPER_1KCLK = $70;
  1975. WDWPER_2KCLK = $80;
  1976. WDWPER_4KCLK = $90;
  1977. WDWPER_8KCLK = $A0;
  1978. // WDPER
  1979. WDPERmask = $0F;
  1980. WDPER_8CLK = $00;
  1981. WDPER_16CLK = $01;
  1982. WDPER_32CLK = $02;
  1983. WDPER_64CLK = $03;
  1984. WDPER_128CLK = $04;
  1985. WDPER_256CLK = $05;
  1986. WDPER_512CLK = $06;
  1987. WDPER_1KCLK = $07;
  1988. WDPER_2KCLK = $08;
  1989. WDPER_4KCLK = $09;
  1990. WDPER_8KCLK = $0A;
  1991. // BOOTRST
  1992. BOOTRSTmask = $40;
  1993. BOOTRST_BOOTLDR = $00;
  1994. BOOTRST_APPLICATION = $40;
  1995. // TOSCSEL
  1996. TOSCSELmask = $20;
  1997. TOSCSEL_ALTERNATE = $00;
  1998. TOSCSEL_XTAL = $20;
  1999. // BODPD
  2000. BODPDmask = $03;
  2001. BODPD_SAMPLED = $01;
  2002. BODPD_CONTINUOUS = $02;
  2003. BODPD_DISABLED = $03;
  2004. // External Reset Disable
  2005. RSTDISBLbm = $10;
  2006. // STARTUPTIME
  2007. STARTUPTIMEmask = $0C;
  2008. STARTUPTIME0MS = $0C;
  2009. STARTUPTIME4MS = $04;
  2010. STARTUPTIME64MS = $00;
  2011. // Watchdog Timer Lock
  2012. WDLOCKbm = $02;
  2013. // BODACT
  2014. BODACTmask = $30;
  2015. BODACT_SAMPLED = $10;
  2016. BODACT_CONTINUOUS = $20;
  2017. BODACT_DISABLED = $30;
  2018. // Preserve EEPROM Through Chip Erase
  2019. EESAVEbm = $08;
  2020. // BODLEVEL
  2021. BODLEVELmask = $07;
  2022. BODLEVEL1V6 = $07;
  2023. BODLEVEL1V8 = $06;
  2024. BODLEVEL2V0 = $05;
  2025. BODLEVEL2V2 = $04;
  2026. BODLEVEL2V4 = $03;
  2027. BODLEVEL2V6 = $02;
  2028. BODLEVEL2V8 = $01;
  2029. BODLEVEL3V0 = $00;
  2030. end;
  2031. TNVM_LOCKBITS = object //Lock Bits
  2032. LOCKBITS: byte; //Lock Bits
  2033. const
  2034. // FUSE_BLBB
  2035. BLBBmask = $C0;
  2036. BLBB_RWLOCK = $00;
  2037. BLBB_RLOCK = $40;
  2038. BLBB_WLOCK = $80;
  2039. BLBB_NOLOCK = $C0;
  2040. // FUSE_BLBA
  2041. BLBAmask = $30;
  2042. BLBA_RWLOCK = $00;
  2043. BLBA_RLOCK = $10;
  2044. BLBA_WLOCK = $20;
  2045. BLBA_NOLOCK = $30;
  2046. // FUSE_BLBAT
  2047. BLBATmask = $0C;
  2048. BLBAT_RWLOCK = $00;
  2049. BLBAT_RLOCK = $04;
  2050. BLBAT_WLOCK = $08;
  2051. BLBAT_NOLOCK = $0C;
  2052. // FUSE_LB
  2053. LBmask = $03;
  2054. LB_RWLOCK = $00;
  2055. LB_WLOCK = $02;
  2056. LB_NOLOCK = $03;
  2057. end;
  2058. TNVM_PROD_SIGNATURES = object //Production Signatures
  2059. RCOSC2M: byte; //RCOSC 2 MHz Calibration Value B
  2060. RCOSC2MA: byte; //RCOSC 2 MHz Calibration Value A
  2061. RCOSC32K: byte; //RCOSC 32.768 kHz Calibration Value
  2062. RCOSC32M: byte; //RCOSC 32 MHz Calibration Value B
  2063. RCOSC32MA: byte; //RCOSC 32 MHz Calibration Value A
  2064. Reserved5: byte;
  2065. Reserved6: byte;
  2066. Reserved7: byte;
  2067. LOTNUM0: byte; //Lot Number Byte 0, ASCII
  2068. LOTNUM1: byte; //Lot Number Byte 1, ASCII
  2069. LOTNUM2: byte; //Lot Number Byte 2, ASCII
  2070. LOTNUM3: byte; //Lot Number Byte 3, ASCII
  2071. LOTNUM4: byte; //Lot Number Byte 4, ASCII
  2072. LOTNUM5: byte; //Lot Number Byte 5, ASCII
  2073. Reserved14: byte;
  2074. Reserved15: byte;
  2075. WAFNUM: byte; //Wafer Number
  2076. Reserved17: byte;
  2077. COORDX0: byte; //Wafer Coordinate X Byte 0
  2078. COORDX1: byte; //Wafer Coordinate X Byte 1
  2079. COORDY0: byte; //Wafer Coordinate Y Byte 0
  2080. COORDY1: byte; //Wafer Coordinate Y Byte 1
  2081. Reserved22: byte;
  2082. Reserved23: byte;
  2083. Reserved24: byte;
  2084. Reserved25: byte;
  2085. Reserved26: byte;
  2086. Reserved27: byte;
  2087. Reserved28: byte;
  2088. Reserved29: byte;
  2089. Reserved30: byte;
  2090. Reserved31: byte;
  2091. ADCACAL0: byte; //ADCA Calibration Byte 0
  2092. ADCACAL1: byte; //ADCA Calibration Byte 1
  2093. Reserved34: byte;
  2094. Reserved35: byte;
  2095. Reserved36: byte;
  2096. Reserved37: byte;
  2097. Reserved38: byte;
  2098. Reserved39: byte;
  2099. Reserved40: byte;
  2100. Reserved41: byte;
  2101. Reserved42: byte;
  2102. Reserved43: byte;
  2103. Reserved44: byte;
  2104. Reserved45: byte;
  2105. TEMPSENSE0: byte; //Temperature Sensor Calibration Byte 0
  2106. TEMPSENSE1: byte; //Temperature Sensor Calibration Byte 1
  2107. end;
  2108. const
  2109. Pin0idx = 0; Pin0bm = 1;
  2110. Pin1idx = 1; Pin1bm = 2;
  2111. Pin2idx = 2; Pin2bm = 4;
  2112. Pin3idx = 3; Pin3bm = 8;
  2113. Pin4idx = 4; Pin4bm = 16;
  2114. Pin5idx = 5; Pin5bm = 32;
  2115. Pin6idx = 6; Pin6bm = 64;
  2116. Pin7idx = 7; Pin7bm = 128;
  2117. var
  2118. GPIO: TGPIO absolute $0000;
  2119. VPORT0: TVPORT absolute $0010;
  2120. VPORT1: TVPORT absolute $0014;
  2121. VPORT2: TVPORT absolute $0018;
  2122. VPORT3: TVPORT absolute $001C;
  2123. OCD: TOCD absolute $002E;
  2124. CPU: TCPU absolute $0030;
  2125. CLK: TCLK absolute $0040;
  2126. SLEEP: TSLEEP absolute $0048;
  2127. OSC: TOSC absolute $0050;
  2128. DFLLRC32M: TDFLL absolute $0060;
  2129. DFLLRC2M: TDFLL absolute $0068;
  2130. PR: TPR absolute $0070;
  2131. RST: TRST absolute $0078;
  2132. WDT: TWDT absolute $0080;
  2133. MCU: TMCU absolute $0090;
  2134. PMIC: TPMIC absolute $00A0;
  2135. PORTCFG: TPORTCFG absolute $00B0;
  2136. CRC: TCRC absolute $00D0;
  2137. EVSYS: TEVSYS absolute $0180;
  2138. NVM: TNVM absolute $01C0;
  2139. ADCA: TADC absolute $0200;
  2140. ACA: TAC absolute $0380;
  2141. RTC: TRTC absolute $0400;
  2142. TWIC: TTWI absolute $0480;
  2143. TWIE: TTWI absolute $04A0;
  2144. PORTA: TPORT absolute $0600;
  2145. PORTB: TPORT absolute $0620;
  2146. PORTC: TPORT absolute $0640;
  2147. PORTD: TPORT absolute $0660;
  2148. PORTE: TPORT absolute $0680;
  2149. PORTR: TPORT absolute $07E0;
  2150. TCC0: TTC0 absolute $0800;
  2151. TCC2: TTC2 absolute $0800;
  2152. TCC1: TTC1 absolute $0840;
  2153. AWEXC: TAWEX absolute $0880;
  2154. HIRESC: THIRES absolute $0890;
  2155. USARTC0: TUSART absolute $08A0;
  2156. SPIC: TSPI absolute $08C0;
  2157. IRCOM: TIRCOM absolute $08F8;
  2158. TCD0: TTC0 absolute $0900;
  2159. TCD2: TTC2 absolute $0900;
  2160. USARTD0: TUSART absolute $09A0;
  2161. SPID: TSPI absolute $09C0;
  2162. TCE0: TTC0 absolute $0A00;
  2163. implementation
  2164. {$i avrcommon.inc}
  2165. procedure OSC_OSCF_ISR; external name 'OSC_OSCF_ISR'; // Interrupt 1 Oscillator Failure Interrupt (NMI)
  2166. procedure PORTC_INT0_ISR; external name 'PORTC_INT0_ISR'; // Interrupt 2 External Interrupt 0
  2167. procedure PORTC_INT1_ISR; external name 'PORTC_INT1_ISR'; // Interrupt 3 External Interrupt 1
  2168. procedure PORTR_INT0_ISR; external name 'PORTR_INT0_ISR'; // Interrupt 4 External Interrupt 0
  2169. procedure PORTR_INT1_ISR; external name 'PORTR_INT1_ISR'; // Interrupt 5 External Interrupt 1
  2170. procedure RTC_OVF_ISR; external name 'RTC_OVF_ISR'; // Interrupt 10 Overflow Interrupt
  2171. procedure RTC_COMP_ISR; external name 'RTC_COMP_ISR'; // Interrupt 11 Compare Interrupt
  2172. procedure TWIC_TWIS_ISR; external name 'TWIC_TWIS_ISR'; // Interrupt 12 TWI Slave Interrupt
  2173. procedure TWIC_TWIM_ISR; external name 'TWIC_TWIM_ISR'; // Interrupt 13 TWI Master Interrupt
  2174. procedure TCC2_LUNF_ISR; external name 'TCC2_LUNF_ISR'; // Interrupt 14 Low Byte Underflow Interrupt
  2175. procedure TCC2_HUNF_ISR; external name 'TCC2_HUNF_ISR'; // Interrupt 15 High Byte Underflow Interrupt
  2176. procedure TCC2_LCMPA_ISR; external name 'TCC2_LCMPA_ISR'; // Interrupt 16 Low Byte Compare A Interrupt
  2177. procedure TCC2_LCMPB_ISR; external name 'TCC2_LCMPB_ISR'; // Interrupt 17 Low Byte Compare B Interrupt
  2178. procedure TCC2_LCMPC_ISR; external name 'TCC2_LCMPC_ISR'; // Interrupt 18 Low Byte Compare C Interrupt
  2179. procedure TCC2_LCMPD_ISR; external name 'TCC2_LCMPD_ISR'; // Interrupt 19 Low Byte Compare D Interrupt
  2180. procedure TCC1_OVF_ISR; external name 'TCC1_OVF_ISR'; // Interrupt 20 Overflow Interrupt
  2181. procedure TCC1_ERR_ISR; external name 'TCC1_ERR_ISR'; // Interrupt 21 Error Interrupt
  2182. procedure TCC1_CCA_ISR; external name 'TCC1_CCA_ISR'; // Interrupt 22 Compare or Capture A Interrupt
  2183. procedure TCC1_CCB_ISR; external name 'TCC1_CCB_ISR'; // Interrupt 23 Compare or Capture B Interrupt
  2184. procedure SPIC_INT_ISR; external name 'SPIC_INT_ISR'; // Interrupt 24 SPI Interrupt
  2185. procedure USARTC0_RXC_ISR; external name 'USARTC0_RXC_ISR'; // Interrupt 25 Reception Complete Interrupt
  2186. procedure USARTC0_DRE_ISR; external name 'USARTC0_DRE_ISR'; // Interrupt 26 Data Register Empty Interrupt
  2187. procedure USARTC0_TXC_ISR; external name 'USARTC0_TXC_ISR'; // Interrupt 27 Transmission Complete Interrupt
  2188. procedure NVM_EE_ISR; external name 'NVM_EE_ISR'; // Interrupt 32 EE Interrupt
  2189. procedure NVM_SPM_ISR; external name 'NVM_SPM_ISR'; // Interrupt 33 SPM Interrupt
  2190. procedure PORTB_INT0_ISR; external name 'PORTB_INT0_ISR'; // Interrupt 34 External Interrupt 0
  2191. procedure PORTB_INT1_ISR; external name 'PORTB_INT1_ISR'; // Interrupt 35 External Interrupt 1
  2192. procedure PORTE_INT0_ISR; external name 'PORTE_INT0_ISR'; // Interrupt 43 External Interrupt 0
  2193. procedure PORTE_INT1_ISR; external name 'PORTE_INT1_ISR'; // Interrupt 44 External Interrupt 1
  2194. procedure TWIE_TWIS_ISR; external name 'TWIE_TWIS_ISR'; // Interrupt 45 TWI Slave Interrupt
  2195. procedure TWIE_TWIM_ISR; external name 'TWIE_TWIM_ISR'; // Interrupt 46 TWI Master Interrupt
  2196. procedure TCE0_OVF_ISR; external name 'TCE0_OVF_ISR'; // Interrupt 47 Overflow Interrupt
  2197. procedure TCE0_ERR_ISR; external name 'TCE0_ERR_ISR'; // Interrupt 48 Error Interrupt
  2198. procedure TCE0_CCA_ISR; external name 'TCE0_CCA_ISR'; // Interrupt 49 Compare or Capture A Interrupt
  2199. procedure TCE0_CCB_ISR; external name 'TCE0_CCB_ISR'; // Interrupt 50 Compare or Capture B Interrupt
  2200. procedure TCE0_CCC_ISR; external name 'TCE0_CCC_ISR'; // Interrupt 51 Compare or Capture C Interrupt
  2201. procedure TCE0_CCD_ISR; external name 'TCE0_CCD_ISR'; // Interrupt 52 Compare or Capture D Interrupt
  2202. procedure PORTD_INT0_ISR; external name 'PORTD_INT0_ISR'; // Interrupt 64 External Interrupt 0
  2203. procedure PORTD_INT1_ISR; external name 'PORTD_INT1_ISR'; // Interrupt 65 External Interrupt 1
  2204. procedure PORTA_INT0_ISR; external name 'PORTA_INT0_ISR'; // Interrupt 66 External Interrupt 0
  2205. procedure PORTA_INT1_ISR; external name 'PORTA_INT1_ISR'; // Interrupt 67 External Interrupt 1
  2206. procedure ACA_AC0_ISR; external name 'ACA_AC0_ISR'; // Interrupt 68 AC0 Interrupt
  2207. procedure ACA_AC1_ISR; external name 'ACA_AC1_ISR'; // Interrupt 69 AC1 Interrupt
  2208. procedure ACA_ACW_ISR; external name 'ACA_ACW_ISR'; // Interrupt 70 ACW Window Mode Interrupt
  2209. procedure ADCA_CH0_ISR; external name 'ADCA_CH0_ISR'; // Interrupt 71 Interrupt 0
  2210. procedure TCD2_LUNF_ISR; external name 'TCD2_LUNF_ISR'; // Interrupt 77 Low Byte Underflow Interrupt
  2211. procedure TCD2_HUNF_ISR; external name 'TCD2_HUNF_ISR'; // Interrupt 78 High Byte Underflow Interrupt
  2212. procedure TCD2_LCMPA_ISR; external name 'TCD2_LCMPA_ISR'; // Interrupt 79 Low Byte Compare A Interrupt
  2213. procedure TCD2_LCMPB_ISR; external name 'TCD2_LCMPB_ISR'; // Interrupt 80 Low Byte Compare B Interrupt
  2214. procedure TCD2_LCMPC_ISR; external name 'TCD2_LCMPC_ISR'; // Interrupt 81 Low Byte Compare C Interrupt
  2215. procedure TCD2_LCMPD_ISR; external name 'TCD2_LCMPD_ISR'; // Interrupt 82 Low Byte Compare D Interrupt
  2216. procedure SPID_INT_ISR; external name 'SPID_INT_ISR'; // Interrupt 87 SPI Interrupt
  2217. procedure USARTD0_RXC_ISR; external name 'USARTD0_RXC_ISR'; // Interrupt 88 Reception Complete Interrupt
  2218. procedure USARTD0_DRE_ISR; external name 'USARTD0_DRE_ISR'; // Interrupt 89 Data Register Empty Interrupt
  2219. procedure USARTD0_TXC_ISR; external name 'USARTD0_TXC_ISR'; // Interrupt 90 Transmission Complete Interrupt
  2220. procedure _FPC_start; assembler; nostackframe; noreturn; public name '_START'; section '.init';
  2221. asm
  2222. jmp __dtors_end
  2223. jmp OSC_OSCF_ISR
  2224. jmp PORTC_INT0_ISR
  2225. jmp PORTC_INT1_ISR
  2226. jmp PORTR_INT0_ISR
  2227. jmp PORTR_INT1_ISR
  2228. jmp RTC_OVF_ISR
  2229. jmp RTC_COMP_ISR
  2230. jmp TWIC_TWIS_ISR
  2231. jmp TWIC_TWIM_ISR
  2232. jmp TCC2_LUNF_ISR
  2233. jmp TCC2_HUNF_ISR
  2234. jmp TCC2_LCMPA_ISR
  2235. jmp TCC2_LCMPB_ISR
  2236. jmp TCC2_LCMPC_ISR
  2237. jmp TCC2_LCMPD_ISR
  2238. jmp TCC1_OVF_ISR
  2239. jmp TCC1_ERR_ISR
  2240. jmp TCC1_CCA_ISR
  2241. jmp TCC1_CCB_ISR
  2242. jmp SPIC_INT_ISR
  2243. jmp USARTC0_RXC_ISR
  2244. jmp USARTC0_DRE_ISR
  2245. jmp USARTC0_TXC_ISR
  2246. jmp NVM_EE_ISR
  2247. jmp NVM_SPM_ISR
  2248. jmp PORTB_INT0_ISR
  2249. jmp PORTB_INT1_ISR
  2250. jmp PORTE_INT0_ISR
  2251. jmp PORTE_INT1_ISR
  2252. jmp TWIE_TWIS_ISR
  2253. jmp TWIE_TWIM_ISR
  2254. jmp TCE0_OVF_ISR
  2255. jmp TCE0_ERR_ISR
  2256. jmp TCE0_CCA_ISR
  2257. jmp TCE0_CCB_ISR
  2258. jmp TCE0_CCC_ISR
  2259. jmp TCE0_CCD_ISR
  2260. jmp PORTD_INT0_ISR
  2261. jmp PORTD_INT1_ISR
  2262. jmp PORTA_INT0_ISR
  2263. jmp PORTA_INT1_ISR
  2264. jmp ACA_AC0_ISR
  2265. jmp ACA_AC1_ISR
  2266. jmp ACA_ACW_ISR
  2267. jmp ADCA_CH0_ISR
  2268. jmp TCD2_LUNF_ISR
  2269. jmp TCD2_HUNF_ISR
  2270. jmp TCD2_LCMPA_ISR
  2271. jmp TCD2_LCMPB_ISR
  2272. jmp TCD2_LCMPC_ISR
  2273. jmp TCD2_LCMPD_ISR
  2274. jmp SPID_INT_ISR
  2275. jmp USARTD0_RXC_ISR
  2276. jmp USARTD0_DRE_ISR
  2277. jmp USARTD0_TXC_ISR
  2278. .weak OSC_OSCF_ISR
  2279. .weak PORTC_INT0_ISR
  2280. .weak PORTC_INT1_ISR
  2281. .weak PORTR_INT0_ISR
  2282. .weak PORTR_INT1_ISR
  2283. .weak RTC_OVF_ISR
  2284. .weak RTC_COMP_ISR
  2285. .weak TWIC_TWIS_ISR
  2286. .weak TWIC_TWIM_ISR
  2287. .weak TCC2_LUNF_ISR
  2288. .weak TCC2_HUNF_ISR
  2289. .weak TCC2_LCMPA_ISR
  2290. .weak TCC2_LCMPB_ISR
  2291. .weak TCC2_LCMPC_ISR
  2292. .weak TCC2_LCMPD_ISR
  2293. .weak TCC1_OVF_ISR
  2294. .weak TCC1_ERR_ISR
  2295. .weak TCC1_CCA_ISR
  2296. .weak TCC1_CCB_ISR
  2297. .weak SPIC_INT_ISR
  2298. .weak USARTC0_RXC_ISR
  2299. .weak USARTC0_DRE_ISR
  2300. .weak USARTC0_TXC_ISR
  2301. .weak NVM_EE_ISR
  2302. .weak NVM_SPM_ISR
  2303. .weak PORTB_INT0_ISR
  2304. .weak PORTB_INT1_ISR
  2305. .weak PORTE_INT0_ISR
  2306. .weak PORTE_INT1_ISR
  2307. .weak TWIE_TWIS_ISR
  2308. .weak TWIE_TWIM_ISR
  2309. .weak TCE0_OVF_ISR
  2310. .weak TCE0_ERR_ISR
  2311. .weak TCE0_CCA_ISR
  2312. .weak TCE0_CCB_ISR
  2313. .weak TCE0_CCC_ISR
  2314. .weak TCE0_CCD_ISR
  2315. .weak PORTD_INT0_ISR
  2316. .weak PORTD_INT1_ISR
  2317. .weak PORTA_INT0_ISR
  2318. .weak PORTA_INT1_ISR
  2319. .weak ACA_AC0_ISR
  2320. .weak ACA_AC1_ISR
  2321. .weak ACA_ACW_ISR
  2322. .weak ADCA_CH0_ISR
  2323. .weak TCD2_LUNF_ISR
  2324. .weak TCD2_HUNF_ISR
  2325. .weak TCD2_LCMPA_ISR
  2326. .weak TCD2_LCMPB_ISR
  2327. .weak TCD2_LCMPC_ISR
  2328. .weak TCD2_LCMPD_ISR
  2329. .weak SPID_INT_ISR
  2330. .weak USARTD0_RXC_ISR
  2331. .weak USARTD0_DRE_ISR
  2332. .weak USARTD0_TXC_ISR
  2333. .set OSC_OSCF_ISR, Default_IRQ_handler
  2334. .set PORTC_INT0_ISR, Default_IRQ_handler
  2335. .set PORTC_INT1_ISR, Default_IRQ_handler
  2336. .set PORTR_INT0_ISR, Default_IRQ_handler
  2337. .set PORTR_INT1_ISR, Default_IRQ_handler
  2338. .set RTC_OVF_ISR, Default_IRQ_handler
  2339. .set RTC_COMP_ISR, Default_IRQ_handler
  2340. .set TWIC_TWIS_ISR, Default_IRQ_handler
  2341. .set TWIC_TWIM_ISR, Default_IRQ_handler
  2342. .set TCC2_LUNF_ISR, Default_IRQ_handler
  2343. .set TCC2_HUNF_ISR, Default_IRQ_handler
  2344. .set TCC2_LCMPA_ISR, Default_IRQ_handler
  2345. .set TCC2_LCMPB_ISR, Default_IRQ_handler
  2346. .set TCC2_LCMPC_ISR, Default_IRQ_handler
  2347. .set TCC2_LCMPD_ISR, Default_IRQ_handler
  2348. .set TCC1_OVF_ISR, Default_IRQ_handler
  2349. .set TCC1_ERR_ISR, Default_IRQ_handler
  2350. .set TCC1_CCA_ISR, Default_IRQ_handler
  2351. .set TCC1_CCB_ISR, Default_IRQ_handler
  2352. .set SPIC_INT_ISR, Default_IRQ_handler
  2353. .set USARTC0_RXC_ISR, Default_IRQ_handler
  2354. .set USARTC0_DRE_ISR, Default_IRQ_handler
  2355. .set USARTC0_TXC_ISR, Default_IRQ_handler
  2356. .set NVM_EE_ISR, Default_IRQ_handler
  2357. .set NVM_SPM_ISR, Default_IRQ_handler
  2358. .set PORTB_INT0_ISR, Default_IRQ_handler
  2359. .set PORTB_INT1_ISR, Default_IRQ_handler
  2360. .set PORTE_INT0_ISR, Default_IRQ_handler
  2361. .set PORTE_INT1_ISR, Default_IRQ_handler
  2362. .set TWIE_TWIS_ISR, Default_IRQ_handler
  2363. .set TWIE_TWIM_ISR, Default_IRQ_handler
  2364. .set TCE0_OVF_ISR, Default_IRQ_handler
  2365. .set TCE0_ERR_ISR, Default_IRQ_handler
  2366. .set TCE0_CCA_ISR, Default_IRQ_handler
  2367. .set TCE0_CCB_ISR, Default_IRQ_handler
  2368. .set TCE0_CCC_ISR, Default_IRQ_handler
  2369. .set TCE0_CCD_ISR, Default_IRQ_handler
  2370. .set PORTD_INT0_ISR, Default_IRQ_handler
  2371. .set PORTD_INT1_ISR, Default_IRQ_handler
  2372. .set PORTA_INT0_ISR, Default_IRQ_handler
  2373. .set PORTA_INT1_ISR, Default_IRQ_handler
  2374. .set ACA_AC0_ISR, Default_IRQ_handler
  2375. .set ACA_AC1_ISR, Default_IRQ_handler
  2376. .set ACA_ACW_ISR, Default_IRQ_handler
  2377. .set ADCA_CH0_ISR, Default_IRQ_handler
  2378. .set TCD2_LUNF_ISR, Default_IRQ_handler
  2379. .set TCD2_HUNF_ISR, Default_IRQ_handler
  2380. .set TCD2_LCMPA_ISR, Default_IRQ_handler
  2381. .set TCD2_LCMPB_ISR, Default_IRQ_handler
  2382. .set TCD2_LCMPC_ISR, Default_IRQ_handler
  2383. .set TCD2_LCMPD_ISR, Default_IRQ_handler
  2384. .set SPID_INT_ISR, Default_IRQ_handler
  2385. .set USARTD0_RXC_ISR, Default_IRQ_handler
  2386. .set USARTD0_DRE_ISR, Default_IRQ_handler
  2387. .set USARTD0_TXC_ISR, Default_IRQ_handler
  2388. end;
  2389. end.