SWM341.h 194 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749175017511752175317541755175617571758175917601761176217631764176517661767176817691770177117721773177417751776177717781779178017811782178317841785178617871788178917901791179217931794179517961797179817991800180118021803180418051806180718081809181018111812181318141815181618171818181918201821182218231824182518261827182818291830183118321833183418351836183718381839184018411842184318441845184618471848184918501851185218531854185518561857185818591860186118621863186418651866186718681869187018711872187318741875187618771878187918801881188218831884188518861887188818891890189118921893189418951896189718981899190019011902190319041905190619071908190919101911191219131914191519161917191819191920192119221923192419251926192719281929193019311932193319341935193619371938193919401941194219431944194519461947194819491950195119521953195419551956195719581959196019611962196319641965196619671968196919701971197219731974197519761977197819791980198119821983198419851986198719881989199019911992199319941995199619971998199920002001200220032004200520062007200820092010201120122013201420152016201720182019202020212022202320242025202620272028202920302031203220332034203520362037203820392040204120422043204420452046204720482049205020512052205320542055205620572058205920602061206220632064206520662067206820692070207120722073207420752076207720782079208020812082208320842085208620872088208920902091209220932094209520962097209820992100210121022103210421052106210721082109211021112112211321142115211621172118211921202121212221232124212521262127212821292130213121322133213421352136213721382139214021412142214321442145214621472148214921502151215221532154215521562157215821592160216121622163216421652166216721682169217021712172217321742175217621772178217921802181218221832184218521862187218821892190219121922193219421952196219721982199220022012202220322042205220622072208220922102211221222132214221522162217221822192220222122222223222422252226222722282229223022312232223322342235223622372238223922402241224222432244224522462247224822492250225122522253225422552256225722582259226022612262226322642265226622672268226922702271227222732274227522762277227822792280228122822283228422852286228722882289229022912292229322942295229622972298229923002301230223032304230523062307230823092310231123122313231423152316231723182319232023212322232323242325232623272328232923302331233223332334233523362337233823392340234123422343234423452346234723482349235023512352235323542355235623572358235923602361236223632364236523662367236823692370237123722373237423752376237723782379238023812382238323842385238623872388238923902391239223932394239523962397239823992400240124022403240424052406240724082409241024112412241324142415241624172418241924202421242224232424242524262427242824292430243124322433243424352436243724382439244024412442244324442445244624472448244924502451245224532454245524562457245824592460246124622463246424652466246724682469247024712472247324742475247624772478247924802481248224832484248524862487248824892490249124922493249424952496249724982499250025012502250325042505250625072508250925102511251225132514251525162517251825192520252125222523252425252526252725282529253025312532253325342535253625372538253925402541254225432544254525462547254825492550255125522553255425552556255725582559256025612562256325642565256625672568256925702571257225732574257525762577257825792580258125822583258425852586258725882589259025912592259325942595259625972598259926002601260226032604260526062607260826092610261126122613261426152616261726182619262026212622262326242625262626272628262926302631263226332634263526362637263826392640264126422643264426452646264726482649265026512652265326542655265626572658265926602661266226632664266526662667266826692670267126722673267426752676267726782679268026812682268326842685268626872688268926902691269226932694269526962697269826992700270127022703270427052706270727082709271027112712271327142715271627172718271927202721272227232724272527262727272827292730273127322733273427352736273727382739274027412742274327442745274627472748274927502751275227532754275527562757275827592760276127622763276427652766276727682769277027712772277327742775277627772778277927802781278227832784278527862787278827892790279127922793279427952796279727982799280028012802280328042805280628072808280928102811281228132814281528162817281828192820282128222823282428252826282728282829283028312832283328342835283628372838283928402841284228432844284528462847284828492850285128522853285428552856285728582859286028612862286328642865286628672868286928702871287228732874287528762877287828792880288128822883288428852886288728882889289028912892289328942895289628972898289929002901290229032904290529062907290829092910291129122913291429152916291729182919292029212922292329242925292629272928292929302931293229332934293529362937293829392940294129422943294429452946294729482949295029512952295329542955295629572958295929602961296229632964296529662967296829692970297129722973297429752976297729782979298029812982298329842985298629872988298929902991299229932994299529962997299829993000300130023003300430053006300730083009301030113012301330143015301630173018301930203021302230233024302530263027302830293030303130323033303430353036303730383039304030413042304330443045304630473048304930503051305230533054305530563057305830593060306130623063306430653066306730683069307030713072307330743075307630773078307930803081308230833084308530863087308830893090309130923093309430953096309730983099310031013102310331043105310631073108310931103111311231133114311531163117311831193120312131223123312431253126312731283129313031313132313331343135313631373138313931403141314231433144314531463147314831493150315131523153315431553156315731583159316031613162316331643165316631673168316931703171317231733174317531763177317831793180318131823183318431853186318731883189319031913192319331943195319631973198319932003201320232033204320532063207320832093210321132123213321432153216321732183219322032213222322332243225322632273228322932303231323232333234323532363237323832393240324132423243324432453246324732483249325032513252325332543255325632573258325932603261326232633264326532663267326832693270327132723273327432753276327732783279328032813282328332843285328632873288328932903291329232933294329532963297329832993300330133023303330433053306330733083309331033113312331333143315331633173318331933203321332233233324332533263327332833293330333133323333333433353336333733383339334033413342334333443345334633473348334933503351335233533354335533563357335833593360336133623363336433653366336733683369337033713372337333743375337633773378337933803381338233833384338533863387338833893390339133923393339433953396339733983399340034013402340334043405340634073408340934103411341234133414341534163417341834193420342134223423342434253426342734283429343034313432343334343435343634373438343934403441344234433444344534463447344834493450345134523453345434553456345734583459346034613462346334643465346634673468346934703471347234733474347534763477347834793480348134823483348434853486348734883489349034913492349334943495349634973498349935003501350235033504350535063507350835093510351135123513351435153516351735183519352035213522352335243525352635273528352935303531353235333534353535363537353835393540354135423543354435453546354735483549355035513552355335543555355635573558355935603561356235633564356535663567356835693570357135723573357435753576357735783579358035813582358335843585358635873588358935903591359235933594359535963597359835993600360136023603360436053606360736083609361036113612361336143615361636173618361936203621362236233624362536263627362836293630363136323633363436353636363736383639364036413642364336443645364636473648364936503651365236533654365536563657365836593660366136623663366436653666366736683669367036713672367336743675367636773678367936803681368236833684368536863687368836893690369136923693369436953696369736983699370037013702370337043705370637073708370937103711371237133714371537163717371837193720372137223723372437253726372737283729373037313732373337343735373637373738373937403741374237433744374537463747374837493750375137523753375437553756375737583759376037613762376337643765376637673768376937703771377237733774377537763777377837793780378137823783378437853786378737883789379037913792379337943795379637973798379938003801380238033804380538063807380838093810381138123813381438153816381738183819382038213822382338243825382638273828382938303831383238333834383538363837383838393840384138423843384438453846384738483849385038513852385338543855385638573858385938603861386238633864386538663867386838693870387138723873387438753876387738783879388038813882388338843885388638873888388938903891389238933894389538963897389838993900390139023903390439053906390739083909391039113912391339143915391639173918391939203921392239233924392539263927392839293930393139323933393439353936393739383939394039413942394339443945394639473948394939503951395239533954395539563957395839593960396139623963396439653966396739683969397039713972397339743975397639773978397939803981398239833984398539863987398839893990399139923993399439953996399739983999400040014002400340044005400640074008400940104011401240134014401540164017401840194020402140224023402440254026402740284029403040314032403340344035403640374038403940404041404240434044404540464047404840494050405140524053405440554056405740584059406040614062
  1. #ifndef __SWM341_H__
  2. #define __SWM341_H__
  3. /*
  4. * ==========================================================================
  5. * ---------- Interrupt Number Definition -----------------------------------
  6. * ==========================================================================
  7. */
  8. typedef enum IRQn
  9. {
  10. /****** Cortex-M0 Processor Exceptions Numbers **********************************************/
  11. NonMaskableInt_IRQn = -14, /*!< 2 Non Maskable Interrupt */
  12. MemoryManagement_IRQn = -12, /*!< 4 Cortex-M4 Memory Management Interrupt */
  13. BusFault_IRQn = -11, /*!< 5 Cortex-M4 Bus Fault Interrupt */
  14. UsageFault_IRQn = -10, /*!< 6 Cortex-M4 Usage Fault Interrupt */
  15. SVCall_IRQn = -5, /*!< 11 Cortex-M4 SV Call Interrupt */
  16. DebugMonitor_IRQn = -4, /*!< 12 Cortex-M4 Debug Monitor Interrupt */
  17. PendSV_IRQn = -2, /*!< 14 Cortex-M4 Pend SV Interrupt */
  18. SysTick_IRQn = -1, /*!< 15 Cortex-M4 System Tick Interrupt */
  19. /****** Cortex-M4 specific Interrupt Numbers ************************************************/
  20. UART0_IRQn = 0,
  21. UART1_IRQn = 1,
  22. TIMR0_IRQn = 2,
  23. TIMR1_IRQn = 3,
  24. DMA_IRQn = 4,
  25. SPI0_IRQn = 5,
  26. PWM0_IRQn = 6,
  27. WDT_IRQn = 7,
  28. UART2_IRQn = 8,
  29. PWM1_IRQn = 9,
  30. ADC0_IRQn = 10,
  31. BTIMR0_IRQn = 11,
  32. HALL0_IRQn = 12,
  33. PWM2_IRQn = 13,
  34. PWMBRK_IRQn = 14,
  35. I2C0_IRQn = 15,
  36. CAN0_IRQn = 16,
  37. SPI1_IRQn = 17,
  38. RTC_IRQn = 18,
  39. PWM3_IRQn = 19,
  40. TIMR2_IRQn = 20,
  41. UART3_IRQn = 21,
  42. TIMR3_IRQn = 22,
  43. ADC1_IRQn = 23,
  44. BOD_IRQn = 24,
  45. CORDIC_IRQn = 25,
  46. BTIMR1_IRQn = 26,
  47. PWM4_IRQn = 27,
  48. HALL3_IRQn = 28,
  49. BTIMR2_IRQn = 29,
  50. I2C1_IRQn = 30,
  51. BTIMR3_IRQn = 31,
  52. ACMP_IRQn = 32,
  53. XTALSTOP_IRQn = 33,
  54. FSPI_IRQn = 34,
  55. GPIOA_IRQn = 35,
  56. GPIOB_IRQn = 36,
  57. GPIOC_IRQn = 37,
  58. GPIOD_IRQn = 38,
  59. GPIOM_IRQn = 39,
  60. GPION_IRQn = 40,
  61. GPIOA0_IRQn = 41,
  62. GPIOA1_IRQn = 42,
  63. GPIOA5_IRQn = 43,
  64. GPIOA6_IRQn = 44,
  65. GPIOA10_IRQn = 45,
  66. GPIOA11_IRQn = 46,
  67. GPIOA12_IRQn = 47,
  68. GPIOA13_IRQn = 48,
  69. GPIOB0_IRQn = 49,
  70. GPIOB1_IRQn = 50,
  71. GPIOB2_IRQn = 51,
  72. GPIOC0_IRQn = 52,
  73. GPIOC1_IRQn = 53,
  74. GPIOC2_IRQn = 54,
  75. GPIOC3_IRQn = 55,
  76. GPIOC4_IRQn = 56,
  77. GPIOD3_IRQn = 57,
  78. GPIOD4_IRQn = 58,
  79. GPIOD5_IRQn = 59,
  80. GPIOD6_IRQn = 60,
  81. GPIOD7_IRQn = 61,
  82. GPIOD8_IRQn = 62,
  83. GPIOC9_IRQn = 63,
  84. GPIOC10_IRQn = 64,
  85. GPIOC11_IRQn = 65,
  86. GPIOC12_IRQn = 66,
  87. GPIOM0_IRQn = 67,
  88. GPIOM1_IRQn = 68,
  89. GPIOM2_IRQn = 69,
  90. GPIOM3_IRQn = 70,
  91. GPIOM4_IRQn = 71,
  92. DIV_IRQn = 72,
  93. LCD_IRQn = 73,
  94. GPIOE_IRQn = 74,
  95. JPEG_IRQn = 75,
  96. SDIO_IRQn = 76,
  97. USB_IRQn = 77,
  98. CAN1_IRQn = 78,
  99. TIMR4_IRQn = 79,
  100. BTIMR4_IRQn = 80,
  101. BTIMR5_IRQn = 81,
  102. BTIMR6_IRQn = 82,
  103. BTIMR7_IRQn = 83,
  104. BTIMR8_IRQn = 84,
  105. BTIMR9_IRQn = 85,
  106. BTIMR10_IRQn = 86,
  107. BTIMR11_IRQn = 87,
  108. DMA2D_IRQn = 88,
  109. QEI_IRQn = 90,
  110. } IRQn_Type;
  111. /*
  112. * ==========================================================================
  113. * ----------- Processor and Core Peripheral Section ------------------------
  114. * ==========================================================================
  115. */
  116. /* Configuration of the Cortex-M4 Processor and Core Peripherals */
  117. #define __CM33_REV 0x0000 /*!< Core revision r0p1 */
  118. #define __NVIC_PRIO_BITS 3 /*!< SWM341 uses 3 Bits for the Priority Levels */
  119. #define __Vendor_SysTickConfig 0 /*!< Set to 1 if different SysTick Config is used */
  120. #define __DSP_PRESENT 1 /*!< DSP extension present */
  121. #define __FPU_PRESENT 1 /*!< FPU present */
  122. #define __MPU_PRESENT 1 /*!< MPU present */
  123. #if defined ( __CC_ARM )
  124. #pragma anon_unions
  125. #endif
  126. #include <stdio.h>
  127. #include <stdint.h>
  128. #include <stdbool.h>
  129. #include "core_cm33.h"
  130. #include "system_SWM341.h"
  131. /******************************************************************************/
  132. /* Device Specific Peripheral registers structures */
  133. /******************************************************************************/
  134. typedef struct {
  135. __IO uint32_t CLKSEL; //Clock Select
  136. __IO uint32_t CLKDIVx_ON; //[0] CLK_DIVx时钟源开关
  137. __IO uint32_t CLKEN0; //Clock Enable
  138. __IO uint32_t CLKEN1;
  139. __IO uint32_t SLEEP;
  140. uint32_t RESERVED[4];
  141. __IO uint32_t RSTSR; //Reset Status
  142. uint32_t RESERVED2[2];
  143. __IO uint32_t RTCWKCR; //RTC Wakeup Control
  144. __IO uint32_t RTCWKSR;
  145. uint32_t RESERVED3[14];
  146. __IO uint32_t USBPHYCR;
  147. __IO uint32_t USBCR;
  148. uint32_t RESERVED4[2];
  149. __I uint32_t CHIPID[4];
  150. __IO uint32_t BACKUP[4]; //Data Backup Register
  151. uint32_t RESERVED5[12];
  152. __IO uint32_t PRNGCR;
  153. __IO uint32_t PRNGDL; //PRNG Data Low Word
  154. __IO uint32_t PRNGDH;
  155. uint32_t RESERVED6[9];
  156. __IO uint32_t PAWKEN; //PORTA Wakeup Enable
  157. __IO uint32_t PBWKEN;
  158. __IO uint32_t PCWKEN;
  159. __IO uint32_t PDWKEN;
  160. __IO uint32_t PEWKEN;
  161. uint32_t RESERVED7[3];
  162. __IO uint32_t PMWKEN;
  163. __IO uint32_t PNWKEN;
  164. uint32_t RESERVED8[2];
  165. __IO uint32_t PAWKSR; //PORTA Wakeup Status,写1清零
  166. __IO uint32_t PBWKSR;
  167. __IO uint32_t PCWKSR;
  168. __IO uint32_t PDWKSR;
  169. __IO uint32_t PEWKSR;
  170. uint32_t RESERVED9[3];
  171. __IO uint32_t PMWKSR;
  172. __IO uint32_t PNWKSR;
  173. uint32_t RESERVED10[(0x400-0x154)/4-1];
  174. __IO uint32_t IOFILT0; //IO Filter 0
  175. __IO uint32_t IOFILT1;
  176. uint32_t RESERVED11[(0x720-0x404)/4-1];
  177. __IO uint32_t PRSTEN; //外设复位使能,只有当PRSTEN的值为0x55时,才能写PRSTR0、PRSTR1
  178. __IO uint32_t PRSTR0;
  179. __IO uint32_t PRSTR1;
  180. //Analog Control: 0x400AA000
  181. uint32_t RESERVED12[(0x400AA000-0x40000728)/4-1];
  182. __IO uint32_t HRCCR; //High speed RC Control Register
  183. uint32_t RESERVED13[3];
  184. __IO uint32_t BODCR;
  185. __IO uint32_t BODSR;
  186. __IO uint32_t ADCCR;
  187. uint32_t RESERVED14;
  188. __IO uint32_t XTALCR;
  189. __IO uint32_t XTALSR;
  190. uint32_t RESERVED15[6];
  191. __IO uint32_t PLLCR;
  192. __IO uint32_t PLLDIV;
  193. uint32_t RESERVED16;
  194. __IO uint32_t PLLLOCK; //[0] 1 PLL已锁定
  195. __IO uint32_t LRCCR; //Low speed RC Control Register
  196. uint32_t RESERVED17[7];
  197. __IO uint32_t OPACR; //OPA Control Register
  198. uint32_t RESERVED18[3];
  199. __IO uint32_t ACMPCR; //Analog Comparator Control Register
  200. __IO uint32_t ACMPSR; //Analog Comparator Status Register
  201. __IO uint32_t ACMPCR2;
  202. uint32_t RESERVED19;
  203. __IO uint32_t DACCR;
  204. uint32_t RESERVED20;
  205. __IO uint32_t TEMPCR; //Temperature Sensor
  206. } SYS_TypeDef;
  207. #define SYS_CLKSEL_SYS_Pos 0 //系统时钟选择 1 HRC 0 CLK_DIVx
  208. #define SYS_CLKSEL_SYS_Msk (0x01 << SYS_CLKSEL_SYS_Pos)
  209. #define SYS_CLKSEL_CLK_DIVx_Pos 1 //选择CLK_DIVx 0 CLK_DIV1 1 CLK_DIV8
  210. #define SYS_CLKSEL_CLK_DIVx_Msk (0x01 << SYS_CLKSEL_CLK_DIVx_Pos)
  211. #define SYS_CLKSEL_CLK_Pos 2 //Clock Source 0 LRC 1 PLL 2 XTAL_32K 3 XTAL 4 HRC
  212. #define SYS_CLKSEL_CLK_Msk (0x07 << SYS_CLKSEL_CLK_Pos)
  213. #define SYS_CLKSEL_RTC_Pos 5 //RTC时钟源选择 0 LRC 1 XTAL_32K
  214. #define SYS_CLKSEL_RTC_Msk (0x01 << SYS_CLKSEL_RTC_Pos)
  215. #define SYS_CLKSEL_IOFILT_Pos 6 //IO Filter时钟选择,0 HRC 2 XTAL 3 LRC
  216. #define SYS_CLKSEL_IOFILT_Msk (0x03 << SYS_CLKSEL_IOFILT_Pos)
  217. #define SYS_CLKSEL_SDIO_Pos 10 //SDIO时钟选择,0 SYSCLK/2 1 SYSCLK/8 2 SYSCLK/4 3 SYSCLK
  218. #define SYS_CLKSEL_SDIO_Msk (0x03 << SYS_CLKSEL_SDIO_Pos)
  219. #define SYS_CLKSEL_WDT_Pos 12 //看门狗时钟选择 0 HRC 1 XTAL 2 LRC 3 XTAL_32K
  220. #define SYS_CLKSEL_WDT_Msk (0x03 << SYS_CLKSEL_WDT_Pos)
  221. #define SYS_CLKSEL_AD0_Pos 16 //ADC0时钟选择 0 HRC 1 XTAL 2 PLL
  222. #define SYS_CLKSEL_AD0_Msk (0x03 << SYS_CLKSEL_AD0_Pos)
  223. #define SYS_CLKSEL_AD0DIV_Pos 18 //ADC0时钟分频 0 1分频 1 1分频 2 4分频 3 8分频
  224. #define SYS_CLKSEL_AD0DIV_Msk (0x03 << SYS_CLKSEL_AD0DIV_Pos)
  225. #define SYS_CLKSEL_AD1_Pos 20
  226. #define SYS_CLKSEL_AD1_Msk (0x03 << SYS_CLKSEL_AD1_Pos)
  227. #define SYS_CLKSEL_AD1DIV_Pos 22
  228. #define SYS_CLKSEL_AD1DIV_Msk (0x03 << SYS_CLKSEL_AD1DIV_Pos)
  229. #define SYS_CLKSEL_SLEEP_Pos 24 //休眠时钟源 0 LRC 1 XTAL_32K
  230. #define SYS_CLKSEL_SLEEP_Msk (0x01 << SYS_CLKSEL_SLEEP_Pos)
  231. #define SYS_CLKDIV_ON_Pos 0
  232. #define SYS_CLKDIV_ON_Msk (0x01 << SYS_CLKDIV_ON_Pos)
  233. #define SYS_CLKEN0_GPIOA_Pos 0
  234. #define SYS_CLKEN0_GPIOA_Msk (0x01 << SYS_CLKEN0_GPIOA_Pos)
  235. #define SYS_CLKEN0_GPIOB_Pos 1
  236. #define SYS_CLKEN0_GPIOB_Msk (0x01 << SYS_CLKEN0_GPIOB_Pos)
  237. #define SYS_CLKEN0_GPIOC_Pos 2
  238. #define SYS_CLKEN0_GPIOC_Msk (0x01 << SYS_CLKEN0_GPIOC_Pos)
  239. #define SYS_CLKEN0_GPIOD_Pos 3
  240. #define SYS_CLKEN0_GPIOD_Msk (0x01 << SYS_CLKEN0_GPIOD_Pos)
  241. #define SYS_CLKEN0_GPIOM_Pos 4
  242. #define SYS_CLKEN0_GPIOM_Msk (0x01 << SYS_CLKEN0_GPIOM_Pos)
  243. #define SYS_CLKEN0_GPION_Pos 5
  244. #define SYS_CLKEN0_GPION_Msk (0x01 << SYS_CLKEN0_GPION_Pos)
  245. #define SYS_CLKEN0_UART0_Pos 6
  246. #define SYS_CLKEN0_UART0_Msk (0x01 << SYS_CLKEN0_UART0_Pos)
  247. #define SYS_CLKEN0_UART1_Pos 7
  248. #define SYS_CLKEN0_UART1_Msk (0x01 << SYS_CLKEN0_UART1_Pos)
  249. #define SYS_CLKEN0_UART2_Pos 8
  250. #define SYS_CLKEN0_UART2_Msk (0x01 << SYS_CLKEN0_UART2_Pos)
  251. #define SYS_CLKEN0_UART3_Pos 9
  252. #define SYS_CLKEN0_UART3_Msk (0x01 << SYS_CLKEN0_UART3_Pos)
  253. #define SYS_CLKEN0_WDT_Pos 10
  254. #define SYS_CLKEN0_WDT_Msk (0x01 << SYS_CLKEN0_WDT_Pos)
  255. #define SYS_CLKEN0_TIMR_Pos 11
  256. #define SYS_CLKEN0_TIMR_Msk (0x01 << SYS_CLKEN0_TIMR_Pos)
  257. #define SYS_CLKEN0_PWM_Pos 12
  258. #define SYS_CLKEN0_PWM_Msk (0x01 << SYS_CLKEN0_PWM_Pos)
  259. #define SYS_CLKEN0_SPI0_Pos 13
  260. #define SYS_CLKEN0_SPI0_Msk (0x01 << SYS_CLKEN0_SPI0_Pos)
  261. #define SYS_CLKEN0_SPI1_Pos 14
  262. #define SYS_CLKEN0_SPI1_Msk (0x01 << SYS_CLKEN0_SPI1_Pos)
  263. #define SYS_CLKEN0_I2C0_Pos 15
  264. #define SYS_CLKEN0_I2C0_Msk (0x01 << SYS_CLKEN0_I2C0_Pos)
  265. #define SYS_CLKEN0_I2C1_Pos 16
  266. #define SYS_CLKEN0_I2C1_Msk (0x01 << SYS_CLKEN0_I2C1_Pos)
  267. #define SYS_CLKEN0_CRC_Pos 19
  268. #define SYS_CLKEN0_CRC_Msk (0x01 << SYS_CLKEN0_CRC_Pos)
  269. #define SYS_CLKEN0_CORDIC_Pos 20
  270. #define SYS_CLKEN0_CORDIC_Msk (0x01 << SYS_CLKEN0_CORDIC_Pos)
  271. #define SYS_CLKEN0_DIV_Pos 21
  272. #define SYS_CLKEN0_DIV_Msk (0x01 << SYS_CLKEN0_DIV_Pos)
  273. #define SYS_CLKEN0_SDIO_Pos 22
  274. #define SYS_CLKEN0_SDIO_Msk (0x01 << SYS_CLKEN0_SDIO_Pos)
  275. #define SYS_CLKEN0_USB_Pos 24
  276. #define SYS_CLKEN0_USB_Msk (0x01 << SYS_CLKEN0_USB_Pos)
  277. #define SYS_CLKEN0_ANAC_Pos 25 //模拟控制单元时钟使能
  278. #define SYS_CLKEN0_ANAC_Msk (0x01 << SYS_CLKEN0_ANAC_Pos)
  279. #define SYS_CLKEN0_ADC0_Pos 26
  280. #define SYS_CLKEN0_ADC0_Msk (0x01 << SYS_CLKEN0_ADC0_Pos)
  281. #define SYS_CLKEN0_CAN0_Pos 28
  282. #define SYS_CLKEN0_CAN0_Msk (0x01 << SYS_CLKEN0_CAN0_Pos)
  283. #define SYS_CLKEN0_DMA2D_Pos 29
  284. #define SYS_CLKEN0_DMA2D_Msk (0x01 << SYS_CLKEN0_DMA2D_Pos)
  285. #define SYS_CLKEN0_LCD_Pos 30
  286. #define SYS_CLKEN0_LCD_Msk (0x01 << SYS_CLKEN0_LCD_Pos)
  287. #define SYS_CLKEN1_GPIOE_Pos 0
  288. #define SYS_CLKEN1_GPIOE_Msk (0x01 << SYS_CLKEN1_GPIOE_Pos)
  289. #define SYS_CLKEN1_SPI2_Pos 8
  290. #define SYS_CLKEN1_SPI2_Msk (0x01 << SYS_CLKEN1_SPI2_Pos)
  291. #define SYS_CLKEN1_SDRAM_Pos 12
  292. #define SYS_CLKEN1_SDRAM_Msk (0x01 << SYS_CLKEN1_SDRAM_Pos)
  293. #define SYS_CLKEN1_SFC_Pos 13
  294. #define SYS_CLKEN1_SFC_Msk (0x01 << SYS_CLKEN1_SFC_Pos)
  295. #define SYS_CLKEN1_ADC1_Pos 16
  296. #define SYS_CLKEN1_ADC1_Msk (0x01 << SYS_CLKEN1_ADC1_Pos)
  297. #define SYS_CLKEN1_CAN1_Pos 17
  298. #define SYS_CLKEN1_CAN1_Msk (0x01 << SYS_CLKEN1_CAN1_Pos)
  299. #define SYS_CLKEN1_RTC_Pos 19
  300. #define SYS_CLKEN1_RTC_Msk (0x01 << SYS_CLKEN1_RTC_Pos)
  301. #define SYS_CLKEN1_IOFILT_Pos 20 //IO Filter
  302. #define SYS_CLKEN1_IOFILT_Msk (0x01 << SYS_CLKEN1_IOFILT_Pos)
  303. #define SYS_CLKEN1_BTIMR_Pos 22
  304. #define SYS_CLKEN1_BTIMR_Msk (0x01 << SYS_CLKEN1_BTIMR_Pos)
  305. #define SYS_CLKEN1_JPEG_Pos 25
  306. #define SYS_CLKEN1_JPEG_Msk (0x01 << SYS_CLKEN1_JPEG_Pos)
  307. #define SYS_CLKEN1_DAC_Pos 26
  308. #define SYS_CLKEN1_DAC_Msk (0x01 << SYS_CLKEN1_DAC_Pos)
  309. #define SYS_CLKEN1_QEI_Pos 27
  310. #define SYS_CLKEN1_QEI_Msk (0x01 << SYS_CLKEN1_QEI_Pos)
  311. #define SYS_SLEEP_SLEEP_Pos 0 //将该位置1后,系统将进入SLEEP模式
  312. #define SYS_SLEEP_SLEEP_Msk (0x01 << SYS_SLEEP_SLEEP_Pos)
  313. #define SYS_SLEEP_STOP_Pos 1 //将该位置1后,系统将进入STOP SLEEP模式
  314. #define SYS_SLEEP_STOP_Msk (0x01 << SYS_SLEEP_STOP_Pos)
  315. #define SYS_RSTSR_POR_Pos 0 //1 出现过POR复位,写1清零
  316. #define SYS_RSTSR_POR_Msk (0x01 << SYS_RSTSR_POR_Pos)
  317. #define SYS_RSTSR_WDT_Pos 1 //1 出现过WDT复位,写1清零
  318. #define SYS_RSTSR_WDT_Msk (0x01 << SYS_RSTSR_WDT_Pos)
  319. #define SYS_RTCWKCR_EN_Pos 0 //RTC唤醒使能
  320. #define SYS_RTCWKCR_EN_Msk (0x01 << SYS_RTCWKCR_EN_Pos)
  321. #define SYS_RTCWKSR_FLAG_Pos 0 //RTC唤醒标志,写1清零
  322. #define SYS_RTCWKSR_FLAG_Msk (0x01 << SYS_RTCWKSR_FLAG_Pos)
  323. #define SYS_USBPHYCR_IDEN_Pos 0 //ID PIN采样使能
  324. #define SYS_USBPHYCR_IDEN_Msk (0x01 << SYS_USBPHYCR_IDEN_Pos)
  325. #define SYS_USBPHYCR_OPMODE_Pos 1 //0 Normal Operation 1 Non-Driving (Disable Pull-up register)
  326. #define SYS_USBPHYCR_OPMODE_Msk (0x03 << SYS_USBPHYCR_OPMODE_Pos)
  327. #define SYS_USBPHYCR_XCVR_Pos 4 //收发器模式选择,1 FS 2 LS
  328. #define SYS_USBPHYCR_XCVR_Msk (0x03 << SYS_USBPHYCR_XCVR_Pos)
  329. #define SYS_USBPHYCR_PLLEN_Pos 7 //PHY内置PLL开关
  330. #define SYS_USBPHYCR_PLLEN_Msk (0x01 << SYS_USBPHYCR_PLLEN_Pos)
  331. #define SYS_USBCR_RST48M_Pos 0 //USB控制器48M时钟域复位
  332. #define SYS_USBCR_RST48M_Msk (0x01 << SYS_USBCR_RST48M_Pos)
  333. #define SYS_USBCR_RST12M_Pos 1 //USB控制器12M时钟域复位
  334. #define SYS_USBCR_RST12M_Msk (0x01 << SYS_USBCR_RST12M_Pos)
  335. #define SYS_USBCR_RSTPLL_Pos 2 //USB控制器PLL时钟域复位
  336. #define SYS_USBCR_RSTPLL_Msk (0x01 << SYS_USBCR_RSTPLL_Pos)
  337. #define SYS_USBCR_ROLE_Pos 3 //0 由ID引脚决定 2 Host 3 Device
  338. #define SYS_USBCR_ROLE_Msk (0x03 << SYS_USBCR_ROLE_Pos)
  339. #define SYS_USBCR_VBUS_Pos 5 //0 由VBUS引脚决定 1 强制为高
  340. #define SYS_USBCR_VBUS_Msk (0x01 << SYS_USBCR_VBUS_Pos)
  341. #define SYS_PRNGCR_CLR_Pos 0 //种子清零,至少保持一个LRC时钟周期
  342. #define SYS_PRNGCR_CLR_Msk (0x01 << SYS_PRNGCR_CLR_Pos)
  343. #define SYS_PRNGCR_MODE_Pos 1 //0 关闭 2 三时钟模式(RCHF、RCLF、XTAH) 3 两时钟模式(RCHF、RCLF)
  344. #define SYS_PRNGCR_MODE_Msk (0x03 << SYS_PRNGCR_MODE_Pos)
  345. #define SYS_PRNGCR_RDY_Pos 8 //1 可以从PRNGDL和PRNGDH读取数据
  346. #define SYS_PRNGCR_RDY_Msk (0x01 << SYS_PRNGCR_RDY_Pos)
  347. #define SYS_IOFILT_TIM_Pos 0 //滤波窗口时间 = Tfilter_clk * 时钟分频 * 2^TIM
  348. #define SYS_IOFILT_TIM_Msk (0x0F << SYS_IOFILT_TIM_Pos)
  349. #define SYS_IOFILT_CLKDIV_Pos 4 //0 时钟不分频 1 时钟32分频
  350. #define SYS_IOFILT_CLKDIV_Msk (0x01 << SYS_IOFILT_CLKDIV_Pos)
  351. #define SYS_IOFILT_IOSEL_Pos 5 //被滤波IO选择,每个IOFILT可为四个IO中的一个进行滤波
  352. #define SYS_IOFILT_IOSEL_Msk (0x03 << SYS_IOFILT_IOSEL_Pos)
  353. #define SYS_PRSTR0_GPIOA_Pos 0 //1 复位GPIOA 0 不复位
  354. #define SYS_PRSTR0_GPIOA_Msk (0x01 << SYS_PRSTR0_GPIOA_Pos)
  355. #define SYS_PRSTR0_GPIOB_Pos 1
  356. #define SYS_PRSTR0_GPIOB_Msk (0x01 << SYS_PRSTR0_GPIOB_Pos)
  357. #define SYS_PRSTR0_GPIOC_Pos 2
  358. #define SYS_PRSTR0_GPIOC_Msk (0x01 << SYS_PRSTR0_GPIOC_Pos)
  359. #define SYS_PRSTR0_GPIOD_Pos 3
  360. #define SYS_PRSTR0_GPIOD_Msk (0x01 << SYS_PRSTR0_GPIOD_Pos)
  361. #define SYS_PRSTR0_GPIOM_Pos 4
  362. #define SYS_PRSTR0_GPIOM_Msk (0x01 << SYS_PRSTR0_GPIOM_Pos)
  363. #define SYS_PRSTR0_GPION_Pos 5
  364. #define SYS_PRSTR0_GPION_Msk (0x01 << SYS_PRSTR0_GPION_Pos)
  365. #define SYS_PRSTR0_UART0_Pos 6
  366. #define SYS_PRSTR0_UART0_Msk (0x01 << SYS_PRSTR0_UART0_Pos)
  367. #define SYS_PRSTR0_UART1_Pos 7
  368. #define SYS_PRSTR0_UART1_Msk (0x01 << SYS_PRSTR0_UART1_Pos)
  369. #define SYS_PRSTR0_UART2_Pos 8
  370. #define SYS_PRSTR0_UART2_Msk (0x01 << SYS_PRSTR0_UART2_Pos)
  371. #define SYS_PRSTR0_UART3_Pos 9
  372. #define SYS_PRSTR0_UART3_Msk (0x01 << SYS_PRSTR0_UART3_Pos)
  373. #define SYS_PRSTR0_WDT_Pos 10
  374. #define SYS_PRSTR0_WDT_Msk (0x01 << SYS_PRSTR0_WDT_Pos)
  375. #define SYS_PRSTR0_TIMR_Pos 11
  376. #define SYS_PRSTR0_TIMR_Msk (0x01 << SYS_PRSTR0_TIMR_Pos)
  377. #define SYS_PRSTR0_PWM_Pos 12
  378. #define SYS_PRSTR0_PWM_Msk (0x01 << SYS_PRSTR0_PWM_Pos)
  379. #define SYS_PRSTR0_SPI0_Pos 13
  380. #define SYS_PRSTR0_SPI0_Msk (0x01 << SYS_PRSTR0_SPI0_Pos)
  381. #define SYS_PRSTR0_SPI1_Pos 14
  382. #define SYS_PRSTR0_SPI1_Msk (0x01 << SYS_PRSTR0_SPI1_Pos)
  383. #define SYS_PRSTR0_I2C0_Pos 15
  384. #define SYS_PRSTR0_I2C0_Msk (0x01 << SYS_PRSTR0_I2C0_Pos)
  385. #define SYS_PRSTR0_I2C1_Pos 16
  386. #define SYS_PRSTR0_I2C1_Msk (0x01 << SYS_PRSTR0_I2C1_Pos)
  387. #define SYS_PRSTR0_CRC_Pos 19
  388. #define SYS_PRSTR0_CRC_Msk (0x01 << SYS_PRSTR0_CRC_Pos)
  389. #define SYS_PRSTR0_CORDIC_Pos 20
  390. #define SYS_PRSTR0_CORDIC_Msk (0x01 << SYS_PRSTR0_CORDIC_Pos)
  391. #define SYS_PRSTR0_DIV_Pos 21
  392. #define SYS_PRSTR0_DIV_Msk (0x01 << SYS_PRSTR0_DIV_Pos)
  393. #define SYS_PRSTR0_SDIO_Pos 22
  394. #define SYS_PRSTR0_SDIO_Msk (0x01 << SYS_PRSTR0_SDIO_Pos)
  395. #define SYS_PRSTR0_USB_Pos 24
  396. #define SYS_PRSTR0_USB_Msk (0x01 << SYS_PRSTR0_USB_Pos)
  397. #define SYS_PRSTR0_ANAC_Pos 25
  398. #define SYS_PRSTR0_ANAC_Msk (0x01 << SYS_PRSTR0_ANAC_Pos)
  399. #define SYS_PRSTR0_ADC0_Pos 26
  400. #define SYS_PRSTR0_ADC0_Msk (0x01 << SYS_PRSTR0_ADC0_Pos)
  401. #define SYS_PRSTR0_CAN0_Pos 28
  402. #define SYS_PRSTR0_CAN0_Msk (0x01 << SYS_PRSTR0_CAN0_Pos)
  403. #define SYS_PRSTR0_DMA2D_Pos 29
  404. #define SYS_PRSTR0_DMA2D_Msk (0x01 << SYS_PRSTR0_DMA2D_Pos)
  405. #define SYS_PRSTR0_LCD_Pos 30
  406. #define SYS_PRSTR0_LCD_Msk (0x01 << SYS_PRSTR0_LCD_Pos)
  407. #define SYS_PRSTR1_GPIOE_Pos 0
  408. #define SYS_PRSTR1_GPIOE_Msk (0x01 << SYS_PRSTR1_GPIOE_Pos)
  409. #define SYS_PRSTR1_SDRAM_Pos 12
  410. #define SYS_PRSTR1_SDRAM_Msk (0x01 << SYS_PRSTR1_SDRAM_Pos)
  411. #define SYS_PRSTR1_SFC_Pos 13
  412. #define SYS_PRSTR1_SFC_Msk (0x01 << SYS_PRSTR1_SFC_Pos)
  413. #define SYS_PRSTR1_ADC1_Pos 16
  414. #define SYS_PRSTR1_ADC1_Msk (0x01 << SYS_PRSTR1_ADC1_Pos)
  415. #define SYS_PRSTR1_CAN1_Pos 17
  416. #define SYS_PRSTR1_CAN1_Msk (0x01 << SYS_PRSTR1_CAN1_Pos)
  417. #define SYS_PRSTR1_RTC_Pos 19
  418. #define SYS_PRSTR1_RTC_Msk (0x01 << SYS_PRSTR1_RTC_Pos)
  419. #define SYS_PRSTR1_IOFILT_Pos 20
  420. #define SYS_PRSTR1_IOFILT_Msk (0x01 << SYS_PRSTR1_IOFILT_Pos)
  421. #define SYS_PRSTR1_BTIMR_Pos 22
  422. #define SYS_PRSTR1_BTIMR_Msk (0x01 << SYS_PRSTR1_BTIMR_Pos)
  423. #define SYS_PRSTR1_JPEG_Pos 25
  424. #define SYS_PRSTR1_JPEG_Msk (0x01 << SYS_PRSTR1_JPEG_Pos)
  425. #define SYS_PRSTR1_DAC_Pos 26
  426. #define SYS_PRSTR1_DAC_Msk (0x01 << SYS_PRSTR1_DAC_Pos)
  427. #define SYS_PRSTR1_QEI_Pos 27
  428. #define SYS_PRSTR1_QEI_Msk (0x01 << SYS_PRSTR1_QEI_Pos)
  429. #define SYS_HRCCR_ON_Pos 0 //High speed RC ON
  430. #define SYS_HRCCR_ON_Msk (0x01 << SYS_HRCCR_ON_Pos)
  431. #define SYS_HRCCR_DBL_Pos 1 //Double Frequency 0 20MHz 1 40MHz
  432. #define SYS_HRCCR_DBL_Msk (0x01 << SYS_HRCCR_DBL_Pos)
  433. #define SYS_BODCR_IE_Pos 1 //Interrupt Enable
  434. #define SYS_BODCR_IE_Msk (0x01 << SYS_BODCR_IE_Pos)
  435. #define SYS_BODCR_INTLVL_Pos 4 //BOD中断触发电平,0 1.9v 1 2.1v 2 2.3v 3 2.5v 4 2.7v
  436. #define SYS_BODCR_INTLVL_Msk (0x07 << SYS_BODCR_INTLVL_Pos)
  437. #define SYS_BODCR_RSTLVL_Pos 7 //BOD复位电平,0 1.7v 1 1.9v 2 2.1v 3 2.7v
  438. #define SYS_BODCR_RSTLVL_Msk (0x07 << SYS_BODCR_RSTLVL_Pos)
  439. #define SYS_BODSR_IF_Pos 0 //中断标志,写1清零
  440. #define SYS_BODSR_IF_Msk (0x01 << SYS_BODSR_IF_Pos)
  441. #define SYS_BODSR_ST_Pos 1 //BOD Status
  442. #define SYS_BODSR_ST_Msk (0x01 << SYS_BODSR_ST_Pos)
  443. #define SYS_ADCCR_0IVREN_Pos 0 //ADC0 Internal Vref Enable
  444. #define SYS_ADCCR_0IVREN_Msk (0x01 << SYS_ADCCR_0IVREN_Pos)
  445. #define SYS_ADCCR_1IVREN_Pos 1 //ADC1 Internal Vref Enable
  446. #define SYS_ADCCR_1IVREN_Msk (0x01 << SYS_ADCCR_1IVREN_Pos)
  447. #define SYS_ADCCR_0IVRSEL_Pos 2 //ADC0 Internal Vref Select,0 基准电流乘以电阻 1 VDD33电阻分压
  448. #define SYS_ADCCR_0IVRSEL_Msk (0x01 << SYS_ADCCR_0IVRSEL_Pos)
  449. #define SYS_ADCCR_1IVRSEL_Pos 3 //ADC1 Internal Vref Select,0 基准电流乘以电阻 1 VDD33电阻分压
  450. #define SYS_ADCCR_1IVRSEL_Msk (0x01 << SYS_ADCCR_1IVRSEL_Pos)
  451. #define SYS_ADCCR_IVRFLT_Pos 4 //Internal Vref Filter,0 高通滤波 1 低通滤波
  452. #define SYS_ADCCR_IVRFLT_Msk (0x01 << SYS_ADCCR_IVRFLT_Pos)
  453. #define SYS_ADCCR_IVROuA_Pos 5 //Internal Vref Output uA, 0 50uA 1 150uA
  454. #define SYS_ADCCR_IVROuA_Msk (0x01 << SYS_ADCCR_IVROuA_Pos)
  455. #define SYS_ADCCR_IVRLVL_Pos 6 //Internal Vref Output Level,X00b 1.2V X01 1.6V X10 2.0V X11 2.5V
  456. #define SYS_ADCCR_IVRLVL_Msk (0x07 << SYS_ADCCR_IVRLVL_Pos)
  457. #define SYS_ADCCR_IVRTRIM_Pos 9 //Internal Vref Output Level Trimming,000 +0V 001 +0.04V 010 +0.8V 011 +0.12V 100 -0.04V 101 -0.08V 110 -0.12V 111 -0.16V
  458. #define SYS_ADCCR_IVRTRIM_Msk (0x07 << SYS_ADCCR_IVRTRIM_Pos)
  459. #define SYS_XTALCR_32KON_Pos 0 //XTAL_32K On
  460. #define SYS_XTALCR_32KON_Msk (0x01 << SYS_XTALCR_32KON_Pos)
  461. #define SYS_XTALCR_ON_Pos 1 //XTAL On
  462. #define SYS_XTALCR_ON_Msk (0x01 << SYS_XTALCR_ON_Pos)
  463. #define SYS_XTALCR_32KDET_Pos 4 //XTAL_32K Stop Detect
  464. #define SYS_XTALCR_32KDET_Msk (0x01 << SYS_XTALCR_32KDET_Pos)
  465. #define SYS_XTALCR_DET_Pos 5 //XTAL Stop Detect
  466. #define SYS_XTALCR_DET_Msk (0x01 << SYS_XTALCR_DET_Pos)
  467. #define SYS_XTALCR_32KDRV_Pos 8 //XTAL_32K 驱动能力,可微调频率
  468. #define SYS_XTALCR_32KDRV_Msk (0x0F << SYS_XTALCR_32KDRV_Pos)
  469. #define SYS_XTALCR_DRV_Pos 16 //XTAL 驱动能力,可微调频率
  470. #define SYS_XTALCR_DRV_Msk (0x1F << SYS_XTALCR_DRV_Pos)
  471. #define SYS_XTALSR_32KSTOP_Pos 0 //XTAL_32K Stop,写1清零
  472. #define SYS_XTALSR_32KSTOP_Msk (0x01 << SYS_XTALSR_32KSTOP_Pos)
  473. #define SYS_XTALSR_STOP_Pos 1 //XTAL Stop,写1清零
  474. #define SYS_XTALSR_STOP_Msk (0x01 << SYS_XTALSR_STOP_Pos)
  475. #define SYS_PLLCR_OUTEN_Pos 0 //只能LOCK后设置
  476. #define SYS_PLLCR_OUTEN_Msk (0x01 << SYS_PLLCR_OUTEN_Pos)
  477. #define SYS_PLLCR_INSEL_Pos 1 //0 XTAL 1 HRC
  478. #define SYS_PLLCR_INSEL_Msk (0x01 << SYS_PLLCR_INSEL_Pos)
  479. #define SYS_PLLCR_OFF_Pos 2
  480. #define SYS_PLLCR_OFF_Msk (0x01 << SYS_PLLCR_OFF_Pos)
  481. #define SYS_PLLCR_RST_Pos 3
  482. #define SYS_PLLCR_RST_Msk (0x01 << SYS_PLLCR_RST_Pos)
  483. #define SYS_PLLDIV_FBDIV_Pos 0 //PLL FeedBack分频寄存器
  484. //VCO输出频率 = PLL输入时钟 / INDIV * 4 * FBDIV
  485. //PLL输出频率 = PLL输入时钟 / INDIV * 4 * FBDIV / OUTDIV = VCO输出频率 / OUTDIV
  486. #define SYS_PLLDIV_FBDIV_Msk (0x1FF << SYS_PLLDIV_FBDIV_Pos)
  487. #define SYS_PLLDIV_INDIV_Pos 16 //PLL 输入源时钟分频
  488. #define SYS_PLLDIV_INDIV_Msk (0x1F << SYS_PLLDIV_INDIV_Pos)
  489. #define SYS_PLLDIV_OUTDIV_Pos 24 //PLL 输出分频,0 8分频 1 4分频 0 2分频
  490. #define SYS_PLLDIV_OUTDIV_Msk (0x03 << SYS_PLLDIV_OUTDIV_Pos)
  491. #define SYS_LRCCR_ON_Pos 0 //Low Speed RC On
  492. #define SYS_LRCCR_ON_Msk (0x01 << SYS_LRCCR_ON_Pos)
  493. #define SYS_OPACR_OPA0ON_Pos 0 //OPA0 开启
  494. #define SYS_OPACR_OPA0ON_Msk (0x01 << SYS_OPACR_OPA0ON_Pos)
  495. #define SYS_OPACR_OPA1ON_Pos 1
  496. #define SYS_OPACR_OPA1ON_Msk (0x01 << SYS_OPACR_OPA1ON_Pos)
  497. #define SYS_OPACR_OPA2ON_Pos 2
  498. #define SYS_OPACR_OPA2ON_Msk (0x01 << SYS_OPACR_OPA2ON_Pos)
  499. #define SYS_OPACR_OPA3ON_Pos 3
  500. #define SYS_OPACR_OPA3ON_Msk (0x01 << SYS_OPACR_OPA3ON_Pos)
  501. #define SYS_ACMPCR_CMP0ON_Pos 0 //CMP0 开启
  502. #define SYS_ACMPCR_CMP0ON_Msk (0x01 << SYS_ACMPCR_CMP0ON_Pos)
  503. #define SYS_ACMPCR_CMP1ON_Pos 1
  504. #define SYS_ACMPCR_CMP1ON_Msk (0x01 << SYS_ACMPCR_CMP1ON_Pos)
  505. #define SYS_ACMPCR_CMP2ON_Pos 2
  506. #define SYS_ACMPCR_CMP2ON_Msk (0x01 << SYS_ACMPCR_CMP2ON_Pos)
  507. #define SYS_ACMPCR_CMP0HYS_Pos 8 //CMP0 迟滞开启
  508. #define SYS_ACMPCR_CMP0HYS_Msk (0x01 << SYS_ACMPCR_CMP0HYS_Pos)
  509. #define SYS_ACMPCR_CMP1HYS_Pos 9
  510. #define SYS_ACMPCR_CMP1HYS_Msk (0x01 << SYS_ACMPCR_CMP1HYS_Pos)
  511. #define SYS_ACMPCR_CMP2HYS_Pos 10
  512. #define SYS_ACMPCR_CMP2HYS_Msk (0x01 << SYS_ACMPCR_CMP2HYS_Pos)
  513. #define SYS_ACMPCR_0NVREF_Pos 16 //1 ACMP0 N输入端接内部VREF
  514. #define SYS_ACMPCR_0NVREF_Msk (0x01 << SYS_ACMPCR_0NVREF_Pos)
  515. #define SYS_ACMPCR_1NVREF_Pos 17
  516. #define SYS_ACMPCR_1NVREF_Msk (0x01 << SYS_ACMPCR_1NVREF_Pos)
  517. #define SYS_ACMPCR_2NVREF_Pos 18
  518. #define SYS_ACMPCR_2NVREF_Msk (0x01 << SYS_ACMPCR_2NVREF_Pos)
  519. #define SYS_ACMPCR_CMP0IE_Pos 24 //CMP0 中断使能
  520. #define SYS_ACMPCR_CMP0IE_Msk (0x01 << SYS_ACMPCR_CMP0IE_Pos)
  521. #define SYS_ACMPCR_CMP1IE_Pos 25
  522. #define SYS_ACMPCR_CMP1IE_Msk (0x01 << SYS_ACMPCR_CMP1IE_Pos)
  523. #define SYS_ACMPCR_CMP2IE_Pos 26
  524. #define SYS_ACMPCR_CMP2IE_Msk (0x01 << SYS_ACMPCR_CMP2IE_Pos)
  525. #define SYS_ACMPSR_CMP0OUT_Pos 0 //0 N > P 1 P > N
  526. #define SYS_ACMPSR_CMP0OUT_Msk (0x01 << SYS_ACMPSR_CMP0OUT_Pos)
  527. #define SYS_ACMPSR_CMP1OUT_Pos 1
  528. #define SYS_ACMPSR_CMP1OUT_Msk (0x01 << SYS_ACMPSR_CMP1OUT_Pos)
  529. #define SYS_ACMPSR_CMP2OUT_Pos 2
  530. #define SYS_ACMPSR_CMP2OUT_Msk (0x01 << SYS_ACMPSR_CMP2OUT_Pos)
  531. #define SYS_ACMPSR_CMP0IF_Pos 8 //中断标志,写1清零
  532. #define SYS_ACMPSR_CMP0IF_Msk (0x01 << SYS_ACMPSR_CMP0IF_Pos)
  533. #define SYS_ACMPSR_CMP1IF_Pos 9
  534. #define SYS_ACMPSR_CMP1IF_Msk (0x01 << SYS_ACMPSR_CMP1IF_Pos)
  535. #define SYS_ACMPSR_CMP2IF_Pos 10
  536. #define SYS_ACMPSR_CMP2IF_Msk (0x01 << SYS_ACMPSR_CMP2IF_Pos)
  537. #define SYS_ACMPCR2_BRK0_Pos 0 //1 ACMP0输出连接用作PWM_BRK0
  538. #define SYS_ACMPCR2_BRK0_Msk (0x01 << SYS_ACMPCR2_BRK0_Pos)
  539. #define SYS_ACMPCR2_BRK1_Pos 1 //1 ACMP1输出连接用作PWM_BRK1
  540. #define SYS_ACMPCR2_BRK1_Msk (0x01 << SYS_ACMPCR2_BRK1_Pos)
  541. #define SYS_ACMPCR2_BRK2_Pos 2
  542. #define SYS_ACMPCR2_BRK2_Msk (0x01 << SYS_ACMPCR2_BRK2_Pos)
  543. #define SYS_ACMPCR2_VREF_Pos 3 //ACMP内部基准电压VREF,电压值为 0.6 + 0.04*VREF
  544. #define SYS_ACMPCR2_VREF_Msk (0x3F << SYS_ACMPCR2_VREF_Pos)
  545. #define SYS_DACCR_VRADJ_Pos 0 //Vref Adjust
  546. #define SYS_DACCR_VRADJ_Msk (0x1F << SYS_DACCR_VRADJ_Pos)
  547. #define SYS_TEMPCR_EN_Pos 0
  548. #define SYS_TEMPCR_EN_Msk (0x01 << SYS_TEMPCR_EN_Pos)
  549. typedef struct {
  550. __IO uint32_t FUNC0; //引脚功能选择
  551. __IO uint32_t FUNC1;
  552. uint32_t RESERVED[62];
  553. __IO uint32_t PULLU; //上拉使能
  554. uint32_t RESERVED2[63];
  555. __IO uint32_t PULLD; //下拉使能
  556. uint32_t RESERVED3[63];
  557. __IO uint32_t INEN; //输入使能
  558. uint32_t RESERVED4[63];
  559. __IO uint32_t OPEND; //开漏使能
  560. uint32_t RESERVED5[63];
  561. __IO uint32_t DRVST; //驱动强度选择,0 4mA 1 8mA
  562. } PORT_TypeDef;
  563. typedef struct {
  564. __IO uint32_t ODR;
  565. #define PIN0 0
  566. #define PIN1 1
  567. #define PIN2 2
  568. #define PIN3 3
  569. #define PIN4 4
  570. #define PIN5 5
  571. #define PIN6 6
  572. #define PIN7 7
  573. #define PIN8 8
  574. #define PIN9 9
  575. #define PIN10 10
  576. #define PIN11 11
  577. #define PIN12 12
  578. #define PIN13 13
  579. #define PIN14 14
  580. #define PIN15 15
  581. __IO uint32_t DIR; //0 输入 1 输出
  582. __IO uint32_t INTLVLTRG; //Interrupt Level Trigger 1 电平触发中断 0 边沿触发中断
  583. __IO uint32_t INTBE; //Both Edge,当INTLVLTRG设为边沿触发中断时,此位置1表示上升沿和下降沿都触发中断,置0时触发边沿由INTRISEEN选择
  584. __IO uint32_t INTRISEEN; //Interrupt Rise Edge Enable 1 上升沿/高电平触发中断 0 下降沿/低电平触发中断
  585. __IO uint32_t INTEN; //1 中断使能 0 中断禁止
  586. __IO uint32_t INTRAWSTAT; //中断检测单元是否检测到了触发中断的条件 1 检测到了中断触发条件 0 没有检测到中断触发条件
  587. __IO uint32_t INTSTAT; //INTSTAT.PIN0 = INTRAWSTAT.PIN0 & INTEN.PIN0
  588. __IO uint32_t INTCLR; //写1清除中断标志,只对边沿触发中断有用
  589. __IO uint32_t DMAEN;
  590. uint32_t RESERVED[2];
  591. __IO uint32_t IDR;
  592. uint32_t RESERVED2[3];
  593. __IO uint32_t DATAPIN0; //PIN0引脚的DATA寄存器,单个引脚对应整个32位寄存器,方便实现原子写操作
  594. __IO uint32_t DATAPIN1;
  595. __IO uint32_t DATAPIN2;
  596. __IO uint32_t DATAPIN3;
  597. __IO uint32_t DATAPIN4;
  598. __IO uint32_t DATAPIN5;
  599. __IO uint32_t DATAPIN6;
  600. __IO uint32_t DATAPIN7;
  601. __IO uint32_t DATAPIN8;
  602. __IO uint32_t DATAPIN9;
  603. __IO uint32_t DATAPIN10;
  604. __IO uint32_t DATAPIN11;
  605. __IO uint32_t DATAPIN12;
  606. __IO uint32_t DATAPIN13;
  607. __IO uint32_t DATAPIN14;
  608. __IO uint32_t DATAPIN15;
  609. } GPIO_TypeDef;
  610. typedef struct {
  611. __IO uint32_t LOAD; //定时器加载值,使能后定时器从此数值开始向下递减计数
  612. __I uint32_t VALUE; //定时器当前值,LDVAL-CVAL 可计算出计时时长
  613. __IO uint32_t CR;
  614. uint32_t RESERVED;
  615. __IO uint32_t IE;
  616. __IO uint32_t IF;
  617. __IO uint32_t HALT; //[0] 1 暂停计数 0 恢复计数
  618. __IO uint32_t OCCR;
  619. __IO uint32_t OCMAT;
  620. __IO uint32_t RESERVED2;
  621. __IO uint32_t ICLOW;
  622. __IO uint32_t ICHIGH;
  623. __IO uint32_t PREDIV; //预分频,8位
  624. } TIMR_TypeDef;
  625. #define TIMR_LOAD_VALUE_Pos 0
  626. #define TIMR_LOAD_VALUE_Msk (0xFFFFFF << TIMR_LOAD_VALUE_Pos)
  627. #define TIMR_LOAD_RELOAD_Pos 24 //reload VALUE to TIMR's internal Counter immediately. only for BTIMRx, not for TIMRx.
  628. #define TIMR_LOAD_RELOAD_Msk (0x01 << TIMR_LOAD_RELOAD_Pos)
  629. #define TIMR_CR_CLKSRC_Pos 0 //时钟源: 0 内部系统时钟 2 外部引脚脉冲计数
  630. #define TIMR_CR_CLKSRC_Msk (0x03 << TIMR_CR_CLKSRC_Pos)
  631. #define TIMR_CR_MODE_Pos 2 //工作模式:0 定时器 1 输入捕获 2 输出比较
  632. #define TIMR_CR_MODE_Msk (0x03 << TIMR_CR_MODE_Pos)
  633. #define TIMR_IE_TO_Pos 0 //Time out
  634. #define TIMR_IE_TO_Msk (0x01 << TIMR_IE_TO_Pos)
  635. #define TIMR_IE_OC0_Pos 1 //输出比较,第一个反转点
  636. #define TIMR_IE_OC0_Msk (0x01 << TIMR_IE_OC0_Pos)
  637. #define TIMR_IE_OC1_Pos 2 //输出比较,第二个反转点
  638. #define TIMR_IE_OC1_Msk (0x01 << TIMR_IE_OC1_Pos)
  639. #define TIMR_IE_ICR_Pos 3 //输入捕获,上升沿中断
  640. #define TIMR_IE_ICR_Msk (0x01 << TIMR_IE_ICR_Pos)
  641. #define TIMR_IE_ICF_Pos 4 //输入捕获,下降沿中断
  642. #define TIMR_IE_ICF_Msk (0x01 << TIMR_IE_ICF_Pos)
  643. #define TIMR_IF_TO_Pos 0 //超时中断标志,写1清零
  644. #define TIMR_IF_TO_Msk (0x01 << TIMR_IF_TO_Pos)
  645. #define TIMR_IF_OC0_Pos 1
  646. #define TIMR_IF_OC0_Msk (0x01 << TIMR_IF_OC0_Pos)
  647. #define TIMR_IF_OC1_Pos 2
  648. #define TIMR_IF_OC1_Msk (0x01 << TIMR_IF_OC1_Pos)
  649. #define TIMR_IF_ICR_Pos 3
  650. #define TIMR_IF_ICR_Msk (0x01 << TIMR_IF_ICR_Pos)
  651. #define TIMR_IF_ICF_Pos 4
  652. #define TIMR_IF_ICF_Msk (0x01 << TIMR_IF_ICF_Pos)
  653. #define TIMR_OCCR_FORCELVL_Pos 0 //Force Levle,强制输出电平
  654. #define TIMR_OCCR_FORCELVL_Msk (0x01 << TIMR_OCCR_FORCELVL_Pos)
  655. #define TIMR_OCCR_INITLVL_Pos 1 //Initial Level, 初始输出电平
  656. #define TIMR_OCCR_INITLVL_Msk (0x01 << TIMR_OCCR_INITLVL_Pos)
  657. #define TIMR_OCCR_FORCEEN_Pos 2 //Force Enable, 强制输出使能
  658. #define TIMR_OCCR_FORCEEN_Msk (0x01 << TIMR_OCCR_FORCEEN_Pos)
  659. typedef struct {
  660. __IO uint32_t HALLIE; //HALL中断使能
  661. uint32_t RESERVED;
  662. __IO uint32_t HALLIF;
  663. __IO uint32_t HALLEN; //HALL功能开关
  664. __IO uint32_t HALL0V; //HALL0输入跳变沿将Timer0(加载值 - 当前值)存入此寄存器
  665. __IO uint32_t HALL3V; //HALL3输入跳变沿将Timer3(加载值 - 当前值)存入此寄存器
  666. uint32_t RESERVED2;
  667. __IO uint32_t HALLSR; //HALL输入状态
  668. uint32_t RESERVED3[8];
  669. __IO uint32_t EN;
  670. } TIMRG_TypeDef;
  671. #define TIMRG_HALLIE_HALL0_Pos 0 //HALL0中断使能,HALL0使用Timer0计数器
  672. #define TIMRG_HALLIE_HALL0_Msk (0x01 << TIMRG_HALLIE_HALL0_Pos)
  673. #define TIMRG_HALLIE_HALL3_Pos 1
  674. #define TIMRG_HALLIE_HALL3_Msk (0x01 << TIMRG_HALLIE_HALL3_Pos)
  675. #define TIMRG_HALLIF_H0IN0_Pos 0 //HALL0输入信号0触发中断标志
  676. #define TIMRG_HALLIF_H0IN0_Msk (0x01 << TIMRG_HALLIF_H0IN0_Pos)
  677. #define TIMRG_HALLIF_H0IN1_Pos 1
  678. #define TIMRG_HALLIF_H0IN1_Msk (0x01 << TIMRG_HALLIF_H0IN1_Pos)
  679. #define TIMRG_HALLIF_H0IN2_Pos 2
  680. #define TIMRG_HALLIF_H0IN2_Msk (0x01 << TIMRG_HALLIF_H0IN2_Pos)
  681. #define TIMRG_HALLIF_H3IN0_Pos 3 //HALL3输入信号0触发中断标志
  682. #define TIMRG_HALLIF_H3IN0_Msk (0x01 << TIMRG_HALLIF_H3IN0_Pos)
  683. #define TIMRG_HALLIF_H3IN1_Pos 4
  684. #define TIMRG_HALLIF_H3IN1_Msk (0x01 << TIMRG_HALLIF_H3IN1_Pos)
  685. #define TIMRG_HALLIF_H3IN2_Pos 5
  686. #define TIMRG_HALLIF_H3IN2_Msk (0x01 << TIMRG_HALLIF_H3IN2_Pos)
  687. #define TIMRG_HALLEN_HALL0_Pos 0 //HALL0功能开关,HALL0使用Timer0计数器
  688. #define TIMRG_HALLEN_HALL0_Msk (0x01 << TIMRG_HALLEN_HALL0_Pos)
  689. #define TIMRG_HALLEN_HALL3_Pos 1
  690. #define TIMRG_HALLEN_HALL3_Msk (0x01 << TIMRG_HALLEN_HALL3_Pos)
  691. #define TIMRG_HALLSR_H0IN0_Pos 0 //HALL0输入信号0当前状态
  692. #define TIMRG_HALLSR_H0IN0_Msk (0x01 << TIMRG_HALLSR_H0IN0_Pos)
  693. #define TIMRG_HALLSR_H0IN1_Pos 1
  694. #define TIMRG_HALLSR_H0IN1_Msk (0x01 << TIMRG_HALLSR_H0IN1_Pos)
  695. #define TIMRG_HALLSR_H0IN2_Pos 2
  696. #define TIMRG_HALLSR_H0IN2_Msk (0x01 << TIMRG_HALLSR_H0IN2_Pos)
  697. #define TIMRG_HALLSR_H3IN0_Pos 3 //HALL3输入信号0当前状态
  698. #define TIMRG_HALLSR_H3IN0_Msk (0x01 << TIMRG_HALLSR_H3IN0_Pos)
  699. #define TIMRG_HALLSR_H3IN1_Pos 4
  700. #define TIMRG_HALLSR_H3IN1_Msk (0x01 << TIMRG_HALLSR_H3IN1_Pos)
  701. #define TIMRG_HALLSR_H3IN2_Pos 5
  702. #define TIMRG_HALLSR_H3IN2_Msk (0x01 << TIMRG_HALLSR_H3IN2_Pos)
  703. #define TIMRG_EN_TIMR0_Pos 0
  704. #define TIMRG_EN_TIMR0_Msk (0x01 << TIMRG_EN_TIMR0_Pos)
  705. #define TIMRG_EN_TIMR1_Pos 1
  706. #define TIMRG_EN_TIMR1_Msk (0x01 << TIMRG_EN_TIMR1_Pos)
  707. #define TIMRG_EN_TIMR2_Pos 2
  708. #define TIMRG_EN_TIMR2_Msk (0x01 << TIMRG_EN_TIMR2_Pos)
  709. #define TIMRG_EN_TIMR3_Pos 3
  710. #define TIMRG_EN_TIMR3_Msk (0x01 << TIMRG_EN_TIMR3_Pos)
  711. #define TIMRG_EN_TIMR4_Pos 4
  712. #define TIMRG_EN_TIMR4_Msk (0x01 << TIMRG_EN_TIMR4_Pos)
  713. #define TIMRG_EN_TIMR5_Pos 5
  714. #define TIMRG_EN_TIMR5_Msk (0x01 << TIMRG_EN_TIMR5_Pos)
  715. #define TIMRG_EN_TIMR6_Pos 6
  716. #define TIMRG_EN_TIMR6_Msk (0x01 << TIMRG_EN_TIMR6_Pos)
  717. #define TIMRG_EN_TIMR7_Pos 7
  718. #define TIMRG_EN_TIMR7_Msk (0x01 << TIMRG_EN_TIMR7_Pos)
  719. #define TIMRG_EN_TIMR8_Pos 8
  720. #define TIMRG_EN_TIMR8_Msk (0x01 << TIMRG_EN_TIMR8_Pos)
  721. #define TIMRG_EN_TIMR9_Pos 9
  722. #define TIMRG_EN_TIMR9_Msk (0x01 << TIMRG_EN_TIMR9_Pos)
  723. #define TIMRG_EN_TIMR10_Pos 10
  724. #define TIMRG_EN_TIMR10_Msk (0x01 << TIMRG_EN_TIMR10_Pos)
  725. #define TIMRG_EN_TIMR11_Pos 11
  726. #define TIMRG_EN_TIMR11_Msk (0x01 << TIMRG_EN_TIMR11_Pos)
  727. typedef struct {
  728. __IO uint32_t DATA;
  729. __IO uint32_t CTRL;
  730. __IO uint32_t BAUD;
  731. __IO uint32_t FIFO;
  732. __IO uint32_t LINCR;
  733. union {
  734. __IO uint32_t CTSCR;
  735. __IO uint32_t RTSCR;
  736. };
  737. __IO uint32_t CFG;
  738. __IO uint32_t TOCR; //Timeout Control Register
  739. } UART_TypeDef;
  740. #define UART_DATA_DATA_Pos 0
  741. #define UART_DATA_DATA_Msk (0x1FF << UART_DATA_DATA_Pos)
  742. #define UART_DATA_VALID_Pos 9 //当DATA字段有有效的接收数据时,该位硬件置1,读取数据后自动清零
  743. #define UART_DATA_VALID_Msk (0x01 << UART_DATA_VALID_Pos)
  744. #define UART_DATA_PAERR_Pos 10 //Parity Error
  745. #define UART_DATA_PAERR_Msk (0x01 << UART_DATA_PAERR_Pos)
  746. #define UART_CTRL_TXIDLE_Pos 0 //TX IDLE: 0 正在发送数据 1 空闲状态,没有数据发送
  747. #define UART_CTRL_TXIDLE_Msk (0x01 << UART_CTRL_TXIDLE_Pos)
  748. #define UART_CTRL_TXFF_Pos 1 //TX FIFO Full
  749. #define UART_CTRL_TXFF_Msk (0x01 << UART_CTRL_TXFF_Pos)
  750. #define UART_CTRL_TXIE_Pos 2 //TX 中断使能: 1 TX FF 中数据少于设定个数时产生中断
  751. #define UART_CTRL_TXIE_Msk (0x01 << UART_CTRL_TXIE_Pos)
  752. #define UART_CTRL_RXNE_Pos 3 //RX FIFO Not Empty
  753. #define UART_CTRL_RXNE_Msk (0x01 << UART_CTRL_RXNE_Pos)
  754. #define UART_CTRL_RXIE_Pos 4 //RX 中断使能: 1 RX FF 中数据达到设定个数时产生中断
  755. #define UART_CTRL_RXIE_Msk (0x01 << UART_CTRL_RXIE_Pos)
  756. #define UART_CTRL_RXOV_Pos 5 //RX FIFO Overflow,写1清零
  757. #define UART_CTRL_RXOV_Msk (0x01 << UART_CTRL_RXOV_Pos)
  758. #define UART_CTRL_TXDOIE_Pos 6 //TX Done 中断使能,发送FIFO空且发送发送移位寄存器已将最后一位发送出去
  759. #define UART_CTRL_TXDOIE_Msk (0x01 << UART_CTRL_TXDOIE_Pos)
  760. #define UART_CTRL_EN_Pos 9
  761. #define UART_CTRL_EN_Msk (0x01 << UART_CTRL_EN_Pos)
  762. #define UART_CTRL_LOOP_Pos 10
  763. #define UART_CTRL_LOOP_Msk (0x01 << UART_CTRL_LOOP_Pos)
  764. #define UART_CTRL_TOIE_Pos 14 //TimeOut 中断使能,接收到上个字符后,超过 TOTIME/BAUDRAUD 秒没有接收到新的数据
  765. #define UART_CTRL_TOIE_Msk (0x01 << UART_CTRL_TOIE_Pos)
  766. #define UART_CTRL_DATA9b_Pos 18 //1 9位数据位 0 8位数据位
  767. #define UART_CTRL_DATA9b_Msk (0x01 << UART_CTRL_DATA9b_Pos)
  768. #define UART_CTRL_PARITY_Pos 19 //000 无校验 001 奇校验 011 偶校验 101 固定为1 111 固定为0
  769. #define UART_CTRL_PARITY_Msk (0x07 << UART_CTRL_PARITY_Pos)
  770. #define UART_CTRL_STOP2b_Pos 22 //1 2位停止位 0 1位停止位
  771. #define UART_CTRL_STOP2b_Msk (0x03 << UART_CTRL_STOP2b_Pos)
  772. #define UART_BAUD_BAUD_Pos 0 //串口波特率 = SYS_Freq/16/BAUD - 1
  773. #define UART_BAUD_BAUD_Msk (0x3FFF << UART_BAUD_BAUD_Pos)
  774. #define UART_BAUD_TXD_Pos 14 //通过此位可直接读取串口TXD引脚上的电平
  775. #define UART_BAUD_TXD_Msk (0x01 << UART_BAUD_TXD_Pos)
  776. #define UART_BAUD_RXD_Pos 15 //通过此位可直接读取串口RXD引脚上的电平
  777. #define UART_BAUD_RXD_Msk (0x01 << UART_BAUD_RXD_Pos)
  778. #define UART_BAUD_RXTOIF_Pos 16 //接收&超时的中断标志 = RXIF | TOIF
  779. #define UART_BAUD_RXTOIF_Msk (0x01 << UART_BAUD_RXTOIF_Pos)
  780. #define UART_BAUD_TXIF_Pos 17 //发送中断标志 = TXTHRF & TXIE
  781. #define UART_BAUD_TXIF_Msk (0x01 << UART_BAUD_TXIF_Pos)
  782. #define UART_BAUD_RXTHRF_Pos 19 //RX FIFO Threshold Flag,RX FIFO中数据达到设定个数(RXLVL > RXTHR)时硬件置1
  783. #define UART_BAUD_RXTHRF_Msk (0x01 << UART_BAUD_RXTHRF_Pos)
  784. #define UART_BAUD_TXTHRF_Pos 20 //TX FIFO Threshold Flag,TX FIFO中数据少于设定个数(TXLVL <= TXTHR)时硬件置1
  785. #define UART_BAUD_TXTHRF_Msk (0x01 << UART_BAUD_TXTHRF_Pos)
  786. #define UART_BAUD_TOIF_Pos 21 //TimeOut 中断标志,超过 TOTIME/BAUDRAUD 秒没有接收到新的数据时若TOIE=1,此位由硬件置位
  787. #define UART_BAUD_TOIF_Msk (0x01 << UART_BAUD_TOIF_Pos)
  788. #define UART_BAUD_RXIF_Pos 22 //接收中断标志 = RXTHRF & RXIE
  789. #define UART_BAUD_RXIF_Msk (0x01 << UART_BAUD_RXIF_Pos)
  790. #define UART_BAUD_ABREN_Pos 23 //Auto Baudrate Enable,写1启动自动波特率校准,完成后自动清零
  791. #define UART_BAUD_ABREN_Msk (0x01 << UART_BAUD_ABREN_Pos)
  792. #define UART_BAUD_ABRBIT_Pos 24 //Auto Baudrate Bit,用于计算波特率的检测位长,0 1位,通过测起始位 脉宽计算波特率,要求发送端发送0xFF
  793. // 1 2位,通过测起始位加1位数据位脉宽计算波特率,要求发送端发送0xFE
  794. // 1 4位,通过测起始位加3位数据位脉宽计算波特率,要求发送端发送0xF8
  795. // 1 8位,通过测起始位加7位数据位脉宽计算波特率,要求发送端发送0x80
  796. #define UART_BAUD_ABRBIT_Msk (0x03 << UART_BAUD_ABRBIT_Pos)
  797. #define UART_BAUD_ABRERR_Pos 26 //Auto Baudrate Error,0 自动波特率校准成功 1 自动波特率校准失败
  798. #define UART_BAUD_ABRERR_Msk (0x01 << UART_BAUD_ABRERR_Pos)
  799. #define UART_BAUD_TXDOIF_Pos 27 //TX Done 中断标志,发送FIFO空且发送发送移位寄存器已将最后一位发送出去
  800. #define UART_BAUD_TXDOIF_Msk (0x01 << UART_BAUD_TXDOIF_Pos)
  801. #define UART_BAUD_FRAC_Pos 28 //波特率分频值小数部分
  802. #define UART_BAUD_FRAC_Msk (0x0Fu << UART_BAUD_FRAC_Pos)
  803. #define UART_FIFO_RXLVL_Pos 0 //RX FIFO Level,RX FIFO 中字符个数
  804. #define UART_FIFO_RXLVL_Msk (0xFF << UART_FIFO_RXLVL_Pos)
  805. #define UART_FIFO_TXLVL_Pos 8 //TX FIFO Level,TX FIFO 中字符个数
  806. #define UART_FIFO_TXLVL_Msk (0xFF << UART_FIFO_TXLVL_Pos)
  807. #define UART_FIFO_RXTHR_Pos 16 //RX FIFO Threshold,RX中断触发门限,中断使能时 RXLVL > RXTHR 触发RX中断
  808. #define UART_FIFO_RXTHR_Msk (0xFF << UART_FIFO_RXTHR_Pos)
  809. #define UART_FIFO_TXTHR_Pos 24 //TX FIFO Threshold,TX中断触发门限,中断使能时 TXLVL <= TXTHR 触发TX中断
  810. #define UART_FIFO_TXTHR_Msk (0xFFu<< UART_FIFO_TXTHR_Pos)
  811. #define UART_LINCR_BRKDETIE_Pos 0 //检测到LIN Break中断使能
  812. #define UART_LINCR_BRKDETIE_Msk (0x01 << UART_LINCR_BRKDETIE_Pos)
  813. #define UART_LINCR_BRKDETIF_Pos 1 //检测到LIN Break中断状态
  814. #define UART_LINCR_BRKDETIF_Msk (0x01 << UART_LINCR_BRKDETIF_Pos)
  815. #define UART_LINCR_GENBRKIE_Pos 2 //发送LIN Break完成中断使能
  816. #define UART_LINCR_GENBRKIE_Msk (0x01 << UART_LINCR_GENBRKIE_Pos)
  817. #define UART_LINCR_GENBRKIF_Pos 3 //发送LIN Break完成中断状态
  818. #define UART_LINCR_GENBRKIF_Msk (0x01 << UART_LINCR_GENBRKIF_Pos)
  819. #define UART_LINCR_GENBRK_Pos 4 //发送LIN Break,发送完成自动清零
  820. #define UART_LINCR_GENBRK_Msk (0x01 << UART_LINCR_GENBRK_Pos)
  821. #define UART_CTSCR_EN_Pos 0 //CTS流控使能
  822. #define UART_CTSCR_EN_Msk (0x01 << UART_CTSCR_EN_Pos)
  823. #define UART_CTSCR_POL_Pos 2 //CTS信号极性,0 低有效,CTS输入为低表示可以发送数据
  824. #define UART_CTSCR_POL_Msk (0x01 << UART_CTSCR_POL_Pos)
  825. #define UART_CTSCR_STAT_Pos 7 //CTS信号的当前状态
  826. #define UART_CTSCR_STAT_Msk (0x01 << UART_CTSCR_STAT_Pos)
  827. #define UART_RTSCR_EN_Pos 1 //RTS流控使能
  828. #define UART_RTSCR_EN_Msk (0x01 << UART_RTSCR_EN_Pos)
  829. #define UART_RTSCR_POL_Pos 3 //RTS信号极性 0 低有效,RTS输入为低表示可以接收数据
  830. #define UART_RTSCR_POL_Msk (0x01 << UART_RTSCR_POL_Pos)
  831. #define UART_RTSCR_THR_Pos 4 //RTS流控的触发阈值 0 1字节 1 2字节 2 4字节 3 6字节
  832. #define UART_RTSCR_THR_Msk (0x07 << UART_RTSCR_THR_Pos)
  833. #define UART_RTSCR_STAT_Pos 8 //RTS信号的当前状态
  834. #define UART_RTSCR_STAT_Msk (0x01 << UART_RTSCR_STAT_Pos)
  835. #define UART_CFG_RXEN_Pos 0 //RX Enable
  836. #define UART_CFG_RXEN_Msk (0x01 << UART_CFG_RXEN_Pos)
  837. #define UART_CFG_MSBF_Pos 1 //接收发送MSB First
  838. #define UART_CFG_MSBF_Msk (0x01 << UART_CFG_MSBF_Pos)
  839. #define UART_CFG_BRKTXLEN_Pos 2 //1表示1bit,以此类推,默认值13
  840. #define UART_CFG_BRKTXLEN_Msk (0x0F << UART_CFG_BRKTXLEN_Pos)
  841. #define UART_CFG_BRKRXLEN_Pos 6 //0表示1bit,以此类推,默认值12
  842. #define UART_CFG_BRKRXLEN_Msk (0x0F << UART_CFG_BRKRXLEN_Pos)
  843. #define UART_CFG_RXINV_Pos 10 //接收电平翻转
  844. #define UART_CFG_RXINV_Msk (0x01 << UART_CFG_RXINV_Pos)
  845. #define UART_CFG_TXINV_Pos 11 //发送电平翻转
  846. #define UART_CFG_TXINV_Msk (0x01 << UART_CFG_TXINV_Pos)
  847. #define UART_TOCR_TIME_Pos 0 //超时时间长度,单位为 10/BAUDRATE 秒
  848. #define UART_TOCR_TIME_Msk (0xFFF<< UART_TOCR_TIME_Pos)
  849. #define UART_TOCR_MODE_Pos 12 //0 只有当FIFO中有数时才触发超时中断 1 即使FIFO中没有数也可触发超时中断
  850. #define UART_TOCR_MODE_Msk (0x01 << UART_TOCR_MODE_Pos)
  851. #define UART_TOCR_IFCLR_Pos 13 //TO Interrupt Flag Clear,写1清除超时中断标志
  852. #define UART_TOCR_IFCLR_Msk (0x01 << UART_TOCR_IFCLR_Pos)
  853. typedef struct {
  854. __IO uint32_t CTRL;
  855. __IO uint32_t DATA;
  856. __IO uint32_t STAT;
  857. __IO uint32_t IE;
  858. __IO uint32_t IF;
  859. __IO uint32_t I2SCR;
  860. __IO uint32_t I2SPR;
  861. } SPI_TypeDef;
  862. #define SPI_CTRL_CLKDIV_Pos 0 //Clock Divider, SPI工作时钟 = SYS_Freq/pow(2, CLKDIV+2)
  863. #define SPI_CTRL_CLKDIV_Msk (0x07 << SPI_CTRL_CLKDIV_Pos)
  864. #define SPI_CTRL_EN_Pos 3
  865. #define SPI_CTRL_EN_Msk (0x01 << SPI_CTRL_EN_Pos)
  866. #define SPI_CTRL_SIZE_Pos 4 //Data Size Select, 取值3--15,表示4--16位
  867. #define SPI_CTRL_SIZE_Msk (0x0F << SPI_CTRL_SIZE_Pos)
  868. #define SPI_CTRL_CPHA_Pos 8 //0 在SCLK的第一个跳变沿采样数据 1 在SCLK的第二个跳变沿采样数据
  869. #define SPI_CTRL_CPHA_Msk (0x01 << SPI_CTRL_CPHA_Pos)
  870. #define SPI_CTRL_CPOL_Pos 9 //0 空闲状态下SCLK为低电平 1 空闲状态下SCLK为高电平
  871. #define SPI_CTRL_CPOL_Msk (0x01 << SPI_CTRL_CPOL_Pos)
  872. #define SPI_CTRL_FFS_Pos 10 //Frame Format Select, 0 SPI 1 TI SSI 2 I2S 3 SPI Flash
  873. #define SPI_CTRL_FFS_Msk (0x03 << SPI_CTRL_FFS_Pos)
  874. #define SPI_CTRL_MSTR_Pos 12 //Master, 1 主模式 0 从模式
  875. #define SPI_CTRL_MSTR_Msk (0x01 << SPI_CTRL_MSTR_Pos)
  876. #define SPI_CTRL_FAST_Pos 13 //1 SPI工作时钟 = SYS_Freq/2 0 SPI工作时钟由SPI->CTRL.CLKDIV设置
  877. #define SPI_CTRL_FAST_Msk (0x01 << SPI_CTRL_FAST_Pos)
  878. #define SPI_CTRL_DMATXEN_Pos 14 //1 通过DMA写FIFO 0 通过MCU写FIFO
  879. #define SPI_CTRL_DMATXEN_Msk (0x01 << SPI_CTRL_DMATXEN_Pos)
  880. #define SPI_CTRL_DMARXEN_Pos 15 //1 通过DMA读FIFO 0 通过MCU读FIFO
  881. #define SPI_CTRL_DMARXEN_Msk (0x01 << SPI_CTRL_DMARXEN_Pos)
  882. #define SPI_CTRL_FILTE_Pos 16 //1 对SPI输入信号进行去抖操作 0 对SPI输入信号不进行去抖操作
  883. #define SPI_CTRL_FILTE_Msk (0x01 << SPI_CTRL_FILTE_Pos)
  884. #define SPI_CTRL_SSN_H_Pos 17 //0 传输过程中SSN始终为0 1 传输过程中每字符之间会将SSN拉高半个SCLK周期
  885. #define SPI_CTRL_SSN_H_Msk (0x01 << SPI_CTRL_SSN_H_Pos)
  886. #define SPI_CTRL_RFTHR_Pos 18 //RX FIFO Threshold,0 接收FIFO中至少有1个数据 ... 7 接收FIFO中至少有8个数据
  887. #define SPI_CTRL_RFTHR_Msk (0x07 << SPI_CTRL_RFTHR_Pos)
  888. #define SPI_CTRL_TFTHR_Pos 21 //TX FIFO Threshold,0 发送FIFO中至多有0个数据 ... 7 发送FIFO中至多有7个数据
  889. #define SPI_CTRL_TFTHR_Msk (0x07 << SPI_CTRL_TFTHR_Pos)
  890. #define SPI_CTRL_RFCLR_Pos 24 //RX FIFO Clear
  891. #define SPI_CTRL_RFCLR_Msk (0x01 << SPI_CTRL_RFCLR_Pos)
  892. #define SPI_CTRL_TFCLR_Pos 25 //TX FIFO Clear
  893. #define SPI_CTRL_TFCLR_Msk (0x01 << SPI_CTRL_TFCLR_Pos)
  894. #define SPI_CTRL_LSBF_Pos 28 //LSB Fisrt
  895. #define SPI_CTRL_LSBF_Msk (0x01 << SPI_CTRL_LSBF_Pos)
  896. #define SPI_CTRL_NSYNC_Pos 29 //1 对SPI输入信号进行采样同步 0 对SPI输入信号不进行采样同步
  897. #define SPI_CTRL_NSYNC_Msk (0x01 << SPI_CTRL_NSYNC_Pos)
  898. #define SPI_STAT_WTC_Pos 0 //Word Transmit Complete,每传输完成一个数据字由硬件置1,软件写1清零
  899. #define SPI_STAT_WTC_Msk (0x01 << SPI_STAT_WTC_Pos)
  900. #define SPI_STAT_TFE_Pos 1 //发送FIFO Empty
  901. #define SPI_STAT_TFE_Msk (0x01 << SPI_STAT_TFE_Pos)
  902. #define SPI_STAT_TFNF_Pos 2 //发送FIFO Not Full
  903. #define SPI_STAT_TFNF_Msk (0x01 << SPI_STAT_TFNF_Pos)
  904. #define SPI_STAT_RFNE_Pos 3 //接收FIFO Not Empty
  905. #define SPI_STAT_RFNE_Msk (0x01 << SPI_STAT_RFNE_Pos)
  906. #define SPI_STAT_RFF_Pos 4 //接收FIFO Full
  907. #define SPI_STAT_RFF_Msk (0x01 << SPI_STAT_RFF_Pos)
  908. #define SPI_STAT_RFOV_Pos 5 //接收FIFO Overflow
  909. #define SPI_STAT_RFOV_Msk (0x01 << SPI_STAT_RFOV_Pos)
  910. #define SPI_STAT_TFLVL_Pos 6 //发送FIFO中数据个数, 0 TFNF=0时表示FIFO内有8个数据,TFNF=1时表示FIFO内有0个数据 1--7 FIFO内有1--7个数据
  911. #define SPI_STAT_TFLVL_Msk (0x07 << SPI_STAT_TFLVL_Pos)
  912. #define SPI_STAT_RFLVL_Pos 9 //接收FIFO中数据个数, 0 RFF =1时表示FIFO内有8个数据,RFF =0时表示FIFO内有0个数据 1--7 FIFO内有1--7个数据
  913. #define SPI_STAT_RFLVL_Msk (0x07 << SPI_STAT_RFLVL_Pos)
  914. #define SPI_STAT_BUSY_Pos 15
  915. #define SPI_STAT_BUSY_Msk (0x01 << SPI_STAT_BUSY_Pos)
  916. #define SPI_IE_RFOV_Pos 0
  917. #define SPI_IE_RFOV_Msk (0x01 << SPI_IE_RFOV_Pos)
  918. #define SPI_IE_RFF_Pos 1
  919. #define SPI_IE_RFF_Msk (0x01 << SPI_IE_RFF_Pos)
  920. #define SPI_IE_RFHF_Pos 2
  921. #define SPI_IE_RFHF_Msk (0x01 << SPI_IE_RFHF_Pos)
  922. #define SPI_IE_TFE_Pos 3
  923. #define SPI_IE_TFE_Msk (0x01 << SPI_IE_TFE_Pos)
  924. #define SPI_IE_TFHF_Pos 4 //发送FIFO中数据个数大于4
  925. #define SPI_IE_TFHF_Msk (0x01 << SPI_IE_TFHF_Pos)
  926. #define SPI_IE_RFTHR_Pos 5 //接收FIFO中数据个数大于CTRL.RFTHR设定值中断使能
  927. #define SPI_IE_RFTHR_Msk (0x01 << SPI_IE_RFTHR_Pos)
  928. #define SPI_IE_TFTHR_Pos 6 //发送FIFO中数据个数小于CTRL.TFTHR设定值中断使能
  929. #define SPI_IE_TFTHR_Msk (0x01 << SPI_IE_TFTHR_Pos)
  930. #define SPI_IE_WTC_Pos 8 //Word Transmit Complete
  931. #define SPI_IE_WTC_Msk (0x01 << SPI_IE_WTC_Pos)
  932. #define SPI_IE_FTC_Pos 9 //Frame Transmit Complete
  933. #define SPI_IE_FTC_Msk (0x01 << SPI_IE_FTC_Pos)
  934. #define SPI_IE_SSFALL_Pos 10 //Slave Select Fall Edge
  935. #define SPI_IE_SSFALL_Msk (0x01 << SPI_IE_SSFALL_Pos)
  936. #define SPI_IE_SSRISE_Pos 11 //Slave Select Rise Edge
  937. #define SPI_IE_SSRISE_Msk (0x01 << SPI_IE_SSRISE_Pos)
  938. #define SPI_IF_RFOV_Pos 0 //写1清零
  939. #define SPI_IF_RFOV_Msk (0x01 << SPI_IF_RFOV_Pos)
  940. #define SPI_IF_RFF_Pos 1 //写1清零
  941. #define SPI_IF_RFF_Msk (0x01 << SPI_IF_RFF_Pos)
  942. #define SPI_IF_RFHF_Pos 2 //写1清零
  943. #define SPI_IF_RFHF_Msk (0x01 << SPI_IF_RFHF_Pos)
  944. #define SPI_IF_TFE_Pos 3 //写1清零
  945. #define SPI_IF_TFE_Msk (0x01 << SPI_IF_TFE_Pos)
  946. #define SPI_IF_TFHF_Pos 4 //写1清零
  947. #define SPI_IF_TFHF_Msk (0x01 << SPI_IF_TFHF_Pos)
  948. #define SPI_IF_RFTHR_Pos 5 //写1清零
  949. #define SPI_IF_RFTHR_Msk (0x01 << SPI_IF_RFTHR_Pos)
  950. #define SPI_IF_TFTHR_Pos 6 //写1清零
  951. #define SPI_IF_TFTHR_Msk (0x01 << SPI_IF_TFTHR_Pos)
  952. #define SPI_IF_WTC_Pos 8 //Word Transmit Complete,每传输完成一个数据字由硬件置1
  953. #define SPI_IF_WTC_Msk (0x01 << SPI_IF_WTC_Pos)
  954. #define SPI_IF_FTC_Pos 9 //Frame Transmit Complete,WTC置位时若TX FIFO是空的,则FTC置位
  955. #define SPI_IF_FTC_Msk (0x01 << SPI_IF_FTC_Pos)
  956. #define SPI_IF_SSFALL_Pos 10
  957. #define SPI_IF_SSFALL_Msk (0x01 << SPI_IF_SSFALL_Pos)
  958. #define SPI_IF_SSRISE_Pos 11
  959. #define SPI_IF_SSRISE_Msk (0x01 << SPI_IF_SSRISE_Pos)
  960. #define SPI_I2SCR_DIEN_Pos 0 //Data Input Enable
  961. #define SPI_I2SCR_DIEN_Msk (0x01 << SPI_I2SCR_DIEN_Pos)
  962. #define SPI_I2SCR_DOEN_Pos 1 //Data Output Enable
  963. #define SPI_I2SCR_DOEN_Msk (0x01 << SPI_I2SCR_DOEN_Pos)
  964. #define SPI_I2SCR_MSTR_Pos 2 //Master Mode
  965. #define SPI_I2SCR_MSTR_Msk (0x01 << SPI_I2SCR_MSTR_Pos)
  966. #define SPI_I2SCR_EN_Pos 3
  967. #define SPI_I2SCR_EN_Msk (0x01 << SPI_I2SCR_EN_Pos)
  968. #define SPI_I2SCR_FFMT_Pos 4 //I2S Frame Format, 0 I2S philips 1 MSB justified 2 PCM Short 3 PCM Long
  969. #define SPI_I2SCR_FFMT_Msk (0x03 << SPI_I2SCR_FFMT_Pos)
  970. #define SPI_I2SCR_DLEN_Pos 6 //I2S Data Length, 0 8位 1 16位 2 24位 3 32位
  971. #define SPI_I2SCR_DLEN_Msk (0x03 << SPI_I2SCR_DLEN_Pos)
  972. #define SPI_I2SCR_PCMSYNW_Pos 8 //I2S PCM Long Mode Sync Width, 0 1 SCLK period 1 1 Data Length
  973. #define SPI_I2SCR_PCMSYNW_Msk (0x01 << SPI_I2SCR_PCMSYNW_Pos)
  974. #define SPI_I2SCR_MCLKOE_Pos 9 //MCLK Output Enable
  975. #define SPI_I2SCR_MCLKOE_Msk (0x01 << SPI_I2SCR_MCLKOE_Pos)
  976. #define SPI_I2SCR_CHLEN_Pos 10 //声道宽度,0 16位 1 32位
  977. #define SPI_I2SCR_CHLEN_Msk (0x01 << SPI_I2SCR_CHLEN_Pos)
  978. #define SPI_I2SCR_CHRIGHT_Pos 16 //1 Right Channel 0 Left Channel
  979. #define SPI_I2SCR_CHRIGHT_Msk (0x01 << SPI_I2SCR_CHRIGHT_Pos)
  980. #define SPI_I2SPR_MCLKDIV_Pos 0 //Fmclk = Fpclk / (2 * (MCLKDIV + 1)),MCLK一般是SCLK的256或384倍
  981. #define SPI_I2SPR_MCLKDIV_Msk (0x3F << SPI_I2SPR_MCLKDIV_Pos)
  982. #define SPI_I2SPR_SCLKDIV_Pos 8 //Fsclk = Fpclk / (2 * (SCLKDIV + 1))
  983. #define SPI_I2SPR_SCLKDIV_Msk (0xFFF<< SPI_I2SPR_SCLKDIV_Pos)
  984. typedef struct {
  985. __IO uint32_t CR;
  986. __IO uint32_t SR;
  987. __IO uint32_t TR; //Transfer Register
  988. __IO uint32_t RXDATA;
  989. __IO uint32_t TXDATA;
  990. __IO uint32_t IF;
  991. __IO uint32_t IE;
  992. uint32_t RESERVED1;
  993. __IO uint32_t MCR; //Master Control Register
  994. __IO uint32_t CLK;
  995. uint32_t RESERVED2[2];
  996. __IO uint32_t SCR; //Slave Control Register
  997. __IO uint32_t SADDR;
  998. } I2C_TypeDef;
  999. #define I2C_CR_EN_Pos 0
  1000. #define I2C_CR_EN_Msk (0x01 << I2C_CR_EN_Pos)
  1001. #define I2C_CR_MASTER_Pos 1 //1 Master 0 Slave
  1002. #define I2C_CR_MASTER_Msk (0x01 << I2C_CR_MASTER_Pos)
  1003. #define I2C_CR_HS_Pos 2 //1 High-Speed mode 0 Standard-mode or Fast-mode
  1004. #define I2C_CR_HS_Msk (0x01 << I2C_CR_HS_Pos)
  1005. #define I2C_CR_DNF_Pos 3 //Digital Noise Filter, 宽度低于 DNF+1 个的电平被认为是毛刺
  1006. #define I2C_CR_DNF_Msk (0x0F << I2C_CR_DNF_Pos)
  1007. #define I2C_SR_BUSY_Pos 0
  1008. #define I2C_SR_BUSY_Msk (0x01 << I2C_SR_BUSY_Pos)
  1009. #define I2C_SR_SCL_Pos 1 //SCL Line Level
  1010. #define I2C_SR_SCL_Msk (0x01 << I2C_SR_SCL_Pos)
  1011. #define I2C_SR_SDA_Pos 2 //SDA Line Level
  1012. #define I2C_SR_SDA_Msk (0x01 << I2C_SR_SDA_Pos)
  1013. #define I2C_TR_TXACK_Pos 0 //作为接收时,反馈ACK位的电平值
  1014. #define I2C_TR_TXACK_Msk (0x01 << I2C_TR_TXACK_Pos)
  1015. #define I2C_TR_RXACK_Pos 1 //作为发送时,接收到的ACK位电平值
  1016. #define I2C_TR_RXACK_Msk (0x01 << I2C_TR_RXACK_Pos)
  1017. #define I2C_TR_TXCLR_Pos 2 //TX Data Clear, 自动清零
  1018. #define I2C_TR_TXCLR_Msk (0x01 << I2C_TR_TXCLR_Pos)
  1019. #define I2C_TR_SLVACT_Pos 8 //Slave Active, 从机模式下被选中时置位
  1020. #define I2C_TR_SLVACT_Msk (0x01 << I2C_TR_SLVACT_Pos)
  1021. #define I2C_TR_SLVRD_Pos 9 //Slave Read mode,从机模式下接收到读请求时置位
  1022. #define I2C_TR_SLVRD_Msk (0x01 << I2C_TR_SLVRD_Pos)
  1023. #define I2C_TR_SLVWR_Pos 10 //Slave Write mode,从机模式下接收到写请求时置位
  1024. #define I2C_TR_SLVWR_Msk (0x01 << I2C_TR_SLVWR_Pos)
  1025. #define I2C_TR_SLVSTR_Pos 11 //Slave clock stretching
  1026. #define I2C_TR_SLVSTR_Msk (0x01 << I2C_TR_SLVSTR_Pos)
  1027. #define I2C_TR_SLVRDS_Pos 12 //Slave RXDATA Status, 0 空 1 接收到地址 2 接收到数据 3 接收到Master Code
  1028. #define I2C_TR_SLVRDS_Msk (0x03 << I2C_TR_SLVRDS_Pos)
  1029. #define I2C_IF_TXE_Pos 0 //TX Empty,写TXDATA清零此位
  1030. #define I2C_IF_TXE_Msk (0x01 << I2C_IF_TXE_Pos)
  1031. #define I2C_IF_RXNE_Pos 1 //RX Not Empty,读RXDATA清零此位
  1032. #define I2C_IF_RXNE_Msk (0x01 << I2C_IF_RXNE_Pos)
  1033. #define I2C_IF_RXOV_Pos 2 //RX Overflow,写1清零
  1034. #define I2C_IF_RXOV_Msk (0x01 << I2C_IF_RXOV_Pos)
  1035. #define I2C_IF_TXDONE_Pos 3 //TX Done,写1清零
  1036. #define I2C_IF_TXDONE_Msk (0x01 << I2C_IF_TXDONE_Pos)
  1037. #define I2C_IF_RXDONE_Pos 4 //RX Done,写1清零
  1038. #define I2C_IF_RXDONE_Msk (0x01 << I2C_IF_RXDONE_Pos)
  1039. #define I2C_IF_RXSTA_Pos 8 //从机接收到起始位,写1清零
  1040. #define I2C_IF_RXSTA_Msk (0x01 << I2C_IF_RXSTA_Pos)
  1041. #define I2C_IF_RXSTO_Pos 9 //从机接收到停止位,写1清零
  1042. #define I2C_IF_RXSTO_Msk (0x01 << I2C_IF_RXSTO_Pos)
  1043. #define I2C_IF_AL_Pos 16 //主机仲裁丢失总线,写1清零
  1044. #define I2C_IF_AL_Msk (0x01 << I2C_IF_AL_Pos)
  1045. #define I2C_IF_MLTO_Pos 17 //Master SCL Low Timeout,写1清零
  1046. #define I2C_IF_MLTO_Msk (0x01 << I2C_IF_MLTO_Pos)
  1047. #define I2C_IE_TXE_Pos 0
  1048. #define I2C_IE_TXE_Msk (0x01 << I2C_IE_TXE_Pos)
  1049. #define I2C_IE_RXNE_Pos 1
  1050. #define I2C_IE_RXNE_Msk (0x01 << I2C_IE_RXNE_Pos)
  1051. #define I2C_IE_RXOV_Pos 2
  1052. #define I2C_IE_RXOV_Msk (0x01 << I2C_IE_RXOV_Pos)
  1053. #define I2C_IE_TXDONE_Pos 3
  1054. #define I2C_IE_TXDONE_Msk (0x01 << I2C_IE_TXDONE_Pos)
  1055. #define I2C_IE_RXDONE_Pos 4
  1056. #define I2C_IE_RXDONE_Msk (0x01 << I2C_IE_RXDONE_Pos)
  1057. #define I2C_IE_RXSTA_Pos 8
  1058. #define I2C_IE_RXSTA_Msk (0x01 << I2C_IE_RXSTA_Pos)
  1059. #define I2C_IE_RXSTO_Pos 9
  1060. #define I2C_IE_RXSTO_Msk (0x01 << I2C_IE_RXSTO_Pos)
  1061. #define I2C_IE_AL_Pos 16
  1062. #define I2C_IE_AL_Msk (0x01 << I2C_IE_AL_Pos)
  1063. #define I2C_IE_MLTO_Pos 17
  1064. #define I2C_IE_MLTO_Msk (0x01 << I2C_IE_MLTO_Pos)
  1065. #define I2C_MCR_STA_Pos 0 //写1产生起始位,完成后自动清零
  1066. #define I2C_MCR_STA_Msk (0x01 << I2C_MCR_STA_Pos)
  1067. #define I2C_MCR_RD_Pos 1
  1068. #define I2C_MCR_RD_Msk (0x01 << I2C_MCR_RD_Pos)
  1069. #define I2C_MCR_WR_Pos 2
  1070. #define I2C_MCR_WR_Msk (0x01 << I2C_MCR_WR_Pos)
  1071. #define I2C_MCR_STO_Pos 3 //写1产生停止位,完成后自动清零
  1072. #define I2C_MCR_STO_Msk (0x01 << I2C_MCR_STO_Pos)
  1073. #define I2C_CLK_SCLL_Pos 0 //SCL Low Time
  1074. #define I2C_CLK_SCLL_Msk (0xFF << I2C_CLK_SCLL_Pos)
  1075. #define I2C_CLK_SCLH_Pos 8 //SCL High Time
  1076. #define I2C_CLK_SCLH_Msk (0xFF << I2C_CLK_SCLH_Pos)
  1077. #define I2C_CLK_DIV_Pos 16
  1078. #define I2C_CLK_DIV_Msk (0xFF << I2C_CLK_DIV_Pos)
  1079. #define I2C_CLK_SDAH_Pos 24 //SDA Hold Time
  1080. #define I2C_CLK_SDAH_Msk (0x0F << I2C_CLK_SDAH_Pos)
  1081. #define I2C_SCR_ADDR10_Pos 0 //1 10位地址 0 7位地址
  1082. #define I2C_SCR_ADDR10_Msk (0x01 << I2C_SCR_ADDR10_Pos)
  1083. #define I2C_SCR_MCDE_Pos 1 //Master Code Detect Enable
  1084. #define I2C_SCR_MCDE_Msk (0x01 << I2C_SCR_MCDE_Pos)
  1085. #define I2C_SCR_STRE_Pos 2 //Clock Stretching Enable
  1086. #define I2C_SCR_STRE_Msk (0x01 << I2C_SCR_STRE_Pos)
  1087. #define I2C_SCR_ASDS_Pos 3 //Adaptive Stretching Data Setup
  1088. #define I2C_SCR_ASDS_Msk (0x01 << I2C_SCR_ASDS_Pos)
  1089. #define I2C_SADDR_ADDR7_Pos 1 //7位地址模式下的地址
  1090. #define I2C_SADDR_ADDR7_Msk (0x7F << I2C_SADDR_ADDR7_Pos)
  1091. #define I2C_SADDR_ADDR10_Pos 0 //10位地址模式下的地址
  1092. #define I2C_SADDR_ADDR10_Msk (0x3FF<< I2C_SADDR_ADDR10_Pos)
  1093. #define I2C_SADDR_MASK7_Pos 17 //7位地址模式下的地址掩码,ADDR7 & (~MASK7) 后与接收地址比较
  1094. #define I2C_SADDR_MASK7_Msk (0x7F << I2C_SADDR_MASK7_Pos)
  1095. #define I2C_SADDR_MASK10_Pos 16 //10位地址模式下的地址掩码,只掩码低8位
  1096. #define I2C_SADDR_MASK10_Msk (0xFF << I2C_SADDR_MASK10_Pos)
  1097. typedef struct {
  1098. __IO uint32_t CR;
  1099. __IO uint32_t GO;
  1100. __IO uint32_t IE;
  1101. __IO uint32_t IF;
  1102. struct {
  1103. __IO uint32_t SR;
  1104. __IO uint32_t DR;
  1105. __IO uint32_t CMP;
  1106. uint32_t RESERVED;
  1107. } SEQ[4];
  1108. uint32_t RESERVED[15];
  1109. __IO uint32_t SEQCHN0;
  1110. __IO uint32_t SEQCHN1; //序列通道选择
  1111. __IO uint32_t SEQTRG; //序列触发选择
  1112. __IO uint32_t SEQCOV; //序列转换次数,序列被触发启动后可连续转换多次,此处指定转换次数
  1113. __IO uint32_t SEQSMP; //序列采样时间,采样保持时间
  1114. uint32_t RESERVED2[4];
  1115. __IO uint32_t CR2;
  1116. uint32_t RESERVED3[15];
  1117. __IO uint32_t CALIB;
  1118. } ADC_TypeDef;
  1119. #define ADC_CR_EN_Pos 0
  1120. #define ADC_CR_EN_Msk (0x01 << ADC_CR_EN_Pos)
  1121. #define ADC_CR_AVG_Pos 1 //0 1次采样 1 2次采样取平均值 2 4次采样取平均值 3 8次采样取平均值
  1122. #define ADC_CR_AVG_Msk (0x03 << ADC_CR_AVG_Pos)
  1123. #define ADC_CR_RESET_Pos 3 //复位模拟模块,置位至少需两个采样周期
  1124. #define ADC_CR_RESET_Msk (0x01 << ADC_CR_RESET_Pos)
  1125. #define ADC_CR_DMAEN_Pos 4 //四位,每位对应一个序列,同一时刻只能一个有一个序列使能DMA,0 能通过CPU读取DATA_FIFO 1 只能通过DMA读取DATA_FIFO
  1126. #define ADC_CR_DMAEN_Msk (0x0F << ADC_CR_DMAEN_Pos)
  1127. #define ADC_CR_FFCLR_Pos 8 //FIFO Clear,四位,每位对应一个序列
  1128. #define ADC_CR_FFCLR_Msk (0x0F << ADC_CR_FFCLR_Pos)
  1129. #define ADC_GO_SEQ0_Pos 0 //序列3转换启动位
  1130. #define ADC_GO_SEQ0_Msk (0x01 << ADC_GO_SEQ0_Pos)
  1131. #define ADC_GO_SEQ1_Pos 1
  1132. #define ADC_GO_SEQ1_Msk (0x01 << ADC_GO_SEQ1_Pos)
  1133. #define ADC_GO_SEQ2_Pos 2
  1134. #define ADC_GO_SEQ2_Msk (0x01 << ADC_GO_SEQ2_Pos)
  1135. #define ADC_GO_SEQ3_Pos 3
  1136. #define ADC_GO_SEQ3_Msk (0x01 << ADC_GO_SEQ3_Pos)
  1137. #define ADC_GO_BUSY_Pos 4
  1138. #define ADC_GO_BUSY_Msk (0x01 << ADC_GO_BUSY_Pos)
  1139. #define ADC_IE_SEQ0EOC_Pos 0 //序列0 End Of Convertion 中断使能
  1140. #define ADC_IE_SEQ0EOC_Msk (0x01 << ADC_IE_SEQ0EOC_Pos)
  1141. #define ADC_IE_SEQ0OVF_Pos 1 //序列0 FIFO Overflow 中断使能
  1142. #define ADC_IE_SEQ0OVF_Msk (0x01 << ADC_IE_SEQ0OVF_Pos)
  1143. #define ADC_IE_SEQ0HALF_Pos 2 //序列0 FIFO Half Full 中断使能
  1144. #define ADC_IE_SEQ0HALF_Msk (0x01 << ADC_IE_SEQ0HALF_Pos)
  1145. #define ADC_IE_SEQ0FULL_Pos 3 //序列0 FIFO Full 中断使能
  1146. #define ADC_IE_SEQ0FULL_Msk (0x01 << ADC_IE_SEQ0FULL_Pos)
  1147. #define ADC_IE_SEQ0CMPMAX_Pos 4 //序列0转换结果大于COMP.MAX中断使能
  1148. #define ADC_IE_SEQ0CMPMAX_Msk (0x01 << ADC_IE_SEQ0CMPMAX_Pos)
  1149. #define ADC_IE_SEQ0CMPMIN_Pos 5 //序列0转换结果小于COMP.MIN中断使能
  1150. #define ADC_IE_SEQ0CMPMIN_Msk (0x01 << ADC_IE_SEQ0CMPMIN_Pos)
  1151. #define ADC_IE_SEQ1EOC_Pos 8
  1152. #define ADC_IE_SEQ1EOC_Msk (0x01 << ADC_IE_SEQ1EOC_Pos)
  1153. #define ADC_IE_SEQ1OVF_Pos 9
  1154. #define ADC_IE_SEQ1OVF_Msk (0x01 << ADC_IE_SEQ1OVF_Pos)
  1155. #define ADC_IE_SEQ1HALF_Pos 10
  1156. #define ADC_IE_SEQ1HALF_Msk (0x01 << ADC_IE_SEQ1HALF_Pos)
  1157. #define ADC_IE_SEQ1FULL_Pos 11
  1158. #define ADC_IE_SEQ1FULL_Msk (0x01 << ADC_IE_SEQ1FULL_Pos)
  1159. #define ADC_IE_SEQ1CMPMAX_Pos 12
  1160. #define ADC_IE_SEQ1CMPMAX_Msk (0x01 << ADC_IE_SEQ1CMPMAX_Pos)
  1161. #define ADC_IE_SEQ1CMPMIN_Pos 13
  1162. #define ADC_IE_SEQ1CMPMIN_Msk (0x01 << ADC_IE_SEQ1CMPMIN_Pos)
  1163. #define ADC_IE_SEQ2EOC_Pos 16
  1164. #define ADC_IE_SEQ2EOC_Msk (0x01 << ADC_IE_SEQ2EOC_Pos)
  1165. #define ADC_IE_SEQ2OVF_Pos 17
  1166. #define ADC_IE_SEQ2OVF_Msk (0x01 << ADC_IE_SEQ2OVF_Pos)
  1167. #define ADC_IE_SEQ2HALF_Pos 18
  1168. #define ADC_IE_SEQ2HALF_Msk (0x01 << ADC_IE_SEQ2HALF_Pos)
  1169. #define ADC_IE_SEQ2FULL_Pos 19
  1170. #define ADC_IE_SEQ2FULL_Msk (0x01 << ADC_IE_SEQ2FULL_Pos)
  1171. #define ADC_IE_SEQ2CMPMAX_Pos 20
  1172. #define ADC_IE_SEQ2CMPMAX_Msk (0x01 << ADC_IE_SEQ2CMPMAX_Pos)
  1173. #define ADC_IE_SEQ2CMPMIN_Pos 21
  1174. #define ADC_IE_SEQ2CMPMIN_Msk (0x01 << ADC_IE_SEQ2CMPMIN_Pos)
  1175. #define ADC_IE_SEQ3EOC_Pos 24
  1176. #define ADC_IE_SEQ3EOC_Msk (0x01 << ADC_IE_SEQ3EOC_Pos)
  1177. #define ADC_IE_SEQ3OVF_Pos 25
  1178. #define ADC_IE_SEQ3OVF_Msk (0x01 << ADC_IE_SEQ3OVF_Pos)
  1179. #define ADC_IE_SEQ3HALF_Pos 26
  1180. #define ADC_IE_SEQ3HALF_Msk (0x01 << ADC_IE_SEQ3HALF_Pos)
  1181. #define ADC_IE_SEQ3FULL_Pos 27
  1182. #define ADC_IE_SEQ3FULL_Msk (0x01 << ADC_IE_SEQ3FULL_Pos)
  1183. #define ADC_IE_SEQ3CMPMAX_Pos 28
  1184. #define ADC_IE_SEQ3CMPMAX_Msk (0x01 << ADC_IE_SEQ3CMPMAX_Pos)
  1185. #define ADC_IE_SEQ3CMPMIN_Pos 29
  1186. #define ADC_IE_SEQ3CMPMIN_Msk (0x01 << ADC_IE_SEQ3CMPMIN_Pos)
  1187. #define ADC_IF_SEQ0EOC_Pos 0 //序列0 End Of Convertion 中断标志
  1188. #define ADC_IF_SEQ0EOC_Msk (0x01 << ADC_IF_SEQ0EOC_Pos)
  1189. #define ADC_IF_SEQ0OVF_Pos 1 //序列0 FIFO Overflow 中断标志
  1190. #define ADC_IF_SEQ0OVF_Msk (0x01 << ADC_IF_SEQ0OVF_Pos)
  1191. #define ADC_IF_SEQ0HALF_Pos 2 //序列0 FIFO Half Full 中断标志
  1192. #define ADC_IF_SEQ0HALF_Msk (0x01 << ADC_IF_SEQ0HALF_Pos)
  1193. #define ADC_IF_SEQ0FULL_Pos 3 //序列0 FIFO Full 中断标志
  1194. #define ADC_IF_SEQ0FULL_Msk (0x01 << ADC_IF_SEQ0FULL_Pos)
  1195. #define ADC_IF_SEQ0CMPMAX_Pos 4 //序列0转换结果大于COMP.MAX中断标志
  1196. #define ADC_IF_SEQ0CMPMAX_Msk (0x01 << ADC_IF_SEQ0CMPMAX_Pos)
  1197. #define ADC_IF_SEQ0CMPMIN_Pos 5 //序列0转换结果小于COMP.MIN中断标志
  1198. #define ADC_IF_SEQ0CMPMIN_Msk (0x01 << ADC_IF_SEQ0CMPMIN_Pos)
  1199. #define ADC_IF_SEQ1EOC_Pos 8
  1200. #define ADC_IF_SEQ1EOC_Msk (0x01 << ADC_IF_SEQ1EOC_Pos)
  1201. #define ADC_IF_SEQ1OVF_Pos 9
  1202. #define ADC_IF_SEQ1OVF_Msk (0x01 << ADC_IF_SEQ1OVF_Pos)
  1203. #define ADC_IF_SEQ1HALF_Pos 10
  1204. #define ADC_IF_SEQ1HALF_Msk (0x01 << ADC_IF_SEQ1HALF_Pos)
  1205. #define ADC_IF_SEQ1FULL_Pos 11
  1206. #define ADC_IF_SEQ1FULL_Msk (0x01 << ADC_IF_SEQ1FULL_Pos)
  1207. #define ADC_IF_SEQ1CMPMAX_Pos 12
  1208. #define ADC_IF_SEQ1CMPMAX_Msk (0x01 << ADC_IF_SEQ1CMPMAX_Pos)
  1209. #define ADC_IF_SEQ1CMPMIN_Pos 13
  1210. #define ADC_IF_SEQ1CMPMIN_Msk (0x01 << ADC_IF_SEQ1CMPMIN_Pos)
  1211. #define ADC_IF_SEQ2EOC_Pos 16
  1212. #define ADC_IF_SEQ2EOC_Msk (0x01 << ADC_IF_SEQ2EOC_Pos)
  1213. #define ADC_IF_SEQ2OVF_Pos 17
  1214. #define ADC_IF_SEQ2OVF_Msk (0x01 << ADC_IF_SEQ2OVF_Pos)
  1215. #define ADC_IF_SEQ2HALF_Pos 18
  1216. #define ADC_IF_SEQ2HALF_Msk (0x01 << ADC_IF_SEQ2HALF_Pos)
  1217. #define ADC_IF_SEQ2FULL_Pos 19
  1218. #define ADC_IF_SEQ2FULL_Msk (0x01 << ADC_IF_SEQ2FULL_Pos)
  1219. #define ADC_IF_SEQ2CMPMAX_Pos 20
  1220. #define ADC_IF_SEQ2CMPMAX_Msk (0x01 << ADC_IF_SEQ2CMPMAX_Pos)
  1221. #define ADC_IF_SEQ2CMPMIN_Pos 21
  1222. #define ADC_IF_SEQ2CMPMIN_Msk (0x01 << ADC_IF_SEQ2CMPMIN_Pos)
  1223. #define ADC_IF_SEQ3EOC_Pos 24
  1224. #define ADC_IF_SEQ3EOC_Msk (0x01 << ADC_IF_SEQ3EOC_Pos)
  1225. #define ADC_IF_SEQ3OVF_Pos 25
  1226. #define ADC_IF_SEQ3OVF_Msk (0x01 << ADC_IF_SEQ3OVF_Pos)
  1227. #define ADC_IF_SEQ3HALF_Pos 26
  1228. #define ADC_IF_SEQ3HALF_Msk (0x01 << ADC_IF_SEQ3HALF_Pos)
  1229. #define ADC_IF_SEQ3FULL_Pos 27
  1230. #define ADC_IF_SEQ3FULL_Msk (0x01 << ADC_IF_SEQ3FULL_Pos)
  1231. #define ADC_IF_SEQ3CMPMAX_Pos 28
  1232. #define ADC_IF_SEQ3CMPMAX_Msk (0x01 << ADC_IF_SEQ3CMPMAX_Pos)
  1233. #define ADC_IF_SEQ3CMPMIN_Pos 29
  1234. #define ADC_IF_SEQ3CMPMIN_Msk (0x01 << ADC_IF_SEQ3CMPMIN_Pos)
  1235. #define ADC_SR_EOC_Pos 0 //End Of Conversion,ADC开始转换时硬件清零
  1236. #define ADC_SR_EOC_Msk (0x01 << ADC_SR_EOC_Pos)
  1237. #define ADC_SR_OVF_Pos 1 //FIFO Overflow
  1238. #define ADC_SR_OVF_Msk (0x01 << ADC_SR_OVF_Pos)
  1239. #define ADC_SR_HALF_Pos 2 //FIFO Half Full
  1240. #define ADC_SR_HALF_Msk (0x01 << ADC_SR_HALF_Pos)
  1241. #define ADC_SR_FULL_Pos 3 //FIFO Full
  1242. #define ADC_SR_FULL_Msk (0x01 << ADC_SR_FULL_Pos)
  1243. #define ADC_SR_EMPTY_Pos 4 //FIFO Empty
  1244. #define ADC_SR_EMPTY_Msk (0x01 << ADC_SR_EMPTY_Pos)
  1245. #define ADC_SR_LEVEL_Pos 5 //FIFO中数据个数,1~7:FIFO中有1~7个数据 0 FIFO Empty时表示0个数据,FIFO Full时表示8个数据
  1246. #define ADC_SR_LEVEL_Msk (0x07 << ADC_SR_LEVEL_Pos)
  1247. #define ADC_DR_VALUE_Pos 0
  1248. #define ADC_DR_VALUE_Msk (0xFFF<< ADC_DR_VALUE_Pos)
  1249. #define ADC_DR_CHNUM_Pos 12
  1250. #define ADC_DR_CHNUM_Msk (0x0F << ADC_DR_CHNUM_Pos)
  1251. #define ADC_CMP_MAX_Pos 0
  1252. #define ADC_CMP_MAX_Msk (0xFFF<< ADC_CMP_MAX_Pos)
  1253. #define ADC_CMP_MIN_Pos 16
  1254. #define ADC_CMP_MIN_Msk (0xFFF<< ADC_CMP_MIN_Pos)
  1255. #define ADC_SEQCHN0_SEQ0_Pos 0 //序列0通道选择,12位对应12个通道,bitx置位表示将通道x加入序列0
  1256. #define ADC_SEQCHN0_SEQ0_Msk (0xFFF << ADC_SEQCHN0_SEQ0_Pos)
  1257. #define ADC_SEQCHN0_SEQ1_Pos 16
  1258. #define ADC_SEQCHN0_SEQ1_Msk (0xFFF << ADC_SEQCHN0_SEQ1_Pos)
  1259. #define ADC_SEQCHN1_SEQ2_Pos 0
  1260. #define ADC_SEQCHN1_SEQ2_Msk (0xFFF << ADC_SEQCHN1_SEQ2_Pos)
  1261. #define ADC_SEQCHN1_SEQ3_Pos 16
  1262. #define ADC_SEQCHN1_SEQ3_Msk (0xFFF << ADC_SEQCHN1_SEQ3_Pos)
  1263. #define ADC_SEQTRG_SEQ0_Pos 0 //序列0触发选择,0x01 CPU 0x02 TIMR2 0x03 TIMR3 0x04-07 ADC_TRIG0-3引脚 0x10-1F PWM0A-PWM7B
  1264. #define ADC_SEQTRG_SEQ0_Msk (0x1F << ADC_SEQTRG_SEQ0_Pos)
  1265. #define ADC_SEQTRG_SEQ1_Pos 8
  1266. #define ADC_SEQTRG_SEQ1_Msk (0x1F << ADC_SEQTRG_SEQ1_Pos)
  1267. #define ADC_SEQTRG_SEQ2_Pos 16
  1268. #define ADC_SEQTRG_SEQ2_Msk (0x1F << ADC_SEQTRG_SEQ2_Pos)
  1269. #define ADC_SEQTRG_SEQ3_Pos 24
  1270. #define ADC_SEQTRG_SEQ3_Msk (0x1F << ADC_SEQTRG_SEQ3_Pos)
  1271. #define ADC_SEQCOV_SEQ0_Pos 0 //序列0转换次数,0x00 转换1次
  1272. #define ADC_SEQCOV_SEQ0_Msk (0xFF << ADC_SEQCOV_SEQ0_Pos)
  1273. #define ADC_SEQCOV_SEQ1_Pos 8
  1274. #define ADC_SEQCOV_SEQ1_Msk (0xFF << ADC_SEQCOV_SEQ1_Pos)
  1275. #define ADC_SEQCOV_SEQ2_Pos 16
  1276. #define ADC_SEQCOV_SEQ2_Msk (0xFF << ADC_SEQCOV_SEQ2_Pos)
  1277. #define ADC_SEQCOV_SEQ3_Pos 24
  1278. #define ADC_SEQCOV_SEQ3_Msk (0xFF << ADC_SEQCOV_SEQ3_Pos)
  1279. #define ADC_SEQSMP_SEQ0_Pos 0 //序列0采样时间,0/1/2/3 采样建立时间保持1/2/4/8个采样时钟周期
  1280. #define ADC_SEQSMP_SEQ0_Msk (0x07 << ADC_SEQSMP_SEQ0_Pos)
  1281. #define ADC_SEQSMP_SEQ1_Pos 4
  1282. #define ADC_SEQSMP_SEQ1_Msk (0x07 << ADC_SEQSMP_SEQ1_Pos)
  1283. #define ADC_SEQSMP_SEQ2_Pos 8
  1284. #define ADC_SEQSMP_SEQ2_Msk (0x07 << ADC_SEQSMP_SEQ2_Pos)
  1285. #define ADC_SEQSMP_SEQ3_Pos 12
  1286. #define ADC_SEQSMP_SEQ3_Msk (0x07 << ADC_SEQSMP_SEQ3_Pos)
  1287. #define ADC_CR2_ENLDO_Pos 2 //该信号由0变为1后,至少需要等20us才能使能ADC(将ADC_EN置为1)
  1288. #define ADC_CR2_ENLDO_Msk (0x01 << ADC_CR2_ENLDO_Pos)
  1289. #define ADC_CR2_BITS_Pos 6 //ADC位数,0 6位 1 8位 2 10位 3 12位
  1290. #define ADC_CR2_BITS_Msk (0x03 << ADC_CR2_BITS_Pos)
  1291. #define ADC_CALIB_RESET_Pos 0 //校准模块复位,至少保持2个采样周期
  1292. #define ADC_CALIB_RESET_Msk (0x01 << ADC_CALIB_RESET_Pos)
  1293. #define ADC_CALIB_START_Pos 1 //写1启动校准,硬件清零
  1294. #define ADC_CALIB_START_Msk (0x01 << ADC_CALIB_START_Pos)
  1295. #define ADC_CALIB_BUSY_Pos 2 //1 正在执行校准
  1296. #define ADC_CALIB_BUSY_Msk (0x01 << ADC_CALIB_BUSY_Pos)
  1297. #define ADC_CALIB_LOAD_Pos 3 //写1将校准结果加载到ADC中,硬件清零
  1298. #define ADC_CALIB_LOAD_Msk (0x01 << ADC_CALIB_LOAD_Pos)
  1299. #define ADC_CALIB_BYPASS_Pos 4 //1 旁路校准模块
  1300. #define ADC_CALIB_BYPASS_Msk (0x01 << ADC_CALIB_BYPASS_Pos)
  1301. #define ADC_CALIB_RESULT_Pos 8
  1302. #define ADC_CALIB_RESULT_Msk (0x7F << ADC_CALIB_RESULT_Pos)
  1303. typedef struct {
  1304. __IO uint32_t CR;
  1305. __IO uint32_t OCR;
  1306. __IO uint32_t BRKCR;
  1307. __IO uint32_t BRKIN;
  1308. uint32_t RESERVED[4];
  1309. __IO uint32_t PERIOD; //[15:0] 周期
  1310. __IO uint32_t CMPA; //[15:0] A路翻转点比较值
  1311. __IO uint32_t CMPB; //[15:0] B路翻转点比较值
  1312. __IO uint32_t DZA; //[9:0] 死区
  1313. __IO uint32_t DZB;
  1314. __IO uint32_t CMPA2; //非对称中心对齐模式下,向下计数过程中,A路翻转点比较值
  1315. __IO uint32_t CMPB2; //非对称中心对齐模式下,向下计数过程中,B路翻转点比较值
  1316. uint32_t RESERVED2[5];
  1317. __IO uint32_t OVFTRG;
  1318. __IO uint32_t CMPTRG;
  1319. uint32_t RESERVED3[2];
  1320. __IO uint32_t EVMUX;
  1321. __IO uint32_t EVMSK;
  1322. uint32_t RESERVED4[2];
  1323. __IO uint32_t IE;
  1324. __IO uint32_t IF;
  1325. __IO uint32_t VALUE;
  1326. __IO uint32_t SR;
  1327. } PWM_TypeDef;
  1328. #define PWM_CR_MODE_Pos 0 //0 边沿对齐模式 1 中心对齐模式 2 非对称中心对齐模式
  1329. #define PWM_CR_MODE_Msk (0x03 << PWM_CR_MODE_Pos)
  1330. #define PWM_CR_MULT_Pos 2 //0 单次计数模式 1 多次计数模式
  1331. #define PWM_CR_MULT_Msk (0x01 << PWM_CR_MULT_Pos)
  1332. #define PWM_CR_DIR_Pos 3 //计数器计数方向, 0 向上计数 1 向下计数
  1333. #define PWM_CR_DIR_Msk (0x01 << PWM_CR_DIR_Pos)
  1334. #define PWM_CR_CLKSRC_Pos 4 //计数时钟源,0 系统时钟 1 PWM_PULSE0输入 2 PWM_PULSE1输入
  1335. #define PWM_CR_CLKSRC_Msk (0x03 << PWM_CR_CLKSRC_Pos)
  1336. #define PWM_CR_CLKDIV_Pos 6 //计数时钟预分频, 0 1分频 1 2分频 ... 1023 1024分频
  1337. #define PWM_CR_CLKDIV_Msk (0x3FF<< PWM_CR_CLKDIV_Pos)
  1338. #define PWM_CR_RPTNUM_Pos 16 //计数器溢出多少次执行一次寄存器重载,0 1次 1 2次 ... 255 256次
  1339. #define PWM_CR_RPTNUM_Msk (0xFF << PWM_CR_RPTNUM_Pos)
  1340. #define PWM_OCR_IDLEA_Pos 0 //A路空闲时输出电平
  1341. #define PWM_OCR_IDLEA_Msk (0x01 << PWM_OCR_IDLEA_Pos)
  1342. #define PWM_OCR_IDLEB_Pos 1 //B路空闲时输出电平
  1343. #define PWM_OCR_IDLEB_Msk (0x01 << PWM_OCR_IDLEB_Pos)
  1344. #define PWM_OCR_IDLEAN_Pos 2 //AN路空闲时输出电平
  1345. #define PWM_OCR_IDLEAN_Msk (0x01 << PWM_OCR_IDLEAN_Pos)
  1346. #define PWM_OCR_IDLEBN_Pos 3 //BN路空闲时输出电平
  1347. #define PWM_OCR_IDLEBN_Msk (0x01 << PWM_OCR_IDLEBN_Pos)
  1348. #define PWM_OCR_INVA_Pos 4 //A路输出是否取反
  1349. #define PWM_OCR_INVA_Msk (0x01 << PWM_OCR_INVA_Pos)
  1350. #define PWM_OCR_INVB_Pos 5 //B路输出是否取反
  1351. #define PWM_OCR_INVB_Msk (0x01 << PWM_OCR_INVB_Pos)
  1352. #define PWM_OCR_INVAN_Pos 6 //AN路输出是否取反
  1353. #define PWM_OCR_INVAN_Msk (0x01 << PWM_OCR_INVAN_Pos)
  1354. #define PWM_OCR_INVBN_Pos 7 //BN路输出是否取反
  1355. #define PWM_OCR_INVBN_Msk (0x01 << PWM_OCR_INVBN_Pos)
  1356. #define PWM_BRKCR_OUTA_Pos 0 //刹车状态下A路输出电平
  1357. #define PWM_BRKCR_OUTA_Msk (0x01 << PWM_BRKCR_OUTA_Pos)
  1358. #define PWM_BRKCR_OFFA_Pos 1 //刹车信号撤销时A路输出,0 立即恢复正常输出 1 保持当前输出直到计数器溢出再恢复正常输出
  1359. #define PWM_BRKCR_OFFA_Msk (0x01 << PWM_BRKCR_OFFA_Pos)
  1360. #define PWM_BRKCR_OUTB_Pos 4 //刹车状态下B路输出电平
  1361. #define PWM_BRKCR_OUTB_Msk (0x01 << PWM_BRKCR_OUTB_Pos)
  1362. #define PWM_BRKCR_OFFB_Pos 5 //刹车信号撤销时B路输出,0 立即恢复正常输出 1 保持当前输出直到计数器溢出再恢复正常输出
  1363. #define PWM_BRKCR_OFFB_Msk (0x01 << PWM_BRKCR_OFFB_Pos)
  1364. #define PWM_BRKCR_OUTAN_Pos 8 //刹车状态下AN路输出电平
  1365. #define PWM_BRKCR_OUTAN_Msk (0x01 << PWM_BRKCR_OUTAN_Pos)
  1366. #define PWM_BRKCR_OUTBN_Pos 9 //刹车状态下BN路输出电平
  1367. #define PWM_BRKCR_OUTBN_Msk (0x01 << PWM_BRKCR_OUTBN_Pos)
  1368. #define PWM_BRKCR_STPCNT_Pos 10 //刹车状态下是否停止计数器,1 停止计数器 0 继续计数
  1369. #define PWM_BRKCR_STPCNT_Msk (0x01 << PWM_BRKCR_STPCNT_Pos)
  1370. #define PWM_BRKCR_ACTIVE_Pos 17 //当前是否处于刹车状态
  1371. #define PWM_BRKCR_ACTIVE_Msk (0x01 << PWM_BRKCR_ACTIVE_Pos)
  1372. #define PWM_BRKIN_BRK0A_Pos 0 //A路是否受刹车输入PWM_BRK0影响
  1373. #define PWM_BRKIN_BRK0A_Msk (0x01 << PWM_BRKIN_BRK0A_Pos)
  1374. #define PWM_BRKIN_BRK1A_Pos 1
  1375. #define PWM_BRKIN_BRK1A_Msk (0x01 << PWM_BRKIN_BRK1A_Pos)
  1376. #define PWM_BRKIN_BRK2A_Pos 2
  1377. #define PWM_BRKIN_BRK2A_Msk (0x01 << PWM_BRKIN_BRK2A_Pos)
  1378. #define PWM_BRKIN_BRK0B_Pos 4
  1379. #define PWM_BRKIN_BRK0B_Msk (0x01 << PWM_BRKIN_BRK0B_Pos)
  1380. #define PWM_BRKIN_BRK1B_Pos 5
  1381. #define PWM_BRKIN_BRK1B_Msk (0x01 << PWM_BRKIN_BRK1B_Pos)
  1382. #define PWM_BRKIN_BRK2B_Pos 6
  1383. #define PWM_BRKIN_BRK2B_Msk (0x01 << PWM_BRKIN_BRK2B_Pos)
  1384. #define PWM_OVFTRG_UPEN_Pos 0 //计数器向上溢出Trigger使能
  1385. #define PWM_OVFTRG_UPEN_Msk (0x01 << PWM_OVFTRG_UPEN_Pos)
  1386. #define PWM_OVFTRG_DNEN_Pos 1 //计数器向下溢出Trigger使能
  1387. #define PWM_OVFTRG_DNEN_Msk (0x01 << PWM_OVFTRG_DNEN_Pos)
  1388. #define PWM_OVFTRG_MUX_Pos 2 //Trigger输出到哪一路,0 trig[0] 1 trig[1] 2 trig[2] ... 7 trig[7]
  1389. #define PWM_OVFTRG_MUX_Msk (0x07 << PWM_OVFTRG_MUX_Pos)
  1390. #define PWM_CMPTRG_CMP_Pos 0 //计数器值与此比较值相等时产生Trigger信号
  1391. #define PWM_CMPTRG_CMP_Msk (0xFFFF<<PWM_CMPTRG_CMP_Pos)
  1392. #define PWM_CMPTRG_EN_Pos 16
  1393. #define PWM_CMPTRG_EN_Msk (0x01 << PWM_CMPTRG_EN_Pos)
  1394. #define PWM_CMPTRG_MUX_Pos 17 //Trigger输出到哪一路,0 trig[0] 1 trig[1] 2 trig[2] ... 7 trig[7]
  1395. #define PWM_CMPTRG_MUX_Msk (0x07 << PWM_CMPTRG_MUX_Pos)
  1396. #define PWM_CMPTRG_WIDTH_Pos 20 //Trigger输出信号宽度,0 无输出 1 4个计数时钟 2 8个计数时钟 ... 63 252个计数时钟
  1397. #define PWM_CMPTRG_WIDTH_Msk (0x3F << PWM_CMPTRG_WIDTH_Pos)
  1398. #define PWM_CMPTRG_DIR_Pos 28 //0 向上计数过程中产生Trigger 1 向下计数过程中产生Trigger
  1399. #define PWM_CMPTRG_DIR_Msk (0x01 << PWM_CMPTRG_DIR_Pos)
  1400. #define PWM_CMPTRG_ATP_Pos 29 //AD触发信号在所挖坑中的位置:0 0/8处 1 1/8处 ... 7 7/8处
  1401. #define PWM_CMPTRG_ATP_Msk (0x07u<< PWM_CMPTRG_ATP_Pos)
  1402. #define PWM_EVMUX_START_Pos 0
  1403. #define PWM_EVMUX_START_Msk (0x07 << PWM_EVMUX_START_Pos)
  1404. #define PWM_EVMUX_STOP_Pos 4
  1405. #define PWM_EVMUX_STOP_Msk (0x07 << PWM_EVMUX_STOP_Pos)
  1406. #define PWM_EVMUX_PAUSE_Pos 8
  1407. #define PWM_EVMUX_PAUSE_Msk (0x07 << PWM_EVMUX_PAUSE_Pos)
  1408. #define PWM_EVMUX_RELOAD_Pos 12
  1409. #define PWM_EVMUX_RELOAD_Msk (0x07 << PWM_EVMUX_RELOAD_Pos)
  1410. #define PWM_EVMUX_MASKA_Pos 16
  1411. #define PWM_EVMUX_MASKA_Msk (0x07 << PWM_EVMUX_MASKA_Pos)
  1412. #define PWM_EVMUX_MASKB_Pos 20
  1413. #define PWM_EVMUX_MASKB_Msk (0x07 << PWM_EVMUX_MASKB_Pos)
  1414. #define PWM_EVMUX_MASKAN_Pos 24
  1415. #define PWM_EVMUX_MASKAN_Msk (0x07 << PWM_EVMUX_MASKAN_Pos)
  1416. #define PWM_EVMUX_MASKBN_Pos 28
  1417. #define PWM_EVMUX_MASKBN_Msk (0x07 << PWM_EVMUX_MASKBN_Pos)
  1418. #define PWM_EVMSK_OUTA_Pos 0
  1419. #define PWM_EVMSK_OUTA_Msk (0x01 << PWM_EVMSK_OUTA_Pos)
  1420. #define PWM_EVMSK_OUTB_Pos 1
  1421. #define PWM_EVMSK_OUTB_Msk (0x01 << PWM_EVMSK_OUTB_Pos)
  1422. #define PWM_EVMSK_OUTAN_Pos 2
  1423. #define PWM_EVMSK_OUTAN_Msk (0x01 << PWM_EVMSK_OUTAN_Pos)
  1424. #define PWM_EVMSK_OUTBN_Pos 3
  1425. #define PWM_EVMSK_OUTBN_Msk (0x01 << PWM_EVMSK_OUTBN_Pos)
  1426. #define PWM_EVMSK_IMME_Pos 4 //1 MASK立即生效 0 计数器溢出时生效
  1427. #define PWM_EVMSK_IMME_Msk (0x01 << PWM_EVMSK_IMME_Pos)
  1428. #define PWM_EVMSK_STPCLR_Pos 8 //外部事件导致计数器停止时计数器是否清零,1 清零 0 保持当前值
  1429. #define PWM_EVMSK_STPCLR_Msk (0x01 << PWM_EVMSK_STPCLR_Pos)
  1430. #define PWM_IE_UPOVF_Pos 0 //向上计数时计数器溢出中断使能
  1431. #define PWM_IE_UPOVF_Msk (0x01 << PWM_IE_UPOVF_Pos)
  1432. #define PWM_IE_DNOVF_Pos 1 //向下计数时计数器溢出中断使能
  1433. #define PWM_IE_DNOVF_Msk (0x01 << PWM_IE_DNOVF_Pos)
  1434. #define PWM_IE_UPCMPA_Pos 2 //向上计数时计数器值与CMPA相等中断使能
  1435. #define PWM_IE_UPCMPA_Msk (0x01 << PWM_IE_UPCMPA_Pos)
  1436. #define PWM_IE_UPCMPB_Pos 3 //向上计数时计数器值与CMPB相等中断使能
  1437. #define PWM_IE_UPCMPB_Msk (0x01 << PWM_IE_UPCMPB_Pos)
  1438. #define PWM_IE_DNCMPA_Pos 4 //向下计数时计数器值与CMPA相等中断使能
  1439. #define PWM_IE_DNCMPA_Msk (0x01 << PWM_IE_DNCMPA_Pos)
  1440. #define PWM_IE_DNCMPB_Pos 5 //向下计数时计数器值与CMPB相等中断使能
  1441. #define PWM_IE_DNCMPB_Msk (0x01 << PWM_IE_DNCMPB_Pos)
  1442. #define PWM_IF_UPOVF_Pos 0
  1443. #define PWM_IF_UPOVF_Msk (0x01 << PWM_IF_UPOVF_Pos)
  1444. #define PWM_IF_DNOVF_Pos 1
  1445. #define PWM_IF_DNOVF_Msk (0x01 << PWM_IF_DNOVF_Pos)
  1446. #define PWM_IF_UPCMPA_Pos 2
  1447. #define PWM_IF_UPCMPA_Msk (0x01 << PWM_IF_UPCMPA_Pos)
  1448. #define PWM_IF_UPCMPB_Pos 3
  1449. #define PWM_IF_UPCMPB_Msk (0x01 << PWM_IF_UPCMPB_Pos)
  1450. #define PWM_IF_DNCMPA_Pos 4
  1451. #define PWM_IF_DNCMPA_Msk (0x01 << PWM_IF_DNCMPA_Pos)
  1452. #define PWM_IF_DNCMPB_Pos 5
  1453. #define PWM_IF_DNCMPB_Msk (0x01 << PWM_IF_DNCMPB_Pos)
  1454. #define PWM_SR_STAT_Pos 0 //0 IDLE 1 ACTIVE 2 PAUSE
  1455. #define PWM_SR_STAT_Msk (0x03 << PWM_SR_STAT_Pos)
  1456. #define PWM_SR_DIR_Pos 4 //0 向上计数 1 向下计数
  1457. #define PWM_SR_DIR_Msk (0x01 << PWM_SR_DIR_Pos)
  1458. #define PWM_SR_OUTA_Pos 5
  1459. #define PWM_SR_OUTA_Msk (0x01 << PWM_SR_OUTA_Pos)
  1460. #define PWM_SR_OUTB_Pos 6
  1461. #define PWM_SR_OUTB_Msk (0x01 << PWM_SR_OUTB_Pos)
  1462. #define PWM_SR_OUTAN_Pos 7
  1463. #define PWM_SR_OUTAN_Msk (0x01 << PWM_SR_OUTAN_Pos)
  1464. #define PWM_SR_OUTBN_Pos 8
  1465. #define PWM_SR_OUTBN_Msk (0x01 << PWM_SR_OUTBN_Pos)
  1466. typedef struct {
  1467. __IO uint32_t START;
  1468. __IO uint32_t SWBRK; //Software Brake,软件刹车
  1469. __IO uint32_t RESET;
  1470. union {
  1471. __IO uint32_t RELOADEN;
  1472. __IO uint32_t RESTART;
  1473. };
  1474. __IO uint32_t PULSE;
  1475. __IO uint32_t FILTER; //外部信号滤波,0 无滤波 1 4个PCLK周期 2 8个PCLK周期 3 16个PCLK周期
  1476. __IO uint32_t BRKPOL; //刹车信号极性,
  1477. __IO uint32_t BRKIE;
  1478. union {
  1479. __IO uint32_t BRKIF;
  1480. __IO uint32_t BRKSR;
  1481. };
  1482. __IO uint32_t EVSR;
  1483. } PWMG_TypeDef;
  1484. #define PWMG_START_PWM0_Pos 0
  1485. #define PWMG_START_PWM0_Msk (0x01 << PWMG_START_PWM0_Pos)
  1486. #define PWMG_START_PWM1_Pos 1
  1487. #define PWMG_START_PWM1_Msk (0x01 << PWMG_START_PWM1_Pos)
  1488. #define PWMG_START_PWM2_Pos 2
  1489. #define PWMG_START_PWM2_Msk (0x01 << PWMG_START_PWM2_Pos)
  1490. #define PWMG_START_PWM3_Pos 3
  1491. #define PWMG_START_PWM3_Msk (0x01 << PWMG_START_PWM3_Pos)
  1492. #define PWMG_START_PWM4_Pos 4
  1493. #define PWMG_START_PWM4_Msk (0x01 << PWMG_START_PWM4_Pos)
  1494. #define PWMG_SWBRK_PWM0A_Pos 0
  1495. #define PWMG_SWBRK_PWM0A_Msk (0x01 << PWMG_SWBRK_PWM0A_Pos)
  1496. #define PWMG_SWBRK_PWM1A_Pos 1
  1497. #define PWMG_SWBRK_PWM1A_Msk (0x01 << PWMG_SWBRK_PWM1A_Pos)
  1498. #define PWMG_SWBRK_PWM2A_Pos 2
  1499. #define PWMG_SWBRK_PWM2A_Msk (0x01 << PWMG_SWBRK_PWM2A_Pos)
  1500. #define PWMG_SWBRK_PWM3A_Pos 3
  1501. #define PWMG_SWBRK_PWM3A_Msk (0x01 << PWMG_SWBRK_PWM3A_Pos)
  1502. #define PWMG_SWBRK_PWM4A_Pos 4
  1503. #define PWMG_SWBRK_PWM4A_Msk (0x01 << PWMG_SWBRK_PWM4A_Pos)
  1504. #define PWMG_SWBRK_PWM0B_Pos 8
  1505. #define PWMG_SWBRK_PWM0B_Msk (0x01 << PWMG_SWBRK_PWM0B_Pos)
  1506. #define PWMG_SWBRK_PWM1B_Pos 9
  1507. #define PWMG_SWBRK_PWM1B_Msk (0x01 << PWMG_SWBRK_PWM1B_Pos)
  1508. #define PWMG_SWBRK_PWM2B_Pos 10
  1509. #define PWMG_SWBRK_PWM2B_Msk (0x01 << PWMG_SWBRK_PWM2B_Pos)
  1510. #define PWMG_SWBRK_PWM3B_Pos 11
  1511. #define PWMG_SWBRK_PWM3B_Msk (0x01 << PWMG_SWBRK_PWM3B_Pos)
  1512. #define PWMG_SWBRK_PWM4B_Pos 12
  1513. #define PWMG_SWBRK_PWM4B_Msk (0x01 << PWMG_SWBRK_PWM4B_Pos)
  1514. #define PWMG_RESET_PWM0_Pos 0
  1515. #define PWMG_RESET_PWM0_Msk (0x01 << PWMG_RESET_PWM0_Pos)
  1516. #define PWMG_RESET_PWM1_Pos 1
  1517. #define PWMG_RESET_PWM1_Msk (0x01 << PWMG_RESET_PWM1_Pos)
  1518. #define PWMG_RESET_PWM2_Pos 2
  1519. #define PWMG_RESET_PWM2_Msk (0x01 << PWMG_RESET_PWM2_Pos)
  1520. #define PWMG_RESET_PWM3_Pos 3
  1521. #define PWMG_RESET_PWM3_Msk (0x01 << PWMG_RESET_PWM3_Pos)
  1522. #define PWMG_RESET_PWM4_Pos 4
  1523. #define PWMG_RESET_PWM4_Msk (0x01 << PWMG_RESET_PWM4_Pos)
  1524. #define PWMG_RELOADEN_PWM0_Pos 0
  1525. #define PWMG_RELOADEN_PWM0_Msk (0x01 << PWMG_RELOADEN_PWM0_Pos)
  1526. #define PWMG_RELOADEN_PWM1_Pos 1
  1527. #define PWMG_RELOADEN_PWM1_Msk (0x01 << PWMG_RELOADEN_PWM1_Pos)
  1528. #define PWMG_RELOADEN_PWM2_Pos 2
  1529. #define PWMG_RELOADEN_PWM2_Msk (0x01 << PWMG_RELOADEN_PWM2_Pos)
  1530. #define PWMG_RELOADEN_PWM3_Pos 3
  1531. #define PWMG_RELOADEN_PWM3_Msk (0x01 << PWMG_RELOADEN_PWM3_Pos)
  1532. #define PWMG_RELOADEN_PWM4_Pos 4
  1533. #define PWMG_RELOADEN_PWM4_Msk (0x01 << PWMG_RELOADEN_PWM4_Pos)
  1534. #define PWMG_RESTART_PWM0_Pos 8
  1535. #define PWMG_RESTART_PWM0_Msk (0x01 << PWMG_RESTART_PWM0_Pos)
  1536. #define PWMG_RESTART_PWM1_Pos 9
  1537. #define PWMG_RESTART_PWM1_Msk (0x01 << PWMG_RESTART_PWM1_Pos)
  1538. #define PWMG_RESTART_PWM2_Pos 10
  1539. #define PWMG_RESTART_PWM2_Msk (0x01 << PWMG_RESTART_PWM2_Pos)
  1540. #define PWMG_RESTART_PWM3_Pos 11
  1541. #define PWMG_RESTART_PWM3_Msk (0x01 << PWMG_RESTART_PWM3_Pos)
  1542. #define PWMG_RESTART_PWM4_Pos 12
  1543. #define PWMG_RESTART_PWM4_Msk (0x01 << PWMG_RESTART_PWM4_Pos)
  1544. #define PWMG_PULSE_EDGE0_Pos 0 //PWM_PULSE0 计数边沿,0 上升沿 1 下降沿
  1545. #define PWMG_PULSE_EDGE0_Msk (0x01 << PWMG_PULSE_EDGE0_Pos)
  1546. #define PWMG_PULSE_EDGE1_Pos 1
  1547. #define PWMG_PULSE_EDGE1_Msk (0x01 << PWMG_PULSE_EDGE1_Pos)
  1548. #define PWMG_BRKPOL_BRK0_Pos 0 //PWMG_BRK0 刹车信号极性,0 低电平刹车 1 高电平刹车
  1549. #define PWMG_BRKPOL_BRK0_Msk (0x01 << PWMG_BRKPOL_BRK0_Pos)
  1550. #define PWMG_BRKPOL_BRK1_Pos 1
  1551. #define PWMG_BRKPOL_BRK1_Msk (0x01 << PWMG_BRKPOL_BRK1_Pos)
  1552. #define PWMG_BRKPOL_BRK2_Pos 2
  1553. #define PWMG_BRKPOL_BRK2_Msk (0x01 << PWMG_BRKPOL_BRK2_Pos)
  1554. #define PWMG_BRKIE_BRK0_Pos 0
  1555. #define PWMG_BRKIE_BRK0_Msk (0x01 << PWMG_BRKIE_BRK0_Pos)
  1556. #define PWMG_BRKIE_BRK1_Pos 1
  1557. #define PWMG_BRKIE_BRK1_Msk (0x01 << PWMG_BRKIE_BRK1_Pos)
  1558. #define PWMG_BRKIE_BRK2_Pos 2
  1559. #define PWMG_BRKIE_BRK2_Msk (0x01 << PWMG_BRKIE_BRK2_Pos)
  1560. #define PWMG_BRKIF_BRK0_Pos 0
  1561. #define PWMG_BRKIF_BRK0_Msk (0x01 << PWMG_BRKIF_BRK0_Pos)
  1562. #define PWMG_BRKIF_BRK1_Pos 1
  1563. #define PWMG_BRKIF_BRK1_Msk (0x01 << PWMG_BRKIF_BRK1_Pos)
  1564. #define PWMG_BRKIF_BRK2_Pos 2
  1565. #define PWMG_BRKIF_BRK2_Msk (0x01 << PWMG_BRKIF_BRK2_Pos)
  1566. #define PWMG_BRKSR_BRK0_Pos 4 //刹车引脚电平值
  1567. #define PWMG_BRKSR_BRK0_Msk (0x01 << PWMG_BRKSR_BRK0_Pos)
  1568. #define PWMG_BRKSR_BRK1_Pos 5
  1569. #define PWMG_BRKSR_BRK1_Msk (0x01 << PWMG_BRKSR_BRK1_Pos)
  1570. #define PWMG_BRKSR_BRK2_Pos 6
  1571. #define PWMG_BRKSR_BRK2_Msk (0x01 << PWMG_BRKSR_BRK2_Pos)
  1572. #define PWMG_EVSR_EV0_Pos 0 //外部事件信号电平值
  1573. #define PWMG_EVSR_EV0_Msk (0x01 << PWMG_EVSR_EV0_Pos)
  1574. #define PWMG_EVSR_EV1_Pos 1
  1575. #define PWMG_EVSR_EV1_Msk (0x01 << PWMG_EVSR_EV1_Pos)
  1576. #define PWMG_EVSR_EV2_Pos 2
  1577. #define PWMG_EVSR_EV2_Msk (0x01 << PWMG_EVSR_EV2_Pos)
  1578. #define PWMG_EVSR_EV3_Pos 3
  1579. #define PWMG_EVSR_EV3_Msk (0x01 << PWMG_EVSR_EV3_Pos)
  1580. #define PWMG_EVSR_EV4_Pos 4
  1581. #define PWMG_EVSR_EV4_Msk (0x01 << PWMG_EVSR_EV4_Pos)
  1582. #define PWMG_EVSR_EV5_Pos 5
  1583. #define PWMG_EVSR_EV5_Msk (0x01 << PWMG_EVSR_EV5_Pos)
  1584. #define PWMG_EVSR_EV6_Pos 6
  1585. #define PWMG_EVSR_EV6_Msk (0x01 << PWMG_EVSR_EV6_Pos)
  1586. typedef struct {
  1587. __IO uint32_t CR;
  1588. __IO uint32_t POSCNT; //[15:0] 位置计数器
  1589. __IO uint32_t MAXCNT; //[15:0] 最大计数值
  1590. uint32_t RESERVED[5];
  1591. __IO uint32_t IE; //Interrupt Enable,为0时IF相应位不置位
  1592. __IO uint32_t IM; //Interrupt Mask,为0时即使IF相应位置位也不触发 QEI_IRQn 中断
  1593. __O uint32_t IC; //Interrupt Clear
  1594. __I uint32_t IF; //Interrupt Flag
  1595. __IO uint32_t IFOV; //interrupt Interrupt Overrun
  1596. } QEI_TypeDef;
  1597. #define QEI_CR_ENA_Pos 0
  1598. #define QEI_CR_ENA_Msk (0x01 << QEI_CR_ENA_Pos)
  1599. #define QEI_CR_ABSWAP_Pos 4 //1 A、B引脚交换
  1600. #define QEI_CR_ABSWAP_Msk (0x01 << QEI_CR_ABSWAP_Pos)
  1601. #define QEI_CR_X2X4_Pos 5 //0 X2计数模式 1 X4计数模式
  1602. #define QEI_CR_X2X4_Msk (0x01 << QEI_CR_X2X4_Pos)
  1603. #define QEI_CR_RSTSRC_Pos 6 //Reset Source 0 计数匹配复位 1 索引信号复位
  1604. #define QEI_CR_RSTSRC_Msk (0x01 << QEI_CR_RSTSRC_Pos)
  1605. #define QEI_CR_MODE_Pos 7 //工作模式选择 1 QEI模式
  1606. #define QEI_CR_MODE_Msk (0x01 << QEI_CR_MODE_Pos)
  1607. #define QEI_CR_INDEX_Pos 9 //0 索引引脚为低电平 1 索引引脚为高电平
  1608. #define QEI_CR_INDEX_Msk (0x01 << QEI_CR_INDEX_Pos)
  1609. #define QEI_CR_PAUSE_Pos 10 //1 空闲模式停止位
  1610. #define QEI_CR_PAUSE_Msk (0x01 << QEI_CR_PAUSE_Pos)
  1611. #define QEI_IE_INDEX_Pos 0 //检测到Index脉冲
  1612. #define QEI_IE_INDEX_Msk (0x01 << QEI_IE_INDEX_Pos)
  1613. #define QEI_IE_MATCH_Pos 1 //POSCNT递增到与MAXCNT相等,或POSCNT从MAXCNT递减到0
  1614. #define QEI_IE_MATCH_Msk (0x01 << QEI_IE_MATCH_Pos)
  1615. #define QEI_IE_CNTOV_Pos 2 //Counter Overrun,计数器溢出
  1616. #define QEI_IE_CNTOV_Msk (0x01 << QEI_IE_CNTOV_Pos)
  1617. #define QEI_IE_ERROR_Pos 3 //计数器错误
  1618. #define QEI_IE_ERROR_Msk (0x01 << QEI_IE_ERROR_Pos)
  1619. #define QEI_IM_INDEX_Pos 0
  1620. #define QEI_IM_INDEX_Msk (0x01 << QEI_IM_INDEX_Pos)
  1621. #define QEI_IM_MATCH_Pos 1
  1622. #define QEI_IM_MATCH_Msk (0x01 << QEI_IM_MATCH_Pos)
  1623. #define QEI_IM_CNTOV_Pos 2
  1624. #define QEI_IM_CNTOV_Msk (0x01 << QEI_IM_CNTOV_Pos)
  1625. #define QEI_IM_ERROR_Pos 3
  1626. #define QEI_IM_ERROR_Msk (0x01 << QEI_IM_ERROR_Pos)
  1627. #define QEI_IC_INDEX_Pos 0
  1628. #define QEI_IC_INDEX_Msk (0x01 << QEI_IC_INDEX_Pos)
  1629. #define QEI_IC_MATCH_Pos 1
  1630. #define QEI_IC_MATCH_Msk (0x01 << QEI_IC_MATCH_Pos)
  1631. #define QEI_IC_CNTOV_Pos 2
  1632. #define QEI_IC_CNTOV_Msk (0x01 << QEI_IC_CNTOV_Pos)
  1633. #define QEI_IC_ERROR_Pos 3
  1634. #define QEI_IC_ERROR_Msk (0x01 << QEI_IC_ERROR_Pos)
  1635. #define QEI_IF_INDEX_Pos 0
  1636. #define QEI_IF_INDEX_Msk (0x01 << QEI_IF_INDEX_Pos)
  1637. #define QEI_IF_MATCH_Pos 1
  1638. #define QEI_IF_MATCH_Msk (0x01 << QEI_IF_MATCH_Pos)
  1639. #define QEI_IF_CNTOV_Pos 2
  1640. #define QEI_IF_CNTOV_Msk (0x01 << QEI_IF_CNTOV_Pos)
  1641. #define QEI_IF_ERROR_Pos 3
  1642. #define QEI_IF_ERROR_Msk (0x01 << QEI_IF_ERROR_Pos)
  1643. #define QEI_IFOV_INDEX_Pos 0
  1644. #define QEI_IFOV_INDEX_Msk (0x01 << QEI_IFOV_INDEX_Pos)
  1645. #define QEI_IFOV_MATCH_Pos 1
  1646. #define QEI_IFOV_MATCH_Msk (0x01 << QEI_IFOV_MATCH_Pos)
  1647. #define QEI_IFOV_CNTOV_Pos 2
  1648. #define QEI_IFOV_CNTOV_Msk (0x01 << QEI_IFOV_CNTOV_Pos)
  1649. #define QEI_IFOV_ERROR_Pos 3
  1650. #define QEI_IFOV_ERROR_Msk (0x01 << QEI_IFOV_ERROR_Pos)
  1651. typedef struct {
  1652. __IO uint32_t EN; //[0] ENABLE
  1653. __IO uint32_t IE; //只有为1时,IF[CHx]在DMA传输结束时才能变为1,否则将一直保持在0
  1654. __IO uint32_t IM; //当为1时,即使IF[CHx]为1,dma_int也不会因此变1
  1655. __IO uint32_t IF; //写1清零
  1656. __IO uint32_t DSTSGIE; //只在Scatter Gather模式下使用
  1657. __IO uint32_t DSTSGIM; //只在Scatter Gather模式下使用
  1658. __IO uint32_t DSTSGIF; //只在Scatter Gather模式下使用
  1659. __IO uint32_t SRCSGIE; //只在Scatter Gather模式下使用
  1660. __IO uint32_t SRCSGIM; //只在Scatter Gather模式下使用
  1661. __IO uint32_t SRCSGIF; //只在Scatter Gather模式下使用
  1662. uint32_t RESERVED[5];
  1663. __IO uint32_t PRI; //优先级,1 高优先级 0 低优先级
  1664. struct {
  1665. __IO uint32_t CR;
  1666. __IO uint32_t AM; //Adress Mode
  1667. __IO uint32_t DST;
  1668. __IO uint32_t DSTSGADDR1; //只在Scatter Gather模式下使用
  1669. __IO uint32_t DSTSGADDR2; //只在Scatter Gather模式下使用
  1670. __IO uint32_t DSTSGADDR3; //只在Scatter Gather模式下使用
  1671. __IO uint32_t MUX;
  1672. __IO uint32_t SRC;
  1673. __IO uint32_t SRCSGADDR1; //只在Scatter Gather模式下使用
  1674. __IO uint32_t SRCSGADDR2; //只在Scatter Gather模式下使用
  1675. __IO uint32_t SRCSGADDR3; //只在Scatter Gather模式下使用
  1676. __I uint32_t DSTSR;
  1677. __I uint32_t SRCSR;
  1678. uint32_t RESERVED[3];
  1679. } CH[4];
  1680. } DMA_TypeDef;
  1681. #define DMA_IE_CH0_Pos 0
  1682. #define DMA_IE_CH0_Msk (0x01 << DMA_IE_CH0_Pos)
  1683. #define DMA_IE_CH1_Pos 1
  1684. #define DMA_IE_CH1_Msk (0x01 << DMA_IE_CH1_Pos)
  1685. #define DMA_IE_CH2_Pos 2
  1686. #define DMA_IE_CH2_Msk (0x01 << DMA_IE_CH2_Pos)
  1687. #define DMA_IE_CH3_Pos 3
  1688. #define DMA_IE_CH3_Msk (0x01 << DMA_IE_CH3_Pos)
  1689. #define DMA_IM_CH0_Pos 0
  1690. #define DMA_IM_CH0_Msk (0x01 << DMA_IM_CH0_Pos)
  1691. #define DMA_IM_CH1_Pos 1
  1692. #define DMA_IM_CH1_Msk (0x01 << DMA_IM_CH1_Pos)
  1693. #define DMA_IM_CH2_Pos 2
  1694. #define DMA_IM_CH2_Msk (0x01 << DMA_IM_CH2_Pos)
  1695. #define DMA_IM_CH3_Pos 3
  1696. #define DMA_IM_CH3_Msk (0x01 << DMA_IM_CH3_Pos)
  1697. #define DMA_IF_CH0_Pos 0
  1698. #define DMA_IF_CH0_Msk (0x01 << DMA_IF_CH0_Pos)
  1699. #define DMA_IF_CH1_Pos 1
  1700. #define DMA_IF_CH1_Msk (0x01 << DMA_IF_CH1_Pos)
  1701. #define DMA_IF_CH2_Pos 2
  1702. #define DMA_IF_CH2_Msk (0x01 << DMA_IF_CH2_Pos)
  1703. #define DMA_IF_CH3_Pos 3
  1704. #define DMA_IF_CH3_Msk (0x01 << DMA_IF_CH3_Pos)
  1705. #define DMA_CR_LEN_Pos 0 //此通道传输单位个数
  1706. #define DMA_CR_LEN_Msk (0xFFFFF<< DMA_CR_LEN_Pos)
  1707. #define DMA_CR_RXEN_Pos 24 //软件启动传输,传输方向为SRC-->DST
  1708. #define DMA_CR_RXEN_Msk (0x01 << DMA_CR_RXEN_Pos)
  1709. #define DMA_CR_TXEN_Pos 25 //软件启动传输,传输方向为DST-->SRC
  1710. #define DMA_CR_TXEN_Msk (0x01 << DMA_CR_TXEN_Pos)
  1711. #define DMA_CR_AUTORE_Pos 26 //Auto Restart, 通道在传输完成后,是否自动重新启动
  1712. #define DMA_CR_AUTORE_Msk (0x01 << DMA_CR_AUTORE_Pos)
  1713. #define DMA_CR_STEPOP_Pos 27 //Step Operation, 步进传输,触发1次传送1个单位数据
  1714. #define DMA_CR_STEPOP_Msk (0x01 << DMA_CR_STEPOP_Pos)
  1715. #define DMA_AM_DSTAM_Pos 0 //Address Mode 0 地址固定 1 地址递增 2 scatter gather模式
  1716. #define DMA_AM_DSTAM_Msk (0x03 << DMA_AM_DSTAM_Pos)
  1717. #define DMA_AM_DSTBIT_Pos 2 //传输位宽,0 字节 1 半字 2 字
  1718. #define DMA_AM_DSTBIT_Msk (0x03 << DMA_AM_DSTBIT_Pos)
  1719. #define DMA_AM_DSTBURST_Pos 4 //传输类型,0 Single 1 Burst(Inc4)
  1720. #define DMA_AM_DSTBURST_Msk (0x01 << DMA_AM_DSTBURST_Pos)
  1721. #define DMA_AM_SRCAM_Pos 8
  1722. #define DMA_AM_SRCAM_Msk (0x03 << DMA_AM_SRCAM_Pos)
  1723. #define DMA_AM_SRCBIT_Pos 10
  1724. #define DMA_AM_SRCBIT_Msk (0x03 << DMA_AM_SRCBIT_Pos)
  1725. #define DMA_AM_SRCBURST_Pos 12
  1726. #define DMA_AM_SRCBURST_Msk (0x01 << DMA_AM_SRCBURST_Pos)
  1727. #define DMA_MUX_DSTHSSIG_Pos 0 //目标侧握手信号(handshake signal)
  1728. #define DMA_MUX_DSTHSSIG_Msk (0x03 << DMA_MUX_DSTHSSIG_Pos)
  1729. #define DMA_MUX_DSTHSEN_Pos 2 //目标侧握手使能(handshake enable)
  1730. #define DMA_MUX_DSTHSEN_Msk (0x01 << DMA_MUX_DSTHSEN_Pos)
  1731. #define DMA_MUX_SRCHSSIG_Pos 8 //源侧握手信号
  1732. #define DMA_MUX_SRCHSSIG_Msk (0x03 << DMA_MUX_SRCHSSIG_Pos)
  1733. #define DMA_MUX_SRCHSEN_Pos 10 //源侧握手使能
  1734. #define DMA_MUX_SRCHSEN_Msk (0x01 << DMA_MUX_SRCHSEN_Pos)
  1735. #define DMA_MUX_EXTHSSIG_Pos 16 //外部握手信号,0 TIMR0 1 TIMR1 2 TIMR2 3 TIMR3 4 TIMR4 5 DMA_TRIG0 6 DMA_TRIG1
  1736. #define DMA_MUX_EXTHSSIG_Msk (0x07 << DMA_MUX_EXTHSSIG_Pos)
  1737. #define DMA_MUX_EXTHSEN_Pos 19 //外部握手使能,0 软件置位CR.RXEN/TXEN启动传输 1 EXTHSSRC选中的触发源启动传输
  1738. #define DMA_MUX_EXTHSEN_Msk (0x01 << DMA_MUX_EXTHSEN_Pos)
  1739. #define DMA_DSTSR_LEN_Pos 0 //剩余传输量
  1740. #define DMA_DSTSR_LEN_Msk (0xFFFFF<<DMA_DSTSR_LEN_Pos)
  1741. #define DMA_DSTSR_ERR_Pos 31 //长度配置错误
  1742. #define DMA_DSTSR_ERR_Msk (0x01u<< DMA_DSTSR_ERR_Pos)
  1743. #define DMA_SRCSR_LEN_Pos 0
  1744. #define DMA_SRCSR_LEN_Msk (0xFFFFF<<DMA_SRCSR_LEN_Pos)
  1745. #define DMA_SRCSR_ERR_Pos 31
  1746. #define DMA_SRCSR_ERR_Msk (0x01u<< DMA_SRCSR_ERR_Pos)
  1747. typedef struct {
  1748. __IO uint32_t CR; //Control Register
  1749. __O uint32_t CMD; //Command Register
  1750. __I uint32_t SR; //Status Register
  1751. __IO uint32_t IF; //Interrupt Flag,读取清零
  1752. __IO uint32_t IE; //Interrupt Enable
  1753. __IO uint32_t BT2;
  1754. __IO uint32_t BT0; //Bit Time Register 0
  1755. __IO uint32_t BT1; //Bit Time Register 1
  1756. uint32_t RESERVED;
  1757. __IO uint32_t AFM; //Acceptance Filter Mode
  1758. __IO uint32_t AFE; //Acceptance Filter Enable
  1759. __I uint32_t ALC; //Arbitration Lost Capture, 仲裁丢失捕捉
  1760. __I uint32_t ECC; //Error code capture, 错误代码捕捉
  1761. __IO uint32_t EWLIM; //Error Warning Limit, 错误报警限制
  1762. __IO uint32_t RXERR; //RX错误计数
  1763. __IO uint32_t TXERR; //TX错误计数
  1764. struct {
  1765. __IO uint32_t INFO; //读访问接收Buffer,写访问发送Buffer
  1766. __IO uint32_t DATA[12];
  1767. } FRAME;
  1768. __I uint32_t RMCNT; //Receive Message Count
  1769. uint32_t RESERVED2[162];
  1770. __IO uint32_t ACR[16]; //Acceptance Check Register, 验收寄存器
  1771. uint32_t RESERVED3[16];
  1772. __IO uint32_t AMR[16]; //Acceptance Mask Register, 验收屏蔽寄存器;对应位写0,ID必须和验收寄存器匹配
  1773. } CAN_TypeDef;
  1774. #define CAN_CR_RST_Pos 0
  1775. #define CAN_CR_RST_Msk (0x01 << CAN_CR_RST_Pos)
  1776. #define CAN_CR_LOM_Pos 1 //Listen Only Mode
  1777. #define CAN_CR_LOM_Msk (0x01 << CAN_CR_LOM_Pos)
  1778. #define CAN_CR_STM_Pos 2 //Self Test Mode, 此模式下即使没有应答,CAN控制器也可以成功发送
  1779. #define CAN_CR_STM_Msk (0x01 << CAN_CR_STM_Pos)
  1780. #define CAN_CR_SLEEP_Pos 4 //写1进入睡眠模式,有总线活动或中断时唤醒并自动清零此位
  1781. #define CAN_CR_SLEEP_Msk (0x01 << CAN_CR_SLEEP_Pos)
  1782. #define CAN_CMD_TXREQ_Pos 0 //Transmission Request
  1783. #define CAN_CMD_TXREQ_Msk (0x01 << CAN_CMD_TXREQ_Pos)
  1784. #define CAN_CMD_ABTTX_Pos 1 //Abort Transmission
  1785. #define CAN_CMD_ABTTX_Msk (0x01 << CAN_CMD_ABTTX_Pos)
  1786. #define CAN_CMD_RRB_Pos 2 //Release Receive Buffer
  1787. #define CAN_CMD_RRB_Msk (0x01 << CAN_CMD_RRB_Pos)
  1788. #define CAN_CMD_CLROV_Pos 3 //Clear Data Overrun
  1789. #define CAN_CMD_CLROV_Msk (0x01 << CAN_CMD_CLROV_Pos)
  1790. #define CAN_CMD_SRR_Pos 4 //Self Reception Request
  1791. #define CAN_CMD_SRR_Msk (0x01 << CAN_CMD_SRR_Pos)
  1792. #define CAN_SR_RXDA_Pos 0 //Receive Data Available,接收FIFO中有完整消息可以读取
  1793. #define CAN_SR_RXDA_Msk (0x01 << CAN_SR_RXDA_Pos)
  1794. #define CAN_SR_RXOV_Pos 1 //Receive FIFO Overrun,新接收的信息由于接收FIFO已满而丢掉
  1795. #define CAN_SR_RXOV_Msk (0x01 << CAN_SR_RXOV_Pos)
  1796. #define CAN_SR_TXBR_Pos 2 //Transmit Buffer Release,0 正在处理前面的发送,现在不能写新的消息 1 可以写入新的消息发送
  1797. #define CAN_SR_TXBR_Msk (0x01 << CAN_SR_TXBR_Pos)
  1798. #define CAN_SR_TXOK_Pos 3 //Transmit OK,successfully completed
  1799. #define CAN_SR_TXOK_Msk (0x01 << CAN_SR_TXOK_Pos)
  1800. #define CAN_SR_RXBUSY_Pos 4 //Receive Busy,正在接收
  1801. #define CAN_SR_RXBUSY_Msk (0x01 << CAN_SR_RXBUSY_Pos)
  1802. #define CAN_SR_TXBUSY_Pos 5 //Transmit Busy,正在发送
  1803. #define CAN_SR_TXBUSY_Msk (0x01 << CAN_SR_TXBUSY_Pos)
  1804. #define CAN_SR_ERRWARN_Pos 6 //1 至少一个错误计数器达到 Warning Limit
  1805. #define CAN_SR_ERRWARN_Msk (0x01 << CAN_SR_ERRWARN_Pos)
  1806. #define CAN_SR_BUSOFF_Pos 7 //1 CAN 控制器处于总线关闭状态,没有参与到总线活动
  1807. #define CAN_SR_BUSOFF_Msk (0x01 << CAN_SR_BUSOFF_Pos)
  1808. #define CAN_IF_RXDA_Pos 0 //IF.RXDA = SR.RXDA & IE.RXDA
  1809. #define CAN_IF_RXDA_Msk (0x01 << CAN_IF_RXDA_Pos)
  1810. #define CAN_IF_TXBR_Pos 1 //当IE.TXBR=1时,SR.TXBR由0变成1将置位此位
  1811. #define CAN_IF_TXBR_Msk (0x01 << CAN_IF_TXBR_Pos)
  1812. #define CAN_IF_ERRWARN_Pos 2 //当IE.ERRWARN=1时,SR.ERRWARN或SR.BUSOFF 0-to-1 或 1-to-0将置位此位
  1813. #define CAN_IF_ERRWARN_Msk (0x01 << CAN_IF_ERRWARN_Pos)
  1814. #define CAN_IF_RXOV_Pos 3 //IF.RXOV = SR.RXOV & IE.RXOV
  1815. #define CAN_IF_RXOV_Msk (0x01 << CAN_IF_RXOV_Pos)
  1816. #define CAN_IF_WKUP_Pos 4 //当IE.WKUP=1时,在睡眠模式下的CAN控制器检测到总线活动时硬件置位
  1817. #define CAN_IF_WKUP_Msk (0x01 << CAN_IF_WKUP_Pos)
  1818. #define CAN_IF_ERRPASS_Pos 5 //
  1819. #define CAN_IF_ERRPASS_Msk (0x01 << CAN_IF_ERRPASS_Pos)
  1820. #define CAN_IF_ARBLOST_Pos 6 //Arbitration Lost,当IE.ARBLOST=1时,CAN控制器丢失仲裁变成接收方时硬件置位
  1821. #define CAN_IF_ARBLOST_Msk (0x01 << CAN_IF_ARBLOST_Pos)
  1822. #define CAN_IF_BUSERR_Pos 7 //当IE.BUSERR=1时,CAN控制器检测到总线错误时硬件置位
  1823. #define CAN_IF_BUSERR_Msk (0x01 << CAN_IF_BUSERR_Pos)
  1824. #define CAN_IE_RXDA_Pos 0
  1825. #define CAN_IE_RXDA_Msk (0x01 << CAN_IE_RXDA_Pos)
  1826. #define CAN_IE_TXBR_Pos 1
  1827. #define CAN_IE_TXBR_Msk (0x01 << CAN_IE_TXBR_Pos)
  1828. #define CAN_IE_ERRWARN_Pos 2
  1829. #define CAN_IE_ERRWARN_Msk (0x01 << CAN_IE_ERRWARN_Pos)
  1830. #define CAN_IE_RXOV_Pos 3
  1831. #define CAN_IE_RXOV_Msk (0x01 << CAN_IE_RXOV_Pos)
  1832. #define CAN_IE_WKUP_Pos 4
  1833. #define CAN_IE_WKUP_Msk (0x01 << CAN_IE_WKUP_Pos)
  1834. #define CAN_IE_ERRPASS_Pos 5
  1835. #define CAN_IE_ERRPASS_Msk (0x01 << CAN_IE_ERRPASS_Pos)
  1836. #define CAN_IE_ARBLOST_Pos 6
  1837. #define CAN_IE_ARBLOST_Msk (0x01 << CAN_IE_ARBLOST_Pos)
  1838. #define CAN_IE_BUSERR_Pos 7
  1839. #define CAN_IE_BUSERR_Msk (0x01 << CAN_IE_BUSERR_Pos)
  1840. #define CAN_BT2_BRP_Pos 0
  1841. #define CAN_BT2_BRP_Msk (0x0F << CAN_BT2_BRP_Pos)
  1842. #define CAN_BT0_BRP_Pos 0 //Baud Rate Prescaler,CAN时间单位=2*Tsysclk*((BT2.BRP<<6) + BT0.BRP + 1)
  1843. #define CAN_BT0_BRP_Msk (0x3F << CAN_BT0_BRP_Pos)
  1844. #define CAN_BT0_SJW_Pos 6 //Synchronization Jump Width
  1845. #define CAN_BT0_SJW_Msk (0x03 << CAN_BT0_SJW_Pos)
  1846. #define CAN_BT1_TSEG1_Pos 0 //t_tseg1 = CAN时间单位 * (TSEG1+1)
  1847. #define CAN_BT1_TSEG1_Msk (0x0F << CAN_BT1_TSEG1_Pos)
  1848. #define CAN_BT1_TSEG2_Pos 4 //t_tseg2 = CAN时间单位 * (TSEG2+1)
  1849. #define CAN_BT1_TSEG2_Msk (0x07 << CAN_BT1_TSEG2_Pos)
  1850. #define CAN_BT1_SAM_Pos 7 //采样次数 0: sampled once 1: sampled three times
  1851. #define CAN_BT1_SAM_Msk (0x01 << CAN_BT1_SAM_Pos)
  1852. #define CAN_ECC_SEGCODE_Pos 0 //Segment Code
  1853. #define CAN_ECC_SEGCODE_Msk (0x1F << CAN_ECC_SEGCODE_Pos)
  1854. #define CAN_ECC_DIR_Pos 5 //0 error occurred during transmission 1 during reception
  1855. #define CAN_ECC_DIR_Msk (0x01 << CAN_ECC_DIR_Pos)
  1856. #define CAN_ECC_ERRCODE_Pos 6 //Error Code:0 Bit error 1 Form error 2 Stuff error 3 other error
  1857. #define CAN_ECC_ERRCODE_Msk (0x03 << CAN_ECC_ERRCODE_Pos)
  1858. #define CAN_INFO_DLC_Pos 0 //Data Length Control
  1859. #define CAN_INFO_DLC_Msk (0x0F << CAN_INFO_DLC_Pos)
  1860. #define CAN_INFO_RTR_Pos 6 //Remote Frame,1 远程帧 0 数据帧
  1861. #define CAN_INFO_RTR_Msk (0x01 << CAN_INFO_RTR_Pos)
  1862. #define CAN_INFO_FF_Pos 7 //Frame Format,0 标准帧格式 1 扩展帧格式
  1863. #define CAN_INFO_FF_Msk (0x01 << CAN_INFO_FF_Pos)
  1864. typedef struct {
  1865. __IO uint32_t DMA_MEM_ADDR;
  1866. __IO uint32_t BLK; //Block Size and Count
  1867. __IO uint32_t ARG; //Argument
  1868. __IO uint32_t CMD; //Command
  1869. __IO uint32_t RESP[4]; //Response
  1870. __IO uint32_t DATA;
  1871. __IO uint32_t STAT;
  1872. __IO uint32_t CR1;
  1873. __IO uint32_t CR2;
  1874. __IO uint32_t IF;
  1875. __IO uint32_t IM; //Interrupt Mask (Interrupt Flag Enable)
  1876. __IO uint32_t IE; //Interrupt Enalbe
  1877. __IO uint32_t CMD12ERR; //Auto CMD12 error status
  1878. } SDIO_TypeDef;
  1879. #define SDIO_BLK_SIZE_Pos 0 //0x200 512字节 0x400 1024字节 0x800 2048字节
  1880. #define SDIO_BLK_SIZE_Msk (0xFFF << SDIO_BLK_SIZE_Pos)
  1881. #define SDIO_BLK_COUNT_Pos 16 //0 Stop Transfer 1 1块 2 2块 ... ...
  1882. #define SDIO_BLK_COUNT_Msk (0xFFF << SDIO_BLK_COUNT_Pos)
  1883. #define SDIO_CMD_DMAEN_Pos 0
  1884. #define SDIO_CMD_DMAEN_Msk (0x01 << SDIO_CMD_DMAEN_Pos)
  1885. #define SDIO_CMD_BLKCNTEN_Pos 1
  1886. #define SDIO_CMD_BLKCNTEN_Msk (0x01 << SDIO_CMD_BLKCNTEN_Pos)
  1887. #define SDIO_CMD_AUTOCMD12_Pos 2
  1888. #define SDIO_CMD_AUTOCMD12_Msk (0x01 << SDIO_CMD_AUTOCMD12_Pos)
  1889. #define SDIO_CMD_DIRREAD_Pos 4 //0 Write, Host to Card 1 Read, Card to Host
  1890. #define SDIO_CMD_DIRREAD_Msk (0x01 << SDIO_CMD_DIRREAD_Pos)
  1891. #define SDIO_CMD_MULTBLK_Pos 5 //0 Single Block 1 Multiple Block
  1892. #define SDIO_CMD_MULTBLK_Msk (0x01 << SDIO_CMD_MULTBLK_Pos)
  1893. #define SDIO_CMD_RESPTYPE_Pos 16 //响应类型,0 无响应 1 136位响应 2 48位响应 3 48位响应,Busy after response
  1894. #define SDIO_CMD_RESPTYPE_Msk (0x03 << SDIO_CMD_RESPTYPE_Pos)
  1895. #define SDIO_CMD_CRCCHECK_Pos 19 //Command CRC Check Enable
  1896. #define SDIO_CMD_CRCCHECK_Msk (0x01 << SDIO_CMD_CRCCHECK_Pos)
  1897. #define SDIO_CMD_IDXCHECK_Pos 20 //Command Index Check Enable
  1898. #define SDIO_CMD_IDXCHECK_Msk (0x01 << SDIO_CMD_IDXCHECK_Pos)
  1899. #define SDIO_CMD_HAVEDATA_Pos 21 //0 No Data Present 1 Data Present
  1900. #define SDIO_CMD_HAVEDATA_Msk (0x01 << SDIO_CMD_HAVEDATA_Pos)
  1901. #define SDIO_CMD_CMDTYPE_Pos 22 //0 NORMAL 1 SUSPEND 2 RESUME 3 ABORT
  1902. #define SDIO_CMD_CMDTYPE_Msk (0x03 << SDIO_CMD_CMDTYPE_Pos)
  1903. #define SDIO_CMD_CMDINDX_Pos 24 //Command Index,CMD0-63、ACMD0-63
  1904. #define SDIO_CMD_CMDINDX_Msk (0x3F << SDIO_CMD_CMDINDX_Pos)
  1905. #define SDIO_CR1_4BIT_Pos 1 //1 4 bit mode 0 1 bit mode
  1906. #define SDIO_CR1_4BIT_Msk (0x01 << SDIO_CR1_4BIT_Pos)
  1907. #define SDIO_CR1_8BIT_Pos 5 //1 8 bit mode is selected 0 8 bit mode is not selected
  1908. #define SDIO_CR1_8BIT_Msk (0x01 << SDIO_CR1_8BIT_Pos)
  1909. #define SDIO_CR1_CDBIT_Pos 6 //0 No Card 1 Card Inserted
  1910. #define SDIO_CR1_CDBIT_Msk (0x01 << SDIO_CR1_CDBIT_Pos)
  1911. #define SDIO_CR1_CDSRC_Pos 7 //Card Detect Source, 1 CR1.CDBIT位 0 SD_Detect引脚
  1912. #define SDIO_CR1_CDSRC_Msk (0x01 << SDIO_CR1_CDSRC_Pos)
  1913. #define SDIO_CR1_PWRON_Pos 8 //1 Power on 0 Power off
  1914. #define SDIO_CR1_PWRON_Msk (0x01 << SDIO_CR1_PWRON_Pos)
  1915. #define SDIO_CR1_VOLT_Pos 9 //7 3.3V 6 3.0V 5 1.8V
  1916. #define SDIO_CR1_VOLT_Msk (0x07 << SDIO_CR1_VOLT_Pos)
  1917. #define SDIO_CR2_CLKEN_Pos 0 //Internal Clock Enable
  1918. #define SDIO_CR2_CLKEN_Msk (0x01 << SDIO_CR2_CLKEN_Pos)
  1919. #define SDIO_CR2_CLKRDY_Pos 1 //Internal Clock Stable/Ready
  1920. #define SDIO_CR2_CLKRDY_Msk (0x01 << SDIO_CR2_CLKRDY_Pos)
  1921. #define SDIO_CR2_SDCLKEN_Pos 2 //SDCLK Enable
  1922. #define SDIO_CR2_SDCLKEN_Msk (0x01 << SDIO_CR2_SDCLKEN_Pos)
  1923. #define SDIO_CR2_SDCLKDIV_Pos 8 //SDCLK Frequency Div, 0x00 不分频 0x01 2分频 0x02 4分频 0x04 8分频 0x08 16分频 ... 0x80 256分频
  1924. #define SDIO_CR2_SDCLKDIV_Msk (0xFF << SDIO_CR2_SDCLKDIV_Pos)
  1925. #define SDIO_CR2_TIMEOUT_Pos 16 //0 TMCLK*2^13 1 TMCLK*2^14 ... 14 TMCLK*2^27
  1926. #define SDIO_CR2_TIMEOUT_Msk (0x0F << SDIO_CR2_TIMEOUT_Pos)
  1927. #define SDIO_CR2_RSTALL_Pos 24 //Software Reset for All
  1928. #define SDIO_CR2_RSTALL_Msk (0x01 << SDIO_CR2_RSTALL_Pos)
  1929. #define SDIO_CR2_RSTCMD_Pos 25 //Software Reset for CMD Line
  1930. #define SDIO_CR2_RSTCMD_Msk (0x01 << SDIO_CR2_RSTCMD_Pos)
  1931. #define SDIO_CR2_RSTDAT_Pos 26 //Software Reset for DAT Line
  1932. #define SDIO_CR2_RSTDAT_Msk (0x01 << SDIO_CR2_RSTDAT_Pos)
  1933. #define SDIO_IF_CMDDONE_Pos 0
  1934. #define SDIO_IF_CMDDONE_Msk (0x01 << SDIO_IF_CMDDONE_Pos)
  1935. #define SDIO_IF_TRXDONE_Pos 1
  1936. #define SDIO_IF_TRXDONE_Msk (0x01 << SDIO_IF_TRXDONE_Pos)
  1937. #define SDIO_IF_BLKGAP_Pos 2
  1938. #define SDIO_IF_BLKGAP_Msk (0x01 << SDIO_IF_BLKGAP_Pos)
  1939. #define SDIO_IF_DMADONE_Pos 3
  1940. #define SDIO_IF_DMADONE_Msk (0x01 << SDIO_IF_DMADONE_Pos)
  1941. #define SDIO_IF_BUFWRRDY_Pos 4
  1942. #define SDIO_IF_BUFWRRDY_Msk (0x01 << SDIO_IF_BUFWRRDY_Pos)
  1943. #define SDIO_IF_BUFRDRDY_Pos 5
  1944. #define SDIO_IF_BUFRDRDY_Msk (0x01 << SDIO_IF_BUFRDRDY_Pos)
  1945. #define SDIO_IF_CARDINSR_Pos 6
  1946. #define SDIO_IF_CARDINSR_Msk (0x01 << SDIO_IF_CARDINSR_Pos)
  1947. #define SDIO_IF_CARDRMOV_Pos 7
  1948. #define SDIO_IF_CARDRMOV_Msk (0x01 << SDIO_IF_CARDRMOV_Pos)
  1949. #define SDIO_IF_CARD_Pos 8
  1950. #define SDIO_IF_CARD_Msk (0x01 << SDIO_IF_CARD_Pos)
  1951. #define SDIO_IF_ERROR_Pos 15
  1952. #define SDIO_IF_ERROR_Msk (0x01 << SDIO_IF_ERROR_Pos)
  1953. #define SDIO_IF_CMDTIMEOUT_Pos 16
  1954. #define SDIO_IF_CMDTIMEOUT_Msk (0x01 << SDIO_IF_CMDTIMEOUT_Pos)
  1955. #define SDIO_IF_CMDCRCERR_Pos 17
  1956. #define SDIO_IF_CMDCRCERR_Msk (0x01 << SDIO_IF_CMDCRCERR_Pos)
  1957. #define SDIO_IF_CMDENDERR_Pos 18
  1958. #define SDIO_IF_CMDENDERR_Msk (0x01 << SDIO_IF_CMDENDCERR_Pos)
  1959. #define SDIO_IF_CMDIDXERR_Pos 19
  1960. #define SDIO_IF_CMDIDXERR_Msk (0x01 << SDIO_IF_CMDIDXCERR_Pos)
  1961. #define SDIO_IF_DATTIMEOUT_Pos 20
  1962. #define SDIO_IF_DATTIMEOUT_Msk (0x01 << SDIO_IF_DATTIMEOUT_Pos)
  1963. #define SDIO_IF_DATCRCERR_Pos 21
  1964. #define SDIO_IF_DATCRCERR_Msk (0x01 << SDIO_IF_DATCRCERR_Pos)
  1965. #define SDIO_IF_DATENDERR_Pos 22
  1966. #define SDIO_IF_DATENDERR_Msk (0x01 << SDIO_IF_DATENDCERR_Pos)
  1967. #define SDIO_IF_CURLIMERR_Pos 23
  1968. #define SDIO_IF_CURLIMERR_Msk (0x01 << SDIO_IF_CURLIMERR_Pos)
  1969. #define SDIO_IF_CMD12ERR_Pos 24
  1970. #define SDIO_IF_CMD12ERR_Msk (0x01 << SDIO_IF_CMD12ERR_Pos)
  1971. #define SDIO_IF_DMAERR_Pos 25
  1972. #define SDIO_IF_DMAERR_Msk (0x01 << SDIO_IF_DMAERR_Pos)
  1973. #define SDIO_IF_RESPERR_Pos 28
  1974. #define SDIO_IF_RESPERR_Msk (0x01 << SDIO_IF_RESPERR_Pos)
  1975. #define SDIO_IE_CMDDONE_Pos 0 //Command Complete Status Enable
  1976. #define SDIO_IE_CMDDONE_Msk (0x01 << SDIO_IE_CMDDONE_Pos)
  1977. #define SDIO_IE_TRXDONE_Pos 1 //Transfer Complete Status Enable
  1978. #define SDIO_IE_TRXDONE_Msk (0x01 << SDIO_IE_TRXDONE_Pos)
  1979. #define SDIO_IE_BLKGAP_Pos 2 //Block Gap Event Status Enable
  1980. #define SDIO_IE_BLKGAP_Msk (0x01 << SDIO_IE_BLKGAP_Pos)
  1981. #define SDIO_IE_DMADONE_Pos 3 //DMA Interrupt Status Enable
  1982. #define SDIO_IE_DMADONE_Msk (0x01 << SDIO_IE_DMADONE_Pos)
  1983. #define SDIO_IE_BUFWRRDY_Pos 4 //Buffer Write Ready Status Enable
  1984. #define SDIO_IE_BUFWRRDY_Msk (0x01 << SDIO_IE_BUFWRRDY_Pos)
  1985. #define SDIO_IE_BUFRDRDY_Pos 5 //Buffer Read Ready Status Enable
  1986. #define SDIO_IE_BUFRDRDY_Msk (0x01 << SDIO_IE_BUFRDRDY_Pos)
  1987. #define SDIO_IE_CARDINSR_Pos 6 //Card Insertion Status Enable
  1988. #define SDIO_IE_CARDINSR_Msk (0x01 << SDIO_IE_CARDINSR_Pos)
  1989. #define SDIO_IE_CARDRMOV_Pos 7 //Card Removal Status Enable
  1990. #define SDIO_IE_CARDRMOV_Msk (0x01 << SDIO_IE_CARDRMOV_Pos)
  1991. #define SDIO_IE_CARD_Pos 8
  1992. #define SDIO_IE_CARD_Msk (0x01 << SDIO_IE_CARD_Pos)
  1993. #define SDIO_IE_CMDTIMEOUT_Pos 16 //Command Timeout Error Status Enable
  1994. #define SDIO_IE_CMDTIMEOUT_Msk (0x01 << SDIO_IE_CMDTIMEOUT_Pos)
  1995. #define SDIO_IE_CMDCRCERR_Pos 17 //Command CRC Error Status Enable
  1996. #define SDIO_IE_CMDCRCERR_Msk (0x01 << SDIO_IE_CMDCRCERR_Pos)
  1997. #define SDIO_IE_CMDENDERR_Pos 18 //Command End Bit Error Status Enable
  1998. #define SDIO_IE_CMDENDERR_Msk (0x01 << SDIO_IE_CMDENDCERR_Pos)
  1999. #define SDIO_IE_CMDIDXERR_Pos 19 //Command Index Error Status Enable
  2000. #define SDIO_IE_CMDIDXERR_Msk (0x01 << SDIO_IE_CMDIDXCERR_Pos)
  2001. #define SDIO_IE_DATTIMEOUT_Pos 20 //Data Timeout Error Status Enable
  2002. #define SDIO_IE_DATTIMEOUT_Msk (0x01 << SDIO_IE_DATTIMEOUT_Pos)
  2003. #define SDIO_IE_DATCRCERR_Pos 21 //Data CRC Error Status Enable
  2004. #define SDIO_IE_DATCRCERR_Msk (0x01 << SDIO_IE_DATCRCERR_Pos)
  2005. #define SDIO_IE_DATENDERR_Pos 22 //Data End Bit Error Status Enable
  2006. #define SDIO_IE_DATENDERR_Msk (0x01 << SDIO_IE_DATENDCERR_Pos)
  2007. #define SDIO_IE_CURLIMERR_Pos 23 //Current Limit Error Status Enable
  2008. #define SDIO_IE_CURLIMERR_Msk (0x01 << SDIO_IE_CURLIMERR_Pos)
  2009. #define SDIO_IE_CMD12ERR_Pos 24 //Auto CMD12 Error Status Enable
  2010. #define SDIO_IE_CMD12ERR_Msk (0x01 << SDIO_IE_CMD12ERR_Pos)
  2011. #define SDIO_IE_DMAERR_Pos 25 //ADMA Error Status Enable
  2012. #define SDIO_IE_DMAERR_Msk (0x01 << SDIO_IE_DMAERR_Pos)
  2013. #define SDIO_IE_RESPERR_Pos 28 //Target Response Error Status Enable
  2014. #define SDIO_IE_RESPERR_Msk (0x01 << SDIO_IE_RESPERR_Pos)
  2015. #define SDIO_IM_CMDDONE_Pos 0
  2016. #define SDIO_IM_CMDDONE_Msk (0x01 << SDIO_IM_CMDDONE_Pos)
  2017. #define SDIO_IM_TRXDONE_Pos 1
  2018. #define SDIO_IM_TRXDONE_Msk (0x01 << SDIO_IM_TRXDONE_Pos)
  2019. #define SDIO_IM_BLKGAP_Pos 2
  2020. #define SDIO_IM_BLKGAP_Msk (0x01 << SDIO_IM_BLKGAP_Pos)
  2021. #define SDIO_IM_DMADONE_Pos 3
  2022. #define SDIO_IM_DMADONE_Msk (0x01 << SDIO_IM_DMADONE_Pos)
  2023. #define SDIO_IM_BUFWRRDY_Pos 4
  2024. #define SDIO_IM_BUFWRRDY_Msk (0x01 << SDIO_IM_BUFWRRDY_Pos)
  2025. #define SDIO_IM_BUFRDRDY_Pos 5
  2026. #define SDIO_IM_BUFRDRDY_Msk (0x01 << SDIO_IM_BUFRDRDY_Pos)
  2027. #define SDIO_IM_CARDINSR_Pos 6
  2028. #define SDIO_IM_CARDINSR_Msk (0x01 << SDIO_IM_CARDINSR_Pos)
  2029. #define SDIO_IM_CARDRMOV_Pos 7
  2030. #define SDIO_IM_CARDRMOV_Msk (0x01 << SDIO_IM_CARDRMOV_Pos)
  2031. #define SDIO_IM_CARD_Pos 8
  2032. #define SDIO_IM_CARD_Msk (0x01 << SDIO_IM_CARD_Pos)
  2033. #define SDIO_IM_CMDTIMEOUT_Pos 16
  2034. #define SDIO_IM_CMDTIMEOUT_Msk (0x01 << SDIO_IM_CMDTIMEOUT_Pos)
  2035. #define SDIO_IM_CMDCRCERR_Pos 17
  2036. #define SDIO_IM_CMDCRCERR_Msk (0x01 << SDIO_IM_CMDCRCERR_Pos)
  2037. #define SDIO_IM_CMDENDERR_Pos 18
  2038. #define SDIO_IM_CMDENDERR_Msk (0x01 << SDIO_IM_CMDENDCERR_Pos)
  2039. #define SDIO_IM_CMDIDXERR_Pos 19
  2040. #define SDIO_IM_CMDIDXERR_Msk (0x01 << SDIO_IM_CMDIDXCERR_Pos)
  2041. #define SDIO_IM_DATTIMEOUT_Pos 20
  2042. #define SDIO_IM_DATTIMEOUT_Msk (0x01 << SDIO_IM_DATTIMEOUT_Pos)
  2043. #define SDIO_IM_DATCRCERR_Pos 21
  2044. #define SDIO_IM_DATCRCERR_Msk (0x01 << SDIO_IM_DATCRCERR_Pos)
  2045. #define SDIO_IM_DATENDERR_Pos 22
  2046. #define SDIO_IM_DATENDERR_Msk (0x01 << SDIO_IM_DATENDCERR_Pos)
  2047. #define SDIO_IM_CURLIMERR_Pos 23
  2048. #define SDIO_IM_CURLIMERR_Msk (0x01 << SDIO_IM_CURLIMERR_Pos)
  2049. #define SDIO_IM_CMD12ERR_Pos 24
  2050. #define SDIO_IM_CMD12ERR_Msk (0x01 << SDIO_IM_CMD12ERR_Pos)
  2051. #define SDIO_IM_DMAERR_Pos 25
  2052. #define SDIO_IM_DMAERR_Msk (0x01 << SDIO_IM_DMAERR_Pos)
  2053. #define SDIO_IM_RESPERR_Pos 28
  2054. #define SDIO_IM_RESPERR_Msk (0x01 << SDIO_IM_RESPERR_Pos)
  2055. #define SDIO_CMD12ERR_NE_Pos 0 //Auto CMD12 not Executed
  2056. #define SDIO_CMD12ERR_NE_Msk (0x01 << SDIO_CMD12ERR_NE_Pos)
  2057. #define SDIO_CMD12ERR_TO_Pos 1 //Auto CMD12 Timeout Error
  2058. #define SDIO_CMD12ERR_TO_Msk (0x01 << SDIO_CMD12ERR_TO_Pos)
  2059. #define SDIO_CMD12ERR_CRC_Pos 2 //Auto CMD12 CRC Error
  2060. #define SDIO_CMD12ERR_CRC_Msk (0x01 << SDIO_CMD12ERR_CRC_Pos)
  2061. #define SDIO_CMD12ERR_END_Pos 3 //Auto CMD12 End Bit Error
  2062. #define SDIO_CMD12ERR_END_Msk (0x01 << SDIO_CMD12ERR_END_Pos)
  2063. #define SDIO_CMD12ERR_INDEX_Pos 4 //Auto CMD12 Index Error
  2064. #define SDIO_CMD12ERR_INDEX_Msk (0x01 << SDIO_CMD12ERR_INDEX_Pos)
  2065. typedef struct {
  2066. __IO uint32_t IF; //[0] 数据传输结束时置位,写1清零
  2067. __IO uint32_t IE;
  2068. uint32_t RESERVED;
  2069. __IO uint32_t START;
  2070. __IO uint32_t RESERVED2;
  2071. __IO uint32_t CR;
  2072. __IO uint32_t CRH;
  2073. __IO uint32_t CRV;
  2074. uint32_t RESERVED3;
  2075. __IO uint32_t BGC; //Background color
  2076. uint32_t RESERVED4[6];
  2077. struct {
  2078. __IO uint32_t LCR; //Layer Control Register
  2079. __IO uint32_t WHP; //Window Horizon Position
  2080. __IO uint32_t WVP; //Window Vertical Position
  2081. __IO uint32_t ADDR; //display data Address
  2082. __IO uint32_t LLEN; //display data Line Length
  2083. __IO uint32_t CK; //Color Key
  2084. uint32_t RESERVED5[10];
  2085. } L[2]; //Layer
  2086. uint32_t RESERVED5[16];
  2087. __IO uint32_t MPUCR;
  2088. __IO uint32_t MPUIR;
  2089. __IO uint32_t MPUDR;
  2090. __IO uint32_t MPUAR;
  2091. __IO uint32_t MPULEN;
  2092. } LCD_TypeDef;
  2093. #define LCD_START_GO_Pos 1 //写1开始传输数据,数据传输结束后自动清零
  2094. #define LCD_START_GO_Msk (0x01 << LCD_START_GO_Pos)
  2095. #define LCD_CR_CLKDIV_Pos 0 //DOTCLK相对于模块时钟的分频比,0表示2分频,1表示3分频 ...
  2096. #define LCD_CR_CLKDIV_Msk (0x3F << LCD_CR_CLKDIV_Pos)
  2097. #define LCD_CR_CLKINV_Pos 6 //1 输出DOTCLK反向,用于DOTCLK下降沿采样数据的屏
  2098. #define LCD_CR_CLKINV_Msk (0x01 << LCD_CR_CLKINV_Pos)
  2099. #define LCD_CR_CLKALW_Pos 7 //DOTCLK Always,1 DOTCLK一直翻转 0 DOTCLK在空闲时停在1
  2100. #define LCD_CR_CLKALW_Msk (0x01 << LCD_CR_CLKALW_Pos)
  2101. #define LCD_CR_BURSTEN_Pos 8 //Burst Enable,0 只进行SINGLE读 1 优先Burst读
  2102. #define LCD_CR_BURSTEN_Msk (0x01 << LCD_CR_BURSTEN_Pos)
  2103. #define LCD_CR_BURSTLEN_Pos 9 //Burst Length,0 Burst INCR4 1 Burst INCR8
  2104. #define LCD_CR_BURSTLEN_Msk (0x01 << LCD_CR_BURSTLEN_Pos)
  2105. #define LCD_CR_AUTORESTA_Pos 13 //Auto Restart,1 刷新完一帧后自动重启刷新
  2106. #define LCD_CR_AUTORESTA_Msk (0x01 << LCD_CR_AUTORESTA_Pos)
  2107. #define LCD_CR_IMMRELOAD_Pos 14 //Immediate Reload,立即将层配置寄存器的值加载到层工作寄存器
  2108. #define LCD_CR_IMMRELOAD_Msk (0x01 << LCD_CR_IMMRELOAD_Pos)
  2109. #define LCD_CR_VBPRELOAD_Pos 15 //VBP Period Relaod
  2110. #define LCD_CR_VBPRELOAD_Msk (0x01 << LCD_CR_VBPRELOAD_Pos)
  2111. #define LCD_CR_FORMAT_Pos 16 //0 RGB565 1 RGB888
  2112. #define LCD_CR_FORMAT_Msk (0x01 << LCD_CR_FORMAT_Pos)
  2113. #define LCD_CR_SEREN_Pos 17 //Serial RGB Enable
  2114. #define LCD_CR_SEREN_Msk (0x01 << LCD_CR_SEREN_Pos)
  2115. #define LCD_CR_MPUEN_Pos 18 //MPU Interface Enable
  2116. #define LCD_CR_MPUEN_Msk (0x01 << LCD_CR_MPUEN_Pos)
  2117. #define LCD_CR_VSYNCINV_Pos 19 //1 VSYNC反相输出
  2118. #define LCD_CR_VSYNCINV_Msk (0x01 << LCD_CR_VSYNCINV_Pos)
  2119. #define LCD_CR_HSYNCINV_Pos 20 //1 HSYNC反相输出
  2120. #define LCD_CR_HSYNCINV_Msk (0x01 << LCD_CR_HSYNCINV_Pos)
  2121. #define LCD_CRH_HSW_Pos 0 //Hsync Width, 输出HSYNC低电平持续多少个DOTCLK周期,0表示1个周期
  2122. #define LCD_CRH_HSW_Msk (0xFF << LCD_CRH_HSW_Pos)
  2123. #define LCD_CRH_HBP_Pos 8 //0表示1个DOTCLK周期
  2124. #define LCD_CRH_HBP_Msk (0xFF << LCD_CRH_HBP_Pos)
  2125. #define LCD_CRH_PIX_Pos 16 //水平方向的像素个数,0表示1个,最大为1023
  2126. #define LCD_CRH_PIX_Msk (0x3FF<< LCD_CRH_PIX_Pos)
  2127. #define LCD_CRH_HFP_Pos 26 //0表示1个DOTCLK周期
  2128. #define LCD_CRH_HFP_Msk (0x3Fu<< LCD_CRH_HFP_Pos)
  2129. #define LCD_CRV_VSW_Pos 0 //Vsync Width,输出VSYNC低电平持续多少个行周期,0表示1个周期
  2130. #define LCD_CRV_VSW_Msk (0xFF << LCD_CRV_VSW_Pos)
  2131. #define LCD_CRV_VBP_Pos 8 //0表示1个水平行周期
  2132. #define LCD_CRV_VBP_Msk (0xFF << LCD_CRV_VBP_Pos)
  2133. #define LCD_CRV_PIX_Pos 16 //垂直方向的像素个数,0表示1个,最大为1023
  2134. #define LCD_CRV_PIX_Msk (0x3FF<< LCD_CRV_PIX_Pos)
  2135. #define LCD_CRV_VFP_Pos 26 //0表示1个水平行周期
  2136. #define LCD_CRV_VFP_Msk (0x3Fu<< LCD_CRV_VFP_Pos)
  2137. #define LCD_LCR_ALPHA_Pos 0 //Blend时该层的Alpha值
  2138. #define LCD_LCR_ALPHA_Msk (0xFF << LCD_LCR_ALPHA_Pos)
  2139. #define LCD_LCR_EN_Pos 8 //Layer Enable
  2140. #define LCD_LCR_EN_Msk (0x01 << LCD_LCR_EN_Pos)
  2141. #define LCD_LCR_CKEN_Pos 9 //Layer Color Key Enable
  2142. #define LCD_LCR_CKEN_Msk (0x01 << LCD_LCR_CKEN_Pos)
  2143. #define LCD_WHP_STA_Pos 0 //Layer Window 水平起始点
  2144. #define LCD_WHP_STA_Msk (0x3FF<< LCD_WHP_STA_Pos)
  2145. #define LCD_WHP_STP_Pos 16 //Layer Window 水平结束点
  2146. #define LCD_WHP_STP_Msk (0x3FF<< LCD_WHP_STP_Pos)
  2147. #define LCD_WVP_STA_Pos 0 //Layer Window 竖直起始点
  2148. #define LCD_WVP_STA_Msk (0x3FF<< LCD_WVP_STA_Pos)
  2149. #define LCD_WVP_STP_Pos 16 //Layer Window 竖直结束点
  2150. #define LCD_WVP_STP_Msk (0x3FF<< LCD_WVP_STP_Pos)
  2151. #define LCD_MPUCR_RCS1_0_Pos 0 //读操作时,CS上升沿到下降沿时间间隔,0 1个时钟中期
  2152. #define LCD_MPUCR_RCS1_0_Msk (0x1F << LCD_MPUCR_RCS1_0_Pos)
  2153. #define LCD_MPUCR_RDHOLD_Pos 5 //RD低电平保持时间
  2154. #define LCD_MPUCR_RDHOLD_Msk (0x1F << LCD_MPUCR_RDHOLD_Pos)
  2155. #define LCD_MPUCR_WCS1_0_Pos 10 //写操作时,CS上升沿到下降沿时间间隔
  2156. #define LCD_MPUCR_WCS1_0_Msk (0x0F << LCD_MPUCR_WCS1_0_Pos)
  2157. #define LCD_MPUCR_WR1CS1_Pos 14 //WR上升沿到CS上升沿延时
  2158. #define LCD_MPUCR_WR1CS1_Msk (0x03 << LCD_MPUCR_WR1CS1_Pos)
  2159. #define LCD_MPUCR_WRHOLD_Pos 16 //WR低电平保持时间
  2160. #define LCD_MPUCR_WRHOLD_Msk (0x0F << LCD_MPUCR_WRHOLD_Pos)
  2161. #define LCD_MPUCR_CS0WR0_Pos 20 //CS下降沿到WR下降沿延时
  2162. #define LCD_MPUCR_CS0WR0_Msk (0x03 << LCD_MPUCR_CS0WR0_Pos)
  2163. #define LCD_MPULEN_VPIX_Pos 0 //行数,0表示1行
  2164. #define LCD_MPULEN_VPIX_Msk (0x3FF<< LCD_MPULEN_VPIX_Pos)
  2165. #define LCD_MPULEN_HPIX_Pos 16 //每行像素数,0表示1个像素,只能赋奇数值,保证偶数个像素
  2166. #define LCD_MPULEN_HPIX_Msk (0x3FF<< LCD_MPULEN_HPIX_Pos)
  2167. typedef struct {
  2168. __IO uint32_t IF;
  2169. __IO uint32_t IE;
  2170. __IO uint32_t CR;
  2171. uint32_t RESERVED;
  2172. struct {
  2173. __IO uint32_t MAR; //Memory Address Register,word对齐(低两位固定为0)
  2174. __IO uint32_t OR; //Offset Register, added at the end of each line to determine the starting address of the next line
  2175. __IO uint32_t PFCCR; //Pixel Format Converter Control Register
  2176. __IO uint32_t COLOR;
  2177. } L[3]; //Layer: 0 Foreground 1 Background 2 Output
  2178. __IO uint32_t NLR; //Number of Line Register
  2179. } DMA2D_TypeDef;
  2180. #define DMA2D_IF_DONE_Pos 1 //传输完成,写1清零
  2181. #define DMA2D_IF_DONE_Msk (0x01 << DMA2D_IF_DONE_Pos)
  2182. #define DMA2D_IE_DONE_Pos 1
  2183. #define DMA2D_IE_DONE_Msk (0x01 << DMA2D_IE_DONE_Pos)
  2184. #define DMA2D_CR_START_Pos 0 //开始传输
  2185. #define DMA2D_CR_START_Msk (0x01 << DMA2D_CR_START_Pos)
  2186. #define DMA2D_CR_MODE_Pos 8 //0 存储器到存储器 1 存储器到存储器并执行PFC 2 存储器到存储器并执行混合 3 寄存器到存储器(仅输出阶段激合)
  2187. #define DMA2D_CR_MODE_Msk (0x03 << DMA2D_CR_MODE_Pos)
  2188. #define DMA2D_CR_WAIT_Pos 22 //每传输一块数据(64个字),等待指定个系统周期后再传输下一个块,防止DMA2D占用过多SDRAM带宽,影响LCD读取显示数据
  2189. #define DMA2D_CR_WAIT_Msk (0x3FFu<<DMA2D_CR_WAIT_Pos)
  2190. #define DMA2D_PFCCR_CFMT_Pos 0 //Color Format, 0 ARGB8888 1 RGB8888 2 RGB565
  2191. #define DMA2D_PFCCR_CFMT_Msk (0x07 << DMA2D_CFMT_FORMAT_Pos)
  2192. #define DMA2D_PFCCR_AINV_Pos 3 //Alpha Invert
  2193. #define DMA2D_PFCCR_AINV_Msk (0x01 << DMA2D_PFCCR_AINV_Pos)
  2194. #define DMA2D_PFCCR_RBSWAP_Pos 4 //RB Swap, 0 RGB 1 BGR
  2195. #define DMA2D_PFCCR_RBSWAP_Msk (0x01 << DMA2D_PFCCR_RBSWAP_Pos)
  2196. #define DMA2D_PFCCR_AMODE_Pos 8 //Alpha Mode, 0 使用像素点自带Alpha值 1 使用PFCCR.ALPHA值 2 使用像素点自带Alpha值与PFCCR.ALPHA值的乘积
  2197. #define DMA2D_PFCCR_AMODE_Msk (0x03 << DMA2D_PFCCR_AMODE_Pos)
  2198. #define DMA2D_PFCCR_ALPHA_Pos 24
  2199. #define DMA2D_PFCCR_ALPHA_Msk (0xFFu<< DMA2D_PFCCR_ALPHA_Pos)
  2200. #define DMA2D_NLR_NLINE_Pos 0 //Number of Line
  2201. #define DMA2D_NLR_NLINE_Msk (0xFFFF<<DMA2D_NLR_NLINE_Pos)
  2202. #define DMA2D_NLR_NPIXEL_Pos 16 //Number of Pixel per line
  2203. #define DMA2D_NLR_NPIXEL_Msk (0x3FFF<<DMA2D_NLR_NPIXEL_Pos)
  2204. typedef struct {
  2205. __IO uint32_t TIM; //SDRAM时序配置
  2206. __IO uint32_t CFG;
  2207. __IO uint32_t T64; //64ms刷新周期配置
  2208. __IO uint32_t CR;
  2209. __IO uint32_t SR; //0 Idle 1 Init 2 Self-refresh 4 Operating 5 Auto-refresh
  2210. } SDRAMC_TypeDef;
  2211. #define SDRAMC_TIM_TRCD_Pos 0 //Row to column delay, Ie. Activate to Command delay
  2212. #define SDRAMC_TIM_TRCD_Msk (0x03 << SDRAMC_TIM_TRCD_Pos)
  2213. #define SDRAMC_TIM_TRC_Pos 2 //Activate to Activate on same bank
  2214. #define SDRAMC_TIM_TRC_Msk (0x0F << SDRAMC_TIM_TRC_Pos)
  2215. #define SDRAMC_TIM_TRP_Pos 6 //Row precharge time, Ie. Precharge to Activate delay
  2216. #define SDRAMC_TIM_TRP_Msk (0x03 << SDRAMC_TIM_TRP_Pos)
  2217. #define SDRAMC_TIM_T100US_Pos 8
  2218. #define SDRAMC_TIM_T100US_Msk (0x7FFF<<SDRAMC_TIM_T100US_Pos)
  2219. #define SDRAMC_CFG_CLKDIV_Pos 0 //0 SYSCLK/1 1 SYSCLK/2
  2220. #define SDRAMC_CFG_CLKDIV_Msk (0x01 << SDRAMC_CFG_CLKDIV_Pos)
  2221. #define SDRAMC_CFG_CASDELAY_Pos 1 //CAS Latency, 0 2 1 3
  2222. #define SDRAMC_CFG_CASDELAY_Msk (0x01 << SDRAMC_CFG_CASDELAY_Pos)
  2223. #define SDRAMC_CFG_HIGHFREQ_Pos 2 //SDRAM工作时钟是否大于66MHz
  2224. #define SDRAMC_CFG_HIGHFREQ_Msk (0x01 << SDRAMC_CFG_HIGHFREQ_Pos)
  2225. #define SDRAMC_CFG_SIZE_Pos 3 //0 8MB 1 16MB 2 32MB
  2226. #define SDRAMC_CFG_SIZE_Msk (0x03 << SDRAMC_CFG_SIZE_Pos)
  2227. #define SDRAMC_CR_ENTERSRF_Pos 0 //Enter Self-refresh
  2228. #define SDRAMC_CR_ENTERSRF_Msk (0x01 << SDRAMC_CR_ENTERSRF_Pos)
  2229. #define SDRAMC_CR_PWRON_Pos 1 //置位开始初始化流程,完成初始化自动清零
  2230. #define SDRAMC_CR_PWRON_Msk (0x01 << SDRAMC_CR_PWRON_Pos)
  2231. typedef struct {
  2232. __IO uint32_t CMD;
  2233. __IO uint32_t INPUT; //CORDIC计算输入数据,计算SIN和COS时,表示待计算的弧度
  2234. //计算ARCTAN时,为防止溢出,需要将待计算数处理后再写入INPUT寄存器:
  2235. //待计算数 ∈ (0.05, 0.5]时,将待计算数乘以2后写入INPUT
  2236. //待计算数 ∈ (0.5, 2]时, 将待计算数直接写入INPUT
  2237. //待计算数 > 2时, 将待计算数除以2后写入INPUT
  2238. __IO uint32_t COS; //COS计算结果
  2239. __IO uint32_t SIN; //SIN计算结果
  2240. __IO uint32_t ARCTAN; //ARCTAN计算结果
  2241. __IO uint32_t IF;
  2242. __IO uint32_t IE;
  2243. __IO uint32_t TANH; //写启动TANH计算,写完再读,返回计算结果
  2244. } CORDIC_TypeDef;
  2245. #define CORDIC_CMD_START_Pos 0 //写1启动运算,运算完成后自动清零
  2246. #define CORDIC_CMD_START_Msk (0x01 << CORDIC_CMD_START_Pos)
  2247. #define CORDIC_CMD_RANGE_Pos 1 //计算ARCTAN时输入数值的范围 0 (0.05, 0.5] 1 (0.5, 2] 2 >2
  2248. #define CORDIC_CMD_RANGE_Msk (0x03 << CORDIC_CMD_RANGE_Pos)
  2249. #define CORDIC_CMD_SINCOS_Pos 3 //1 计算SIN和COS 0 计算ARCTAN
  2250. #define CORDIC_CMD_SINCOS_Msk (0x01 << CORDIC_CMD_SINCOS_Pos)
  2251. #define CORDIC_CMD_MULDIV_Pos 4 //0 计算SIN\COS\ARCTAN,具体由SINCOS位决定 2 计算除法 3 计算乘法
  2252. #define CORDIC_CMD_MULDIV_Msk (0x03 << CORDIC_CMD_MULDIV_Pos)
  2253. #define CORDIC_INPUT_F_Pos 0 //输入数据小数部分
  2254. #define CORDIC_INPUT_F_Msk (0x3FFF << CORDIC_INPUT_F_Pos)
  2255. #define CORDIC_INPUT_I_Pos 14 //输入数据整数部分
  2256. #define CORDIC_INPUT_I_Msk (0x03 << CORDIC_INPUT_I_Pos)
  2257. #define CORDIC_INPUT_F2_Pos 16 //输入数据小数部分,乘法中的第二个参数、除法中的被除数,乘法结果存于SIN、除法结果存于ARCTAN
  2258. #define CORDIC_INPUT_F2_Msk (0x3FFF << CORDIC_INPUT_F2_Pos)
  2259. #define CORDIC_INPUT_I2_Pos 30 //输入数据整数部分,乘法中的第二个参数、除法中的被除数,乘法结果存于SIN、除法结果存于ARCTAN
  2260. #define CORDIC_INPUT_I2_Msk (0x03u<< CORDIC_INPUT_I2_Pos)
  2261. #define CORDIC_COS_F_Pos 0 //COS计算结果的小数部分
  2262. #define CORDIC_COS_F_Msk (0x3FFF << CORDIC_COS_F_Pos)
  2263. #define CORDIC_COS_I_Pos 14 //COS计算结果的整数部分
  2264. #define CORDIC_COS_I_Msk (0x03 << CORDIC_COS_I_Pos)
  2265. #define CORDIC_COS_DONE_Pos 16 //1 COS计算已完成
  2266. #define CORDIC_COS_DONE_Msk (0x01 << CORDIC_COS_DONE_Pos)
  2267. #define CORDIC_SIN_F_Pos 0 //SIN计算结果的小数部分
  2268. #define CORDIC_SIN_F_Msk (0x3FFF << CORDIC_SIN_F_Pos)
  2269. #define CORDIC_SIN_I_Pos 14 //SIN计算结果的整数部分
  2270. #define CORDIC_SIN_I_Msk (0x03 << CORDIC_SIN_I_Pos)
  2271. #define CORDIC_SIN_DONE_Pos 16 //1 SIN计算已完成
  2272. #define CORDIC_SIN_DONE_Msk (0x01 << CORDIC_SIN_DONE_Pos)
  2273. #define CORDIC_ARCTAN_F_Pos 0 //ARCTAN计算结果的小数部分
  2274. #define CORDIC_ARCTAN_F_Msk (0x3FFF << CORDIC_ARCTAN_F_Pos)
  2275. #define CORDIC_ARCTAN_I_Pos 14 //ARCTAN计算结果的整数部分
  2276. #define CORDIC_ARCTAN_I_Msk (0x03 << CORDIC_ARCTAN_I_Pos)
  2277. #define CORDIC_ARCTAN_DONE_Pos 16 //1 ARCTAN计算已完成
  2278. #define CORDIC_ARCTAN_DONE_Msk (0x01 << CORDIC_ARCTAN_DONE_Pos)
  2279. #define CORDIC_IF_DONE_Pos 0 //1 计算完成,写1清零
  2280. #define CORDIC_IF_DONE_Msk (0x01 << CORDIC_IF_DONE_Pos)
  2281. #define CORDIC_IF_ERR_Pos 1 //1 计算出错,SIN或COS结果不在[0, 1]范围内,或ARCTAN计算结果不在[0, 2]范围内时置位,写1清零
  2282. #define CORDIC_IF_ERR_Msk (0x01 << CORDIC_IF_ERR_Pos)
  2283. #define CORDIC_IE_DONE_Pos 0
  2284. #define CORDIC_IE_DONE_Msk (0x01 << CORDIC_IE_DONE_Pos)
  2285. #define CORDIC_IE_ERR_Pos 1
  2286. #define CORDIC_IE_ERR_Msk (0x01 << CORDIC_IE_ERR_Pos)
  2287. #define CORDIC_TANH_F_Pos 0 //TANH输入和计算结果的小数部分
  2288. #define CORDIC_TANH_F_Msk (0x3FFF << CORDIC_TANH_F_Pos)
  2289. #define CORDIC_TANH_I_Pos 14 //TANH输入和计算结果的整数部分
  2290. #define CORDIC_TANH_I_Msk (0x03 << CORDIC_TANH_I_Pos)
  2291. typedef struct {
  2292. __IO uint32_t CR;
  2293. __IO uint32_t SR;
  2294. uint32_t RESERVED[2];
  2295. __IO uint32_t DIVIDEND; //被除数
  2296. __IO uint32_t DIVISOR; //除数
  2297. __IO uint32_t QUO; //商
  2298. __IO uint32_t REMAIN; //余数
  2299. __IO uint32_t RADICAND; //被开方数
  2300. __IO uint32_t ROOT; //平方根,低16位为小数部分,高16位为整数部分
  2301. } DIV_TypeDef;
  2302. #define DIV_CR_DIVGO_Pos 0 //写1启动除法运算,运算完成后自动清零
  2303. #define DIV_CR_DIVGO_Msk (0x01 << DIV_CR_DIVGO_Pos)
  2304. #define DIV_CR_DIVSIGN_Pos 1 //0 有符号除法 1 无符号除法
  2305. #define DIV_CR_DIVSIGN_Msk (0x01 << DIV_CR_DIVSIGN_Pos)
  2306. #define DIV_CR_ROOTGO_Pos 8 //写1启动开平方根运算,运算完成后自动清零
  2307. #define DIV_CR_ROOTGO_Msk (0x01 << DIV_CR_ROOTGO_Pos)
  2308. #define DIV_CR_ROOTMOD_Pos 9 //开平方根模式:0 结果为整数 1 结果既有整数部分又有小数部分
  2309. #define DIV_CR_ROOTMOD_Msk (0x01 << DIV_CR_ROOTMOD_Pos)
  2310. #define DIV_SR_DIVEND_Pos 0 //除法运算完成标志,写1清零
  2311. #define DIV_SR_DIVEND_Msk (0x01 << DIV_SR_DIVEND_Pos)
  2312. #define DIV_SR_DIVBUSY_Pos 1 //1 除法运算计算中
  2313. #define DIV_SR_DIVBUSY_Msk (0x01 << DIV_SR_DIVBUSY_Pos)
  2314. #define DIV_SR_ROOTENDI_Pos 8 //开方整数运算完成标志,写1清零
  2315. #define DIV_SR_ROOTENDI_Msk (0x01 << DIV_SR_ROOTENDI_Pos)
  2316. #define DIV_SR_ROOTENDF_Pos 9 //开方小数运算完成标志,写1清零
  2317. #define DIV_SR_ROOTENDF_Msk (0x01 << DIV_SR_ROOTENDF_Pos)
  2318. #define DIV_SR_ROOTBUSY_Pos 10 //1 开方运算计算中
  2319. #define DIV_SR_ROOTBUSY_Msk (0x01 << DIV_SR_ROOTBUSY_Pos)
  2320. typedef struct {
  2321. __IO uint32_t DATA;
  2322. __IO uint32_t ADDR;
  2323. __IO uint32_t ERASE;
  2324. __IO uint32_t CACHE;
  2325. __IO uint32_t CFG0;
  2326. __IO uint32_t CFG1;
  2327. __IO uint32_t CFG2;
  2328. __IO uint32_t CFG3;
  2329. __IO uint32_t CFG4;
  2330. __IO uint32_t STAT;
  2331. } FMC_TypeDef;
  2332. #define FMC_ERASE_ADDR_Pos 0 //4K每页
  2333. #define FMC_ERASE_ADDR_Msk (0x7FFFF << FMC_ERASE_ADDR_Pos)
  2334. #define FMC_ERASE_REQ_Pos 27
  2335. #define FMC_ERASE_REQ_Msk (0x1Fu<< FMC_ERASE_REQ_Pos)
  2336. #define FMC_CACHE_PROGEN_Pos 0 //Flash Program Enable
  2337. #define FMC_CACHE_PROGEN_Msk (0x01 << FMC_CACHE_PROGEN_Pos)
  2338. #define FMC_CACHE_CEN_Pos 16 //Cache Enable
  2339. #define FMC_CACHE_CEN_Msk (0x01 << FMC_CACHE_CEN_Pos)
  2340. #define FMC_CACHE_CPEN_Pos 17 //Cache Predict Enable
  2341. #define FMC_CACHE_CPEN_Msk (0x01 << FMC_CACHE_CPEN_Pos)
  2342. #define FMC_CACHE_CCLR_Pos 18 //Cache Clear,自动清零
  2343. #define FMC_CACHE_CCLR_Msk (0x01 << FMC_CACHE_CCLR_Pos)
  2344. #define FMC_STAT_ERASEBUSY_Pos 0
  2345. #define FMC_STAT_ERASEBUSY_Msk (0x01 << FMC_STAT_ERASEBUSY_Pos)
  2346. #define FMC_STAT_PROGBUSY_Pos 1
  2347. #define FMC_STAT_PROGBUSY_Msk (0x01 << FMC_STAT_PROGBUSY_Pos)
  2348. #define FMC_STAT_READBUSY_Pos 2
  2349. #define FMC_STAT_READBUSY_Msk (0x01 << FMC_STAT_READBUSY_Pos)
  2350. #define FMC_STAT_FIFOEMPTY_Pos 3 //Write FIFO Empty
  2351. #define FMC_STAT_FIFOEMPTY_Msk (0x01 << FMC_STAT_FIFOEMPTY_Pos)
  2352. #define FMC_STAT_FIFOFULL_Pos 4 //Write FIFO Full
  2353. #define FMC_STAT_FIFOFULL_Msk (0x01 << FMC_STAT_FIFOFULL_Pos)
  2354. #define FMC_STAT_IDLE_Pos 31
  2355. #define FMC_STAT_IDLE_Msk (0x01u<< FMC_STAT_IDLE_Pos)
  2356. typedef struct {
  2357. __IO uint32_t CFG;
  2358. __IO uint32_t TIM;
  2359. __I uint32_t SR;
  2360. __IO uint32_t IF;
  2361. __IO uint32_t IE;
  2362. __IO uint32_t GO; //写1开始执行
  2363. __IO uint32_t ADDR;
  2364. __IO uint32_t DATA;
  2365. __IO uint32_t CMDAHB; //通过AHB总线读写Flash时使用的命令码
  2366. __IO uint32_t CMD; //通过寄存器 读写Flash时使用的命令码
  2367. } SFC_TypeDef; //Serial Flash Controller
  2368. #define SFC_CFG_CMDTYPE_Pos 0 //0 无地址、无数据、无WIP,用于写使能、写禁止
  2369. //1 无地址、有数据(读1字节)、无WIP,用于读状态寄存器高8位、读状态寄存器低8位
  2370. //2 无地址、有数据(读3字节)、无WIP,用于读Identification
  2371. //3 有地址、有数据(读2字节)、无WIP,用于读MID、读DID
  2372. //4 无地址、无数据、有WIP
  2373. //5 无地址、无数据、有WIP(自动写使能),用于片擦
  2374. //6 无地址、有数据(写2字节)、有WIP(自动写使能),用于写16位状态寄存器
  2375. //7 有地址、无数据、有WIP(自动写使能),用于扇区擦
  2376. #define SFC_CFG_CMDTYPE_Msk (0x0F << SFC_CFG_CMDTYPE_Pos)
  2377. #define SFC_CFG_CMDWREN_Pos 5 //SFC->CMD寄存器写使能,使能后可将命令码写入CMD寄存器
  2378. #define SFC_CFG_CMDWREN_Msk (0x01 << SFC_CFG_CMDWREN_Pos)
  2379. #define SFC_CFG_CLKDIV_Pos 6 //时钟分频:0 1分频 1 2分频 2 4分频 3 8分频
  2380. #define SFC_CFG_CLKDIV_Msk (0x03 << SFC_CFG_CLKDIV_Pos)
  2381. #define SFC_CFG_ADDR4L_Pos 8 //编程操作的地址阶段使用4条数据线
  2382. #define SFC_CFG_ADDR4L_Msk (0x01 << SFC_CFG_ADDR4L_Pos)
  2383. #define SFC_CFG_DATA4L_PP_Pos 9 //编程操作的数据阶段使用4条数据线
  2384. #define SFC_CFG_DATA4L_PP_Msk (0x01 << SFC_CFG_DATA4L_PP_Pos)
  2385. #define SFC_CFG_DATA4L_RD_Pos 10 //读取操作的地址阶段和数据阶段使用:0 1条数据线 1 2条数据线 2 4条数据线
  2386. #define SFC_CFG_DATA4L_RD_Msk (0x03 << SFC_CFG_DATA4L_RD_Pos)
  2387. #define SFC_CFG_WREN_Pos 12 //Flash写使能
  2388. #define SFC_CFG_WREN_Msk (0x01 << SFC_CFG_WREN_Pos)
  2389. #define SFC_TIM_WIP_CHK_ITV_Pos 0 //硬件自动查询WIP时间间隔
  2390. #define SFC_TIM_WIP_CHK_ITV_Msk (0xFF << SFC_TIM_WIP_CHK_ITV_Pos)
  2391. #define SFC_TIM_WIP_CHK_LMT_Pos 8 //硬件自动查询WIP次数限值
  2392. #define SFC_TIM_WIP_CHK_LMT_Msk (0xFF << SFC_TIM_WIP_CHK_LMT_Pos)
  2393. #define SFC_TIM_IDLETO_Pos 16 //空闲超时,超时后释放CS
  2394. #define SFC_TIM_IDLETO_Msk (0x3F << SFC_TIM_IDLETO_Pos)
  2395. #define SFC_TIM_CSHIGH_Pos 22 //CS拉高时间:0 1个SCLK时钟周期 1 2个 2 3个 3 4个
  2396. #define SFC_TIM_CSHIGH_Msk (0x03 << SFC_TIM_CSHIGH_Pos)
  2397. #define SFC_SR_BUSY_Pos 0
  2398. #define SFC_SR_BUSY_Msk (0x01 << SFC_SR_BUSY_Pos)
  2399. #define SFC_SR_FIFOLVL_Pos 24 //FIFO Level
  2400. #define SFC_SR_FIFOLVL_Msk (0x07 << SFC_SR_FIFOLVL_Pos)
  2401. #define SFC_SR_FIFOEMPTY_Pos 27 //FIFO Empty
  2402. #define SFC_SR_FIFOEMPTY_Msk (0x01 << SFC_SR_FIFOEMPTY_Pos)
  2403. #define SFC_SR_FIFOHFULL_Pos 28 //FIFO Half Full
  2404. #define SFC_SR_FIFOHFULL_Msk (0x01 << SFC_SR_FIFOHFULL_Pos)
  2405. #define SFC_SR_FIFOFULL_Pos 29 //FIFO Full
  2406. #define SFC_SR_FIFOFULL_Msk (0x01 << SFC_SR_FIFOFULL_Pos)
  2407. #define SFC_SR_FIFOOVF_Pos 30 //FIFO Overflow
  2408. #define SFC_SR_FIFOOVF_Msk (0x01 << SFC_SR_FIFOOVF_Pos)
  2409. #define SFC_SR_FIFOUVF_Pos 31 //FIFO Underflow
  2410. #define SFC_SR_FIFOUVF_Msk (0x01u<< SFC_SR_FIFOUVF_Pos)
  2411. #define SFC_IF_OVER_Pos 0 //操作结束,写1清零
  2412. #define SFC_IF_OVER_Msk (0x01 << SFC_IF_OVER_Pos)
  2413. #define SFC_IF_ERR_Pos 1 //Error
  2414. #define SFC_IF_ERR_Msk (0x01 << SFC_IF_ERR_Pos)
  2415. #define SFC_IF_TO_Pos 2 //Timeout
  2416. #define SFC_IF_TO_Msk (0x01 << SFC_IF_TO_Pos)
  2417. #define SFC_IF_FIFOEMPTY_Pos 27
  2418. #define SFC_IF_FIFOEMPTY_Msk (0x01 << SFC_IF_FIFOEMPTY_Pos)
  2419. #define SFC_IF_FIFOHFULL_Pos 28
  2420. #define SFC_IF_FIFOHFULL_Msk (0x01 << SFC_IF_FIFOHFULL_Pos)
  2421. #define SFC_IF_FIFOFULL_Pos 29
  2422. #define SFC_IF_FIFOFULL_Msk (0x01 << SFC_IF_FIFOFULL_Pos)
  2423. #define SFC_IF_FIFOOVF_Pos 30
  2424. #define SFC_IF_FIFOOVF_Msk (0x01 << SFC_IF_FIFOOVF_Pos)
  2425. #define SFC_IF_FIFOUVF_Pos 31
  2426. #define SFC_IF_FIFOUVF_Msk (0x01u<< SFC_IF_FIFOUVF_Pos)
  2427. #define SFC_IE_OVER_Pos 0 //操作结束
  2428. #define SFC_IE_OVER_Msk (0x01 << SFC_IE_OVER_Pos)
  2429. #define SFC_IE_ERR_Pos 1
  2430. #define SFC_IE_ERR_Msk (0x01 << SFC_IE_ERR_Pos)
  2431. #define SFC_IE_TO_Pos 2 //Timeout
  2432. #define SFC_IE_TO_Msk (0x01 << SFC_IE_TO_Pos)
  2433. #define SFC_IE_FIFOEMPTY_Pos 27
  2434. #define SFC_IE_FIFOEMPTY_Msk (0x01 << SFC_IE_FIFOEMPTY_Pos)
  2435. #define SFC_IE_FIFOHFULL_Pos 28
  2436. #define SFC_IE_FIFOHFULL_Msk (0x01 << SFC_IE_FIFOHFULL_Pos)
  2437. #define SFC_IE_FIFOFULL_Pos 29
  2438. #define SFC_IE_FIFOFULL_Msk (0x01 << SFC_IE_FIFOFULL_Pos)
  2439. #define SFC_IE_FIFOOVF_Pos 30
  2440. #define SFC_IE_FIFOOVF_Msk (0x01 << SFC_IE_FIFOOVF_Pos)
  2441. #define SFC_IE_FIFOUVF_Pos 31
  2442. #define SFC_IE_FIFOUVF_Msk (0x01u<< SFC_IE_FIFOUVF_Pos)
  2443. #define SFC_CMDAHB_WREN_Pos 0 //Flash命令码:写使能
  2444. #define SFC_CMDAHB_WREN_Msk (0xFF << SFC_CMDAHB_WREN_Pos)
  2445. #define SFC_CMDAHB_PP_Pos 8 //Flash命令码:页编程
  2446. #define SFC_CMDAHB_PP_Msk (0xFF << SFC_CMDAHB_PP_Pos)
  2447. #define SFC_CMDAHB_RDSRL_Pos 16 //Flash命令码:读STATUS REG低8位
  2448. #define SFC_CMDAHB_RDSRL_Msk (0xFF << SFC_CMDAHB_RDSRL_Pos)
  2449. #define SFC_CMDAHB_READ_Pos 24 //Flash命令码:读数据
  2450. #define SFC_CMDAHB_READ_Msk (0xFFu<< SFC_CMDAHB_READ_Pos)
  2451. typedef struct {
  2452. __IO uint32_t CR;
  2453. __I uint32_t SR;
  2454. __O uint32_t SWTRG; //Software trigger
  2455. __IO uint32_t DHR;
  2456. } DAC_TypeDef;
  2457. #define DAC_CR_EN_Pos 0
  2458. #define DAC_CR_EN_Msk (0x01 << DAC_CR_EN_Pos)
  2459. #define DAC_CR_DMAEN_Pos 3
  2460. #define DAC_CR_DMAEN_Msk (0x01 << DAC_CR_DMAEN_Pos)
  2461. #define DAC_CR_DHRFMT_Pos 9 //DHR Format, 0 12位数据,DHR[11:0] => DOR[11:0] 1 12位数据,DHR[15:4] => DOR[11:0] 3 8位数据,DHR[7 :0] => DOR[11:4]
  2462. #define DAC_CR_DHRFMT_Msk (0x03 << DAC_CR_DHRFMT_Pos)
  2463. #define DAC_SR_DHRFULL_Pos 0 //0 DHR not Full, can write now
  2464. #define DAC_SR_DHRFULL_Msk (0x01 << DAC_SR_DHRFULL_Pos)
  2465. typedef struct {
  2466. __IO uint32_t CR;
  2467. __O uint32_t DATAIN;
  2468. __IO uint32_t INIVAL; //CR.EN写1时,INIVAL中的值写入RESULT
  2469. __I uint32_t RESULT;
  2470. } CRC_TypeDef;
  2471. #define CRC_CR_EN_Pos 0
  2472. #define CRC_CR_EN_Msk (0x01 << CRC_CR_EN_Pos)
  2473. #define CRC_CR_IREV_Pos 1 //输入数据是否翻转,0 bit顺序不变 1 bit顺序完全翻转 2 bit顺序字节内翻转 3 仅字节顺序翻转
  2474. #define CRC_CR_IREV_Msk (0x03 << CRC_CR_IREV_Pos)
  2475. #define CRC_CR_INOT_Pos 3 //输入数据是否取反
  2476. #define CRC_CR_INOT_Msk (0x01 << CRC_CR_INOT_Pos)
  2477. #define CRC_CR_OREV_Pos 4 //输出结果是否翻转,0 bit顺序不变 1 bit顺序完全翻转 2 bit顺序字节内翻转 3 仅字节顺序翻转
  2478. #define CRC_CR_OREV_Msk (0x03 << CRC_CR_OREV_Pos)
  2479. #define CRC_CR_ONOT_Pos 6 //输出结果是否取反
  2480. #define CRC_CR_ONOT_Msk (0x01 << CRC_CR_ONOT_Pos)
  2481. #define CRC_CR_POLY_Pos 7 //多项式选择,0 x^16+x^12+x^5+1 1 x^8+x^2+x+1 2 x^16+x^15+x^2+1 3 x^32+x^26+x^23+x^22+x^16+x^12+x^11+x^10+x^8+x^7+x^5+x^4+x^2+x+1
  2482. #define CRC_CR_POLY_Msk (0x03 << CRC_CR_POLY_Pos)
  2483. #define CRC_CR_IBIT_Pos 9 //输入数据有效位数 0 32位 1 16位 2 8位
  2484. #define CRC_CR_IBIT_Msk (0x03 << CRC_CR_IBIT_Pos)
  2485. typedef struct {
  2486. __IO uint32_t MINSEC; //分秒计数
  2487. __IO uint32_t DATHUR; //日时计数
  2488. __IO uint32_t MONDAY; //月周计数
  2489. __IO uint32_t YEAR; //[11:0] 年计数,支持1901-2199
  2490. __IO uint32_t MINSECAL; //分秒闹铃设置
  2491. __IO uint32_t DAYHURAL; //周时闹铃设置
  2492. __IO uint32_t LOAD; //将设置寄存器中的值同步到RTC中,同步完成自动清零
  2493. __IO uint32_t IE;
  2494. __IO uint32_t IF; //写1清零
  2495. __IO uint32_t EN; //[0] 1 RTC使能
  2496. __IO uint32_t CFGABLE; //[0] 1 RTC可配置
  2497. __IO uint32_t TRIM; //时钟调整
  2498. __IO uint32_t TRIMM; //时钟微调整
  2499. } RTC_TypeDef;
  2500. #define RTC_LOAD_TIME_Pos 0
  2501. #define RTC_LOAD_TIME_Msk (0x01 << RTC_LOAD_TIME_Pos)
  2502. #define RTC_LOAD_ALARM_Pos 1
  2503. #define RTC_LOAD_ALARM_Msk (0x01 << RTC_LOAD_ALARM_Pos)
  2504. #define RTC_MINSEC_SEC_Pos 0 //秒计数,取值0--59
  2505. #define RTC_MINSEC_SEC_Msk (0x3F << RTC_MINSEC_SEC_Pos)
  2506. #define RTC_MINSEC_MIN_Pos 6 //分钟计数,取值0--59
  2507. #define RTC_MINSEC_MIN_Msk (0x3F << RTC_MINSEC_MIN_Pos)
  2508. #define RTC_DATHUR_HOUR_Pos 0 //小时计数,取值0--23
  2509. #define RTC_DATHUR_HOUR_Msk (0x1F << RTC_DATHUR_HOUR_Pos)
  2510. #define RTC_DATHUR_DATE_Pos 5 //date of month,取值1--31
  2511. #define RTC_DATHUR_DATE_Msk (0x1F << RTC_DATHUR_DATE_Pos)
  2512. #define RTC_MONDAY_DAY_Pos 0 //day of week,取值0--6
  2513. #define RTC_MONDAY_DAY_Msk (0x07 << RTC_MONDAY_DAY_Pos)
  2514. #define RTC_MONDAY_MON_Pos 3 //月份计数,取值1--12
  2515. #define RTC_MONDAY_MON_Msk (0x0F << RTC_MONDAY_MON_Pos)
  2516. #define RTC_MINSECAL_SEC_Pos 0 //闹钟秒设置
  2517. #define RTC_MINSECAL_SEC_Msk (0x3F << RTC_MINSECAL_SEC_Pos)
  2518. #define RTC_MINSECAL_MIN_Pos 6 //闹钟分钟设置
  2519. #define RTC_MINSECAL_MIN_Msk (0x3F << RTC_MINSECAL_MIN_Pos)
  2520. #define RTC_DAYHURAL_HOUR_Pos 0 //闹钟小时设置
  2521. #define RTC_DAYHURAL_HOUR_Msk (0x1F << RTC_DAYHURAL_HOUR_Pos)
  2522. #define RTC_DAYHURAL_SUN_Pos 5 //周日闹钟有效
  2523. #define RTC_DAYHURAL_SUN_Msk (0x01 << RTC_DAYHURAL_SUN_Pos)
  2524. #define RTC_DAYHURAL_MON_Pos 6 //周一闹钟有效
  2525. #define RTC_DAYHURAL_MON_Msk (0x01 << RTC_DAYHURAL_MON_Pos)
  2526. #define RTC_DAYHURAL_TUE_Pos 7 //周二闹钟有效
  2527. #define RTC_DAYHURAL_TUE_Msk (0x01 << RTC_DAYHURAL_TUE_Pos)
  2528. #define RTC_DAYHURAL_WED_Pos 8 //周三闹钟有效
  2529. #define RTC_DAYHURAL_WED_Msk (0x01 << RTC_DAYHURAL_WED_Pos)
  2530. #define RTC_DAYHURAL_THU_Pos 9 //周四闹钟有效
  2531. #define RTC_DAYHURAL_THU_Msk (0x01 << RTC_DAYHURAL_THU_Pos)
  2532. #define RTC_DAYHURAL_FRI_Pos 10 //周五闹钟有效
  2533. #define RTC_DAYHURAL_FRI_Msk (0x01 << RTC_DAYHURAL_FRI_Pos)
  2534. #define RTC_DAYHURAL_SAT_Pos 11 //周六闹钟有效
  2535. #define RTC_DAYHURAL_SAT_Msk (0x01 << RTC_DAYHURAL_SAT_Pos)
  2536. #define RTC_IE_SEC_Pos 0 //秒中断使能
  2537. #define RTC_IE_SEC_Msk (0x01 << RTC_IE_SEC_Pos)
  2538. #define RTC_IE_MIN_Pos 1
  2539. #define RTC_IE_MIN_Msk (0x01 << RTC_IE_MIN_Pos)
  2540. #define RTC_IE_HOUR_Pos 2
  2541. #define RTC_IE_HOUR_Msk (0x01 << RTC_IE_HOUR_Pos)
  2542. #define RTC_IE_DATE_Pos 3
  2543. #define RTC_IE_DATE_Msk (0x01 << RTC_IE_DATE_Pos)
  2544. #define RTC_IE_ALARM_Pos 4
  2545. #define RTC_IE_ALARM_Msk (0x01 << RTC_IE_ALARM_Pos)
  2546. #define RTC_IE_TRIM_Pos 5 //校准完成中断使能
  2547. #define RTC_IE_TRIM_Msk (0x01 << RTC_IE_TRIM_Pos)
  2548. #define RTC_IE_HSEC_Pos 6 //半秒中断使能
  2549. #define RTC_IE_HSEC_Msk (0x01 << RTC_IE_HSEC_Pos)
  2550. #define RTC_IE_QSEC_Pos 7 //四分之一秒中断使能
  2551. #define RTC_IE_QSEC_Msk (0x01 << RTC_IE_QSEC_Pos)
  2552. #define RTC_IF_SEC_Pos 0 //写1清零
  2553. #define RTC_IF_SEC_Msk (0x01 << RTC_IF_SEC_Pos)
  2554. #define RTC_IF_MIN_Pos 1
  2555. #define RTC_IF_MIN_Msk (0x01 << RTC_IF_MIN_Pos)
  2556. #define RTC_IF_HOUR_Pos 2
  2557. #define RTC_IF_HOUR_Msk (0x01 << RTC_IF_HOUR_Pos)
  2558. #define RTC_IF_DATE_Pos 3
  2559. #define RTC_IF_DATE_Msk (0x01 << RTC_IF_DATE_Pos)
  2560. #define RTC_IF_ALARM_Pos 4
  2561. #define RTC_IF_ALARM_Msk (0x01 << RTC_IF_ALARM_Pos)
  2562. #define RTC_IF_TRIM_Pos 5
  2563. #define RTC_IF_TRIM_Msk (0x01 << RTC_IF_TRIM_Pos)
  2564. #define RTC_IF_HSEC_Pos 6
  2565. #define RTC_IF_HSEC_Msk (0x01 << RTC_IF_HSEC_Pos)
  2566. #define RTC_IF_QSEC_Pos 7
  2567. #define RTC_IF_QSEC_Msk (0x01 << RTC_IF_QSEC_Pos)
  2568. #define RTC_TRIM_ADJ_Pos 0 //用于调整BASECNT的计数周期,默认为32768,如果DEC为1,则计数周期调整为32768-ADJ,否则调整为32768+ADJ
  2569. #define RTC_TRIM_ADJ_Msk (0xFF << RTC_TRIM_ADJ_Pos)
  2570. #define RTC_TRIM_DEC_Pos 8
  2571. #define RTC_TRIM_DEC_Msk (0x01 << RTC_TRIM_DEC_Pos)
  2572. #define RTC_TRIMM_CYCLE_Pos 0 //用于计数周期微调,如果INC为1,则第n个计数周期调整为(32768±ADJ)+1,否则调整为(32768±ADJ)-1
  2573. //cycles=0时,不进行微调整;cycles=1,则n为2;cycles=7,则n为8;以此类推
  2574. #define RTC_TRIMM_CYCLE_Msk (0x07 << RTC_TRIMM_CYCLE_Pos)
  2575. #define RTC_TRIMM_INC_Pos 3
  2576. #define RTC_TRIMM_INC_Msk (0x01 << RTC_TRIMM_INC_Pos)
  2577. typedef struct {
  2578. __IO uint32_t RSTVAL; //计数器计数到此值时产生复位
  2579. __IO uint32_t INTVAL; //计数器计数到此值时产生中断
  2580. __IO uint32_t CR;
  2581. __IO uint32_t IF; //[0] 中断标志,写1清零
  2582. __IO uint32_t FEED; //写0x55喂狗
  2583. } WDT_TypeDef;
  2584. #define WDT_CR_EN_Pos 0
  2585. #define WDT_CR_EN_Msk (0x01 << WDT_CR_EN_Pos)
  2586. #define WDT_CR_RSTEN_Pos 1
  2587. #define WDT_CR_RSTEN_Msk (0x01 << WDT_CR_RSTEN_Pos)
  2588. #define WDT_CR_INTEN_Pos 2
  2589. #define WDT_CR_INTEN_Msk (0x01 << WDT_CR_INTEN_Pos)
  2590. #define WDT_CR_WINEN_Pos 3 // 窗口功能使能
  2591. #define WDT_CR_WINEN_Msk (0x01 << WDT_CR_WINEN_Pos)
  2592. #define WDT_CR_CKDIV_Pos 8 // 时钟预分频,0 2分频 1 4分频 2 8分频 ...
  2593. #define WDT_CR_CKDIV_Msk (0x0F << WDT_CR_CKDIV_Pos)
  2594. typedef struct {
  2595. __IO uint32_t TXBUF[16][0x100]; //0x4000, 16KB
  2596. __IO uint32_t RXBUF[0x100]; //0x4400,17KB
  2597. struct {
  2598. __IO uint32_t TXCR; //Tx Control
  2599. __IO uint32_t TXSR; //Tx Status
  2600. uint32_t RESERVED;
  2601. __IO uint32_t TXTRSZ; //Tx Transfer Size,以字节为单位
  2602. } INEP[16];
  2603. struct {
  2604. __IO uint32_t RXCR; //Rx Control
  2605. uint32_t RESERVED[3];
  2606. } OUTEP[16]; //0x4600
  2607. __IO uint32_t DEVCR; //Device Control
  2608. __I uint32_t DEVSR; //Device Status
  2609. __IO uint32_t DEVIF; //Device Interrupt Flag
  2610. __IO uint32_t DEVIE; //Device Interrupt Enable
  2611. uint32_t RESERVED;
  2612. __IO uint32_t EPIE; //Endpoint Interrupt Enable
  2613. __IO uint32_t FFTHR; //FIFO Threshold
  2614. __IO uint32_t RXSR; //Rx Status
  2615. __IO uint32_t SETUPSR; //Setup Status
  2616. __IO uint32_t EPIF; //Endpoint Interrupt Flag
  2617. __IO uint32_t FRAMENR; //Frame Number
  2618. uint32_t RESERVED1[(0x4700-0x4628)/4-1];
  2619. __IO uint32_t SETUPD1;
  2620. __IO uint32_t SETUPD2;
  2621. uint32_t RESERVED2[(0x4804-0x4704)/4-1];
  2622. __IO uint32_t EPCFG[16];
  2623. } USBD_TypeDef;
  2624. #define USBD_TXCR_SNDSTALL_Pos 0 //Send Stall
  2625. #define USBD_TXCR_SNDSTALL_Msk (0x01 << USBD_TXCR_SNDSTALL_Pos)
  2626. #define USBD_TXCR_FLUSHFF_Pos 2 //Flush FIFO
  2627. #define USBD_TXCR_FLUSHFF_Msk (0x01 << USBD_TXCR_FLUSHFF_Pos)
  2628. #define USBD_TXCR_FFRDY_Pos 3 //FIFO Ready
  2629. #define USBD_TXCR_FFRDY_Msk (0x01 << USBD_TXCR_FFRDY_Pos)
  2630. #define USBD_TXSR_SUCC_Pos 0 //Success
  2631. #define USBD_TXSR_SUCC_Msk (0x01 << USBD_TXSR_SUCC_Pos)
  2632. #define USBD_TXSR_DATSNT_Pos 1 //Data Sent
  2633. #define USBD_TXSR_DATSNT_Msk (0x01 << USBD_TXSR_DATSNT_Pos)
  2634. #define USBD_TXSR_NAKSNT_Pos 3 //NAK Sent
  2635. #define USBD_TXSR_NAKSNT_Msk (0x01 << USBD_TXSR_NAKSNT_Pos)
  2636. #define USBD_RXCR_SNDSTALL_Pos 0 //Send Stall
  2637. #define USBD_RXCR_SNDSTALL_Msk (0x01 << USBD_RXCR_SNDSTALL_Pos)
  2638. #define USBD_RXCR_FLUSHFF_Pos 2 //Flush FIFO
  2639. #define USBD_RXCR_FLUSHFF_Msk (0x01 << USBD_RXCR_FLUSHFF_Pos)
  2640. #define USBD_RXCR_FFRDY_Pos 3 //FIFO Ready
  2641. #define USBD_RXCR_FFRDY_Msk (0x01 << USBD_RXCR_FFRDY_Pos)
  2642. #define USBD_DEVCR_SPEED_Pos 0 //2 LS 3 FS
  2643. #define USBD_DEVCR_SPEED_Msk (0x03 << USBD_DEVCR_SPEED_Pos)
  2644. #define USBD_DEVCR_REMOTEWKUP_Pos 2
  2645. #define USBD_DEVCR_REMOTEWKUP_Msk (0x01 << USBD_DEVCR_REMOTEWKUP_Pos)
  2646. #define USBD_DEVCR_SELFPWRD_Pos 3 //Self Powered
  2647. #define USBD_DEVCR_SELFPWRD_Msk (0x01 << USBD_DEVCR_SELFPWRD_Pos)
  2648. #define USBD_DEVCR_SYNCFRAME_Pos 4 //Sync Frame Command Support
  2649. #define USBD_DEVCR_SYNCFRAME_Msk (0x01 << USBD_DEVCR_SYNCFRAME_Pos)
  2650. #define USBD_DEVCR_CSRDONE_Pos 6 //CSR Configured Done
  2651. #define USBD_DEVCR_CSRDONE_Msk (0x01 << USBD_DEVCR_CSRDONE_Pos)
  2652. #define USBD_DEVCR_SETDESC_Pos 7 //Set Descriptor Command Support
  2653. #define USBD_DEVCR_SETDESC_Msk (0x01 << USBD_DEVCR_SETDESC_Pos)
  2654. #define USBD_DEVCR_DEVICE_Pos 8 //1 Device 0 Host
  2655. #define USBD_DEVCR_DEVICE_Msk (0x01 << USBD_DEVCR_DEVICE_Pos)
  2656. #define USBD_DEVSR_CFG_Pos 0 //value set by Set Configuration command
  2657. #define USBD_DEVSR_CFG_Msk (0x0F << USBD_DEVSR_CFG_Pos)
  2658. #define USBD_DEVSR_INTF_Pos 4 //value set by Set Interface command
  2659. #define USBD_DEVSR_INTF_Msk (0x0F << USBD_DEVSR_INTF_Pos)
  2660. #define USBD_DEVSR_ALT_Pos 8 //value set by Set Alternate command
  2661. #define USBD_DEVSR_ALT_Msk (0x0F << USBD_DEVSR_ALT_Pos)
  2662. #define USBD_DEVSR_SUSP_Pos 12 //set when Suspend condition detected on the USB
  2663. #define USBD_DEVSR_SUSP_Msk (0x01 << USBD_DEVSR_SUSP_Pos)
  2664. #define USBD_DEVSR_FRNR_Pos 21 //Frame Number of received SOF
  2665. #define USBD_DEVSR_FRNR_Msk (0x7FF<< USBD_DEVSR_FRNR_Pos)
  2666. #define USBD_DEVIF_SETCFG_Pos 0 //Set when receive Set Configuration command,写1清零
  2667. #define USBD_DEVIF_SETCFG_Msk (0x01 << USBD_DEVIF_SETCFG_Pos)
  2668. #define USBD_DEVIF_SETINTF_Pos 1 //Set when receive Set Interface command
  2669. #define USBD_DEVIF_SETINTF_Msk (0x01 << USBD_DEVIF_SETINTF_Pos)
  2670. #define USBD_DEVIF_RST_Pos 3 //Set when Reset detected on the USB
  2671. #define USBD_DEVIF_RST_Msk (0x01 << USBD_DEVIF_RST_Pos)
  2672. #define USBD_DEVIF_SUSP_Pos 4 //Set when Suspend detected on the USB
  2673. #define USBD_DEVIF_SUSP_Msk (0x01 << USBD_DEVIF_SUSP_Pos)
  2674. #define USBD_DEVIF_SOF_Pos 5 //Set when SOF received
  2675. #define USBD_DEVIF_SOF_Msk (0x01 << USBD_DEVIF_SOF_Pos)
  2676. #define USBD_DEVIF_SETUP_Pos 6 //Set when Setup received
  2677. #define USBD_DEVIF_SETUP_Msk (0x01 << USBD_DEVIF_SETUP_Pos)
  2678. #define USBD_DEVIF_OUT_Pos 7 //Set when OUT received
  2679. #define USBD_DEVIF_OUT_Msk (0x01 << USBD_DEVIF_OUT_Pos)
  2680. #define USBD_DEVIE_SETCFG_Pos 0
  2681. #define USBD_DEVIE_SETCFG_Msk (0x01 << USBD_DEVIE_SETCFG_Pos)
  2682. #define USBD_DEVIE_SETINTF_Pos 1
  2683. #define USBD_DEVIE_SETINTF_Msk (0x01 << USBD_DEVIE_SETINTF_Pos)
  2684. #define USBD_DEVIE_RST_Pos 3
  2685. #define USBD_DEVIE_RST_Msk (0x01 << USBD_DEVIE_RST_Pos)
  2686. #define USBD_DEVIE_SUSP_Pos 4
  2687. #define USBD_DEVIE_SUSP_Msk (0x01 << USBD_DEVIE_SUSP_Pos)
  2688. #define USBD_DEVIE_SOF_Pos 5
  2689. #define USBD_DEVIE_SOF_Msk (0x01 << USBD_DEVIE_SOF_Pos)
  2690. #define USBD_DEVIE_SETUP_Pos 6
  2691. #define USBD_DEVIE_SETUP_Msk (0x01 << USBD_DEVIE_SETUP_Pos)
  2692. #define USBD_DEVIE_OUT_Pos 7
  2693. #define USBD_DEVIE_OUT_Msk (0x01 << USBD_DEVIE_OUT_Pos)
  2694. #define USBD_EPIE_INEP0_Pos 0
  2695. #define USBD_EPIE_INEP0_Msk (0x01 << USBD_EPIE_INEP0_Pos)
  2696. #define USBD_EPIE_INEP1_Pos 1
  2697. #define USBD_EPIE_INEP1_Msk (0x01 << USBD_EPIE_INEP1_Pos)
  2698. #define USBD_EPIE_INEP2_Pos 2
  2699. #define USBD_EPIE_INEP2_Msk (0x01 << USBD_EPIE_INEP2_Pos)
  2700. #define USBD_EPIE_INEP3_Pos 3
  2701. #define USBD_EPIE_INEP3_Msk (0x01 << USBD_EPIE_INEP3_Pos)
  2702. #define USBD_EPIE_INEP4_Pos 4
  2703. #define USBD_EPIE_INEP4_Msk (0x01 << USBD_EPIE_INEP4_Pos)
  2704. #define USBD_EPIE_INEP5_Pos 5
  2705. #define USBD_EPIE_INEP5_Msk (0x01 << USBD_EPIE_INEP5_Pos)
  2706. #define USBD_EPIE_INEP6_Pos 6
  2707. #define USBD_EPIE_INEP6_Msk (0x01 << USBD_EPIE_INEP6_Pos)
  2708. #define USBD_EPIE_INEP7_Pos 7
  2709. #define USBD_EPIE_INEP7_Msk (0x01 << USBD_EPIE_INEP7_Pos)
  2710. #define USBD_EPIE_OUTEP0_Pos 16
  2711. #define USBD_EPIE_OUTEP0_Msk (0x01 << USBD_EPIE_OUTEP0_Pos)
  2712. #define USBD_EPIE_OUTEP1_Pos 17
  2713. #define USBD_EPIE_OUTEP1_Msk (0x01 << USBD_EPIE_OUTEP1_Pos)
  2714. #define USBD_EPIE_OUTEP2_Pos 18
  2715. #define USBD_EPIE_OUTEP2_Msk (0x01 << USBD_EPIE_OUTEP2_Pos)
  2716. #define USBD_EPIE_OUTEP3_Pos 19
  2717. #define USBD_EPIE_OUTEP3_Msk (0x01 << USBD_EPIE_OUTEP3_Pos)
  2718. #define USBD_EPIE_OUTEP4_Pos 20
  2719. #define USBD_EPIE_OUTEP4_Msk (0x01 << USBD_EPIE_OUTEP4_Pos)
  2720. #define USBD_EPIE_OUTEP5_Pos 21
  2721. #define USBD_EPIE_OUTEP5_Msk (0x01 << USBD_EPIE_OUTEP5_Pos)
  2722. #define USBD_EPIE_OUTEP6_Pos 22
  2723. #define USBD_EPIE_OUTEP6_Msk (0x01 << USBD_EPIE_OUTEP6_Pos)
  2724. #define USBD_EPIE_OUTEP7_Pos 23
  2725. #define USBD_EPIE_OUTEP7_Msk (0x01 << USBD_EPIE_OUTEP7_Pos)
  2726. #define USBD_RXSR_SUCC_Pos 0 //Success
  2727. #define USBD_RXSR_SUCC_Msk (0x01 << USBD_RXSR_SUCC_Pos)
  2728. #define USBD_RXSR_DONE_Pos 1 //1 Transfer completed
  2729. #define USBD_RXSR_DONE_Msk (0x01 << USBD_RXSR_DONE_Pos)
  2730. #define USBD_RXSR_EPNR_Pos 16 //Endpoint Number
  2731. #define USBD_RXSR_EPNR_Msk (0x0F << USBD_RXSR_EPNR_Pos)
  2732. #define USBD_RXSR_TRSZ_Pos 22 //Transfer Size in byte
  2733. #define USBD_RXSR_TRSZ_Msk (0x3FFu<<USBD_RXSR_TRSZ_Pos)
  2734. #define USBD_SETUPSR_SUCC_Pos 0 //Success
  2735. #define USBD_SETUPSR_SUCC_Msk (0x01 << USBD_SETUPSR_SUCC_Pos)
  2736. #define USBD_SETUPSR_DONE_Pos 1 //1 Transfer completed
  2737. #define USBD_SETUPSR_DONE_Msk (0x01 << USBD_SETUPSR_DONE_Pos)
  2738. #define USBD_SETUPSR_EPNR_Pos 16
  2739. #define USBD_SETUPSR_EPNR_Msk (0x0F << USBD_SETUPSR_EPNR_Pos)
  2740. #define USBD_EPIF_INEP0_Pos 0 //data sent or NAK sent
  2741. #define USBD_EPIF_INEP0_Msk (0x01 << USBD_EPIF_INEP0_Pos)
  2742. #define USBD_EPIF_INEP1_Pos 1
  2743. #define USBD_EPIF_INEP1_Msk (0x01 << USBD_EPIF_INEP1_Pos)
  2744. #define USBD_EPIF_INEP2_Pos 2
  2745. #define USBD_EPIF_INEP2_Msk (0x01 << USBD_EPIF_INEP2_Pos)
  2746. #define USBD_EPIF_INEP3_Pos 3
  2747. #define USBD_EPIF_INEP3_Msk (0x01 << USBD_EPIF_INEP3_Pos)
  2748. #define USBD_EPIF_INEP4_Pos 4
  2749. #define USBD_EPIF_INEP4_Msk (0x01 << USBD_EPIF_INEP4_Pos)
  2750. #define USBD_EPIF_INEP5_Pos 5
  2751. #define USBD_EPIF_INEP5_Msk (0x01 << USBD_EPIF_INEP5_Pos)
  2752. #define USBD_EPIF_INEP6_Pos 6
  2753. #define USBD_EPIF_INEP6_Msk (0x01 << USBD_EPIF_INEP6_Pos)
  2754. #define USBD_EPIF_INEP7_Pos 7
  2755. #define USBD_EPIF_INEP7_Msk (0x01 << USBD_EPIF_INEP7_Pos)
  2756. #define USBD_EPIF_OUTEP0_Pos 16 //data available
  2757. #define USBD_EPIF_OUTEP0_Msk (0x01 << USBD_EPIF_OUTEP0_Pos)
  2758. #define USBD_EPIF_OUTEP1_Pos 17
  2759. #define USBD_EPIF_OUTEP1_Msk (0x01 << USBD_EPIF_OUTEP1_Pos)
  2760. #define USBD_EPIF_OUTEP2_Pos 18
  2761. #define USBD_EPIF_OUTEP2_Msk (0x01 << USBD_EPIF_OUTEP2_Pos)
  2762. #define USBD_EPIF_OUTEP3_Pos 19
  2763. #define USBD_EPIF_OUTEP3_Msk (0x01 << USBD_EPIF_OUTEP3_Pos)
  2764. #define USBD_EPIF_OUTEP4_Pos 20
  2765. #define USBD_EPIF_OUTEP4_Msk (0x01 << USBD_EPIF_OUTEP4_Pos)
  2766. #define USBD_EPIF_OUTEP5_Pos 21
  2767. #define USBD_EPIF_OUTEP5_Msk (0x01 << USBD_EPIF_OUTEP5_Pos)
  2768. #define USBD_EPIF_OUTEP6_Pos 22
  2769. #define USBD_EPIF_OUTEP6_Msk (0x01 << USBD_EPIF_OUTEP6_Pos)
  2770. #define USBD_EPIF_OUTEP7_Pos 23
  2771. #define USBD_EPIF_OUTEP7_Msk (0x01 << USBD_EPIF_OUTEP7_Pos)
  2772. #define USBD_EPCFG_EPNR_Pos 0 //Endpoint Number
  2773. #define USBD_EPCFG_EPNR_Msk (0x0F << USBD_EPCFG_EPNR_Pos)
  2774. #define USBD_EPCFG_DIR_Pos 4 //Endpoint Direction,0 OUT 1 IN
  2775. #define USBD_EPCFG_DIR_Msk (0x01 << USBD_EPCFG_DIR_Pos)
  2776. #define USBD_EPCFG_TYPE_Pos 5 //Endpoint Type,0 Control 1 Isochronous 2 Bulk 3 Interrupt
  2777. #define USBD_EPCFG_TYPE_Msk (0x03 << USBD_EPCFG_TYPE_Pos)
  2778. #define USBD_EPCFG_CFG_Pos 7 //Configuration number to which this endpoint belongs
  2779. #define USBD_EPCFG_CFG_Msk (0x0F << USBD_EPCFG_CFG_Pos)
  2780. #define USBD_EPCFG_INTF_Pos 11 //Interface number to which this endpoint belongs
  2781. #define USBD_EPCFG_INTF_Msk (0x0F << USBD_EPCFG_INTF_Pos)
  2782. #define USBD_EPCFG_ALT_Pos 15 //Alternate setting to which this endpoint belongs
  2783. #define USBD_EPCFG_ALT_Msk (0x0F << USBD_EPCFG_ALT_Pos)
  2784. #define USBD_EPCFG_PKSZ_Pos 19 //Maximum packet size
  2785. #define USBD_EPCFG_PKSZ_Msk (0xFF << USBD_EPCFG_PKSZ_Pos)
  2786. typedef struct {
  2787. __IO uint32_t TXBUF[0x100];
  2788. uint32_t RESERVED1[15][0x100]; //0x4000, 16KB
  2789. __IO uint32_t RXBUF[0x100];
  2790. uint32_t RESERVED2[0x200]; //0x4C00
  2791. __IO uint32_t IF; //Interrupt Flag
  2792. __IO uint32_t IE; //Interrupt Enable
  2793. __IO uint32_t SR; //Status Register
  2794. __IO uint32_t CR; //Control Register
  2795. __IO uint32_t FFSZ; //FIFO Size
  2796. __IO uint32_t FFTHR; //FIFO Threshold
  2797. __IO uint32_t TXTRSZ; //Tx Transfer Size in byte
  2798. uint32_t RESERVED3[(0x5034-0x4C18)/4-1];
  2799. __IO uint32_t FRAMEIV; //Frame Interval, 11999 for 1ms
  2800. __IO uint32_t FRAMERM; //Frame Remaining
  2801. __IO uint32_t FRAMENR; //Frame Number
  2802. uint32_t RESERVED4[(0x5054-0x503C)/4-1];
  2803. __IO uint32_t PORTSR; //Port Status
  2804. uint32_t RESERVED5[(0x5090-0x5054)/4-1];
  2805. __IO uint32_t TOKEN;
  2806. __IO uint32_t OTGCSR; //OTG Control and Status
  2807. } USBH_TypeDef;
  2808. #define USBH_IF_RXSTAT_Pos 0 //receive a status write form device
  2809. #define USBH_IF_RXSTAT_Msk (0x01 << USBH_IF_RXSTAT_Pos)
  2810. #define USBH_IF_ABVTHR_Pos 1 //RX FIFO Above Threshold
  2811. #define USBH_IF_ABVTHR_Msk (0x01 << USBH_IF_ABVTHR_Pos)
  2812. #define USBH_IF_BLWTHR_Pos 2 //TX FIFO Below Threshold
  2813. #define USBH_IF_BLWTHR_Msk (0x01 << USBH_IF_BLWTHR_Pos)
  2814. #define USBH_IF_SOF_Pos 3 //SOF sent
  2815. #define USBH_IF_SOF_Msk (0x01 << USBH_IF_SOF_Pos)
  2816. #define USBH_IF_PORT_Pos 8 //Port status changed
  2817. #define USBH_IF_PORT_Msk (0x01 << USBH_IF_PORT_Pos)
  2818. #define USBH_IF_OTG_Pos 9 //SRP or HNP
  2819. #define USBH_IF_OTG_Msk (0x01 << USBH_IF_OTG_Pos)
  2820. #define USBH_IE_RXSTAT_Pos 0
  2821. #define USBH_IE_RXSTAT_Msk (0x01 << USBH_IE_RXSTAT_Pos)
  2822. #define USBH_IE_ABVTHR_Pos 1
  2823. #define USBH_IE_ABVTHR_Msk (0x01 << USBH_IE_ABVTHR_Pos)
  2824. #define USBH_IE_BLWTHR_Pos 2
  2825. #define USBH_IE_BLWTHR_Msk (0x01 << USBH_IE_BLWTHR_Pos)
  2826. #define USBH_IE_SOF_Pos 3
  2827. #define USBH_IE_SOF_Msk (0x01 << USBH_IE_SOF_Pos)
  2828. #define USBH_IE_PORT_Pos 8
  2829. #define USBH_IE_PORT_Msk (0x01 << USBH_IE_PORT_Pos)
  2830. #define USBH_IE_OTG_Pos 9
  2831. #define USBH_IE_OTG_Msk (0x01 << USBH_IE_OTG_Pos)
  2832. #define USBH_SR_RESP_Pos 0 //Response Code
  2833. #define USBH_SR_RESP_Msk (0x0F << USBH_SR_RESP_Pos)
  2834. #define USBH_SR_TRSZ_Pos 4 //Transfer Size in previous transaction
  2835. #define USBH_SR_TRSZ_Msk (0x3FF<< USBH_SR_TRSZ_Pos)
  2836. #define USBH_CR_FLUSHFF_Pos 0 //Flush FIFO
  2837. #define USBH_CR_FLUSHFF_Msk (0x01 << USBH_CR_FLUSHFF_Pos)
  2838. #define USBH_FFSZ_RX_Pos 0 //RX FIFO Size in word
  2839. #define USBH_FFSZ_RX_Msk (0x3FF<< USBH_FFSZ_RX_Pos)
  2840. #define USBH_FFSZ_TX_Pos 16 //TX FIFO Size in word
  2841. #define USBH_FFSZ_TX_Msk (0x3FF<< USBH_FFSZ_TX_Pos)
  2842. #define USBH_FFTHR_TX_Pos 0 //TX FIFO Threshold in word
  2843. #define USBH_FFTHR_TX_Msk (0x3FF<< USBH_FFTHR_TX_Pos)
  2844. #define USBH_FFTHR_RX_Pos 16 //RX FIFO Threshold in word
  2845. #define USBH_FFTHR_RX_Msk (0x3FF<< USBH_FFTHR_RX_Pos)
  2846. #define USBH_PORTSR_CONN_Pos 0 //Read: 1 Device connected 0 Device not connected
  2847. #define USBH_PORTSR_CONN_Msk (0x01 << USBH_PORTSR_CONN_Pos)
  2848. #define USBH_PORTSR_CLRENA_Pos 0 //Write: Clear Port Enable, 写1清除PORTSR.ENA
  2849. #define USBH_PORTSR_CLRENA_Msk (0x01 << USBH_PORTSR_CLRENA_Pos)
  2850. #define USBH_PORTSR_ENA_Pos 1 //1 Port enabled 0 Port disabled
  2851. #define USBH_PORTSR_ENA_Msk (0x01 << USBH_PORTSR_ENA_Pos)
  2852. #define USBH_PORTSR_SUSP_Pos 2 //1 Port is suspended 0 Port is not suspended
  2853. #define USBH_PORTSR_SUSP_Msk (0x01 << USBH_PORTSR_SUSP_Pos)
  2854. #define USBH_PORTSR_CLRSUSP_Pos 3 //Write: Clear Suspend Status, 写1清除PORTSR.SUSP,Initiate Resume
  2855. #define USBH_PORTSR_CLRSUSP_Msk (0x01 << USBH_PORTSR_CLRSUSP_Pos)
  2856. #define USBH_PORTSR_RESET_Pos 4 //1 Port Reset signalling active 0 Port Reset signalling not active
  2857. #define USBH_PORTSR_RESET_Msk (0x01 << USBH_PORTSR_RESET_Pos)
  2858. #define USBH_PORTSR_POWER_Pos 8 //1 Port power on 0 Port power off
  2859. #define USBH_PORTSR_POWER_Msk (0x01 << USBH_PORTSR_POWER_Pos)
  2860. #define USBH_PORTSR_SPEED_Pos 9 //Read: 1 Low-Speed device attached 0 Full-Speed device attached
  2861. #define USBH_PORTSR_SPEED_Msk (0x01 << USBH_PORTSR_SPEED_Pos)
  2862. #define USBH_PORTSR_CLRPOWER_Pos 9 //Write: Clear Port Power status, 写1清除PORTSR.POWER
  2863. #define USBH_PORTSR_CLRPOWER_Msk (0x01 << USBH_PORTSR_CLRPOWER_Pos)
  2864. #define USBH_PORTSR_CONNCHG_Pos 16 //1 PORTSR.CONN changed,写1清零
  2865. #define USBH_PORTSR_CONNCHG_Msk (0x01 << USBH_PORTSR_CONNCHG_Pos)
  2866. #define USBH_PORTSR_ENACHG_Pos 17 //1 PORTSR.ENA changed,写1清零
  2867. #define USBH_PORTSR_ENACHG_Msk (0x01 << USBH_PORTSR_ENACHG_Pos)
  2868. #define USBH_PORTSR_SUSPCHG_Pos 18 //set when a full Resume sequence is finished,写1清零
  2869. #define USBH_PORTSR_SUSPCHG_Msk (0x01 << USBH_PORTSR_SUSPCHG_Pos)
  2870. #define USBH_PORTSR_RSTCHG_Pos 20 //set at the end of the Port Reset signal,写1清零
  2871. #define USBH_PORTSR_RSTCHG_Msk (0x01 << USBH_PORTSR_RSTCHG_Pos)
  2872. #define USBH_TOKEN_ADDR_Pos 0
  2873. #define USBH_TOKEN_ADDR_Msk (0x7F << USBH_TOKEN_ADDR_Pos)
  2874. #define USBH_TOKEN_EPNR_Pos 7 //Endport Number
  2875. #define USBH_TOKEN_EPNR_Msk (0x0F << USBH_TOKEN_EPNR_Pos)
  2876. #define USBH_TOKEN_DATAX_Pos 11 //0 DATA0 1 DATA1
  2877. #define USBH_TOKEN_DATAX_Msk (0x01 << USBH_TOKEN_DATAX_Pos)
  2878. #define USBH_TOKEN_TYPE_Pos 13 //13 SETUP 1 OUT 9 IN
  2879. #define USBH_TOKEN_TYPE_Msk (0x0F << USBH_TOKEN_TYPE_Pos)
  2880. #define USBH_TOKEN_ISO_Pos 17 //1 ISO transfer 0 Non-ISO transfer
  2881. #define USBH_TOKEN_ISO_Msk (0x01 << USBH_TOKEN_ISO_Pos)
  2882. #define USBH_TOKEN_SPEED_Pos 18 //2 LS 3 FS
  2883. #define USBH_TOKEN_SPEED_Msk (0x03 << USBH_TOKEN_SPEED_Pos)
  2884. #define USBH_TOKEN_TRSZ_Pos 20 //Transfer Size in byte
  2885. #define USBH_TOKEN_TRSZ_Msk (0x3FF<< USBH_TOKEN_TRSZ_Pos)
  2886. #define USBH_OTGCSR_SRSUCC_Pos 0 //Session Request Success
  2887. #define USBH_OTGCSR_SRSUCC_Msk (0x01 << USBH_OTGCSR_SRSUCC_Pos)
  2888. #define USBH_OTGCSR_SRSCHG_Pos 1 //Session Request Status Change, set to 1 on Session Request Success, 写1清零
  2889. #define USBH_OTGCSR_SRSCHG_Msk (0x01 << USBH_OTGCSR_SRSCHG_Pos)
  2890. #define USBH_OTGCSR_HNSUCC_Pos 2 //Host Negotiation Success
  2891. #define USBH_OTGCSR_HNSUCC_Msk (0x01 << USBH_OTGCSR_HNSUCC_Pos)
  2892. #define USBH_OTGCSR_HNSCHG_Pos 3 //Host Negotiation Status Change, set to 1 on Host Negotiation Success,写1清零
  2893. #define USBH_OTGCSR_HNSCHG_Msk (0x01 << USBH_OTGCSR_HNSCHG_Pos)
  2894. #define USBH_OTGCSR_SRDET_Pos 4 //Session Request Detected
  2895. #define USBH_OTGCSR_SRDET_Msk (0x01 << USBH_OTGCSR_SRDET_Pos)
  2896. #define USBH_OTGCSR_SRDCHG_Pos 5 //Session Request Detected Change, set to 1 when a Session Request is detected,写1清零
  2897. #define USBH_OTGCSR_SRDCHG_Msk (0x01 << USBH_OTGCSR_SRDCHG_Pos)
  2898. #define USBH_OTGCSR_HNDET_Pos 6 //Host Negotiation Detected
  2899. #define USBH_OTGCSR_HNDET_Msk (0x01 << USBH_OTGCSR_HNDET_Pos)
  2900. #define USBH_OTGCSR_HNDCHG_Pos 7 //Host Negotiation Detect Change, set to 1 when a Host Negotiation is detected, 写1清零
  2901. #define USBH_OTGCSR_HNDCHG_Msk (0x01 << USBH_OTGCSR_HNDCHG_Pos)
  2902. #define USBH_OTGCSR_ID_Pos 8 //Connector ID Status, 0 in A-device mode, 1 in B-device mode
  2903. #define USBH_OTGCSR_ID_Msk (0x01 << USBH_OTGCSR_ID_Pos)
  2904. #define USBH_OTGCSR_IDCHG_Pos 9 //set when OTGCSR.ID changed, 写1清零
  2905. #define USBH_OTGCSR_IDCHG_Msk (0x01 << USBH_OTGCSR_IDCHG_Pos)
  2906. #define USBH_OTGCSR_MODE_Pos 10 //0 Host mode 1 Device mode
  2907. #define USBH_OTGCSR_MODE_Msk (0x01 << USBH_OTGCSR_MODE_Pos)
  2908. #define USBH_OTGCSR_SRPREQ_Pos 16 //SRP Request
  2909. #define USBH_OTGCSR_SRPREQ_Msk (0x01 << USBH_OTGCSR_SRPREQ_Pos)
  2910. #define USBH_OTGCSR_HNPREQ_Pos 17 //HNP Request
  2911. #define USBH_OTGCSR_HNPREQ_Msk (0x01 << USBH_OTGCSR_HNPREQ_Pos)
  2912. #define USBH_OTGCSR_HHNPENA_Pos 18 //Host HNP Enable, set by app when Set Feature Set HNP Enable is successful on connected device
  2913. #define USBH_OTGCSR_HHNPENA_Msk (0x01 << USBH_OTGCSR_HHNPENA_Pos)
  2914. #define USBH_OTGCSR_HNPENA_Pos 19 //set by app when receives Set Feature Set HNP Enable command
  2915. #define USBH_OTGCSR_HNPENA_Msk (0x01 << USBH_OTGCSR_HNPENA_Pos)
  2916. #define USBH_OTGCSR_SRPCAP_Pos 20 //SRP Capable
  2917. #define USBH_OTGCSR_SRPCAP_Msk (0x01 << USBH_OTGCSR_SRPCAP_Pos)
  2918. #define USBH_OTGCSR_HNPCAP_Pos 21 //HNP Capable
  2919. #define USBH_OTGCSR_HNPCAP_Msk (0x01 << USBH_OTGCSR_HNPCAP_Pos)
  2920. typedef struct {
  2921. __IO uint32_t CFG; //JPEG DEC configure register
  2922. __IO uint32_t CR; //JPEG DEC control register
  2923. __IO uint32_t IR; //JPEG DEC interrupt register
  2924. __IO uint32_t SR; //JPEG DEC status register
  2925. __IO uint32_t IMGSIZ; //JPEG image size
  2926. __IO uint32_t IMGSTR; //JPEG image size virtual stride
  2927. __IO uint32_t CSBASE; //JPEG code-stream base address
  2928. union {
  2929. __IO uint32_t YBASE; //YUV image Y base address
  2930. __IO uint32_t RGBASE; //RGB image base address
  2931. };
  2932. __IO uint32_t UBASE; //YUV image U base address
  2933. __IO uint32_t VBASE; //YUV image V base address
  2934. __IO uint32_t QTBASE; //JPEG quantization table base address
  2935. __IO uint32_t HTBASE; //JPEG huffman table base address
  2936. __IO uint32_t CODLEN; //JPEG code stream total length in byte
  2937. uint32_t RESERVED[51];
  2938. __O uint32_t QTABLE[3][16]; //Quantization table
  2939. uint32_t RESERVED2[16];
  2940. struct {
  2941. __O uint32_t DC_CODEWORD[6];
  2942. __O uint32_t DC_CODELEN[2];
  2943. __O uint32_t DC_CODEVAL[2];
  2944. __O uint32_t AC_CODEWORD[8];
  2945. __O uint32_t AC_CODEADDR[4];
  2946. __O uint32_t AC_CODEVAL[41];
  2947. uint32_t RESERVED;
  2948. } HTABLE[2]; //Huffman table
  2949. } JPEG_TypeDef;
  2950. #define JPEG_CFG_SRCFMT_Pos 0 //JPEG Source Format, 0 YUV420(H2V2) 1 YUV422(H2V1) 2 YUV444(H1V1)
  2951. #define JPEG_CFG_SRCFMT_Msk (0x03 << JPEG_CFG_SRCFMT_Pos)
  2952. #define JPEG_CFG_SCANMOD_Pos 2 //JPEG scan mode, 0 interleaved (three components) 1 non-interleaved (single component)
  2953. #define JPEG_CFG_SCANMOD_Msk (0x01 << JPEG_CFG_SCANMOD_Pos)
  2954. #define JPEG_CFG_NISCOMP_Pos 3 //Non-Interleaved Scanning Component, 0 component 1 1 component 2 2 component 3
  2955. #define JPEG_CFG_NISCOMP_Msk (0x03 << JPEG_CFG_NISCOMP_Pos)
  2956. #define JPEG_CFG_HT1COMP_Pos 5 //Huffman Table for Component 1, 0 table 0 1 table 1
  2957. #define JPEG_CFG_HT1COMP_Msk (0x01 << JPEG_CFG_HT1COMP_Pos)
  2958. #define JPEG_CFG_HT2COMP_Pos 6
  2959. #define JPEG_CFG_HT2COMP_Msk (0x01 << JPEG_CFG_HT2COMP_Pos)
  2960. #define JPEG_CFG_HT3COMP_Pos 7
  2961. #define JPEG_CFG_HT3COMP_Msk (0x01 << JPEG_CFG_HT3COMP_Pos)
  2962. #define JPEG_CFG_QT1COMP_Pos 8 //Quantization Table for Component 1, 0 table 0 1 table 1 2 table 2
  2963. #define JPEG_CFG_QT1COMP_Msk (0x03 << JPEG_CFG_QT1COMP_Pos)
  2964. #define JPEG_CFG_QT2COMP_Pos 10
  2965. #define JPEG_CFG_QT2COMP_Msk (0x03 << JPEG_CFG_QT2COMP_Pos)
  2966. #define JPEG_CFG_QT3COMP_Pos 12
  2967. #define JPEG_CFG_QT3COMP_Msk (0x03 << JPEG_CFG_QT3COMP_Pos)
  2968. #define JPEG_CFG_OUTFMT_Pos 14 //Image data output format, 0 YUV planar 1 YUV semi-planar 2 XRGB888 3 RGB888 4 RGB565
  2969. #define JPEG_CFG_OUTFMT_Msk (0x07 << JPEG_CFG_OUTFMT_Pos)
  2970. #define JPEG_CFG_YUV2RGB_Pos 17 //YUV2RGB translation, 0 Disable 1 Enable
  2971. #define JPEG_CFG_YUV2RGB_Msk (0x01 << JPEG_CFG_YUV2RGB_Pos)
  2972. #define JPEG_CFG_UVSWAP_Pos 18 //UV output swap, 0 YUV 1 YVU
  2973. #define JPEG_CFG_UVSWAP_Msk (0x01 << JPEG_CFG_UVSWAP_Pos)
  2974. #define JPEG_CFG_RBSWAP_Pos 19 //RB output swap, 0 RGB 1 BGR
  2975. #define JPEG_CFG_RBSWAP_Msk (0x01 << JPEG_CFG_RBSWAP_Pos)
  2976. #define JPEG_CFG_EDSWAP_Pos 20 //endian swap, 0 XRGB 1 BGRX
  2977. #define JPEG_CFG_EDSWAP_Msk (0x01 << JPEG_CFG_EDSWAP_Pos)
  2978. #define JPEG_CFG_565DITH_Pos 21 //RGB565 dithering, 0 Disable 1 Enable
  2979. #define JPEG_CFG_565DITH_Msk (0x01 << JPEG_CFG_565DITH_Pos)
  2980. #define JPEG_CR_START_Pos 0 //JPEG DEC frame start,解码完成自动清零
  2981. #define JPEG_CR_START_Msk (0x01 << JPEG_CR_START_Pos)
  2982. #define JPEG_CR_RESTART_Pos 1 //Decoder stream buffering restart
  2983. #define JPEG_CR_RESTART_Msk (0x01 << JPEG_CR_RESTART_Pos)
  2984. #define JPEG_CR_RESET_Pos 3 //JPEG DEC core reset,自动清零
  2985. #define JPEG_CR_RESET_Msk (0x01 << JPEG_CR_RESET_Pos)
  2986. #define JPEG_CR_REINTRV_Pos 4 //Restart interval marker enable
  2987. #define JPEG_CR_REINTRV_Msk (0x01 << JPEG_CR_REINTRV_Pos)
  2988. #define JPEG_CR_LASTBUF_Pos 5 //Decoder last stream buffering
  2989. #define JPEG_CR_LASTBUF_Msk (0x01 << JPEG_CR_LASTBUF_Pos)
  2990. #define JPEG_CR_QTAUTO_Pos 7 //JPEG quantization tables auto refresh enable
  2991. #define JPEG_CR_QTAUTO_Msk (0x01 << JPEG_CR_QTAUTO_Pos)
  2992. #define JPEG_CR_HTAUTO_Pos 8 //JPEG huffman tables auto refresh enable
  2993. #define JPEG_CR_HTAUTO_Msk (0x01 << JPEG_CR_HTAUTO_Pos)
  2994. #define JPEG_CR_QTCNT_Pos 9 //Number of quantization tables
  2995. #define JPEG_CR_QTCNT_Msk (0x03 << JPEG_CR_QTCNT_Pos)
  2996. #define JPEG_CR_HTCNT_Pos 11 //Number of huffman tables
  2997. #define JPEG_CR_HTCNT_Msk (0x01 << JPEG_CR_HTCNT_Pos)
  2998. #define JPEG_CR_CUCNT_Pos 12 //The number of CU in the restart interval
  2999. #define JPEG_CR_CUCNT_Msk (0xFFFF<<JPEG_CR_CUCNT_Pos)
  3000. #define JPEG_IR_IEDONE_Pos 0 //Frame processing finish interrupt enable
  3001. #define JPEG_IR_IEDONE_Msk (0x01 << JPEG_IR_IEDONE_Pos)
  3002. #define JPEG_IR_IEEMPTY_Pos 2 //JPEG decoder stream buffering empty interrupt enable
  3003. #define JPEG_IR_IEEMPTY_Msk (0x01 << JPEG_IR_IEEMPTY_Pos)
  3004. #define JPEG_IR_IEERROR_Pos 3 //JPEG error interrupt enable
  3005. #define JPEG_IR_IEERROR_Msk (0x01 << JPEG_IR_IEERROR_Pos)
  3006. #define JPEG_IR_ICDONE_Pos 5 //Interrupt Clear, write-ongly
  3007. #define JPEG_IR_ICDONE_Msk (0x01 << JPEG_IR_ICDONE_Pos)
  3008. #define JPEG_IR_ICEMPTY_Pos 7
  3009. #define JPEG_IR_ICEMPTY_Msk (0x01 << JPEG_IR_ICEMPTY_Pos)
  3010. #define JPEG_IR_ICERROR_Pos 8
  3011. #define JPEG_IR_ICERROR_Msk (0x01 << JPEG_IR_ICERROR_Pos)
  3012. #define JPEG_IR_IFDONE_Pos 10 //Interrupt Flag, read-only
  3013. #define JPEG_IR_IFDONE_Msk (0x01 << JPEG_IR_IFDONE_Pos)
  3014. #define JPEG_IR_IFEMPTY_Pos 12
  3015. #define JPEG_IR_IFEMPTY_Msk (0x01 << JPEG_IR_IFEMPTY_Pos)
  3016. #define JPEG_IR_IFERROR_Pos 13
  3017. #define JPEG_IR_IFERROR_Msk (0x01 << JPEG_IR_IFERROR_Pos)
  3018. #define JPEG_SR_BUSY_Pos 0
  3019. #define JPEG_SR_BUSY_Msk (0x01 << JPEG_SR_BUSY_Pos)
  3020. #define JPEG_SR_CUOVR_Pos 1 //JPEG CU run length overflow error
  3021. #define JPEG_SR_CUOVR_Msk (0x01 << JPEG_SR_CUOVR_Pos)
  3022. #define JPEG_SR_REIMERR_Pos 2 //JPEG Restart interval marker error
  3023. #define JPEG_SR_REIMERR_Msk (0x01 << JPEG_SR_REIMERR_Pos)
  3024. #define JPEG_SR_BUFBUSY_Pos 4 //JPEG decoder stream buffering status
  3025. #define JPEG_SR_BUFBUSY_Msk (0x01 << JPEG_SR_BUFBUSY_Pos)
  3026. #define JPEG_SR_DMARDBUSY_Pos 5
  3027. #define JPEG_SR_DMARDBUSY_Msk (0x01 << JPEG_SR_DMARDBUSY_Pos)
  3028. #define JPEG_SR_DMAWRBUSY_Pos 6
  3029. #define JPEG_SR_DMAWRBUSY_Msk (0x01 << JPEG_SR_DMAWRBUSY_Pos)
  3030. #define JPEG_IMGSIZ_HPIX_Pos 0 //JPEG image width (minus 1)
  3031. #define JPEG_IMGSIZ_HPIX_Msk (0x3FF<< JPEG_IMGSIZ_HPIX_Pos)
  3032. #define JPEG_IMGSIZ_VPIX_Pos 16 //JPEG image height (minus 1)
  3033. #define JPEG_IMGSIZ_VPIX_Msk (0x3FF<< JPEG_IMGSIZ_VPIX_Pos)
  3034. #define JPEG_IMGSTR_RGBLINE_Pos 0 //number of words of RGB line width, XRGB888: img_width RGB888: ceil(img_width*3/4) RGB565 : ceil(img_width/2)
  3035. #define JPEG_IMGSTR_RGBLINE_Msk (0x7FF<< JPEG_IMGSTR_RGBLINE_Pos)
  3036. #define JPEG_IMGSTR_YLINE_Pos 0 //number of words of Y line width, ceil(img_width/4)
  3037. #define JPEG_IMGSTR_YLINE_Msk (0x7FF<< JPEG_IMGSTR_YLINE_Pos)
  3038. #define JPEG_IMGSTR_UVLINE_Pos 16 //number of words of UV line width, UV-planer 444: ceil(img_width/4) UV-planar 420/422: ceil(img_width/8)
  3039. // UV-semi planer 444: ceil(img_width/2) UV-semi planer 420/422: ceil(img_width/4)
  3040. #define JPEG_IMGSTR_UVLINE_Msk (0x7FF<< JPEG_IMGSTR_UVLINE_Pos)
  3041. /******************************************************************************/
  3042. /* Peripheral memory map */
  3043. /******************************************************************************/
  3044. #define RAM_BASE 0x20000000
  3045. #define AHB_BASE 0x40000000
  3046. #define APB1_BASE 0x40040000
  3047. #define APB2_BASE 0x400A0000
  3048. #define SFLASH_BASE 0x70000000 //Serial Flash
  3049. #define SDRAMM_BASE 0x80000000
  3050. #define SDRAMC_BASE 0x88000000
  3051. /* AHB Peripheral memory map */
  3052. #define SYS_BASE (AHB_BASE + 0x00000)
  3053. #define DMA_BASE (AHB_BASE + 0x00800)
  3054. #define SDIO_BASE (AHB_BASE + 0x01800)
  3055. #define LCD_BASE (AHB_BASE + 0x02000)
  3056. #define CRC_BASE (AHB_BASE + 0x02800)
  3057. #define CORDIC_BASE (AHB_BASE + 0x03000)
  3058. #define DIV_BASE (AHB_BASE + 0x03800)
  3059. #define GPIOM_BASE (AHB_BASE + 0x04000)
  3060. #define GPION_BASE (AHB_BASE + 0x04800)
  3061. #define USBD_BASE (AHB_BASE + 0x05000)
  3062. #define USBH_BASE (AHB_BASE + 0x05000)
  3063. #define JPEG_BASE (AHB_BASE + 0x0B000)
  3064. #define DMA2D_BASE (AHB_BASE + 0x0C000)
  3065. /* APB Peripheral memory map */
  3066. #define GPIOA_BASE (APB1_BASE + 0x00000)
  3067. #define GPIOB_BASE (APB1_BASE + 0x00800)
  3068. #define GPIOC_BASE (APB1_BASE + 0x01000)
  3069. #define GPIOD_BASE (APB1_BASE + 0x01800)
  3070. #define UART0_BASE (APB1_BASE + 0x02000)
  3071. #define UART1_BASE (APB1_BASE + 0x02800)
  3072. #define UART2_BASE (APB1_BASE + 0x03000)
  3073. #define UART3_BASE (APB1_BASE + 0x03800)
  3074. #define SPI0_BASE (APB1_BASE + 0x04000)
  3075. #define SPI1_BASE (APB1_BASE + 0x04800)
  3076. #define PWM0_BASE (APB1_BASE + 0x06000)
  3077. #define PWM1_BASE (APB1_BASE + 0x06080)
  3078. #define PWM2_BASE (APB1_BASE + 0x06100)
  3079. #define PWM3_BASE (APB1_BASE + 0x06180)
  3080. #define PWM4_BASE (APB1_BASE + 0x06200)
  3081. #define PWMG_BASE (APB1_BASE + 0x06400)
  3082. #define TIMR0_BASE (APB1_BASE + 0x06800)
  3083. #define TIMR1_BASE (APB1_BASE + 0x06840)
  3084. #define TIMR2_BASE (APB1_BASE + 0x06880)
  3085. #define TIMR3_BASE (APB1_BASE + 0x068C0)
  3086. #define TIMR4_BASE (APB1_BASE + 0x06900)
  3087. #define TIMRG_BASE (APB1_BASE + 0x06C00)
  3088. #define BTIMR0_BASE (APB1_BASE + 0x08800)
  3089. #define BTIMR1_BASE (APB1_BASE + 0x08840)
  3090. #define BTIMR2_BASE (APB1_BASE + 0x08880)
  3091. #define BTIMR3_BASE (APB1_BASE + 0x088C0)
  3092. #define BTIMR4_BASE (APB1_BASE + 0x08900)
  3093. #define BTIMR5_BASE (APB1_BASE + 0x08940)
  3094. #define BTIMR6_BASE (APB1_BASE + 0x08980)
  3095. #define BTIMR7_BASE (APB1_BASE + 0x089C0)
  3096. #define BTIMR8_BASE (APB1_BASE + 0x08A00)
  3097. #define BTIMR9_BASE (APB1_BASE + 0x08A40)
  3098. #define BTIMR10_BASE (APB1_BASE + 0x08A80)
  3099. #define BTIMR11_BASE (APB1_BASE + 0x08AC0)
  3100. #define BTIMRG_BASE (APB1_BASE + 0x08C00)
  3101. #define ADC0_BASE (APB1_BASE + 0x09000)
  3102. #define ADC1_BASE (APB1_BASE + 0x09800)
  3103. #define FMC_BASE (APB1_BASE + 0x0A000) //Flash Memory Controller
  3104. #define SFC_BASE (APB1_BASE + 0x0A800) //Serial Flash Controller
  3105. #define RTC_BASE (APB1_BASE + 0x0B800)
  3106. #define DAC_BASE (APB1_BASE + 0x0C000)
  3107. #define QEI_BASE (APB1_BASE + 0x0C800)
  3108. #define PORTA_BASE (APB2_BASE + 0x00000)
  3109. #define PORTB_BASE (APB2_BASE + 0x00010)
  3110. #define PORTC_BASE (APB2_BASE + 0x00020)
  3111. #define PORTD_BASE (APB2_BASE + 0x00030)
  3112. #define PORTE_BASE (APB2_BASE + 0x00040)
  3113. #define PORTM_BASE (APB2_BASE + 0x00080)
  3114. #define PORTN_BASE (APB2_BASE + 0x00090)
  3115. #define WDT_BASE (APB2_BASE + 0x00800)
  3116. #define GPIOE_BASE (APB2_BASE + 0x01000)
  3117. #define I2C0_BASE (APB2_BASE + 0x06000)
  3118. #define I2C1_BASE (APB2_BASE + 0x06800)
  3119. #define CAN0_BASE (APB2_BASE + 0x08000)
  3120. #define CAN1_BASE (APB2_BASE + 0x08800)
  3121. /******************************************************************************/
  3122. /* Peripheral declaration */
  3123. /******************************************************************************/
  3124. #define SYS ((SYS_TypeDef *) SYS_BASE)
  3125. #define PORTA ((PORT_TypeDef *) PORTA_BASE)
  3126. #define PORTB ((PORT_TypeDef *) PORTB_BASE)
  3127. #define PORTC ((PORT_TypeDef *) PORTC_BASE)
  3128. #define PORTD ((PORT_TypeDef *) PORTD_BASE)
  3129. #define PORTE ((PORT_TypeDef *) PORTE_BASE)
  3130. #define PORTM ((PORT_TypeDef *) PORTM_BASE)
  3131. #define PORTN ((PORT_TypeDef *) PORTN_BASE)
  3132. #define GPIOA ((GPIO_TypeDef *) GPIOA_BASE)
  3133. #define GPIOB ((GPIO_TypeDef *) GPIOB_BASE)
  3134. #define GPIOC ((GPIO_TypeDef *) GPIOC_BASE)
  3135. #define GPIOD ((GPIO_TypeDef *) GPIOD_BASE)
  3136. #define GPIOE ((GPIO_TypeDef *) GPIOE_BASE)
  3137. #define GPIOM ((GPIO_TypeDef *) GPIOM_BASE)
  3138. #define GPION ((GPIO_TypeDef *) GPION_BASE)
  3139. #define TIMR0 ((TIMR_TypeDef *) TIMR0_BASE)
  3140. #define TIMR1 ((TIMR_TypeDef *) TIMR1_BASE)
  3141. #define TIMR2 ((TIMR_TypeDef *) TIMR2_BASE)
  3142. #define TIMR3 ((TIMR_TypeDef *) TIMR3_BASE)
  3143. #define TIMR4 ((TIMR_TypeDef *) TIMR4_BASE)
  3144. #define TIMRG ((TIMRG_TypeDef*) TIMRG_BASE)
  3145. #define BTIMR0 ((TIMR_TypeDef *) BTIMR0_BASE)
  3146. #define BTIMR1 ((TIMR_TypeDef *) BTIMR1_BASE)
  3147. #define BTIMR2 ((TIMR_TypeDef *) BTIMR2_BASE)
  3148. #define BTIMR3 ((TIMR_TypeDef *) BTIMR3_BASE)
  3149. #define BTIMR4 ((TIMR_TypeDef *) BTIMR4_BASE)
  3150. #define BTIMR5 ((TIMR_TypeDef *) BTIMR5_BASE)
  3151. #define BTIMR6 ((TIMR_TypeDef *) BTIMR6_BASE)
  3152. #define BTIMR7 ((TIMR_TypeDef *) BTIMR7_BASE)
  3153. #define BTIMR8 ((TIMR_TypeDef *) BTIMR8_BASE)
  3154. #define BTIMR9 ((TIMR_TypeDef *) BTIMR9_BASE)
  3155. #define BTIMR10 ((TIMR_TypeDef *) BTIMR10_BASE)
  3156. #define BTIMR11 ((TIMR_TypeDef *) BTIMR11_BASE)
  3157. #define BTIMRG ((TIMRG_TypeDef*) BTIMRG_BASE)
  3158. #define UART0 ((UART_TypeDef *) UART0_BASE)
  3159. #define UART1 ((UART_TypeDef *) UART1_BASE)
  3160. #define UART2 ((UART_TypeDef *) UART2_BASE)
  3161. #define UART3 ((UART_TypeDef *) UART3_BASE)
  3162. #define SPI0 ((SPI_TypeDef *) SPI0_BASE)
  3163. #define SPI1 ((SPI_TypeDef *) SPI1_BASE)
  3164. #define I2C0 ((I2C_TypeDef *) I2C0_BASE)
  3165. #define I2C1 ((I2C_TypeDef *) I2C1_BASE)
  3166. #define ADC0 ((ADC_TypeDef *) ADC0_BASE)
  3167. #define ADC1 ((ADC_TypeDef *) ADC1_BASE)
  3168. #define PWM0 ((PWM_TypeDef *) PWM0_BASE)
  3169. #define PWM1 ((PWM_TypeDef *) PWM1_BASE)
  3170. #define PWM2 ((PWM_TypeDef *) PWM2_BASE)
  3171. #define PWM3 ((PWM_TypeDef *) PWM3_BASE)
  3172. #define PWM4 ((PWM_TypeDef *) PWM4_BASE)
  3173. #define PWMG ((PWMG_TypeDef *) PWMG_BASE)
  3174. #define CAN0 ((CAN_TypeDef *) CAN0_BASE)
  3175. #define CAN1 ((CAN_TypeDef *) CAN1_BASE)
  3176. #define USBD ((USBD_TypeDef *) USBD_BASE)
  3177. #define USBH ((USBH_TypeDef *) USBH_BASE)
  3178. #define SDIO ((SDIO_TypeDef *) SDIO_BASE)
  3179. #define SDRAMC ((SDRAMC_TypeDef*)SDRAMC_BASE)
  3180. #define DMA ((DMA_TypeDef *) DMA_BASE)
  3181. #define LCD ((LCD_TypeDef *) LCD_BASE)
  3182. #define DMA2D ((DMA2D_TypeDef*) DMA2D_BASE)
  3183. #define DAC ((DAC_TypeDef *) DAC_BASE)
  3184. #define CRC ((CRC_TypeDef *) CRC_BASE)
  3185. #define CORDIC ((CORDIC_TypeDef*)CORDIC_BASE)
  3186. #define DIV ((DIV_TypeDef *) DIV_BASE)
  3187. #define RTC ((RTC_TypeDef *) RTC_BASE)
  3188. #define WDT ((WDT_TypeDef *) WDT_BASE)
  3189. #define QEI ((QEI_TypeDef *) QEI_BASE)
  3190. #define FMC ((FMC_TypeDef *) FMC_BASE)
  3191. #define SFC ((SFC_TypeDef *) SFC_BASE)
  3192. #define JPEG ((JPEG_TypeDef *) JPEG_BASE)
  3193. #include "SWM341_port.h"
  3194. #include "SWM341_gpio.h"
  3195. #include "SWM341_exti.h"
  3196. #include "SWM341_timr.h"
  3197. #include "SWM341_uart.h"
  3198. #include "SWM341_spi.h"
  3199. #include "SWM341_i2c.h"
  3200. #include "SWM341_adc.h"
  3201. #include "SWM341_pwm.h"
  3202. #include "SWM341_dma.h"
  3203. #include "SWM341_can.h"
  3204. #include "SWM341_sdio.h"
  3205. #include "SWM341_sdram.h"
  3206. #include "SWM341_flash.h"
  3207. #include "SWM341_lcd.h"
  3208. #include "SWM341_sfc.h"
  3209. #include "SWM341_dac.h"
  3210. #include "SWM341_cordic.h"
  3211. #include "SWM341_crc.h"
  3212. #include "SWM341_div.h"
  3213. #include "SWM341_rtc.h"
  3214. #include "SWM341_wdt.h"
  3215. #include "SWM341_qei.h"
  3216. #include "SWM341_usb.h"
  3217. #include "SWM341_usbd.h"
  3218. #include "SWM341_usbh.h"
  3219. #include "SWM341_jpeg.h"
  3220. #include "SWM341_dma2d.h"
  3221. #include "SWM341_iofilt.h"
  3222. #ifdef SW_LOG_RTT
  3223. #define log_printf(...) SEGGER_RTT_printf(0, __VA_ARGS__)
  3224. #else
  3225. #define log_printf(...) printf(__VA_ARGS__)
  3226. #endif
  3227. #ifndef SW_LOG_LEVEL
  3228. #define SW_LOG_LEVEL 0
  3229. #endif
  3230. #if (SW_LOG_LEVEL > 0)
  3231. #define SW_LOG_ERR(...) { \
  3232. log_printf("ERROR: "); \
  3233. log_printf(__VA_ARGS__); \
  3234. log_printf("\n"); \
  3235. }
  3236. #if (SW_LOG_LEVEL > 1)
  3237. #define SW_LOG_WARN(...) { \
  3238. log_printf("WARN : "); \
  3239. log_printf(__VA_ARGS__); \
  3240. log_printf("\n"); \
  3241. }
  3242. #if (SW_LOG_LEVEL > 2)
  3243. #define SW_LOG_INFO(...) { \
  3244. log_printf("INFO : "); \
  3245. log_printf(__VA_ARGS__); \
  3246. log_printf("\n"); \
  3247. }
  3248. #else
  3249. #define SW_LOG_INFO(...)
  3250. #endif
  3251. #else
  3252. #define SW_LOG_WARN(...)
  3253. #define SW_LOG_INFO(...)
  3254. #endif
  3255. #else
  3256. #define SW_LOG_ERR(...)
  3257. #define SW_LOG_WARN(...)
  3258. #define SW_LOG_INFO(...)
  3259. #endif
  3260. #endif //__SWM341_H__