123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749175017511752175317541755175617571758175917601761176217631764176517661767176817691770177117721773177417751776177717781779178017811782178317841785178617871788178917901791179217931794179517961797179817991800180118021803180418051806180718081809181018111812181318141815181618171818181918201821182218231824182518261827182818291830183118321833183418351836183718381839184018411842184318441845184618471848184918501851185218531854185518561857185818591860186118621863186418651866186718681869187018711872187318741875187618771878187918801881188218831884188518861887188818891890189118921893189418951896189718981899190019011902190319041905190619071908190919101911191219131914191519161917191819191920192119221923192419251926192719281929193019311932193319341935193619371938193919401941194219431944194519461947194819491950195119521953195419551956195719581959196019611962196319641965196619671968196919701971197219731974197519761977197819791980198119821983198419851986198719881989199019911992199319941995199619971998199920002001200220032004200520062007200820092010201120122013201420152016201720182019202020212022202320242025202620272028202920302031203220332034203520362037203820392040204120422043204420452046204720482049205020512052205320542055205620572058205920602061206220632064206520662067206820692070207120722073207420752076207720782079208020812082208320842085208620872088208920902091209220932094209520962097209820992100210121022103210421052106210721082109211021112112211321142115211621172118211921202121212221232124212521262127212821292130213121322133213421352136213721382139214021412142214321442145214621472148214921502151215221532154215521562157215821592160216121622163216421652166216721682169217021712172217321742175217621772178217921802181218221832184218521862187218821892190219121922193219421952196219721982199220022012202220322042205220622072208220922102211221222132214221522162217221822192220222122222223222422252226222722282229223022312232223322342235223622372238223922402241224222432244224522462247224822492250225122522253225422552256225722582259226022612262226322642265226622672268226922702271227222732274227522762277227822792280228122822283228422852286228722882289229022912292229322942295229622972298229923002301230223032304230523062307230823092310231123122313231423152316231723182319232023212322232323242325232623272328232923302331233223332334233523362337233823392340234123422343234423452346234723482349235023512352235323542355235623572358235923602361236223632364236523662367236823692370237123722373237423752376237723782379238023812382238323842385238623872388238923902391239223932394239523962397239823992400240124022403240424052406240724082409241024112412241324142415241624172418241924202421242224232424242524262427242824292430243124322433243424352436243724382439244024412442244324442445244624472448244924502451245224532454245524562457245824592460246124622463246424652466246724682469247024712472247324742475247624772478247924802481248224832484248524862487248824892490249124922493249424952496249724982499250025012502250325042505250625072508250925102511251225132514251525162517251825192520252125222523252425252526252725282529253025312532253325342535253625372538253925402541254225432544254525462547254825492550255125522553255425552556255725582559256025612562256325642565256625672568256925702571257225732574257525762577257825792580258125822583258425852586258725882589259025912592259325942595259625972598259926002601260226032604260526062607260826092610261126122613261426152616261726182619262026212622262326242625262626272628262926302631263226332634263526362637263826392640264126422643264426452646264726482649265026512652265326542655265626572658265926602661266226632664266526662667266826692670267126722673267426752676267726782679268026812682268326842685268626872688268926902691269226932694269526962697269826992700270127022703270427052706270727082709271027112712271327142715271627172718271927202721272227232724272527262727272827292730273127322733273427352736273727382739274027412742274327442745274627472748274927502751275227532754275527562757275827592760276127622763276427652766276727682769277027712772277327742775277627772778277927802781278227832784278527862787278827892790279127922793279427952796279727982799280028012802280328042805280628072808280928102811281228132814281528162817281828192820282128222823282428252826282728282829283028312832283328342835283628372838283928402841284228432844284528462847284828492850285128522853285428552856285728582859286028612862286328642865286628672868286928702871287228732874287528762877287828792880288128822883288428852886288728882889289028912892289328942895289628972898289929002901290229032904290529062907290829092910291129122913291429152916291729182919292029212922292329242925292629272928292929302931293229332934293529362937293829392940294129422943294429452946294729482949295029512952295329542955295629572958295929602961296229632964296529662967296829692970297129722973297429752976297729782979298029812982298329842985298629872988298929902991299229932994299529962997299829993000300130023003300430053006300730083009301030113012301330143015301630173018301930203021302230233024302530263027302830293030303130323033303430353036303730383039304030413042304330443045304630473048304930503051305230533054305530563057305830593060306130623063306430653066306730683069307030713072307330743075307630773078307930803081308230833084308530863087308830893090309130923093309430953096309730983099310031013102310331043105310631073108310931103111311231133114311531163117311831193120312131223123312431253126312731283129313031313132313331343135313631373138313931403141314231433144314531463147314831493150315131523153315431553156315731583159316031613162316331643165316631673168316931703171317231733174317531763177317831793180318131823183318431853186318731883189319031913192319331943195319631973198319932003201320232033204320532063207320832093210321132123213321432153216321732183219322032213222322332243225322632273228322932303231323232333234323532363237323832393240324132423243324432453246324732483249325032513252325332543255325632573258325932603261326232633264326532663267326832693270327132723273327432753276327732783279328032813282328332843285328632873288328932903291329232933294329532963297329832993300330133023303330433053306330733083309331033113312331333143315331633173318331933203321332233233324332533263327332833293330333133323333333433353336333733383339334033413342334333443345334633473348334933503351335233533354335533563357335833593360336133623363336433653366336733683369337033713372337333743375337633773378337933803381338233833384338533863387338833893390339133923393339433953396339733983399340034013402340334043405340634073408340934103411341234133414341534163417341834193420342134223423342434253426342734283429343034313432343334343435343634373438343934403441344234433444344534463447344834493450345134523453345434553456345734583459346034613462346334643465346634673468346934703471347234733474347534763477347834793480348134823483348434853486348734883489349034913492349334943495349634973498349935003501350235033504350535063507350835093510351135123513351435153516351735183519352035213522352335243525352635273528352935303531353235333534353535363537353835393540354135423543354435453546354735483549355035513552355335543555355635573558355935603561356235633564356535663567356835693570357135723573357435753576357735783579358035813582358335843585358635873588358935903591359235933594359535963597359835993600360136023603360436053606360736083609361036113612361336143615361636173618361936203621362236233624362536263627362836293630363136323633363436353636363736383639364036413642364336443645364636473648364936503651365236533654365536563657365836593660366136623663366436653666366736683669367036713672367336743675367636773678367936803681368236833684368536863687368836893690369136923693369436953696369736983699370037013702370337043705370637073708370937103711371237133714371537163717371837193720372137223723372437253726372737283729373037313732373337343735373637373738373937403741374237433744374537463747374837493750375137523753375437553756375737583759376037613762376337643765376637673768376937703771377237733774377537763777377837793780378137823783378437853786378737883789379037913792379337943795379637973798379938003801380238033804380538063807380838093810381138123813381438153816381738183819382038213822382338243825382638273828382938303831383238333834383538363837383838393840384138423843384438453846384738483849385038513852385338543855385638573858385938603861386238633864386538663867386838693870387138723873387438753876387738783879388038813882388338843885388638873888388938903891389238933894389538963897389838993900390139023903390439053906390739083909391039113912391339143915391639173918391939203921392239233924392539263927392839293930393139323933393439353936393739383939394039413942394339443945394639473948394939503951395239533954395539563957395839593960396139623963396439653966396739683969397039713972397339743975397639773978397939803981398239833984398539863987398839893990399139923993399439953996399739983999400040014002400340044005400640074008400940104011401240134014401540164017401840194020402140224023402440254026402740284029403040314032403340344035403640374038403940404041404240434044404540464047404840494050405140524053405440554056405740584059406040614062 |
- #ifndef __SWM341_H__
- #define __SWM341_H__
- /*
- * ==========================================================================
- * ---------- Interrupt Number Definition -----------------------------------
- * ==========================================================================
- */
- typedef enum IRQn
- {
- /****** Cortex-M0 Processor Exceptions Numbers **********************************************/
- NonMaskableInt_IRQn = -14, /*!< 2 Non Maskable Interrupt */
- MemoryManagement_IRQn = -12, /*!< 4 Cortex-M4 Memory Management Interrupt */
- BusFault_IRQn = -11, /*!< 5 Cortex-M4 Bus Fault Interrupt */
- UsageFault_IRQn = -10, /*!< 6 Cortex-M4 Usage Fault Interrupt */
- SVCall_IRQn = -5, /*!< 11 Cortex-M4 SV Call Interrupt */
- DebugMonitor_IRQn = -4, /*!< 12 Cortex-M4 Debug Monitor Interrupt */
- PendSV_IRQn = -2, /*!< 14 Cortex-M4 Pend SV Interrupt */
- SysTick_IRQn = -1, /*!< 15 Cortex-M4 System Tick Interrupt */
- /****** Cortex-M4 specific Interrupt Numbers ************************************************/
- UART0_IRQn = 0,
- UART1_IRQn = 1,
- TIMR0_IRQn = 2,
- TIMR1_IRQn = 3,
- DMA_IRQn = 4,
- SPI0_IRQn = 5,
- PWM0_IRQn = 6,
- WDT_IRQn = 7,
- UART2_IRQn = 8,
- PWM1_IRQn = 9,
- ADC0_IRQn = 10,
- BTIMR0_IRQn = 11,
- HALL0_IRQn = 12,
- PWM2_IRQn = 13,
- PWMBRK_IRQn = 14,
- I2C0_IRQn = 15,
- CAN0_IRQn = 16,
- SPI1_IRQn = 17,
- RTC_IRQn = 18,
- PWM3_IRQn = 19,
- TIMR2_IRQn = 20,
- UART3_IRQn = 21,
- TIMR3_IRQn = 22,
- ADC1_IRQn = 23,
- BOD_IRQn = 24,
- CORDIC_IRQn = 25,
- BTIMR1_IRQn = 26,
- PWM4_IRQn = 27,
- HALL3_IRQn = 28,
- BTIMR2_IRQn = 29,
- I2C1_IRQn = 30,
- BTIMR3_IRQn = 31,
- ACMP_IRQn = 32,
- XTALSTOP_IRQn = 33,
- FSPI_IRQn = 34,
- GPIOA_IRQn = 35,
- GPIOB_IRQn = 36,
- GPIOC_IRQn = 37,
- GPIOD_IRQn = 38,
- GPIOM_IRQn = 39,
- GPION_IRQn = 40,
- GPIOA0_IRQn = 41,
- GPIOA1_IRQn = 42,
- GPIOA5_IRQn = 43,
- GPIOA6_IRQn = 44,
- GPIOA10_IRQn = 45,
- GPIOA11_IRQn = 46,
- GPIOA12_IRQn = 47,
- GPIOA13_IRQn = 48,
- GPIOB0_IRQn = 49,
- GPIOB1_IRQn = 50,
- GPIOB2_IRQn = 51,
- GPIOC0_IRQn = 52,
- GPIOC1_IRQn = 53,
- GPIOC2_IRQn = 54,
- GPIOC3_IRQn = 55,
- GPIOC4_IRQn = 56,
- GPIOD3_IRQn = 57,
- GPIOD4_IRQn = 58,
- GPIOD5_IRQn = 59,
- GPIOD6_IRQn = 60,
- GPIOD7_IRQn = 61,
- GPIOD8_IRQn = 62,
- GPIOC9_IRQn = 63,
- GPIOC10_IRQn = 64,
- GPIOC11_IRQn = 65,
- GPIOC12_IRQn = 66,
- GPIOM0_IRQn = 67,
- GPIOM1_IRQn = 68,
- GPIOM2_IRQn = 69,
- GPIOM3_IRQn = 70,
- GPIOM4_IRQn = 71,
- DIV_IRQn = 72,
- LCD_IRQn = 73,
- GPIOE_IRQn = 74,
- JPEG_IRQn = 75,
- SDIO_IRQn = 76,
- USB_IRQn = 77,
- CAN1_IRQn = 78,
- TIMR4_IRQn = 79,
- BTIMR4_IRQn = 80,
- BTIMR5_IRQn = 81,
- BTIMR6_IRQn = 82,
- BTIMR7_IRQn = 83,
- BTIMR8_IRQn = 84,
- BTIMR9_IRQn = 85,
- BTIMR10_IRQn = 86,
- BTIMR11_IRQn = 87,
- DMA2D_IRQn = 88,
- QEI_IRQn = 90,
- } IRQn_Type;
- /*
- * ==========================================================================
- * ----------- Processor and Core Peripheral Section ------------------------
- * ==========================================================================
- */
- /* Configuration of the Cortex-M4 Processor and Core Peripherals */
- #define __CM33_REV 0x0000 /*!< Core revision r0p1 */
- #define __NVIC_PRIO_BITS 3 /*!< SWM341 uses 3 Bits for the Priority Levels */
- #define __Vendor_SysTickConfig 0 /*!< Set to 1 if different SysTick Config is used */
- #define __DSP_PRESENT 1 /*!< DSP extension present */
- #define __FPU_PRESENT 1 /*!< FPU present */
- #define __MPU_PRESENT 1 /*!< MPU present */
- #if defined ( __CC_ARM )
- #pragma anon_unions
- #endif
- #include <stdio.h>
- #include <stdint.h>
- #include <stdbool.h>
- #include "core_cm33.h"
- #include "system_SWM341.h"
- /******************************************************************************/
- /* Device Specific Peripheral registers structures */
- /******************************************************************************/
- typedef struct {
- __IO uint32_t CLKSEL; //Clock Select
- __IO uint32_t CLKDIVx_ON; //[0] CLK_DIVx时钟源开关
- __IO uint32_t CLKEN0; //Clock Enable
- __IO uint32_t CLKEN1;
- __IO uint32_t SLEEP;
- uint32_t RESERVED[4];
- __IO uint32_t RSTSR; //Reset Status
- uint32_t RESERVED2[2];
- __IO uint32_t RTCWKCR; //RTC Wakeup Control
- __IO uint32_t RTCWKSR;
- uint32_t RESERVED3[14];
- __IO uint32_t USBPHYCR;
- __IO uint32_t USBCR;
- uint32_t RESERVED4[2];
- __I uint32_t CHIPID[4];
- __IO uint32_t BACKUP[4]; //Data Backup Register
- uint32_t RESERVED5[12];
- __IO uint32_t PRNGCR;
- __IO uint32_t PRNGDL; //PRNG Data Low Word
- __IO uint32_t PRNGDH;
- uint32_t RESERVED6[9];
- __IO uint32_t PAWKEN; //PORTA Wakeup Enable
- __IO uint32_t PBWKEN;
- __IO uint32_t PCWKEN;
- __IO uint32_t PDWKEN;
- __IO uint32_t PEWKEN;
- uint32_t RESERVED7[3];
- __IO uint32_t PMWKEN;
- __IO uint32_t PNWKEN;
- uint32_t RESERVED8[2];
- __IO uint32_t PAWKSR; //PORTA Wakeup Status,写1清零
- __IO uint32_t PBWKSR;
- __IO uint32_t PCWKSR;
- __IO uint32_t PDWKSR;
- __IO uint32_t PEWKSR;
- uint32_t RESERVED9[3];
- __IO uint32_t PMWKSR;
- __IO uint32_t PNWKSR;
- uint32_t RESERVED10[(0x400-0x154)/4-1];
- __IO uint32_t IOFILT0; //IO Filter 0
- __IO uint32_t IOFILT1;
- uint32_t RESERVED11[(0x720-0x404)/4-1];
- __IO uint32_t PRSTEN; //外设复位使能,只有当PRSTEN的值为0x55时,才能写PRSTR0、PRSTR1
- __IO uint32_t PRSTR0;
- __IO uint32_t PRSTR1;
- //Analog Control: 0x400AA000
- uint32_t RESERVED12[(0x400AA000-0x40000728)/4-1];
- __IO uint32_t HRCCR; //High speed RC Control Register
- uint32_t RESERVED13[3];
- __IO uint32_t BODCR;
- __IO uint32_t BODSR;
- __IO uint32_t ADCCR;
- uint32_t RESERVED14;
- __IO uint32_t XTALCR;
- __IO uint32_t XTALSR;
- uint32_t RESERVED15[6];
- __IO uint32_t PLLCR;
- __IO uint32_t PLLDIV;
- uint32_t RESERVED16;
- __IO uint32_t PLLLOCK; //[0] 1 PLL已锁定
- __IO uint32_t LRCCR; //Low speed RC Control Register
- uint32_t RESERVED17[7];
- __IO uint32_t OPACR; //OPA Control Register
- uint32_t RESERVED18[3];
- __IO uint32_t ACMPCR; //Analog Comparator Control Register
- __IO uint32_t ACMPSR; //Analog Comparator Status Register
- __IO uint32_t ACMPCR2;
- uint32_t RESERVED19;
- __IO uint32_t DACCR;
- uint32_t RESERVED20;
- __IO uint32_t TEMPCR; //Temperature Sensor
- } SYS_TypeDef;
- #define SYS_CLKSEL_SYS_Pos 0 //系统时钟选择 1 HRC 0 CLK_DIVx
- #define SYS_CLKSEL_SYS_Msk (0x01 << SYS_CLKSEL_SYS_Pos)
- #define SYS_CLKSEL_CLK_DIVx_Pos 1 //选择CLK_DIVx 0 CLK_DIV1 1 CLK_DIV8
- #define SYS_CLKSEL_CLK_DIVx_Msk (0x01 << SYS_CLKSEL_CLK_DIVx_Pos)
- #define SYS_CLKSEL_CLK_Pos 2 //Clock Source 0 LRC 1 PLL 2 XTAL_32K 3 XTAL 4 HRC
- #define SYS_CLKSEL_CLK_Msk (0x07 << SYS_CLKSEL_CLK_Pos)
- #define SYS_CLKSEL_RTC_Pos 5 //RTC时钟源选择 0 LRC 1 XTAL_32K
- #define SYS_CLKSEL_RTC_Msk (0x01 << SYS_CLKSEL_RTC_Pos)
- #define SYS_CLKSEL_IOFILT_Pos 6 //IO Filter时钟选择,0 HRC 2 XTAL 3 LRC
- #define SYS_CLKSEL_IOFILT_Msk (0x03 << SYS_CLKSEL_IOFILT_Pos)
- #define SYS_CLKSEL_SDIO_Pos 10 //SDIO时钟选择,0 SYSCLK/2 1 SYSCLK/8 2 SYSCLK/4 3 SYSCLK
- #define SYS_CLKSEL_SDIO_Msk (0x03 << SYS_CLKSEL_SDIO_Pos)
- #define SYS_CLKSEL_WDT_Pos 12 //看门狗时钟选择 0 HRC 1 XTAL 2 LRC 3 XTAL_32K
- #define SYS_CLKSEL_WDT_Msk (0x03 << SYS_CLKSEL_WDT_Pos)
- #define SYS_CLKSEL_AD0_Pos 16 //ADC0时钟选择 0 HRC 1 XTAL 2 PLL
- #define SYS_CLKSEL_AD0_Msk (0x03 << SYS_CLKSEL_AD0_Pos)
- #define SYS_CLKSEL_AD0DIV_Pos 18 //ADC0时钟分频 0 1分频 1 1分频 2 4分频 3 8分频
- #define SYS_CLKSEL_AD0DIV_Msk (0x03 << SYS_CLKSEL_AD0DIV_Pos)
- #define SYS_CLKSEL_AD1_Pos 20
- #define SYS_CLKSEL_AD1_Msk (0x03 << SYS_CLKSEL_AD1_Pos)
- #define SYS_CLKSEL_AD1DIV_Pos 22
- #define SYS_CLKSEL_AD1DIV_Msk (0x03 << SYS_CLKSEL_AD1DIV_Pos)
- #define SYS_CLKSEL_SLEEP_Pos 24 //休眠时钟源 0 LRC 1 XTAL_32K
- #define SYS_CLKSEL_SLEEP_Msk (0x01 << SYS_CLKSEL_SLEEP_Pos)
- #define SYS_CLKDIV_ON_Pos 0
- #define SYS_CLKDIV_ON_Msk (0x01 << SYS_CLKDIV_ON_Pos)
- #define SYS_CLKEN0_GPIOA_Pos 0
- #define SYS_CLKEN0_GPIOA_Msk (0x01 << SYS_CLKEN0_GPIOA_Pos)
- #define SYS_CLKEN0_GPIOB_Pos 1
- #define SYS_CLKEN0_GPIOB_Msk (0x01 << SYS_CLKEN0_GPIOB_Pos)
- #define SYS_CLKEN0_GPIOC_Pos 2
- #define SYS_CLKEN0_GPIOC_Msk (0x01 << SYS_CLKEN0_GPIOC_Pos)
- #define SYS_CLKEN0_GPIOD_Pos 3
- #define SYS_CLKEN0_GPIOD_Msk (0x01 << SYS_CLKEN0_GPIOD_Pos)
- #define SYS_CLKEN0_GPIOM_Pos 4
- #define SYS_CLKEN0_GPIOM_Msk (0x01 << SYS_CLKEN0_GPIOM_Pos)
- #define SYS_CLKEN0_GPION_Pos 5
- #define SYS_CLKEN0_GPION_Msk (0x01 << SYS_CLKEN0_GPION_Pos)
- #define SYS_CLKEN0_UART0_Pos 6
- #define SYS_CLKEN0_UART0_Msk (0x01 << SYS_CLKEN0_UART0_Pos)
- #define SYS_CLKEN0_UART1_Pos 7
- #define SYS_CLKEN0_UART1_Msk (0x01 << SYS_CLKEN0_UART1_Pos)
- #define SYS_CLKEN0_UART2_Pos 8
- #define SYS_CLKEN0_UART2_Msk (0x01 << SYS_CLKEN0_UART2_Pos)
- #define SYS_CLKEN0_UART3_Pos 9
- #define SYS_CLKEN0_UART3_Msk (0x01 << SYS_CLKEN0_UART3_Pos)
- #define SYS_CLKEN0_WDT_Pos 10
- #define SYS_CLKEN0_WDT_Msk (0x01 << SYS_CLKEN0_WDT_Pos)
- #define SYS_CLKEN0_TIMR_Pos 11
- #define SYS_CLKEN0_TIMR_Msk (0x01 << SYS_CLKEN0_TIMR_Pos)
- #define SYS_CLKEN0_PWM_Pos 12
- #define SYS_CLKEN0_PWM_Msk (0x01 << SYS_CLKEN0_PWM_Pos)
- #define SYS_CLKEN0_SPI0_Pos 13
- #define SYS_CLKEN0_SPI0_Msk (0x01 << SYS_CLKEN0_SPI0_Pos)
- #define SYS_CLKEN0_SPI1_Pos 14
- #define SYS_CLKEN0_SPI1_Msk (0x01 << SYS_CLKEN0_SPI1_Pos)
- #define SYS_CLKEN0_I2C0_Pos 15
- #define SYS_CLKEN0_I2C0_Msk (0x01 << SYS_CLKEN0_I2C0_Pos)
- #define SYS_CLKEN0_I2C1_Pos 16
- #define SYS_CLKEN0_I2C1_Msk (0x01 << SYS_CLKEN0_I2C1_Pos)
- #define SYS_CLKEN0_CRC_Pos 19
- #define SYS_CLKEN0_CRC_Msk (0x01 << SYS_CLKEN0_CRC_Pos)
- #define SYS_CLKEN0_CORDIC_Pos 20
- #define SYS_CLKEN0_CORDIC_Msk (0x01 << SYS_CLKEN0_CORDIC_Pos)
- #define SYS_CLKEN0_DIV_Pos 21
- #define SYS_CLKEN0_DIV_Msk (0x01 << SYS_CLKEN0_DIV_Pos)
- #define SYS_CLKEN0_SDIO_Pos 22
- #define SYS_CLKEN0_SDIO_Msk (0x01 << SYS_CLKEN0_SDIO_Pos)
- #define SYS_CLKEN0_USB_Pos 24
- #define SYS_CLKEN0_USB_Msk (0x01 << SYS_CLKEN0_USB_Pos)
- #define SYS_CLKEN0_ANAC_Pos 25 //模拟控制单元时钟使能
- #define SYS_CLKEN0_ANAC_Msk (0x01 << SYS_CLKEN0_ANAC_Pos)
- #define SYS_CLKEN0_ADC0_Pos 26
- #define SYS_CLKEN0_ADC0_Msk (0x01 << SYS_CLKEN0_ADC0_Pos)
- #define SYS_CLKEN0_CAN0_Pos 28
- #define SYS_CLKEN0_CAN0_Msk (0x01 << SYS_CLKEN0_CAN0_Pos)
- #define SYS_CLKEN0_DMA2D_Pos 29
- #define SYS_CLKEN0_DMA2D_Msk (0x01 << SYS_CLKEN0_DMA2D_Pos)
- #define SYS_CLKEN0_LCD_Pos 30
- #define SYS_CLKEN0_LCD_Msk (0x01 << SYS_CLKEN0_LCD_Pos)
- #define SYS_CLKEN1_GPIOE_Pos 0
- #define SYS_CLKEN1_GPIOE_Msk (0x01 << SYS_CLKEN1_GPIOE_Pos)
- #define SYS_CLKEN1_SPI2_Pos 8
- #define SYS_CLKEN1_SPI2_Msk (0x01 << SYS_CLKEN1_SPI2_Pos)
- #define SYS_CLKEN1_SDRAM_Pos 12
- #define SYS_CLKEN1_SDRAM_Msk (0x01 << SYS_CLKEN1_SDRAM_Pos)
- #define SYS_CLKEN1_SFC_Pos 13
- #define SYS_CLKEN1_SFC_Msk (0x01 << SYS_CLKEN1_SFC_Pos)
- #define SYS_CLKEN1_ADC1_Pos 16
- #define SYS_CLKEN1_ADC1_Msk (0x01 << SYS_CLKEN1_ADC1_Pos)
- #define SYS_CLKEN1_CAN1_Pos 17
- #define SYS_CLKEN1_CAN1_Msk (0x01 << SYS_CLKEN1_CAN1_Pos)
- #define SYS_CLKEN1_RTC_Pos 19
- #define SYS_CLKEN1_RTC_Msk (0x01 << SYS_CLKEN1_RTC_Pos)
- #define SYS_CLKEN1_IOFILT_Pos 20 //IO Filter
- #define SYS_CLKEN1_IOFILT_Msk (0x01 << SYS_CLKEN1_IOFILT_Pos)
- #define SYS_CLKEN1_BTIMR_Pos 22
- #define SYS_CLKEN1_BTIMR_Msk (0x01 << SYS_CLKEN1_BTIMR_Pos)
- #define SYS_CLKEN1_JPEG_Pos 25
- #define SYS_CLKEN1_JPEG_Msk (0x01 << SYS_CLKEN1_JPEG_Pos)
- #define SYS_CLKEN1_DAC_Pos 26
- #define SYS_CLKEN1_DAC_Msk (0x01 << SYS_CLKEN1_DAC_Pos)
- #define SYS_CLKEN1_QEI_Pos 27
- #define SYS_CLKEN1_QEI_Msk (0x01 << SYS_CLKEN1_QEI_Pos)
- #define SYS_SLEEP_SLEEP_Pos 0 //将该位置1后,系统将进入SLEEP模式
- #define SYS_SLEEP_SLEEP_Msk (0x01 << SYS_SLEEP_SLEEP_Pos)
- #define SYS_SLEEP_STOP_Pos 1 //将该位置1后,系统将进入STOP SLEEP模式
- #define SYS_SLEEP_STOP_Msk (0x01 << SYS_SLEEP_STOP_Pos)
- #define SYS_RSTSR_POR_Pos 0 //1 出现过POR复位,写1清零
- #define SYS_RSTSR_POR_Msk (0x01 << SYS_RSTSR_POR_Pos)
- #define SYS_RSTSR_WDT_Pos 1 //1 出现过WDT复位,写1清零
- #define SYS_RSTSR_WDT_Msk (0x01 << SYS_RSTSR_WDT_Pos)
- #define SYS_RTCWKCR_EN_Pos 0 //RTC唤醒使能
- #define SYS_RTCWKCR_EN_Msk (0x01 << SYS_RTCWKCR_EN_Pos)
- #define SYS_RTCWKSR_FLAG_Pos 0 //RTC唤醒标志,写1清零
- #define SYS_RTCWKSR_FLAG_Msk (0x01 << SYS_RTCWKSR_FLAG_Pos)
- #define SYS_USBPHYCR_IDEN_Pos 0 //ID PIN采样使能
- #define SYS_USBPHYCR_IDEN_Msk (0x01 << SYS_USBPHYCR_IDEN_Pos)
- #define SYS_USBPHYCR_OPMODE_Pos 1 //0 Normal Operation 1 Non-Driving (Disable Pull-up register)
- #define SYS_USBPHYCR_OPMODE_Msk (0x03 << SYS_USBPHYCR_OPMODE_Pos)
- #define SYS_USBPHYCR_XCVR_Pos 4 //收发器模式选择,1 FS 2 LS
- #define SYS_USBPHYCR_XCVR_Msk (0x03 << SYS_USBPHYCR_XCVR_Pos)
- #define SYS_USBPHYCR_PLLEN_Pos 7 //PHY内置PLL开关
- #define SYS_USBPHYCR_PLLEN_Msk (0x01 << SYS_USBPHYCR_PLLEN_Pos)
- #define SYS_USBCR_RST48M_Pos 0 //USB控制器48M时钟域复位
- #define SYS_USBCR_RST48M_Msk (0x01 << SYS_USBCR_RST48M_Pos)
- #define SYS_USBCR_RST12M_Pos 1 //USB控制器12M时钟域复位
- #define SYS_USBCR_RST12M_Msk (0x01 << SYS_USBCR_RST12M_Pos)
- #define SYS_USBCR_RSTPLL_Pos 2 //USB控制器PLL时钟域复位
- #define SYS_USBCR_RSTPLL_Msk (0x01 << SYS_USBCR_RSTPLL_Pos)
- #define SYS_USBCR_ROLE_Pos 3 //0 由ID引脚决定 2 Host 3 Device
- #define SYS_USBCR_ROLE_Msk (0x03 << SYS_USBCR_ROLE_Pos)
- #define SYS_USBCR_VBUS_Pos 5 //0 由VBUS引脚决定 1 强制为高
- #define SYS_USBCR_VBUS_Msk (0x01 << SYS_USBCR_VBUS_Pos)
- #define SYS_PRNGCR_CLR_Pos 0 //种子清零,至少保持一个LRC时钟周期
- #define SYS_PRNGCR_CLR_Msk (0x01 << SYS_PRNGCR_CLR_Pos)
- #define SYS_PRNGCR_MODE_Pos 1 //0 关闭 2 三时钟模式(RCHF、RCLF、XTAH) 3 两时钟模式(RCHF、RCLF)
- #define SYS_PRNGCR_MODE_Msk (0x03 << SYS_PRNGCR_MODE_Pos)
- #define SYS_PRNGCR_RDY_Pos 8 //1 可以从PRNGDL和PRNGDH读取数据
- #define SYS_PRNGCR_RDY_Msk (0x01 << SYS_PRNGCR_RDY_Pos)
- #define SYS_IOFILT_TIM_Pos 0 //滤波窗口时间 = Tfilter_clk * 时钟分频 * 2^TIM
- #define SYS_IOFILT_TIM_Msk (0x0F << SYS_IOFILT_TIM_Pos)
- #define SYS_IOFILT_CLKDIV_Pos 4 //0 时钟不分频 1 时钟32分频
- #define SYS_IOFILT_CLKDIV_Msk (0x01 << SYS_IOFILT_CLKDIV_Pos)
- #define SYS_IOFILT_IOSEL_Pos 5 //被滤波IO选择,每个IOFILT可为四个IO中的一个进行滤波
- #define SYS_IOFILT_IOSEL_Msk (0x03 << SYS_IOFILT_IOSEL_Pos)
- #define SYS_PRSTR0_GPIOA_Pos 0 //1 复位GPIOA 0 不复位
- #define SYS_PRSTR0_GPIOA_Msk (0x01 << SYS_PRSTR0_GPIOA_Pos)
- #define SYS_PRSTR0_GPIOB_Pos 1
- #define SYS_PRSTR0_GPIOB_Msk (0x01 << SYS_PRSTR0_GPIOB_Pos)
- #define SYS_PRSTR0_GPIOC_Pos 2
- #define SYS_PRSTR0_GPIOC_Msk (0x01 << SYS_PRSTR0_GPIOC_Pos)
- #define SYS_PRSTR0_GPIOD_Pos 3
- #define SYS_PRSTR0_GPIOD_Msk (0x01 << SYS_PRSTR0_GPIOD_Pos)
- #define SYS_PRSTR0_GPIOM_Pos 4
- #define SYS_PRSTR0_GPIOM_Msk (0x01 << SYS_PRSTR0_GPIOM_Pos)
- #define SYS_PRSTR0_GPION_Pos 5
- #define SYS_PRSTR0_GPION_Msk (0x01 << SYS_PRSTR0_GPION_Pos)
- #define SYS_PRSTR0_UART0_Pos 6
- #define SYS_PRSTR0_UART0_Msk (0x01 << SYS_PRSTR0_UART0_Pos)
- #define SYS_PRSTR0_UART1_Pos 7
- #define SYS_PRSTR0_UART1_Msk (0x01 << SYS_PRSTR0_UART1_Pos)
- #define SYS_PRSTR0_UART2_Pos 8
- #define SYS_PRSTR0_UART2_Msk (0x01 << SYS_PRSTR0_UART2_Pos)
- #define SYS_PRSTR0_UART3_Pos 9
- #define SYS_PRSTR0_UART3_Msk (0x01 << SYS_PRSTR0_UART3_Pos)
- #define SYS_PRSTR0_WDT_Pos 10
- #define SYS_PRSTR0_WDT_Msk (0x01 << SYS_PRSTR0_WDT_Pos)
- #define SYS_PRSTR0_TIMR_Pos 11
- #define SYS_PRSTR0_TIMR_Msk (0x01 << SYS_PRSTR0_TIMR_Pos)
- #define SYS_PRSTR0_PWM_Pos 12
- #define SYS_PRSTR0_PWM_Msk (0x01 << SYS_PRSTR0_PWM_Pos)
- #define SYS_PRSTR0_SPI0_Pos 13
- #define SYS_PRSTR0_SPI0_Msk (0x01 << SYS_PRSTR0_SPI0_Pos)
- #define SYS_PRSTR0_SPI1_Pos 14
- #define SYS_PRSTR0_SPI1_Msk (0x01 << SYS_PRSTR0_SPI1_Pos)
- #define SYS_PRSTR0_I2C0_Pos 15
- #define SYS_PRSTR0_I2C0_Msk (0x01 << SYS_PRSTR0_I2C0_Pos)
- #define SYS_PRSTR0_I2C1_Pos 16
- #define SYS_PRSTR0_I2C1_Msk (0x01 << SYS_PRSTR0_I2C1_Pos)
- #define SYS_PRSTR0_CRC_Pos 19
- #define SYS_PRSTR0_CRC_Msk (0x01 << SYS_PRSTR0_CRC_Pos)
- #define SYS_PRSTR0_CORDIC_Pos 20
- #define SYS_PRSTR0_CORDIC_Msk (0x01 << SYS_PRSTR0_CORDIC_Pos)
- #define SYS_PRSTR0_DIV_Pos 21
- #define SYS_PRSTR0_DIV_Msk (0x01 << SYS_PRSTR0_DIV_Pos)
- #define SYS_PRSTR0_SDIO_Pos 22
- #define SYS_PRSTR0_SDIO_Msk (0x01 << SYS_PRSTR0_SDIO_Pos)
- #define SYS_PRSTR0_USB_Pos 24
- #define SYS_PRSTR0_USB_Msk (0x01 << SYS_PRSTR0_USB_Pos)
- #define SYS_PRSTR0_ANAC_Pos 25
- #define SYS_PRSTR0_ANAC_Msk (0x01 << SYS_PRSTR0_ANAC_Pos)
- #define SYS_PRSTR0_ADC0_Pos 26
- #define SYS_PRSTR0_ADC0_Msk (0x01 << SYS_PRSTR0_ADC0_Pos)
- #define SYS_PRSTR0_CAN0_Pos 28
- #define SYS_PRSTR0_CAN0_Msk (0x01 << SYS_PRSTR0_CAN0_Pos)
- #define SYS_PRSTR0_DMA2D_Pos 29
- #define SYS_PRSTR0_DMA2D_Msk (0x01 << SYS_PRSTR0_DMA2D_Pos)
- #define SYS_PRSTR0_LCD_Pos 30
- #define SYS_PRSTR0_LCD_Msk (0x01 << SYS_PRSTR0_LCD_Pos)
- #define SYS_PRSTR1_GPIOE_Pos 0
- #define SYS_PRSTR1_GPIOE_Msk (0x01 << SYS_PRSTR1_GPIOE_Pos)
- #define SYS_PRSTR1_SDRAM_Pos 12
- #define SYS_PRSTR1_SDRAM_Msk (0x01 << SYS_PRSTR1_SDRAM_Pos)
- #define SYS_PRSTR1_SFC_Pos 13
- #define SYS_PRSTR1_SFC_Msk (0x01 << SYS_PRSTR1_SFC_Pos)
- #define SYS_PRSTR1_ADC1_Pos 16
- #define SYS_PRSTR1_ADC1_Msk (0x01 << SYS_PRSTR1_ADC1_Pos)
- #define SYS_PRSTR1_CAN1_Pos 17
- #define SYS_PRSTR1_CAN1_Msk (0x01 << SYS_PRSTR1_CAN1_Pos)
- #define SYS_PRSTR1_RTC_Pos 19
- #define SYS_PRSTR1_RTC_Msk (0x01 << SYS_PRSTR1_RTC_Pos)
- #define SYS_PRSTR1_IOFILT_Pos 20
- #define SYS_PRSTR1_IOFILT_Msk (0x01 << SYS_PRSTR1_IOFILT_Pos)
- #define SYS_PRSTR1_BTIMR_Pos 22
- #define SYS_PRSTR1_BTIMR_Msk (0x01 << SYS_PRSTR1_BTIMR_Pos)
- #define SYS_PRSTR1_JPEG_Pos 25
- #define SYS_PRSTR1_JPEG_Msk (0x01 << SYS_PRSTR1_JPEG_Pos)
- #define SYS_PRSTR1_DAC_Pos 26
- #define SYS_PRSTR1_DAC_Msk (0x01 << SYS_PRSTR1_DAC_Pos)
- #define SYS_PRSTR1_QEI_Pos 27
- #define SYS_PRSTR1_QEI_Msk (0x01 << SYS_PRSTR1_QEI_Pos)
- #define SYS_HRCCR_ON_Pos 0 //High speed RC ON
- #define SYS_HRCCR_ON_Msk (0x01 << SYS_HRCCR_ON_Pos)
- #define SYS_HRCCR_DBL_Pos 1 //Double Frequency 0 20MHz 1 40MHz
- #define SYS_HRCCR_DBL_Msk (0x01 << SYS_HRCCR_DBL_Pos)
- #define SYS_BODCR_IE_Pos 1 //Interrupt Enable
- #define SYS_BODCR_IE_Msk (0x01 << SYS_BODCR_IE_Pos)
- #define SYS_BODCR_INTLVL_Pos 4 //BOD中断触发电平,0 1.9v 1 2.1v 2 2.3v 3 2.5v 4 2.7v
- #define SYS_BODCR_INTLVL_Msk (0x07 << SYS_BODCR_INTLVL_Pos)
- #define SYS_BODCR_RSTLVL_Pos 7 //BOD复位电平,0 1.7v 1 1.9v 2 2.1v 3 2.7v
- #define SYS_BODCR_RSTLVL_Msk (0x07 << SYS_BODCR_RSTLVL_Pos)
- #define SYS_BODSR_IF_Pos 0 //中断标志,写1清零
- #define SYS_BODSR_IF_Msk (0x01 << SYS_BODSR_IF_Pos)
- #define SYS_BODSR_ST_Pos 1 //BOD Status
- #define SYS_BODSR_ST_Msk (0x01 << SYS_BODSR_ST_Pos)
- #define SYS_ADCCR_0IVREN_Pos 0 //ADC0 Internal Vref Enable
- #define SYS_ADCCR_0IVREN_Msk (0x01 << SYS_ADCCR_0IVREN_Pos)
- #define SYS_ADCCR_1IVREN_Pos 1 //ADC1 Internal Vref Enable
- #define SYS_ADCCR_1IVREN_Msk (0x01 << SYS_ADCCR_1IVREN_Pos)
- #define SYS_ADCCR_0IVRSEL_Pos 2 //ADC0 Internal Vref Select,0 基准电流乘以电阻 1 VDD33电阻分压
- #define SYS_ADCCR_0IVRSEL_Msk (0x01 << SYS_ADCCR_0IVRSEL_Pos)
- #define SYS_ADCCR_1IVRSEL_Pos 3 //ADC1 Internal Vref Select,0 基准电流乘以电阻 1 VDD33电阻分压
- #define SYS_ADCCR_1IVRSEL_Msk (0x01 << SYS_ADCCR_1IVRSEL_Pos)
- #define SYS_ADCCR_IVRFLT_Pos 4 //Internal Vref Filter,0 高通滤波 1 低通滤波
- #define SYS_ADCCR_IVRFLT_Msk (0x01 << SYS_ADCCR_IVRFLT_Pos)
- #define SYS_ADCCR_IVROuA_Pos 5 //Internal Vref Output uA, 0 50uA 1 150uA
- #define SYS_ADCCR_IVROuA_Msk (0x01 << SYS_ADCCR_IVROuA_Pos)
- #define SYS_ADCCR_IVRLVL_Pos 6 //Internal Vref Output Level,X00b 1.2V X01 1.6V X10 2.0V X11 2.5V
- #define SYS_ADCCR_IVRLVL_Msk (0x07 << SYS_ADCCR_IVRLVL_Pos)
- #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
- #define SYS_ADCCR_IVRTRIM_Msk (0x07 << SYS_ADCCR_IVRTRIM_Pos)
- #define SYS_XTALCR_32KON_Pos 0 //XTAL_32K On
- #define SYS_XTALCR_32KON_Msk (0x01 << SYS_XTALCR_32KON_Pos)
- #define SYS_XTALCR_ON_Pos 1 //XTAL On
- #define SYS_XTALCR_ON_Msk (0x01 << SYS_XTALCR_ON_Pos)
- #define SYS_XTALCR_32KDET_Pos 4 //XTAL_32K Stop Detect
- #define SYS_XTALCR_32KDET_Msk (0x01 << SYS_XTALCR_32KDET_Pos)
- #define SYS_XTALCR_DET_Pos 5 //XTAL Stop Detect
- #define SYS_XTALCR_DET_Msk (0x01 << SYS_XTALCR_DET_Pos)
- #define SYS_XTALCR_32KDRV_Pos 8 //XTAL_32K 驱动能力,可微调频率
- #define SYS_XTALCR_32KDRV_Msk (0x0F << SYS_XTALCR_32KDRV_Pos)
- #define SYS_XTALCR_DRV_Pos 16 //XTAL 驱动能力,可微调频率
- #define SYS_XTALCR_DRV_Msk (0x1F << SYS_XTALCR_DRV_Pos)
- #define SYS_XTALSR_32KSTOP_Pos 0 //XTAL_32K Stop,写1清零
- #define SYS_XTALSR_32KSTOP_Msk (0x01 << SYS_XTALSR_32KSTOP_Pos)
- #define SYS_XTALSR_STOP_Pos 1 //XTAL Stop,写1清零
- #define SYS_XTALSR_STOP_Msk (0x01 << SYS_XTALSR_STOP_Pos)
- #define SYS_PLLCR_OUTEN_Pos 0 //只能LOCK后设置
- #define SYS_PLLCR_OUTEN_Msk (0x01 << SYS_PLLCR_OUTEN_Pos)
- #define SYS_PLLCR_INSEL_Pos 1 //0 XTAL 1 HRC
- #define SYS_PLLCR_INSEL_Msk (0x01 << SYS_PLLCR_INSEL_Pos)
- #define SYS_PLLCR_OFF_Pos 2
- #define SYS_PLLCR_OFF_Msk (0x01 << SYS_PLLCR_OFF_Pos)
- #define SYS_PLLCR_RST_Pos 3
- #define SYS_PLLCR_RST_Msk (0x01 << SYS_PLLCR_RST_Pos)
- #define SYS_PLLDIV_FBDIV_Pos 0 //PLL FeedBack分频寄存器
- //VCO输出频率 = PLL输入时钟 / INDIV * 4 * FBDIV
- //PLL输出频率 = PLL输入时钟 / INDIV * 4 * FBDIV / OUTDIV = VCO输出频率 / OUTDIV
- #define SYS_PLLDIV_FBDIV_Msk (0x1FF << SYS_PLLDIV_FBDIV_Pos)
- #define SYS_PLLDIV_INDIV_Pos 16 //PLL 输入源时钟分频
- #define SYS_PLLDIV_INDIV_Msk (0x1F << SYS_PLLDIV_INDIV_Pos)
- #define SYS_PLLDIV_OUTDIV_Pos 24 //PLL 输出分频,0 8分频 1 4分频 0 2分频
- #define SYS_PLLDIV_OUTDIV_Msk (0x03 << SYS_PLLDIV_OUTDIV_Pos)
- #define SYS_LRCCR_ON_Pos 0 //Low Speed RC On
- #define SYS_LRCCR_ON_Msk (0x01 << SYS_LRCCR_ON_Pos)
- #define SYS_OPACR_OPA0ON_Pos 0 //OPA0 开启
- #define SYS_OPACR_OPA0ON_Msk (0x01 << SYS_OPACR_OPA0ON_Pos)
- #define SYS_OPACR_OPA1ON_Pos 1
- #define SYS_OPACR_OPA1ON_Msk (0x01 << SYS_OPACR_OPA1ON_Pos)
- #define SYS_OPACR_OPA2ON_Pos 2
- #define SYS_OPACR_OPA2ON_Msk (0x01 << SYS_OPACR_OPA2ON_Pos)
- #define SYS_OPACR_OPA3ON_Pos 3
- #define SYS_OPACR_OPA3ON_Msk (0x01 << SYS_OPACR_OPA3ON_Pos)
- #define SYS_ACMPCR_CMP0ON_Pos 0 //CMP0 开启
- #define SYS_ACMPCR_CMP0ON_Msk (0x01 << SYS_ACMPCR_CMP0ON_Pos)
- #define SYS_ACMPCR_CMP1ON_Pos 1
- #define SYS_ACMPCR_CMP1ON_Msk (0x01 << SYS_ACMPCR_CMP1ON_Pos)
- #define SYS_ACMPCR_CMP2ON_Pos 2
- #define SYS_ACMPCR_CMP2ON_Msk (0x01 << SYS_ACMPCR_CMP2ON_Pos)
- #define SYS_ACMPCR_CMP0HYS_Pos 8 //CMP0 迟滞开启
- #define SYS_ACMPCR_CMP0HYS_Msk (0x01 << SYS_ACMPCR_CMP0HYS_Pos)
- #define SYS_ACMPCR_CMP1HYS_Pos 9
- #define SYS_ACMPCR_CMP1HYS_Msk (0x01 << SYS_ACMPCR_CMP1HYS_Pos)
- #define SYS_ACMPCR_CMP2HYS_Pos 10
- #define SYS_ACMPCR_CMP2HYS_Msk (0x01 << SYS_ACMPCR_CMP2HYS_Pos)
- #define SYS_ACMPCR_0NVREF_Pos 16 //1 ACMP0 N输入端接内部VREF
- #define SYS_ACMPCR_0NVREF_Msk (0x01 << SYS_ACMPCR_0NVREF_Pos)
- #define SYS_ACMPCR_1NVREF_Pos 17
- #define SYS_ACMPCR_1NVREF_Msk (0x01 << SYS_ACMPCR_1NVREF_Pos)
- #define SYS_ACMPCR_2NVREF_Pos 18
- #define SYS_ACMPCR_2NVREF_Msk (0x01 << SYS_ACMPCR_2NVREF_Pos)
- #define SYS_ACMPCR_CMP0IE_Pos 24 //CMP0 中断使能
- #define SYS_ACMPCR_CMP0IE_Msk (0x01 << SYS_ACMPCR_CMP0IE_Pos)
- #define SYS_ACMPCR_CMP1IE_Pos 25
- #define SYS_ACMPCR_CMP1IE_Msk (0x01 << SYS_ACMPCR_CMP1IE_Pos)
- #define SYS_ACMPCR_CMP2IE_Pos 26
- #define SYS_ACMPCR_CMP2IE_Msk (0x01 << SYS_ACMPCR_CMP2IE_Pos)
- #define SYS_ACMPSR_CMP0OUT_Pos 0 //0 N > P 1 P > N
- #define SYS_ACMPSR_CMP0OUT_Msk (0x01 << SYS_ACMPSR_CMP0OUT_Pos)
- #define SYS_ACMPSR_CMP1OUT_Pos 1
- #define SYS_ACMPSR_CMP1OUT_Msk (0x01 << SYS_ACMPSR_CMP1OUT_Pos)
- #define SYS_ACMPSR_CMP2OUT_Pos 2
- #define SYS_ACMPSR_CMP2OUT_Msk (0x01 << SYS_ACMPSR_CMP2OUT_Pos)
- #define SYS_ACMPSR_CMP0IF_Pos 8 //中断标志,写1清零
- #define SYS_ACMPSR_CMP0IF_Msk (0x01 << SYS_ACMPSR_CMP0IF_Pos)
- #define SYS_ACMPSR_CMP1IF_Pos 9
- #define SYS_ACMPSR_CMP1IF_Msk (0x01 << SYS_ACMPSR_CMP1IF_Pos)
- #define SYS_ACMPSR_CMP2IF_Pos 10
- #define SYS_ACMPSR_CMP2IF_Msk (0x01 << SYS_ACMPSR_CMP2IF_Pos)
- #define SYS_ACMPCR2_BRK0_Pos 0 //1 ACMP0输出连接用作PWM_BRK0
- #define SYS_ACMPCR2_BRK0_Msk (0x01 << SYS_ACMPCR2_BRK0_Pos)
- #define SYS_ACMPCR2_BRK1_Pos 1 //1 ACMP1输出连接用作PWM_BRK1
- #define SYS_ACMPCR2_BRK1_Msk (0x01 << SYS_ACMPCR2_BRK1_Pos)
- #define SYS_ACMPCR2_BRK2_Pos 2
- #define SYS_ACMPCR2_BRK2_Msk (0x01 << SYS_ACMPCR2_BRK2_Pos)
- #define SYS_ACMPCR2_VREF_Pos 3 //ACMP内部基准电压VREF,电压值为 0.6 + 0.04*VREF
- #define SYS_ACMPCR2_VREF_Msk (0x3F << SYS_ACMPCR2_VREF_Pos)
- #define SYS_DACCR_VRADJ_Pos 0 //Vref Adjust
- #define SYS_DACCR_VRADJ_Msk (0x1F << SYS_DACCR_VRADJ_Pos)
- #define SYS_TEMPCR_EN_Pos 0
- #define SYS_TEMPCR_EN_Msk (0x01 << SYS_TEMPCR_EN_Pos)
- typedef struct {
- __IO uint32_t FUNC0; //引脚功能选择
- __IO uint32_t FUNC1;
- uint32_t RESERVED[62];
- __IO uint32_t PULLU; //上拉使能
- uint32_t RESERVED2[63];
- __IO uint32_t PULLD; //下拉使能
- uint32_t RESERVED3[63];
- __IO uint32_t INEN; //输入使能
- uint32_t RESERVED4[63];
- __IO uint32_t OPEND; //开漏使能
- uint32_t RESERVED5[63];
- __IO uint32_t DRVST; //驱动强度选择,0 4mA 1 8mA
- } PORT_TypeDef;
- typedef struct {
- __IO uint32_t ODR;
- #define PIN0 0
- #define PIN1 1
- #define PIN2 2
- #define PIN3 3
- #define PIN4 4
- #define PIN5 5
- #define PIN6 6
- #define PIN7 7
- #define PIN8 8
- #define PIN9 9
- #define PIN10 10
- #define PIN11 11
- #define PIN12 12
- #define PIN13 13
- #define PIN14 14
- #define PIN15 15
- __IO uint32_t DIR; //0 输入 1 输出
- __IO uint32_t INTLVLTRG; //Interrupt Level Trigger 1 电平触发中断 0 边沿触发中断
- __IO uint32_t INTBE; //Both Edge,当INTLVLTRG设为边沿触发中断时,此位置1表示上升沿和下降沿都触发中断,置0时触发边沿由INTRISEEN选择
- __IO uint32_t INTRISEEN; //Interrupt Rise Edge Enable 1 上升沿/高电平触发中断 0 下降沿/低电平触发中断
- __IO uint32_t INTEN; //1 中断使能 0 中断禁止
- __IO uint32_t INTRAWSTAT; //中断检测单元是否检测到了触发中断的条件 1 检测到了中断触发条件 0 没有检测到中断触发条件
- __IO uint32_t INTSTAT; //INTSTAT.PIN0 = INTRAWSTAT.PIN0 & INTEN.PIN0
- __IO uint32_t INTCLR; //写1清除中断标志,只对边沿触发中断有用
- __IO uint32_t DMAEN;
- uint32_t RESERVED[2];
- __IO uint32_t IDR;
- uint32_t RESERVED2[3];
- __IO uint32_t DATAPIN0; //PIN0引脚的DATA寄存器,单个引脚对应整个32位寄存器,方便实现原子写操作
- __IO uint32_t DATAPIN1;
- __IO uint32_t DATAPIN2;
- __IO uint32_t DATAPIN3;
- __IO uint32_t DATAPIN4;
- __IO uint32_t DATAPIN5;
- __IO uint32_t DATAPIN6;
- __IO uint32_t DATAPIN7;
- __IO uint32_t DATAPIN8;
- __IO uint32_t DATAPIN9;
- __IO uint32_t DATAPIN10;
- __IO uint32_t DATAPIN11;
- __IO uint32_t DATAPIN12;
- __IO uint32_t DATAPIN13;
- __IO uint32_t DATAPIN14;
- __IO uint32_t DATAPIN15;
- } GPIO_TypeDef;
- typedef struct {
- __IO uint32_t LOAD; //定时器加载值,使能后定时器从此数值开始向下递减计数
- __I uint32_t VALUE; //定时器当前值,LDVAL-CVAL 可计算出计时时长
- __IO uint32_t CR;
- uint32_t RESERVED;
- __IO uint32_t IE;
- __IO uint32_t IF;
- __IO uint32_t HALT; //[0] 1 暂停计数 0 恢复计数
- __IO uint32_t OCCR;
- __IO uint32_t OCMAT;
- __IO uint32_t RESERVED2;
- __IO uint32_t ICLOW;
- __IO uint32_t ICHIGH;
- __IO uint32_t PREDIV; //预分频,8位
- } TIMR_TypeDef;
- #define TIMR_LOAD_VALUE_Pos 0
- #define TIMR_LOAD_VALUE_Msk (0xFFFFFF << TIMR_LOAD_VALUE_Pos)
- #define TIMR_LOAD_RELOAD_Pos 24 //reload VALUE to TIMR's internal Counter immediately. only for BTIMRx, not for TIMRx.
- #define TIMR_LOAD_RELOAD_Msk (0x01 << TIMR_LOAD_RELOAD_Pos)
- #define TIMR_CR_CLKSRC_Pos 0 //时钟源: 0 内部系统时钟 2 外部引脚脉冲计数
- #define TIMR_CR_CLKSRC_Msk (0x03 << TIMR_CR_CLKSRC_Pos)
- #define TIMR_CR_MODE_Pos 2 //工作模式:0 定时器 1 输入捕获 2 输出比较
- #define TIMR_CR_MODE_Msk (0x03 << TIMR_CR_MODE_Pos)
- #define TIMR_IE_TO_Pos 0 //Time out
- #define TIMR_IE_TO_Msk (0x01 << TIMR_IE_TO_Pos)
- #define TIMR_IE_OC0_Pos 1 //输出比较,第一个反转点
- #define TIMR_IE_OC0_Msk (0x01 << TIMR_IE_OC0_Pos)
- #define TIMR_IE_OC1_Pos 2 //输出比较,第二个反转点
- #define TIMR_IE_OC1_Msk (0x01 << TIMR_IE_OC1_Pos)
- #define TIMR_IE_ICR_Pos 3 //输入捕获,上升沿中断
- #define TIMR_IE_ICR_Msk (0x01 << TIMR_IE_ICR_Pos)
- #define TIMR_IE_ICF_Pos 4 //输入捕获,下降沿中断
- #define TIMR_IE_ICF_Msk (0x01 << TIMR_IE_ICF_Pos)
- #define TIMR_IF_TO_Pos 0 //超时中断标志,写1清零
- #define TIMR_IF_TO_Msk (0x01 << TIMR_IF_TO_Pos)
- #define TIMR_IF_OC0_Pos 1
- #define TIMR_IF_OC0_Msk (0x01 << TIMR_IF_OC0_Pos)
- #define TIMR_IF_OC1_Pos 2
- #define TIMR_IF_OC1_Msk (0x01 << TIMR_IF_OC1_Pos)
- #define TIMR_IF_ICR_Pos 3
- #define TIMR_IF_ICR_Msk (0x01 << TIMR_IF_ICR_Pos)
- #define TIMR_IF_ICF_Pos 4
- #define TIMR_IF_ICF_Msk (0x01 << TIMR_IF_ICF_Pos)
- #define TIMR_OCCR_FORCELVL_Pos 0 //Force Levle,强制输出电平
- #define TIMR_OCCR_FORCELVL_Msk (0x01 << TIMR_OCCR_FORCELVL_Pos)
- #define TIMR_OCCR_INITLVL_Pos 1 //Initial Level, 初始输出电平
- #define TIMR_OCCR_INITLVL_Msk (0x01 << TIMR_OCCR_INITLVL_Pos)
- #define TIMR_OCCR_FORCEEN_Pos 2 //Force Enable, 强制输出使能
- #define TIMR_OCCR_FORCEEN_Msk (0x01 << TIMR_OCCR_FORCEEN_Pos)
- typedef struct {
- __IO uint32_t HALLIE; //HALL中断使能
- uint32_t RESERVED;
- __IO uint32_t HALLIF;
- __IO uint32_t HALLEN; //HALL功能开关
- __IO uint32_t HALL0V; //HALL0输入跳变沿将Timer0(加载值 - 当前值)存入此寄存器
- __IO uint32_t HALL3V; //HALL3输入跳变沿将Timer3(加载值 - 当前值)存入此寄存器
- uint32_t RESERVED2;
- __IO uint32_t HALLSR; //HALL输入状态
- uint32_t RESERVED3[8];
- __IO uint32_t EN;
- } TIMRG_TypeDef;
- #define TIMRG_HALLIE_HALL0_Pos 0 //HALL0中断使能,HALL0使用Timer0计数器
- #define TIMRG_HALLIE_HALL0_Msk (0x01 << TIMRG_HALLIE_HALL0_Pos)
- #define TIMRG_HALLIE_HALL3_Pos 1
- #define TIMRG_HALLIE_HALL3_Msk (0x01 << TIMRG_HALLIE_HALL3_Pos)
- #define TIMRG_HALLIF_H0IN0_Pos 0 //HALL0输入信号0触发中断标志
- #define TIMRG_HALLIF_H0IN0_Msk (0x01 << TIMRG_HALLIF_H0IN0_Pos)
- #define TIMRG_HALLIF_H0IN1_Pos 1
- #define TIMRG_HALLIF_H0IN1_Msk (0x01 << TIMRG_HALLIF_H0IN1_Pos)
- #define TIMRG_HALLIF_H0IN2_Pos 2
- #define TIMRG_HALLIF_H0IN2_Msk (0x01 << TIMRG_HALLIF_H0IN2_Pos)
- #define TIMRG_HALLIF_H3IN0_Pos 3 //HALL3输入信号0触发中断标志
- #define TIMRG_HALLIF_H3IN0_Msk (0x01 << TIMRG_HALLIF_H3IN0_Pos)
- #define TIMRG_HALLIF_H3IN1_Pos 4
- #define TIMRG_HALLIF_H3IN1_Msk (0x01 << TIMRG_HALLIF_H3IN1_Pos)
- #define TIMRG_HALLIF_H3IN2_Pos 5
- #define TIMRG_HALLIF_H3IN2_Msk (0x01 << TIMRG_HALLIF_H3IN2_Pos)
- #define TIMRG_HALLEN_HALL0_Pos 0 //HALL0功能开关,HALL0使用Timer0计数器
- #define TIMRG_HALLEN_HALL0_Msk (0x01 << TIMRG_HALLEN_HALL0_Pos)
- #define TIMRG_HALLEN_HALL3_Pos 1
- #define TIMRG_HALLEN_HALL3_Msk (0x01 << TIMRG_HALLEN_HALL3_Pos)
- #define TIMRG_HALLSR_H0IN0_Pos 0 //HALL0输入信号0当前状态
- #define TIMRG_HALLSR_H0IN0_Msk (0x01 << TIMRG_HALLSR_H0IN0_Pos)
- #define TIMRG_HALLSR_H0IN1_Pos 1
- #define TIMRG_HALLSR_H0IN1_Msk (0x01 << TIMRG_HALLSR_H0IN1_Pos)
- #define TIMRG_HALLSR_H0IN2_Pos 2
- #define TIMRG_HALLSR_H0IN2_Msk (0x01 << TIMRG_HALLSR_H0IN2_Pos)
- #define TIMRG_HALLSR_H3IN0_Pos 3 //HALL3输入信号0当前状态
- #define TIMRG_HALLSR_H3IN0_Msk (0x01 << TIMRG_HALLSR_H3IN0_Pos)
- #define TIMRG_HALLSR_H3IN1_Pos 4
- #define TIMRG_HALLSR_H3IN1_Msk (0x01 << TIMRG_HALLSR_H3IN1_Pos)
- #define TIMRG_HALLSR_H3IN2_Pos 5
- #define TIMRG_HALLSR_H3IN2_Msk (0x01 << TIMRG_HALLSR_H3IN2_Pos)
- #define TIMRG_EN_TIMR0_Pos 0
- #define TIMRG_EN_TIMR0_Msk (0x01 << TIMRG_EN_TIMR0_Pos)
- #define TIMRG_EN_TIMR1_Pos 1
- #define TIMRG_EN_TIMR1_Msk (0x01 << TIMRG_EN_TIMR1_Pos)
- #define TIMRG_EN_TIMR2_Pos 2
- #define TIMRG_EN_TIMR2_Msk (0x01 << TIMRG_EN_TIMR2_Pos)
- #define TIMRG_EN_TIMR3_Pos 3
- #define TIMRG_EN_TIMR3_Msk (0x01 << TIMRG_EN_TIMR3_Pos)
- #define TIMRG_EN_TIMR4_Pos 4
- #define TIMRG_EN_TIMR4_Msk (0x01 << TIMRG_EN_TIMR4_Pos)
- #define TIMRG_EN_TIMR5_Pos 5
- #define TIMRG_EN_TIMR5_Msk (0x01 << TIMRG_EN_TIMR5_Pos)
- #define TIMRG_EN_TIMR6_Pos 6
- #define TIMRG_EN_TIMR6_Msk (0x01 << TIMRG_EN_TIMR6_Pos)
- #define TIMRG_EN_TIMR7_Pos 7
- #define TIMRG_EN_TIMR7_Msk (0x01 << TIMRG_EN_TIMR7_Pos)
- #define TIMRG_EN_TIMR8_Pos 8
- #define TIMRG_EN_TIMR8_Msk (0x01 << TIMRG_EN_TIMR8_Pos)
- #define TIMRG_EN_TIMR9_Pos 9
- #define TIMRG_EN_TIMR9_Msk (0x01 << TIMRG_EN_TIMR9_Pos)
- #define TIMRG_EN_TIMR10_Pos 10
- #define TIMRG_EN_TIMR10_Msk (0x01 << TIMRG_EN_TIMR10_Pos)
- #define TIMRG_EN_TIMR11_Pos 11
- #define TIMRG_EN_TIMR11_Msk (0x01 << TIMRG_EN_TIMR11_Pos)
- typedef struct {
- __IO uint32_t DATA;
- __IO uint32_t CTRL;
- __IO uint32_t BAUD;
- __IO uint32_t FIFO;
- __IO uint32_t LINCR;
- union {
- __IO uint32_t CTSCR;
- __IO uint32_t RTSCR;
- };
- __IO uint32_t CFG;
- __IO uint32_t TOCR; //Timeout Control Register
- } UART_TypeDef;
- #define UART_DATA_DATA_Pos 0
- #define UART_DATA_DATA_Msk (0x1FF << UART_DATA_DATA_Pos)
- #define UART_DATA_VALID_Pos 9 //当DATA字段有有效的接收数据时,该位硬件置1,读取数据后自动清零
- #define UART_DATA_VALID_Msk (0x01 << UART_DATA_VALID_Pos)
- #define UART_DATA_PAERR_Pos 10 //Parity Error
- #define UART_DATA_PAERR_Msk (0x01 << UART_DATA_PAERR_Pos)
- #define UART_CTRL_TXIDLE_Pos 0 //TX IDLE: 0 正在发送数据 1 空闲状态,没有数据发送
- #define UART_CTRL_TXIDLE_Msk (0x01 << UART_CTRL_TXIDLE_Pos)
- #define UART_CTRL_TXFF_Pos 1 //TX FIFO Full
- #define UART_CTRL_TXFF_Msk (0x01 << UART_CTRL_TXFF_Pos)
- #define UART_CTRL_TXIE_Pos 2 //TX 中断使能: 1 TX FF 中数据少于设定个数时产生中断
- #define UART_CTRL_TXIE_Msk (0x01 << UART_CTRL_TXIE_Pos)
- #define UART_CTRL_RXNE_Pos 3 //RX FIFO Not Empty
- #define UART_CTRL_RXNE_Msk (0x01 << UART_CTRL_RXNE_Pos)
- #define UART_CTRL_RXIE_Pos 4 //RX 中断使能: 1 RX FF 中数据达到设定个数时产生中断
- #define UART_CTRL_RXIE_Msk (0x01 << UART_CTRL_RXIE_Pos)
- #define UART_CTRL_RXOV_Pos 5 //RX FIFO Overflow,写1清零
- #define UART_CTRL_RXOV_Msk (0x01 << UART_CTRL_RXOV_Pos)
- #define UART_CTRL_TXDOIE_Pos 6 //TX Done 中断使能,发送FIFO空且发送发送移位寄存器已将最后一位发送出去
- #define UART_CTRL_TXDOIE_Msk (0x01 << UART_CTRL_TXDOIE_Pos)
- #define UART_CTRL_EN_Pos 9
- #define UART_CTRL_EN_Msk (0x01 << UART_CTRL_EN_Pos)
- #define UART_CTRL_LOOP_Pos 10
- #define UART_CTRL_LOOP_Msk (0x01 << UART_CTRL_LOOP_Pos)
- #define UART_CTRL_TOIE_Pos 14 //TimeOut 中断使能,接收到上个字符后,超过 TOTIME/BAUDRAUD 秒没有接收到新的数据
- #define UART_CTRL_TOIE_Msk (0x01 << UART_CTRL_TOIE_Pos)
- #define UART_CTRL_DATA9b_Pos 18 //1 9位数据位 0 8位数据位
- #define UART_CTRL_DATA9b_Msk (0x01 << UART_CTRL_DATA9b_Pos)
- #define UART_CTRL_PARITY_Pos 19 //000 无校验 001 奇校验 011 偶校验 101 固定为1 111 固定为0
- #define UART_CTRL_PARITY_Msk (0x07 << UART_CTRL_PARITY_Pos)
- #define UART_CTRL_STOP2b_Pos 22 //1 2位停止位 0 1位停止位
- #define UART_CTRL_STOP2b_Msk (0x03 << UART_CTRL_STOP2b_Pos)
- #define UART_BAUD_BAUD_Pos 0 //串口波特率 = SYS_Freq/16/BAUD - 1
- #define UART_BAUD_BAUD_Msk (0x3FFF << UART_BAUD_BAUD_Pos)
- #define UART_BAUD_TXD_Pos 14 //通过此位可直接读取串口TXD引脚上的电平
- #define UART_BAUD_TXD_Msk (0x01 << UART_BAUD_TXD_Pos)
- #define UART_BAUD_RXD_Pos 15 //通过此位可直接读取串口RXD引脚上的电平
- #define UART_BAUD_RXD_Msk (0x01 << UART_BAUD_RXD_Pos)
- #define UART_BAUD_RXTOIF_Pos 16 //接收&超时的中断标志 = RXIF | TOIF
- #define UART_BAUD_RXTOIF_Msk (0x01 << UART_BAUD_RXTOIF_Pos)
- #define UART_BAUD_TXIF_Pos 17 //发送中断标志 = TXTHRF & TXIE
- #define UART_BAUD_TXIF_Msk (0x01 << UART_BAUD_TXIF_Pos)
- #define UART_BAUD_RXTHRF_Pos 19 //RX FIFO Threshold Flag,RX FIFO中数据达到设定个数(RXLVL > RXTHR)时硬件置1
- #define UART_BAUD_RXTHRF_Msk (0x01 << UART_BAUD_RXTHRF_Pos)
- #define UART_BAUD_TXTHRF_Pos 20 //TX FIFO Threshold Flag,TX FIFO中数据少于设定个数(TXLVL <= TXTHR)时硬件置1
- #define UART_BAUD_TXTHRF_Msk (0x01 << UART_BAUD_TXTHRF_Pos)
- #define UART_BAUD_TOIF_Pos 21 //TimeOut 中断标志,超过 TOTIME/BAUDRAUD 秒没有接收到新的数据时若TOIE=1,此位由硬件置位
- #define UART_BAUD_TOIF_Msk (0x01 << UART_BAUD_TOIF_Pos)
- #define UART_BAUD_RXIF_Pos 22 //接收中断标志 = RXTHRF & RXIE
- #define UART_BAUD_RXIF_Msk (0x01 << UART_BAUD_RXIF_Pos)
- #define UART_BAUD_ABREN_Pos 23 //Auto Baudrate Enable,写1启动自动波特率校准,完成后自动清零
- #define UART_BAUD_ABREN_Msk (0x01 << UART_BAUD_ABREN_Pos)
- #define UART_BAUD_ABRBIT_Pos 24 //Auto Baudrate Bit,用于计算波特率的检测位长,0 1位,通过测起始位 脉宽计算波特率,要求发送端发送0xFF
- // 1 2位,通过测起始位加1位数据位脉宽计算波特率,要求发送端发送0xFE
- // 1 4位,通过测起始位加3位数据位脉宽计算波特率,要求发送端发送0xF8
- // 1 8位,通过测起始位加7位数据位脉宽计算波特率,要求发送端发送0x80
- #define UART_BAUD_ABRBIT_Msk (0x03 << UART_BAUD_ABRBIT_Pos)
- #define UART_BAUD_ABRERR_Pos 26 //Auto Baudrate Error,0 自动波特率校准成功 1 自动波特率校准失败
- #define UART_BAUD_ABRERR_Msk (0x01 << UART_BAUD_ABRERR_Pos)
- #define UART_BAUD_TXDOIF_Pos 27 //TX Done 中断标志,发送FIFO空且发送发送移位寄存器已将最后一位发送出去
- #define UART_BAUD_TXDOIF_Msk (0x01 << UART_BAUD_TXDOIF_Pos)
- #define UART_BAUD_FRAC_Pos 28 //波特率分频值小数部分
- #define UART_BAUD_FRAC_Msk (0x0Fu << UART_BAUD_FRAC_Pos)
- #define UART_FIFO_RXLVL_Pos 0 //RX FIFO Level,RX FIFO 中字符个数
- #define UART_FIFO_RXLVL_Msk (0xFF << UART_FIFO_RXLVL_Pos)
- #define UART_FIFO_TXLVL_Pos 8 //TX FIFO Level,TX FIFO 中字符个数
- #define UART_FIFO_TXLVL_Msk (0xFF << UART_FIFO_TXLVL_Pos)
- #define UART_FIFO_RXTHR_Pos 16 //RX FIFO Threshold,RX中断触发门限,中断使能时 RXLVL > RXTHR 触发RX中断
- #define UART_FIFO_RXTHR_Msk (0xFF << UART_FIFO_RXTHR_Pos)
- #define UART_FIFO_TXTHR_Pos 24 //TX FIFO Threshold,TX中断触发门限,中断使能时 TXLVL <= TXTHR 触发TX中断
- #define UART_FIFO_TXTHR_Msk (0xFFu<< UART_FIFO_TXTHR_Pos)
- #define UART_LINCR_BRKDETIE_Pos 0 //检测到LIN Break中断使能
- #define UART_LINCR_BRKDETIE_Msk (0x01 << UART_LINCR_BRKDETIE_Pos)
- #define UART_LINCR_BRKDETIF_Pos 1 //检测到LIN Break中断状态
- #define UART_LINCR_BRKDETIF_Msk (0x01 << UART_LINCR_BRKDETIF_Pos)
- #define UART_LINCR_GENBRKIE_Pos 2 //发送LIN Break完成中断使能
- #define UART_LINCR_GENBRKIE_Msk (0x01 << UART_LINCR_GENBRKIE_Pos)
- #define UART_LINCR_GENBRKIF_Pos 3 //发送LIN Break完成中断状态
- #define UART_LINCR_GENBRKIF_Msk (0x01 << UART_LINCR_GENBRKIF_Pos)
- #define UART_LINCR_GENBRK_Pos 4 //发送LIN Break,发送完成自动清零
- #define UART_LINCR_GENBRK_Msk (0x01 << UART_LINCR_GENBRK_Pos)
- #define UART_CTSCR_EN_Pos 0 //CTS流控使能
- #define UART_CTSCR_EN_Msk (0x01 << UART_CTSCR_EN_Pos)
- #define UART_CTSCR_POL_Pos 2 //CTS信号极性,0 低有效,CTS输入为低表示可以发送数据
- #define UART_CTSCR_POL_Msk (0x01 << UART_CTSCR_POL_Pos)
- #define UART_CTSCR_STAT_Pos 7 //CTS信号的当前状态
- #define UART_CTSCR_STAT_Msk (0x01 << UART_CTSCR_STAT_Pos)
- #define UART_RTSCR_EN_Pos 1 //RTS流控使能
- #define UART_RTSCR_EN_Msk (0x01 << UART_RTSCR_EN_Pos)
- #define UART_RTSCR_POL_Pos 3 //RTS信号极性 0 低有效,RTS输入为低表示可以接收数据
- #define UART_RTSCR_POL_Msk (0x01 << UART_RTSCR_POL_Pos)
- #define UART_RTSCR_THR_Pos 4 //RTS流控的触发阈值 0 1字节 1 2字节 2 4字节 3 6字节
- #define UART_RTSCR_THR_Msk (0x07 << UART_RTSCR_THR_Pos)
- #define UART_RTSCR_STAT_Pos 8 //RTS信号的当前状态
- #define UART_RTSCR_STAT_Msk (0x01 << UART_RTSCR_STAT_Pos)
- #define UART_CFG_RXEN_Pos 0 //RX Enable
- #define UART_CFG_RXEN_Msk (0x01 << UART_CFG_RXEN_Pos)
- #define UART_CFG_MSBF_Pos 1 //接收发送MSB First
- #define UART_CFG_MSBF_Msk (0x01 << UART_CFG_MSBF_Pos)
- #define UART_CFG_BRKTXLEN_Pos 2 //1表示1bit,以此类推,默认值13
- #define UART_CFG_BRKTXLEN_Msk (0x0F << UART_CFG_BRKTXLEN_Pos)
- #define UART_CFG_BRKRXLEN_Pos 6 //0表示1bit,以此类推,默认值12
- #define UART_CFG_BRKRXLEN_Msk (0x0F << UART_CFG_BRKRXLEN_Pos)
- #define UART_CFG_RXINV_Pos 10 //接收电平翻转
- #define UART_CFG_RXINV_Msk (0x01 << UART_CFG_RXINV_Pos)
- #define UART_CFG_TXINV_Pos 11 //发送电平翻转
- #define UART_CFG_TXINV_Msk (0x01 << UART_CFG_TXINV_Pos)
- #define UART_TOCR_TIME_Pos 0 //超时时间长度,单位为 10/BAUDRATE 秒
- #define UART_TOCR_TIME_Msk (0xFFF<< UART_TOCR_TIME_Pos)
- #define UART_TOCR_MODE_Pos 12 //0 只有当FIFO中有数时才触发超时中断 1 即使FIFO中没有数也可触发超时中断
- #define UART_TOCR_MODE_Msk (0x01 << UART_TOCR_MODE_Pos)
- #define UART_TOCR_IFCLR_Pos 13 //TO Interrupt Flag Clear,写1清除超时中断标志
- #define UART_TOCR_IFCLR_Msk (0x01 << UART_TOCR_IFCLR_Pos)
- typedef struct {
- __IO uint32_t CTRL;
- __IO uint32_t DATA;
- __IO uint32_t STAT;
- __IO uint32_t IE;
- __IO uint32_t IF;
- __IO uint32_t I2SCR;
- __IO uint32_t I2SPR;
- } SPI_TypeDef;
- #define SPI_CTRL_CLKDIV_Pos 0 //Clock Divider, SPI工作时钟 = SYS_Freq/pow(2, CLKDIV+2)
- #define SPI_CTRL_CLKDIV_Msk (0x07 << SPI_CTRL_CLKDIV_Pos)
- #define SPI_CTRL_EN_Pos 3
- #define SPI_CTRL_EN_Msk (0x01 << SPI_CTRL_EN_Pos)
- #define SPI_CTRL_SIZE_Pos 4 //Data Size Select, 取值3--15,表示4--16位
- #define SPI_CTRL_SIZE_Msk (0x0F << SPI_CTRL_SIZE_Pos)
- #define SPI_CTRL_CPHA_Pos 8 //0 在SCLK的第一个跳变沿采样数据 1 在SCLK的第二个跳变沿采样数据
- #define SPI_CTRL_CPHA_Msk (0x01 << SPI_CTRL_CPHA_Pos)
- #define SPI_CTRL_CPOL_Pos 9 //0 空闲状态下SCLK为低电平 1 空闲状态下SCLK为高电平
- #define SPI_CTRL_CPOL_Msk (0x01 << SPI_CTRL_CPOL_Pos)
- #define SPI_CTRL_FFS_Pos 10 //Frame Format Select, 0 SPI 1 TI SSI 2 I2S 3 SPI Flash
- #define SPI_CTRL_FFS_Msk (0x03 << SPI_CTRL_FFS_Pos)
- #define SPI_CTRL_MSTR_Pos 12 //Master, 1 主模式 0 从模式
- #define SPI_CTRL_MSTR_Msk (0x01 << SPI_CTRL_MSTR_Pos)
- #define SPI_CTRL_FAST_Pos 13 //1 SPI工作时钟 = SYS_Freq/2 0 SPI工作时钟由SPI->CTRL.CLKDIV设置
- #define SPI_CTRL_FAST_Msk (0x01 << SPI_CTRL_FAST_Pos)
- #define SPI_CTRL_DMATXEN_Pos 14 //1 通过DMA写FIFO 0 通过MCU写FIFO
- #define SPI_CTRL_DMATXEN_Msk (0x01 << SPI_CTRL_DMATXEN_Pos)
- #define SPI_CTRL_DMARXEN_Pos 15 //1 通过DMA读FIFO 0 通过MCU读FIFO
- #define SPI_CTRL_DMARXEN_Msk (0x01 << SPI_CTRL_DMARXEN_Pos)
- #define SPI_CTRL_FILTE_Pos 16 //1 对SPI输入信号进行去抖操作 0 对SPI输入信号不进行去抖操作
- #define SPI_CTRL_FILTE_Msk (0x01 << SPI_CTRL_FILTE_Pos)
- #define SPI_CTRL_SSN_H_Pos 17 //0 传输过程中SSN始终为0 1 传输过程中每字符之间会将SSN拉高半个SCLK周期
- #define SPI_CTRL_SSN_H_Msk (0x01 << SPI_CTRL_SSN_H_Pos)
- #define SPI_CTRL_RFTHR_Pos 18 //RX FIFO Threshold,0 接收FIFO中至少有1个数据 ... 7 接收FIFO中至少有8个数据
- #define SPI_CTRL_RFTHR_Msk (0x07 << SPI_CTRL_RFTHR_Pos)
- #define SPI_CTRL_TFTHR_Pos 21 //TX FIFO Threshold,0 发送FIFO中至多有0个数据 ... 7 发送FIFO中至多有7个数据
- #define SPI_CTRL_TFTHR_Msk (0x07 << SPI_CTRL_TFTHR_Pos)
- #define SPI_CTRL_RFCLR_Pos 24 //RX FIFO Clear
- #define SPI_CTRL_RFCLR_Msk (0x01 << SPI_CTRL_RFCLR_Pos)
- #define SPI_CTRL_TFCLR_Pos 25 //TX FIFO Clear
- #define SPI_CTRL_TFCLR_Msk (0x01 << SPI_CTRL_TFCLR_Pos)
- #define SPI_CTRL_LSBF_Pos 28 //LSB Fisrt
- #define SPI_CTRL_LSBF_Msk (0x01 << SPI_CTRL_LSBF_Pos)
- #define SPI_CTRL_NSYNC_Pos 29 //1 对SPI输入信号进行采样同步 0 对SPI输入信号不进行采样同步
- #define SPI_CTRL_NSYNC_Msk (0x01 << SPI_CTRL_NSYNC_Pos)
- #define SPI_STAT_WTC_Pos 0 //Word Transmit Complete,每传输完成一个数据字由硬件置1,软件写1清零
- #define SPI_STAT_WTC_Msk (0x01 << SPI_STAT_WTC_Pos)
- #define SPI_STAT_TFE_Pos 1 //发送FIFO Empty
- #define SPI_STAT_TFE_Msk (0x01 << SPI_STAT_TFE_Pos)
- #define SPI_STAT_TFNF_Pos 2 //发送FIFO Not Full
- #define SPI_STAT_TFNF_Msk (0x01 << SPI_STAT_TFNF_Pos)
- #define SPI_STAT_RFNE_Pos 3 //接收FIFO Not Empty
- #define SPI_STAT_RFNE_Msk (0x01 << SPI_STAT_RFNE_Pos)
- #define SPI_STAT_RFF_Pos 4 //接收FIFO Full
- #define SPI_STAT_RFF_Msk (0x01 << SPI_STAT_RFF_Pos)
- #define SPI_STAT_RFOV_Pos 5 //接收FIFO Overflow
- #define SPI_STAT_RFOV_Msk (0x01 << SPI_STAT_RFOV_Pos)
- #define SPI_STAT_TFLVL_Pos 6 //发送FIFO中数据个数, 0 TFNF=0时表示FIFO内有8个数据,TFNF=1时表示FIFO内有0个数据 1--7 FIFO内有1--7个数据
- #define SPI_STAT_TFLVL_Msk (0x07 << SPI_STAT_TFLVL_Pos)
- #define SPI_STAT_RFLVL_Pos 9 //接收FIFO中数据个数, 0 RFF =1时表示FIFO内有8个数据,RFF =0时表示FIFO内有0个数据 1--7 FIFO内有1--7个数据
- #define SPI_STAT_RFLVL_Msk (0x07 << SPI_STAT_RFLVL_Pos)
- #define SPI_STAT_BUSY_Pos 15
- #define SPI_STAT_BUSY_Msk (0x01 << SPI_STAT_BUSY_Pos)
- #define SPI_IE_RFOV_Pos 0
- #define SPI_IE_RFOV_Msk (0x01 << SPI_IE_RFOV_Pos)
- #define SPI_IE_RFF_Pos 1
- #define SPI_IE_RFF_Msk (0x01 << SPI_IE_RFF_Pos)
- #define SPI_IE_RFHF_Pos 2
- #define SPI_IE_RFHF_Msk (0x01 << SPI_IE_RFHF_Pos)
- #define SPI_IE_TFE_Pos 3
- #define SPI_IE_TFE_Msk (0x01 << SPI_IE_TFE_Pos)
- #define SPI_IE_TFHF_Pos 4 //发送FIFO中数据个数大于4
- #define SPI_IE_TFHF_Msk (0x01 << SPI_IE_TFHF_Pos)
- #define SPI_IE_RFTHR_Pos 5 //接收FIFO中数据个数大于CTRL.RFTHR设定值中断使能
- #define SPI_IE_RFTHR_Msk (0x01 << SPI_IE_RFTHR_Pos)
- #define SPI_IE_TFTHR_Pos 6 //发送FIFO中数据个数小于CTRL.TFTHR设定值中断使能
- #define SPI_IE_TFTHR_Msk (0x01 << SPI_IE_TFTHR_Pos)
- #define SPI_IE_WTC_Pos 8 //Word Transmit Complete
- #define SPI_IE_WTC_Msk (0x01 << SPI_IE_WTC_Pos)
- #define SPI_IE_FTC_Pos 9 //Frame Transmit Complete
- #define SPI_IE_FTC_Msk (0x01 << SPI_IE_FTC_Pos)
- #define SPI_IE_SSFALL_Pos 10 //Slave Select Fall Edge
- #define SPI_IE_SSFALL_Msk (0x01 << SPI_IE_SSFALL_Pos)
- #define SPI_IE_SSRISE_Pos 11 //Slave Select Rise Edge
- #define SPI_IE_SSRISE_Msk (0x01 << SPI_IE_SSRISE_Pos)
- #define SPI_IF_RFOV_Pos 0 //写1清零
- #define SPI_IF_RFOV_Msk (0x01 << SPI_IF_RFOV_Pos)
- #define SPI_IF_RFF_Pos 1 //写1清零
- #define SPI_IF_RFF_Msk (0x01 << SPI_IF_RFF_Pos)
- #define SPI_IF_RFHF_Pos 2 //写1清零
- #define SPI_IF_RFHF_Msk (0x01 << SPI_IF_RFHF_Pos)
- #define SPI_IF_TFE_Pos 3 //写1清零
- #define SPI_IF_TFE_Msk (0x01 << SPI_IF_TFE_Pos)
- #define SPI_IF_TFHF_Pos 4 //写1清零
- #define SPI_IF_TFHF_Msk (0x01 << SPI_IF_TFHF_Pos)
- #define SPI_IF_RFTHR_Pos 5 //写1清零
- #define SPI_IF_RFTHR_Msk (0x01 << SPI_IF_RFTHR_Pos)
- #define SPI_IF_TFTHR_Pos 6 //写1清零
- #define SPI_IF_TFTHR_Msk (0x01 << SPI_IF_TFTHR_Pos)
- #define SPI_IF_WTC_Pos 8 //Word Transmit Complete,每传输完成一个数据字由硬件置1
- #define SPI_IF_WTC_Msk (0x01 << SPI_IF_WTC_Pos)
- #define SPI_IF_FTC_Pos 9 //Frame Transmit Complete,WTC置位时若TX FIFO是空的,则FTC置位
- #define SPI_IF_FTC_Msk (0x01 << SPI_IF_FTC_Pos)
- #define SPI_IF_SSFALL_Pos 10
- #define SPI_IF_SSFALL_Msk (0x01 << SPI_IF_SSFALL_Pos)
- #define SPI_IF_SSRISE_Pos 11
- #define SPI_IF_SSRISE_Msk (0x01 << SPI_IF_SSRISE_Pos)
- #define SPI_I2SCR_DIEN_Pos 0 //Data Input Enable
- #define SPI_I2SCR_DIEN_Msk (0x01 << SPI_I2SCR_DIEN_Pos)
- #define SPI_I2SCR_DOEN_Pos 1 //Data Output Enable
- #define SPI_I2SCR_DOEN_Msk (0x01 << SPI_I2SCR_DOEN_Pos)
- #define SPI_I2SCR_MSTR_Pos 2 //Master Mode
- #define SPI_I2SCR_MSTR_Msk (0x01 << SPI_I2SCR_MSTR_Pos)
- #define SPI_I2SCR_EN_Pos 3
- #define SPI_I2SCR_EN_Msk (0x01 << SPI_I2SCR_EN_Pos)
- #define SPI_I2SCR_FFMT_Pos 4 //I2S Frame Format, 0 I2S philips 1 MSB justified 2 PCM Short 3 PCM Long
- #define SPI_I2SCR_FFMT_Msk (0x03 << SPI_I2SCR_FFMT_Pos)
- #define SPI_I2SCR_DLEN_Pos 6 //I2S Data Length, 0 8位 1 16位 2 24位 3 32位
- #define SPI_I2SCR_DLEN_Msk (0x03 << SPI_I2SCR_DLEN_Pos)
- #define SPI_I2SCR_PCMSYNW_Pos 8 //I2S PCM Long Mode Sync Width, 0 1 SCLK period 1 1 Data Length
- #define SPI_I2SCR_PCMSYNW_Msk (0x01 << SPI_I2SCR_PCMSYNW_Pos)
- #define SPI_I2SCR_MCLKOE_Pos 9 //MCLK Output Enable
- #define SPI_I2SCR_MCLKOE_Msk (0x01 << SPI_I2SCR_MCLKOE_Pos)
- #define SPI_I2SCR_CHLEN_Pos 10 //声道宽度,0 16位 1 32位
- #define SPI_I2SCR_CHLEN_Msk (0x01 << SPI_I2SCR_CHLEN_Pos)
- #define SPI_I2SCR_CHRIGHT_Pos 16 //1 Right Channel 0 Left Channel
- #define SPI_I2SCR_CHRIGHT_Msk (0x01 << SPI_I2SCR_CHRIGHT_Pos)
- #define SPI_I2SPR_MCLKDIV_Pos 0 //Fmclk = Fpclk / (2 * (MCLKDIV + 1)),MCLK一般是SCLK的256或384倍
- #define SPI_I2SPR_MCLKDIV_Msk (0x3F << SPI_I2SPR_MCLKDIV_Pos)
- #define SPI_I2SPR_SCLKDIV_Pos 8 //Fsclk = Fpclk / (2 * (SCLKDIV + 1))
- #define SPI_I2SPR_SCLKDIV_Msk (0xFFF<< SPI_I2SPR_SCLKDIV_Pos)
- typedef struct {
- __IO uint32_t CR;
- __IO uint32_t SR;
- __IO uint32_t TR; //Transfer Register
- __IO uint32_t RXDATA;
- __IO uint32_t TXDATA;
- __IO uint32_t IF;
- __IO uint32_t IE;
- uint32_t RESERVED1;
- __IO uint32_t MCR; //Master Control Register
- __IO uint32_t CLK;
- uint32_t RESERVED2[2];
- __IO uint32_t SCR; //Slave Control Register
- __IO uint32_t SADDR;
- } I2C_TypeDef;
- #define I2C_CR_EN_Pos 0
- #define I2C_CR_EN_Msk (0x01 << I2C_CR_EN_Pos)
- #define I2C_CR_MASTER_Pos 1 //1 Master 0 Slave
- #define I2C_CR_MASTER_Msk (0x01 << I2C_CR_MASTER_Pos)
- #define I2C_CR_HS_Pos 2 //1 High-Speed mode 0 Standard-mode or Fast-mode
- #define I2C_CR_HS_Msk (0x01 << I2C_CR_HS_Pos)
- #define I2C_CR_DNF_Pos 3 //Digital Noise Filter, 宽度低于 DNF+1 个的电平被认为是毛刺
- #define I2C_CR_DNF_Msk (0x0F << I2C_CR_DNF_Pos)
- #define I2C_SR_BUSY_Pos 0
- #define I2C_SR_BUSY_Msk (0x01 << I2C_SR_BUSY_Pos)
- #define I2C_SR_SCL_Pos 1 //SCL Line Level
- #define I2C_SR_SCL_Msk (0x01 << I2C_SR_SCL_Pos)
- #define I2C_SR_SDA_Pos 2 //SDA Line Level
- #define I2C_SR_SDA_Msk (0x01 << I2C_SR_SDA_Pos)
- #define I2C_TR_TXACK_Pos 0 //作为接收时,反馈ACK位的电平值
- #define I2C_TR_TXACK_Msk (0x01 << I2C_TR_TXACK_Pos)
- #define I2C_TR_RXACK_Pos 1 //作为发送时,接收到的ACK位电平值
- #define I2C_TR_RXACK_Msk (0x01 << I2C_TR_RXACK_Pos)
- #define I2C_TR_TXCLR_Pos 2 //TX Data Clear, 自动清零
- #define I2C_TR_TXCLR_Msk (0x01 << I2C_TR_TXCLR_Pos)
- #define I2C_TR_SLVACT_Pos 8 //Slave Active, 从机模式下被选中时置位
- #define I2C_TR_SLVACT_Msk (0x01 << I2C_TR_SLVACT_Pos)
- #define I2C_TR_SLVRD_Pos 9 //Slave Read mode,从机模式下接收到读请求时置位
- #define I2C_TR_SLVRD_Msk (0x01 << I2C_TR_SLVRD_Pos)
- #define I2C_TR_SLVWR_Pos 10 //Slave Write mode,从机模式下接收到写请求时置位
- #define I2C_TR_SLVWR_Msk (0x01 << I2C_TR_SLVWR_Pos)
- #define I2C_TR_SLVSTR_Pos 11 //Slave clock stretching
- #define I2C_TR_SLVSTR_Msk (0x01 << I2C_TR_SLVSTR_Pos)
- #define I2C_TR_SLVRDS_Pos 12 //Slave RXDATA Status, 0 空 1 接收到地址 2 接收到数据 3 接收到Master Code
- #define I2C_TR_SLVRDS_Msk (0x03 << I2C_TR_SLVRDS_Pos)
- #define I2C_IF_TXE_Pos 0 //TX Empty,写TXDATA清零此位
- #define I2C_IF_TXE_Msk (0x01 << I2C_IF_TXE_Pos)
- #define I2C_IF_RXNE_Pos 1 //RX Not Empty,读RXDATA清零此位
- #define I2C_IF_RXNE_Msk (0x01 << I2C_IF_RXNE_Pos)
- #define I2C_IF_RXOV_Pos 2 //RX Overflow,写1清零
- #define I2C_IF_RXOV_Msk (0x01 << I2C_IF_RXOV_Pos)
- #define I2C_IF_TXDONE_Pos 3 //TX Done,写1清零
- #define I2C_IF_TXDONE_Msk (0x01 << I2C_IF_TXDONE_Pos)
- #define I2C_IF_RXDONE_Pos 4 //RX Done,写1清零
- #define I2C_IF_RXDONE_Msk (0x01 << I2C_IF_RXDONE_Pos)
- #define I2C_IF_RXSTA_Pos 8 //从机接收到起始位,写1清零
- #define I2C_IF_RXSTA_Msk (0x01 << I2C_IF_RXSTA_Pos)
- #define I2C_IF_RXSTO_Pos 9 //从机接收到停止位,写1清零
- #define I2C_IF_RXSTO_Msk (0x01 << I2C_IF_RXSTO_Pos)
- #define I2C_IF_AL_Pos 16 //主机仲裁丢失总线,写1清零
- #define I2C_IF_AL_Msk (0x01 << I2C_IF_AL_Pos)
- #define I2C_IF_MLTO_Pos 17 //Master SCL Low Timeout,写1清零
- #define I2C_IF_MLTO_Msk (0x01 << I2C_IF_MLTO_Pos)
- #define I2C_IE_TXE_Pos 0
- #define I2C_IE_TXE_Msk (0x01 << I2C_IE_TXE_Pos)
- #define I2C_IE_RXNE_Pos 1
- #define I2C_IE_RXNE_Msk (0x01 << I2C_IE_RXNE_Pos)
- #define I2C_IE_RXOV_Pos 2
- #define I2C_IE_RXOV_Msk (0x01 << I2C_IE_RXOV_Pos)
- #define I2C_IE_TXDONE_Pos 3
- #define I2C_IE_TXDONE_Msk (0x01 << I2C_IE_TXDONE_Pos)
- #define I2C_IE_RXDONE_Pos 4
- #define I2C_IE_RXDONE_Msk (0x01 << I2C_IE_RXDONE_Pos)
- #define I2C_IE_RXSTA_Pos 8
- #define I2C_IE_RXSTA_Msk (0x01 << I2C_IE_RXSTA_Pos)
- #define I2C_IE_RXSTO_Pos 9
- #define I2C_IE_RXSTO_Msk (0x01 << I2C_IE_RXSTO_Pos)
- #define I2C_IE_AL_Pos 16
- #define I2C_IE_AL_Msk (0x01 << I2C_IE_AL_Pos)
- #define I2C_IE_MLTO_Pos 17
- #define I2C_IE_MLTO_Msk (0x01 << I2C_IE_MLTO_Pos)
- #define I2C_MCR_STA_Pos 0 //写1产生起始位,完成后自动清零
- #define I2C_MCR_STA_Msk (0x01 << I2C_MCR_STA_Pos)
- #define I2C_MCR_RD_Pos 1
- #define I2C_MCR_RD_Msk (0x01 << I2C_MCR_RD_Pos)
- #define I2C_MCR_WR_Pos 2
- #define I2C_MCR_WR_Msk (0x01 << I2C_MCR_WR_Pos)
- #define I2C_MCR_STO_Pos 3 //写1产生停止位,完成后自动清零
- #define I2C_MCR_STO_Msk (0x01 << I2C_MCR_STO_Pos)
- #define I2C_CLK_SCLL_Pos 0 //SCL Low Time
- #define I2C_CLK_SCLL_Msk (0xFF << I2C_CLK_SCLL_Pos)
- #define I2C_CLK_SCLH_Pos 8 //SCL High Time
- #define I2C_CLK_SCLH_Msk (0xFF << I2C_CLK_SCLH_Pos)
- #define I2C_CLK_DIV_Pos 16
- #define I2C_CLK_DIV_Msk (0xFF << I2C_CLK_DIV_Pos)
- #define I2C_CLK_SDAH_Pos 24 //SDA Hold Time
- #define I2C_CLK_SDAH_Msk (0x0F << I2C_CLK_SDAH_Pos)
- #define I2C_SCR_ADDR10_Pos 0 //1 10位地址 0 7位地址
- #define I2C_SCR_ADDR10_Msk (0x01 << I2C_SCR_ADDR10_Pos)
- #define I2C_SCR_MCDE_Pos 1 //Master Code Detect Enable
- #define I2C_SCR_MCDE_Msk (0x01 << I2C_SCR_MCDE_Pos)
- #define I2C_SCR_STRE_Pos 2 //Clock Stretching Enable
- #define I2C_SCR_STRE_Msk (0x01 << I2C_SCR_STRE_Pos)
- #define I2C_SCR_ASDS_Pos 3 //Adaptive Stretching Data Setup
- #define I2C_SCR_ASDS_Msk (0x01 << I2C_SCR_ASDS_Pos)
- #define I2C_SADDR_ADDR7_Pos 1 //7位地址模式下的地址
- #define I2C_SADDR_ADDR7_Msk (0x7F << I2C_SADDR_ADDR7_Pos)
- #define I2C_SADDR_ADDR10_Pos 0 //10位地址模式下的地址
- #define I2C_SADDR_ADDR10_Msk (0x3FF<< I2C_SADDR_ADDR10_Pos)
- #define I2C_SADDR_MASK7_Pos 17 //7位地址模式下的地址掩码,ADDR7 & (~MASK7) 后与接收地址比较
- #define I2C_SADDR_MASK7_Msk (0x7F << I2C_SADDR_MASK7_Pos)
- #define I2C_SADDR_MASK10_Pos 16 //10位地址模式下的地址掩码,只掩码低8位
- #define I2C_SADDR_MASK10_Msk (0xFF << I2C_SADDR_MASK10_Pos)
- typedef struct {
- __IO uint32_t CR;
- __IO uint32_t GO;
- __IO uint32_t IE;
- __IO uint32_t IF;
- struct {
- __IO uint32_t SR;
- __IO uint32_t DR;
- __IO uint32_t CMP;
- uint32_t RESERVED;
- } SEQ[4];
- uint32_t RESERVED[15];
- __IO uint32_t SEQCHN0;
- __IO uint32_t SEQCHN1; //序列通道选择
- __IO uint32_t SEQTRG; //序列触发选择
- __IO uint32_t SEQCOV; //序列转换次数,序列被触发启动后可连续转换多次,此处指定转换次数
- __IO uint32_t SEQSMP; //序列采样时间,采样保持时间
- uint32_t RESERVED2[4];
- __IO uint32_t CR2;
- uint32_t RESERVED3[15];
- __IO uint32_t CALIB;
- } ADC_TypeDef;
- #define ADC_CR_EN_Pos 0
- #define ADC_CR_EN_Msk (0x01 << ADC_CR_EN_Pos)
- #define ADC_CR_AVG_Pos 1 //0 1次采样 1 2次采样取平均值 2 4次采样取平均值 3 8次采样取平均值
- #define ADC_CR_AVG_Msk (0x03 << ADC_CR_AVG_Pos)
- #define ADC_CR_RESET_Pos 3 //复位模拟模块,置位至少需两个采样周期
- #define ADC_CR_RESET_Msk (0x01 << ADC_CR_RESET_Pos)
- #define ADC_CR_DMAEN_Pos 4 //四位,每位对应一个序列,同一时刻只能一个有一个序列使能DMA,0 能通过CPU读取DATA_FIFO 1 只能通过DMA读取DATA_FIFO
- #define ADC_CR_DMAEN_Msk (0x0F << ADC_CR_DMAEN_Pos)
- #define ADC_CR_FFCLR_Pos 8 //FIFO Clear,四位,每位对应一个序列
- #define ADC_CR_FFCLR_Msk (0x0F << ADC_CR_FFCLR_Pos)
- #define ADC_GO_SEQ0_Pos 0 //序列3转换启动位
- #define ADC_GO_SEQ0_Msk (0x01 << ADC_GO_SEQ0_Pos)
- #define ADC_GO_SEQ1_Pos 1
- #define ADC_GO_SEQ1_Msk (0x01 << ADC_GO_SEQ1_Pos)
- #define ADC_GO_SEQ2_Pos 2
- #define ADC_GO_SEQ2_Msk (0x01 << ADC_GO_SEQ2_Pos)
- #define ADC_GO_SEQ3_Pos 3
- #define ADC_GO_SEQ3_Msk (0x01 << ADC_GO_SEQ3_Pos)
- #define ADC_GO_BUSY_Pos 4
- #define ADC_GO_BUSY_Msk (0x01 << ADC_GO_BUSY_Pos)
- #define ADC_IE_SEQ0EOC_Pos 0 //序列0 End Of Convertion 中断使能
- #define ADC_IE_SEQ0EOC_Msk (0x01 << ADC_IE_SEQ0EOC_Pos)
- #define ADC_IE_SEQ0OVF_Pos 1 //序列0 FIFO Overflow 中断使能
- #define ADC_IE_SEQ0OVF_Msk (0x01 << ADC_IE_SEQ0OVF_Pos)
- #define ADC_IE_SEQ0HALF_Pos 2 //序列0 FIFO Half Full 中断使能
- #define ADC_IE_SEQ0HALF_Msk (0x01 << ADC_IE_SEQ0HALF_Pos)
- #define ADC_IE_SEQ0FULL_Pos 3 //序列0 FIFO Full 中断使能
- #define ADC_IE_SEQ0FULL_Msk (0x01 << ADC_IE_SEQ0FULL_Pos)
- #define ADC_IE_SEQ0CMPMAX_Pos 4 //序列0转换结果大于COMP.MAX中断使能
- #define ADC_IE_SEQ0CMPMAX_Msk (0x01 << ADC_IE_SEQ0CMPMAX_Pos)
- #define ADC_IE_SEQ0CMPMIN_Pos 5 //序列0转换结果小于COMP.MIN中断使能
- #define ADC_IE_SEQ0CMPMIN_Msk (0x01 << ADC_IE_SEQ0CMPMIN_Pos)
- #define ADC_IE_SEQ1EOC_Pos 8
- #define ADC_IE_SEQ1EOC_Msk (0x01 << ADC_IE_SEQ1EOC_Pos)
- #define ADC_IE_SEQ1OVF_Pos 9
- #define ADC_IE_SEQ1OVF_Msk (0x01 << ADC_IE_SEQ1OVF_Pos)
- #define ADC_IE_SEQ1HALF_Pos 10
- #define ADC_IE_SEQ1HALF_Msk (0x01 << ADC_IE_SEQ1HALF_Pos)
- #define ADC_IE_SEQ1FULL_Pos 11
- #define ADC_IE_SEQ1FULL_Msk (0x01 << ADC_IE_SEQ1FULL_Pos)
- #define ADC_IE_SEQ1CMPMAX_Pos 12
- #define ADC_IE_SEQ1CMPMAX_Msk (0x01 << ADC_IE_SEQ1CMPMAX_Pos)
- #define ADC_IE_SEQ1CMPMIN_Pos 13
- #define ADC_IE_SEQ1CMPMIN_Msk (0x01 << ADC_IE_SEQ1CMPMIN_Pos)
- #define ADC_IE_SEQ2EOC_Pos 16
- #define ADC_IE_SEQ2EOC_Msk (0x01 << ADC_IE_SEQ2EOC_Pos)
- #define ADC_IE_SEQ2OVF_Pos 17
- #define ADC_IE_SEQ2OVF_Msk (0x01 << ADC_IE_SEQ2OVF_Pos)
- #define ADC_IE_SEQ2HALF_Pos 18
- #define ADC_IE_SEQ2HALF_Msk (0x01 << ADC_IE_SEQ2HALF_Pos)
- #define ADC_IE_SEQ2FULL_Pos 19
- #define ADC_IE_SEQ2FULL_Msk (0x01 << ADC_IE_SEQ2FULL_Pos)
- #define ADC_IE_SEQ2CMPMAX_Pos 20
- #define ADC_IE_SEQ2CMPMAX_Msk (0x01 << ADC_IE_SEQ2CMPMAX_Pos)
- #define ADC_IE_SEQ2CMPMIN_Pos 21
- #define ADC_IE_SEQ2CMPMIN_Msk (0x01 << ADC_IE_SEQ2CMPMIN_Pos)
- #define ADC_IE_SEQ3EOC_Pos 24
- #define ADC_IE_SEQ3EOC_Msk (0x01 << ADC_IE_SEQ3EOC_Pos)
- #define ADC_IE_SEQ3OVF_Pos 25
- #define ADC_IE_SEQ3OVF_Msk (0x01 << ADC_IE_SEQ3OVF_Pos)
- #define ADC_IE_SEQ3HALF_Pos 26
- #define ADC_IE_SEQ3HALF_Msk (0x01 << ADC_IE_SEQ3HALF_Pos)
- #define ADC_IE_SEQ3FULL_Pos 27
- #define ADC_IE_SEQ3FULL_Msk (0x01 << ADC_IE_SEQ3FULL_Pos)
- #define ADC_IE_SEQ3CMPMAX_Pos 28
- #define ADC_IE_SEQ3CMPMAX_Msk (0x01 << ADC_IE_SEQ3CMPMAX_Pos)
- #define ADC_IE_SEQ3CMPMIN_Pos 29
- #define ADC_IE_SEQ3CMPMIN_Msk (0x01 << ADC_IE_SEQ3CMPMIN_Pos)
- #define ADC_IF_SEQ0EOC_Pos 0 //序列0 End Of Convertion 中断标志
- #define ADC_IF_SEQ0EOC_Msk (0x01 << ADC_IF_SEQ0EOC_Pos)
- #define ADC_IF_SEQ0OVF_Pos 1 //序列0 FIFO Overflow 中断标志
- #define ADC_IF_SEQ0OVF_Msk (0x01 << ADC_IF_SEQ0OVF_Pos)
- #define ADC_IF_SEQ0HALF_Pos 2 //序列0 FIFO Half Full 中断标志
- #define ADC_IF_SEQ0HALF_Msk (0x01 << ADC_IF_SEQ0HALF_Pos)
- #define ADC_IF_SEQ0FULL_Pos 3 //序列0 FIFO Full 中断标志
- #define ADC_IF_SEQ0FULL_Msk (0x01 << ADC_IF_SEQ0FULL_Pos)
- #define ADC_IF_SEQ0CMPMAX_Pos 4 //序列0转换结果大于COMP.MAX中断标志
- #define ADC_IF_SEQ0CMPMAX_Msk (0x01 << ADC_IF_SEQ0CMPMAX_Pos)
- #define ADC_IF_SEQ0CMPMIN_Pos 5 //序列0转换结果小于COMP.MIN中断标志
- #define ADC_IF_SEQ0CMPMIN_Msk (0x01 << ADC_IF_SEQ0CMPMIN_Pos)
- #define ADC_IF_SEQ1EOC_Pos 8
- #define ADC_IF_SEQ1EOC_Msk (0x01 << ADC_IF_SEQ1EOC_Pos)
- #define ADC_IF_SEQ1OVF_Pos 9
- #define ADC_IF_SEQ1OVF_Msk (0x01 << ADC_IF_SEQ1OVF_Pos)
- #define ADC_IF_SEQ1HALF_Pos 10
- #define ADC_IF_SEQ1HALF_Msk (0x01 << ADC_IF_SEQ1HALF_Pos)
- #define ADC_IF_SEQ1FULL_Pos 11
- #define ADC_IF_SEQ1FULL_Msk (0x01 << ADC_IF_SEQ1FULL_Pos)
- #define ADC_IF_SEQ1CMPMAX_Pos 12
- #define ADC_IF_SEQ1CMPMAX_Msk (0x01 << ADC_IF_SEQ1CMPMAX_Pos)
- #define ADC_IF_SEQ1CMPMIN_Pos 13
- #define ADC_IF_SEQ1CMPMIN_Msk (0x01 << ADC_IF_SEQ1CMPMIN_Pos)
- #define ADC_IF_SEQ2EOC_Pos 16
- #define ADC_IF_SEQ2EOC_Msk (0x01 << ADC_IF_SEQ2EOC_Pos)
- #define ADC_IF_SEQ2OVF_Pos 17
- #define ADC_IF_SEQ2OVF_Msk (0x01 << ADC_IF_SEQ2OVF_Pos)
- #define ADC_IF_SEQ2HALF_Pos 18
- #define ADC_IF_SEQ2HALF_Msk (0x01 << ADC_IF_SEQ2HALF_Pos)
- #define ADC_IF_SEQ2FULL_Pos 19
- #define ADC_IF_SEQ2FULL_Msk (0x01 << ADC_IF_SEQ2FULL_Pos)
- #define ADC_IF_SEQ2CMPMAX_Pos 20
- #define ADC_IF_SEQ2CMPMAX_Msk (0x01 << ADC_IF_SEQ2CMPMAX_Pos)
- #define ADC_IF_SEQ2CMPMIN_Pos 21
- #define ADC_IF_SEQ2CMPMIN_Msk (0x01 << ADC_IF_SEQ2CMPMIN_Pos)
- #define ADC_IF_SEQ3EOC_Pos 24
- #define ADC_IF_SEQ3EOC_Msk (0x01 << ADC_IF_SEQ3EOC_Pos)
- #define ADC_IF_SEQ3OVF_Pos 25
- #define ADC_IF_SEQ3OVF_Msk (0x01 << ADC_IF_SEQ3OVF_Pos)
- #define ADC_IF_SEQ3HALF_Pos 26
- #define ADC_IF_SEQ3HALF_Msk (0x01 << ADC_IF_SEQ3HALF_Pos)
- #define ADC_IF_SEQ3FULL_Pos 27
- #define ADC_IF_SEQ3FULL_Msk (0x01 << ADC_IF_SEQ3FULL_Pos)
- #define ADC_IF_SEQ3CMPMAX_Pos 28
- #define ADC_IF_SEQ3CMPMAX_Msk (0x01 << ADC_IF_SEQ3CMPMAX_Pos)
- #define ADC_IF_SEQ3CMPMIN_Pos 29
- #define ADC_IF_SEQ3CMPMIN_Msk (0x01 << ADC_IF_SEQ3CMPMIN_Pos)
- #define ADC_SR_EOC_Pos 0 //End Of Conversion,ADC开始转换时硬件清零
- #define ADC_SR_EOC_Msk (0x01 << ADC_SR_EOC_Pos)
- #define ADC_SR_OVF_Pos 1 //FIFO Overflow
- #define ADC_SR_OVF_Msk (0x01 << ADC_SR_OVF_Pos)
- #define ADC_SR_HALF_Pos 2 //FIFO Half Full
- #define ADC_SR_HALF_Msk (0x01 << ADC_SR_HALF_Pos)
- #define ADC_SR_FULL_Pos 3 //FIFO Full
- #define ADC_SR_FULL_Msk (0x01 << ADC_SR_FULL_Pos)
- #define ADC_SR_EMPTY_Pos 4 //FIFO Empty
- #define ADC_SR_EMPTY_Msk (0x01 << ADC_SR_EMPTY_Pos)
- #define ADC_SR_LEVEL_Pos 5 //FIFO中数据个数,1~7:FIFO中有1~7个数据 0 FIFO Empty时表示0个数据,FIFO Full时表示8个数据
- #define ADC_SR_LEVEL_Msk (0x07 << ADC_SR_LEVEL_Pos)
- #define ADC_DR_VALUE_Pos 0
- #define ADC_DR_VALUE_Msk (0xFFF<< ADC_DR_VALUE_Pos)
- #define ADC_DR_CHNUM_Pos 12
- #define ADC_DR_CHNUM_Msk (0x0F << ADC_DR_CHNUM_Pos)
- #define ADC_CMP_MAX_Pos 0
- #define ADC_CMP_MAX_Msk (0xFFF<< ADC_CMP_MAX_Pos)
- #define ADC_CMP_MIN_Pos 16
- #define ADC_CMP_MIN_Msk (0xFFF<< ADC_CMP_MIN_Pos)
- #define ADC_SEQCHN0_SEQ0_Pos 0 //序列0通道选择,12位对应12个通道,bitx置位表示将通道x加入序列0
- #define ADC_SEQCHN0_SEQ0_Msk (0xFFF << ADC_SEQCHN0_SEQ0_Pos)
- #define ADC_SEQCHN0_SEQ1_Pos 16
- #define ADC_SEQCHN0_SEQ1_Msk (0xFFF << ADC_SEQCHN0_SEQ1_Pos)
- #define ADC_SEQCHN1_SEQ2_Pos 0
- #define ADC_SEQCHN1_SEQ2_Msk (0xFFF << ADC_SEQCHN1_SEQ2_Pos)
- #define ADC_SEQCHN1_SEQ3_Pos 16
- #define ADC_SEQCHN1_SEQ3_Msk (0xFFF << ADC_SEQCHN1_SEQ3_Pos)
- #define ADC_SEQTRG_SEQ0_Pos 0 //序列0触发选择,0x01 CPU 0x02 TIMR2 0x03 TIMR3 0x04-07 ADC_TRIG0-3引脚 0x10-1F PWM0A-PWM7B
- #define ADC_SEQTRG_SEQ0_Msk (0x1F << ADC_SEQTRG_SEQ0_Pos)
- #define ADC_SEQTRG_SEQ1_Pos 8
- #define ADC_SEQTRG_SEQ1_Msk (0x1F << ADC_SEQTRG_SEQ1_Pos)
- #define ADC_SEQTRG_SEQ2_Pos 16
- #define ADC_SEQTRG_SEQ2_Msk (0x1F << ADC_SEQTRG_SEQ2_Pos)
- #define ADC_SEQTRG_SEQ3_Pos 24
- #define ADC_SEQTRG_SEQ3_Msk (0x1F << ADC_SEQTRG_SEQ3_Pos)
- #define ADC_SEQCOV_SEQ0_Pos 0 //序列0转换次数,0x00 转换1次
- #define ADC_SEQCOV_SEQ0_Msk (0xFF << ADC_SEQCOV_SEQ0_Pos)
- #define ADC_SEQCOV_SEQ1_Pos 8
- #define ADC_SEQCOV_SEQ1_Msk (0xFF << ADC_SEQCOV_SEQ1_Pos)
- #define ADC_SEQCOV_SEQ2_Pos 16
- #define ADC_SEQCOV_SEQ2_Msk (0xFF << ADC_SEQCOV_SEQ2_Pos)
- #define ADC_SEQCOV_SEQ3_Pos 24
- #define ADC_SEQCOV_SEQ3_Msk (0xFF << ADC_SEQCOV_SEQ3_Pos)
- #define ADC_SEQSMP_SEQ0_Pos 0 //序列0采样时间,0/1/2/3 采样建立时间保持1/2/4/8个采样时钟周期
- #define ADC_SEQSMP_SEQ0_Msk (0x07 << ADC_SEQSMP_SEQ0_Pos)
- #define ADC_SEQSMP_SEQ1_Pos 4
- #define ADC_SEQSMP_SEQ1_Msk (0x07 << ADC_SEQSMP_SEQ1_Pos)
- #define ADC_SEQSMP_SEQ2_Pos 8
- #define ADC_SEQSMP_SEQ2_Msk (0x07 << ADC_SEQSMP_SEQ2_Pos)
- #define ADC_SEQSMP_SEQ3_Pos 12
- #define ADC_SEQSMP_SEQ3_Msk (0x07 << ADC_SEQSMP_SEQ3_Pos)
- #define ADC_CR2_ENLDO_Pos 2 //该信号由0变为1后,至少需要等20us才能使能ADC(将ADC_EN置为1)
- #define ADC_CR2_ENLDO_Msk (0x01 << ADC_CR2_ENLDO_Pos)
- #define ADC_CR2_BITS_Pos 6 //ADC位数,0 6位 1 8位 2 10位 3 12位
- #define ADC_CR2_BITS_Msk (0x03 << ADC_CR2_BITS_Pos)
- #define ADC_CALIB_RESET_Pos 0 //校准模块复位,至少保持2个采样周期
- #define ADC_CALIB_RESET_Msk (0x01 << ADC_CALIB_RESET_Pos)
- #define ADC_CALIB_START_Pos 1 //写1启动校准,硬件清零
- #define ADC_CALIB_START_Msk (0x01 << ADC_CALIB_START_Pos)
- #define ADC_CALIB_BUSY_Pos 2 //1 正在执行校准
- #define ADC_CALIB_BUSY_Msk (0x01 << ADC_CALIB_BUSY_Pos)
- #define ADC_CALIB_LOAD_Pos 3 //写1将校准结果加载到ADC中,硬件清零
- #define ADC_CALIB_LOAD_Msk (0x01 << ADC_CALIB_LOAD_Pos)
- #define ADC_CALIB_BYPASS_Pos 4 //1 旁路校准模块
- #define ADC_CALIB_BYPASS_Msk (0x01 << ADC_CALIB_BYPASS_Pos)
- #define ADC_CALIB_RESULT_Pos 8
- #define ADC_CALIB_RESULT_Msk (0x7F << ADC_CALIB_RESULT_Pos)
- typedef struct {
- __IO uint32_t CR;
- __IO uint32_t OCR;
- __IO uint32_t BRKCR;
- __IO uint32_t BRKIN;
- uint32_t RESERVED[4];
- __IO uint32_t PERIOD; //[15:0] 周期
- __IO uint32_t CMPA; //[15:0] A路翻转点比较值
- __IO uint32_t CMPB; //[15:0] B路翻转点比较值
- __IO uint32_t DZA; //[9:0] 死区
- __IO uint32_t DZB;
- __IO uint32_t CMPA2; //非对称中心对齐模式下,向下计数过程中,A路翻转点比较值
- __IO uint32_t CMPB2; //非对称中心对齐模式下,向下计数过程中,B路翻转点比较值
- uint32_t RESERVED2[5];
- __IO uint32_t OVFTRG;
- __IO uint32_t CMPTRG;
- uint32_t RESERVED3[2];
- __IO uint32_t EVMUX;
- __IO uint32_t EVMSK;
- uint32_t RESERVED4[2];
- __IO uint32_t IE;
- __IO uint32_t IF;
- __IO uint32_t VALUE;
- __IO uint32_t SR;
- } PWM_TypeDef;
- #define PWM_CR_MODE_Pos 0 //0 边沿对齐模式 1 中心对齐模式 2 非对称中心对齐模式
- #define PWM_CR_MODE_Msk (0x03 << PWM_CR_MODE_Pos)
- #define PWM_CR_MULT_Pos 2 //0 单次计数模式 1 多次计数模式
- #define PWM_CR_MULT_Msk (0x01 << PWM_CR_MULT_Pos)
- #define PWM_CR_DIR_Pos 3 //计数器计数方向, 0 向上计数 1 向下计数
- #define PWM_CR_DIR_Msk (0x01 << PWM_CR_DIR_Pos)
- #define PWM_CR_CLKSRC_Pos 4 //计数时钟源,0 系统时钟 1 PWM_PULSE0输入 2 PWM_PULSE1输入
- #define PWM_CR_CLKSRC_Msk (0x03 << PWM_CR_CLKSRC_Pos)
- #define PWM_CR_CLKDIV_Pos 6 //计数时钟预分频, 0 1分频 1 2分频 ... 1023 1024分频
- #define PWM_CR_CLKDIV_Msk (0x3FF<< PWM_CR_CLKDIV_Pos)
- #define PWM_CR_RPTNUM_Pos 16 //计数器溢出多少次执行一次寄存器重载,0 1次 1 2次 ... 255 256次
- #define PWM_CR_RPTNUM_Msk (0xFF << PWM_CR_RPTNUM_Pos)
- #define PWM_OCR_IDLEA_Pos 0 //A路空闲时输出电平
- #define PWM_OCR_IDLEA_Msk (0x01 << PWM_OCR_IDLEA_Pos)
- #define PWM_OCR_IDLEB_Pos 1 //B路空闲时输出电平
- #define PWM_OCR_IDLEB_Msk (0x01 << PWM_OCR_IDLEB_Pos)
- #define PWM_OCR_IDLEAN_Pos 2 //AN路空闲时输出电平
- #define PWM_OCR_IDLEAN_Msk (0x01 << PWM_OCR_IDLEAN_Pos)
- #define PWM_OCR_IDLEBN_Pos 3 //BN路空闲时输出电平
- #define PWM_OCR_IDLEBN_Msk (0x01 << PWM_OCR_IDLEBN_Pos)
- #define PWM_OCR_INVA_Pos 4 //A路输出是否取反
- #define PWM_OCR_INVA_Msk (0x01 << PWM_OCR_INVA_Pos)
- #define PWM_OCR_INVB_Pos 5 //B路输出是否取反
- #define PWM_OCR_INVB_Msk (0x01 << PWM_OCR_INVB_Pos)
- #define PWM_OCR_INVAN_Pos 6 //AN路输出是否取反
- #define PWM_OCR_INVAN_Msk (0x01 << PWM_OCR_INVAN_Pos)
- #define PWM_OCR_INVBN_Pos 7 //BN路输出是否取反
- #define PWM_OCR_INVBN_Msk (0x01 << PWM_OCR_INVBN_Pos)
- #define PWM_BRKCR_OUTA_Pos 0 //刹车状态下A路输出电平
- #define PWM_BRKCR_OUTA_Msk (0x01 << PWM_BRKCR_OUTA_Pos)
- #define PWM_BRKCR_OFFA_Pos 1 //刹车信号撤销时A路输出,0 立即恢复正常输出 1 保持当前输出直到计数器溢出再恢复正常输出
- #define PWM_BRKCR_OFFA_Msk (0x01 << PWM_BRKCR_OFFA_Pos)
- #define PWM_BRKCR_OUTB_Pos 4 //刹车状态下B路输出电平
- #define PWM_BRKCR_OUTB_Msk (0x01 << PWM_BRKCR_OUTB_Pos)
- #define PWM_BRKCR_OFFB_Pos 5 //刹车信号撤销时B路输出,0 立即恢复正常输出 1 保持当前输出直到计数器溢出再恢复正常输出
- #define PWM_BRKCR_OFFB_Msk (0x01 << PWM_BRKCR_OFFB_Pos)
- #define PWM_BRKCR_OUTAN_Pos 8 //刹车状态下AN路输出电平
- #define PWM_BRKCR_OUTAN_Msk (0x01 << PWM_BRKCR_OUTAN_Pos)
- #define PWM_BRKCR_OUTBN_Pos 9 //刹车状态下BN路输出电平
- #define PWM_BRKCR_OUTBN_Msk (0x01 << PWM_BRKCR_OUTBN_Pos)
- #define PWM_BRKCR_STPCNT_Pos 10 //刹车状态下是否停止计数器,1 停止计数器 0 继续计数
- #define PWM_BRKCR_STPCNT_Msk (0x01 << PWM_BRKCR_STPCNT_Pos)
- #define PWM_BRKCR_ACTIVE_Pos 17 //当前是否处于刹车状态
- #define PWM_BRKCR_ACTIVE_Msk (0x01 << PWM_BRKCR_ACTIVE_Pos)
- #define PWM_BRKIN_BRK0A_Pos 0 //A路是否受刹车输入PWM_BRK0影响
- #define PWM_BRKIN_BRK0A_Msk (0x01 << PWM_BRKIN_BRK0A_Pos)
- #define PWM_BRKIN_BRK1A_Pos 1
- #define PWM_BRKIN_BRK1A_Msk (0x01 << PWM_BRKIN_BRK1A_Pos)
- #define PWM_BRKIN_BRK2A_Pos 2
- #define PWM_BRKIN_BRK2A_Msk (0x01 << PWM_BRKIN_BRK2A_Pos)
- #define PWM_BRKIN_BRK0B_Pos 4
- #define PWM_BRKIN_BRK0B_Msk (0x01 << PWM_BRKIN_BRK0B_Pos)
- #define PWM_BRKIN_BRK1B_Pos 5
- #define PWM_BRKIN_BRK1B_Msk (0x01 << PWM_BRKIN_BRK1B_Pos)
- #define PWM_BRKIN_BRK2B_Pos 6
- #define PWM_BRKIN_BRK2B_Msk (0x01 << PWM_BRKIN_BRK2B_Pos)
- #define PWM_OVFTRG_UPEN_Pos 0 //计数器向上溢出Trigger使能
- #define PWM_OVFTRG_UPEN_Msk (0x01 << PWM_OVFTRG_UPEN_Pos)
- #define PWM_OVFTRG_DNEN_Pos 1 //计数器向下溢出Trigger使能
- #define PWM_OVFTRG_DNEN_Msk (0x01 << PWM_OVFTRG_DNEN_Pos)
- #define PWM_OVFTRG_MUX_Pos 2 //Trigger输出到哪一路,0 trig[0] 1 trig[1] 2 trig[2] ... 7 trig[7]
- #define PWM_OVFTRG_MUX_Msk (0x07 << PWM_OVFTRG_MUX_Pos)
- #define PWM_CMPTRG_CMP_Pos 0 //计数器值与此比较值相等时产生Trigger信号
- #define PWM_CMPTRG_CMP_Msk (0xFFFF<<PWM_CMPTRG_CMP_Pos)
- #define PWM_CMPTRG_EN_Pos 16
- #define PWM_CMPTRG_EN_Msk (0x01 << PWM_CMPTRG_EN_Pos)
- #define PWM_CMPTRG_MUX_Pos 17 //Trigger输出到哪一路,0 trig[0] 1 trig[1] 2 trig[2] ... 7 trig[7]
- #define PWM_CMPTRG_MUX_Msk (0x07 << PWM_CMPTRG_MUX_Pos)
- #define PWM_CMPTRG_WIDTH_Pos 20 //Trigger输出信号宽度,0 无输出 1 4个计数时钟 2 8个计数时钟 ... 63 252个计数时钟
- #define PWM_CMPTRG_WIDTH_Msk (0x3F << PWM_CMPTRG_WIDTH_Pos)
- #define PWM_CMPTRG_DIR_Pos 28 //0 向上计数过程中产生Trigger 1 向下计数过程中产生Trigger
- #define PWM_CMPTRG_DIR_Msk (0x01 << PWM_CMPTRG_DIR_Pos)
- #define PWM_CMPTRG_ATP_Pos 29 //AD触发信号在所挖坑中的位置:0 0/8处 1 1/8处 ... 7 7/8处
- #define PWM_CMPTRG_ATP_Msk (0x07u<< PWM_CMPTRG_ATP_Pos)
- #define PWM_EVMUX_START_Pos 0
- #define PWM_EVMUX_START_Msk (0x07 << PWM_EVMUX_START_Pos)
- #define PWM_EVMUX_STOP_Pos 4
- #define PWM_EVMUX_STOP_Msk (0x07 << PWM_EVMUX_STOP_Pos)
- #define PWM_EVMUX_PAUSE_Pos 8
- #define PWM_EVMUX_PAUSE_Msk (0x07 << PWM_EVMUX_PAUSE_Pos)
- #define PWM_EVMUX_RELOAD_Pos 12
- #define PWM_EVMUX_RELOAD_Msk (0x07 << PWM_EVMUX_RELOAD_Pos)
- #define PWM_EVMUX_MASKA_Pos 16
- #define PWM_EVMUX_MASKA_Msk (0x07 << PWM_EVMUX_MASKA_Pos)
- #define PWM_EVMUX_MASKB_Pos 20
- #define PWM_EVMUX_MASKB_Msk (0x07 << PWM_EVMUX_MASKB_Pos)
- #define PWM_EVMUX_MASKAN_Pos 24
- #define PWM_EVMUX_MASKAN_Msk (0x07 << PWM_EVMUX_MASKAN_Pos)
- #define PWM_EVMUX_MASKBN_Pos 28
- #define PWM_EVMUX_MASKBN_Msk (0x07 << PWM_EVMUX_MASKBN_Pos)
- #define PWM_EVMSK_OUTA_Pos 0
- #define PWM_EVMSK_OUTA_Msk (0x01 << PWM_EVMSK_OUTA_Pos)
- #define PWM_EVMSK_OUTB_Pos 1
- #define PWM_EVMSK_OUTB_Msk (0x01 << PWM_EVMSK_OUTB_Pos)
- #define PWM_EVMSK_OUTAN_Pos 2
- #define PWM_EVMSK_OUTAN_Msk (0x01 << PWM_EVMSK_OUTAN_Pos)
- #define PWM_EVMSK_OUTBN_Pos 3
- #define PWM_EVMSK_OUTBN_Msk (0x01 << PWM_EVMSK_OUTBN_Pos)
- #define PWM_EVMSK_IMME_Pos 4 //1 MASK立即生效 0 计数器溢出时生效
- #define PWM_EVMSK_IMME_Msk (0x01 << PWM_EVMSK_IMME_Pos)
- #define PWM_EVMSK_STPCLR_Pos 8 //外部事件导致计数器停止时计数器是否清零,1 清零 0 保持当前值
- #define PWM_EVMSK_STPCLR_Msk (0x01 << PWM_EVMSK_STPCLR_Pos)
- #define PWM_IE_UPOVF_Pos 0 //向上计数时计数器溢出中断使能
- #define PWM_IE_UPOVF_Msk (0x01 << PWM_IE_UPOVF_Pos)
- #define PWM_IE_DNOVF_Pos 1 //向下计数时计数器溢出中断使能
- #define PWM_IE_DNOVF_Msk (0x01 << PWM_IE_DNOVF_Pos)
- #define PWM_IE_UPCMPA_Pos 2 //向上计数时计数器值与CMPA相等中断使能
- #define PWM_IE_UPCMPA_Msk (0x01 << PWM_IE_UPCMPA_Pos)
- #define PWM_IE_UPCMPB_Pos 3 //向上计数时计数器值与CMPB相等中断使能
- #define PWM_IE_UPCMPB_Msk (0x01 << PWM_IE_UPCMPB_Pos)
- #define PWM_IE_DNCMPA_Pos 4 //向下计数时计数器值与CMPA相等中断使能
- #define PWM_IE_DNCMPA_Msk (0x01 << PWM_IE_DNCMPA_Pos)
- #define PWM_IE_DNCMPB_Pos 5 //向下计数时计数器值与CMPB相等中断使能
- #define PWM_IE_DNCMPB_Msk (0x01 << PWM_IE_DNCMPB_Pos)
- #define PWM_IF_UPOVF_Pos 0
- #define PWM_IF_UPOVF_Msk (0x01 << PWM_IF_UPOVF_Pos)
- #define PWM_IF_DNOVF_Pos 1
- #define PWM_IF_DNOVF_Msk (0x01 << PWM_IF_DNOVF_Pos)
- #define PWM_IF_UPCMPA_Pos 2
- #define PWM_IF_UPCMPA_Msk (0x01 << PWM_IF_UPCMPA_Pos)
- #define PWM_IF_UPCMPB_Pos 3
- #define PWM_IF_UPCMPB_Msk (0x01 << PWM_IF_UPCMPB_Pos)
- #define PWM_IF_DNCMPA_Pos 4
- #define PWM_IF_DNCMPA_Msk (0x01 << PWM_IF_DNCMPA_Pos)
- #define PWM_IF_DNCMPB_Pos 5
- #define PWM_IF_DNCMPB_Msk (0x01 << PWM_IF_DNCMPB_Pos)
- #define PWM_SR_STAT_Pos 0 //0 IDLE 1 ACTIVE 2 PAUSE
- #define PWM_SR_STAT_Msk (0x03 << PWM_SR_STAT_Pos)
- #define PWM_SR_DIR_Pos 4 //0 向上计数 1 向下计数
- #define PWM_SR_DIR_Msk (0x01 << PWM_SR_DIR_Pos)
- #define PWM_SR_OUTA_Pos 5
- #define PWM_SR_OUTA_Msk (0x01 << PWM_SR_OUTA_Pos)
- #define PWM_SR_OUTB_Pos 6
- #define PWM_SR_OUTB_Msk (0x01 << PWM_SR_OUTB_Pos)
- #define PWM_SR_OUTAN_Pos 7
- #define PWM_SR_OUTAN_Msk (0x01 << PWM_SR_OUTAN_Pos)
- #define PWM_SR_OUTBN_Pos 8
- #define PWM_SR_OUTBN_Msk (0x01 << PWM_SR_OUTBN_Pos)
- typedef struct {
- __IO uint32_t START;
- __IO uint32_t SWBRK; //Software Brake,软件刹车
- __IO uint32_t RESET;
- union {
- __IO uint32_t RELOADEN;
- __IO uint32_t RESTART;
- };
- __IO uint32_t PULSE;
- __IO uint32_t FILTER; //外部信号滤波,0 无滤波 1 4个PCLK周期 2 8个PCLK周期 3 16个PCLK周期
- __IO uint32_t BRKPOL; //刹车信号极性,
- __IO uint32_t BRKIE;
- union {
- __IO uint32_t BRKIF;
- __IO uint32_t BRKSR;
- };
- __IO uint32_t EVSR;
- } PWMG_TypeDef;
- #define PWMG_START_PWM0_Pos 0
- #define PWMG_START_PWM0_Msk (0x01 << PWMG_START_PWM0_Pos)
- #define PWMG_START_PWM1_Pos 1
- #define PWMG_START_PWM1_Msk (0x01 << PWMG_START_PWM1_Pos)
- #define PWMG_START_PWM2_Pos 2
- #define PWMG_START_PWM2_Msk (0x01 << PWMG_START_PWM2_Pos)
- #define PWMG_START_PWM3_Pos 3
- #define PWMG_START_PWM3_Msk (0x01 << PWMG_START_PWM3_Pos)
- #define PWMG_START_PWM4_Pos 4
- #define PWMG_START_PWM4_Msk (0x01 << PWMG_START_PWM4_Pos)
- #define PWMG_SWBRK_PWM0A_Pos 0
- #define PWMG_SWBRK_PWM0A_Msk (0x01 << PWMG_SWBRK_PWM0A_Pos)
- #define PWMG_SWBRK_PWM1A_Pos 1
- #define PWMG_SWBRK_PWM1A_Msk (0x01 << PWMG_SWBRK_PWM1A_Pos)
- #define PWMG_SWBRK_PWM2A_Pos 2
- #define PWMG_SWBRK_PWM2A_Msk (0x01 << PWMG_SWBRK_PWM2A_Pos)
- #define PWMG_SWBRK_PWM3A_Pos 3
- #define PWMG_SWBRK_PWM3A_Msk (0x01 << PWMG_SWBRK_PWM3A_Pos)
- #define PWMG_SWBRK_PWM4A_Pos 4
- #define PWMG_SWBRK_PWM4A_Msk (0x01 << PWMG_SWBRK_PWM4A_Pos)
- #define PWMG_SWBRK_PWM0B_Pos 8
- #define PWMG_SWBRK_PWM0B_Msk (0x01 << PWMG_SWBRK_PWM0B_Pos)
- #define PWMG_SWBRK_PWM1B_Pos 9
- #define PWMG_SWBRK_PWM1B_Msk (0x01 << PWMG_SWBRK_PWM1B_Pos)
- #define PWMG_SWBRK_PWM2B_Pos 10
- #define PWMG_SWBRK_PWM2B_Msk (0x01 << PWMG_SWBRK_PWM2B_Pos)
- #define PWMG_SWBRK_PWM3B_Pos 11
- #define PWMG_SWBRK_PWM3B_Msk (0x01 << PWMG_SWBRK_PWM3B_Pos)
- #define PWMG_SWBRK_PWM4B_Pos 12
- #define PWMG_SWBRK_PWM4B_Msk (0x01 << PWMG_SWBRK_PWM4B_Pos)
- #define PWMG_RESET_PWM0_Pos 0
- #define PWMG_RESET_PWM0_Msk (0x01 << PWMG_RESET_PWM0_Pos)
- #define PWMG_RESET_PWM1_Pos 1
- #define PWMG_RESET_PWM1_Msk (0x01 << PWMG_RESET_PWM1_Pos)
- #define PWMG_RESET_PWM2_Pos 2
- #define PWMG_RESET_PWM2_Msk (0x01 << PWMG_RESET_PWM2_Pos)
- #define PWMG_RESET_PWM3_Pos 3
- #define PWMG_RESET_PWM3_Msk (0x01 << PWMG_RESET_PWM3_Pos)
- #define PWMG_RESET_PWM4_Pos 4
- #define PWMG_RESET_PWM4_Msk (0x01 << PWMG_RESET_PWM4_Pos)
- #define PWMG_RELOADEN_PWM0_Pos 0
- #define PWMG_RELOADEN_PWM0_Msk (0x01 << PWMG_RELOADEN_PWM0_Pos)
- #define PWMG_RELOADEN_PWM1_Pos 1
- #define PWMG_RELOADEN_PWM1_Msk (0x01 << PWMG_RELOADEN_PWM1_Pos)
- #define PWMG_RELOADEN_PWM2_Pos 2
- #define PWMG_RELOADEN_PWM2_Msk (0x01 << PWMG_RELOADEN_PWM2_Pos)
- #define PWMG_RELOADEN_PWM3_Pos 3
- #define PWMG_RELOADEN_PWM3_Msk (0x01 << PWMG_RELOADEN_PWM3_Pos)
- #define PWMG_RELOADEN_PWM4_Pos 4
- #define PWMG_RELOADEN_PWM4_Msk (0x01 << PWMG_RELOADEN_PWM4_Pos)
- #define PWMG_RESTART_PWM0_Pos 8
- #define PWMG_RESTART_PWM0_Msk (0x01 << PWMG_RESTART_PWM0_Pos)
- #define PWMG_RESTART_PWM1_Pos 9
- #define PWMG_RESTART_PWM1_Msk (0x01 << PWMG_RESTART_PWM1_Pos)
- #define PWMG_RESTART_PWM2_Pos 10
- #define PWMG_RESTART_PWM2_Msk (0x01 << PWMG_RESTART_PWM2_Pos)
- #define PWMG_RESTART_PWM3_Pos 11
- #define PWMG_RESTART_PWM3_Msk (0x01 << PWMG_RESTART_PWM3_Pos)
- #define PWMG_RESTART_PWM4_Pos 12
- #define PWMG_RESTART_PWM4_Msk (0x01 << PWMG_RESTART_PWM4_Pos)
- #define PWMG_PULSE_EDGE0_Pos 0 //PWM_PULSE0 计数边沿,0 上升沿 1 下降沿
- #define PWMG_PULSE_EDGE0_Msk (0x01 << PWMG_PULSE_EDGE0_Pos)
- #define PWMG_PULSE_EDGE1_Pos 1
- #define PWMG_PULSE_EDGE1_Msk (0x01 << PWMG_PULSE_EDGE1_Pos)
- #define PWMG_BRKPOL_BRK0_Pos 0 //PWMG_BRK0 刹车信号极性,0 低电平刹车 1 高电平刹车
- #define PWMG_BRKPOL_BRK0_Msk (0x01 << PWMG_BRKPOL_BRK0_Pos)
- #define PWMG_BRKPOL_BRK1_Pos 1
- #define PWMG_BRKPOL_BRK1_Msk (0x01 << PWMG_BRKPOL_BRK1_Pos)
- #define PWMG_BRKPOL_BRK2_Pos 2
- #define PWMG_BRKPOL_BRK2_Msk (0x01 << PWMG_BRKPOL_BRK2_Pos)
- #define PWMG_BRKIE_BRK0_Pos 0
- #define PWMG_BRKIE_BRK0_Msk (0x01 << PWMG_BRKIE_BRK0_Pos)
- #define PWMG_BRKIE_BRK1_Pos 1
- #define PWMG_BRKIE_BRK1_Msk (0x01 << PWMG_BRKIE_BRK1_Pos)
- #define PWMG_BRKIE_BRK2_Pos 2
- #define PWMG_BRKIE_BRK2_Msk (0x01 << PWMG_BRKIE_BRK2_Pos)
- #define PWMG_BRKIF_BRK0_Pos 0
- #define PWMG_BRKIF_BRK0_Msk (0x01 << PWMG_BRKIF_BRK0_Pos)
- #define PWMG_BRKIF_BRK1_Pos 1
- #define PWMG_BRKIF_BRK1_Msk (0x01 << PWMG_BRKIF_BRK1_Pos)
- #define PWMG_BRKIF_BRK2_Pos 2
- #define PWMG_BRKIF_BRK2_Msk (0x01 << PWMG_BRKIF_BRK2_Pos)
- #define PWMG_BRKSR_BRK0_Pos 4 //刹车引脚电平值
- #define PWMG_BRKSR_BRK0_Msk (0x01 << PWMG_BRKSR_BRK0_Pos)
- #define PWMG_BRKSR_BRK1_Pos 5
- #define PWMG_BRKSR_BRK1_Msk (0x01 << PWMG_BRKSR_BRK1_Pos)
- #define PWMG_BRKSR_BRK2_Pos 6
- #define PWMG_BRKSR_BRK2_Msk (0x01 << PWMG_BRKSR_BRK2_Pos)
- #define PWMG_EVSR_EV0_Pos 0 //外部事件信号电平值
- #define PWMG_EVSR_EV0_Msk (0x01 << PWMG_EVSR_EV0_Pos)
- #define PWMG_EVSR_EV1_Pos 1
- #define PWMG_EVSR_EV1_Msk (0x01 << PWMG_EVSR_EV1_Pos)
- #define PWMG_EVSR_EV2_Pos 2
- #define PWMG_EVSR_EV2_Msk (0x01 << PWMG_EVSR_EV2_Pos)
- #define PWMG_EVSR_EV3_Pos 3
- #define PWMG_EVSR_EV3_Msk (0x01 << PWMG_EVSR_EV3_Pos)
- #define PWMG_EVSR_EV4_Pos 4
- #define PWMG_EVSR_EV4_Msk (0x01 << PWMG_EVSR_EV4_Pos)
- #define PWMG_EVSR_EV5_Pos 5
- #define PWMG_EVSR_EV5_Msk (0x01 << PWMG_EVSR_EV5_Pos)
- #define PWMG_EVSR_EV6_Pos 6
- #define PWMG_EVSR_EV6_Msk (0x01 << PWMG_EVSR_EV6_Pos)
- typedef struct {
- __IO uint32_t CR;
- __IO uint32_t POSCNT; //[15:0] 位置计数器
- __IO uint32_t MAXCNT; //[15:0] 最大计数值
- uint32_t RESERVED[5];
- __IO uint32_t IE; //Interrupt Enable,为0时IF相应位不置位
- __IO uint32_t IM; //Interrupt Mask,为0时即使IF相应位置位也不触发 QEI_IRQn 中断
- __O uint32_t IC; //Interrupt Clear
- __I uint32_t IF; //Interrupt Flag
- __IO uint32_t IFOV; //interrupt Interrupt Overrun
- } QEI_TypeDef;
- #define QEI_CR_ENA_Pos 0
- #define QEI_CR_ENA_Msk (0x01 << QEI_CR_ENA_Pos)
- #define QEI_CR_ABSWAP_Pos 4 //1 A、B引脚交换
- #define QEI_CR_ABSWAP_Msk (0x01 << QEI_CR_ABSWAP_Pos)
- #define QEI_CR_X2X4_Pos 5 //0 X2计数模式 1 X4计数模式
- #define QEI_CR_X2X4_Msk (0x01 << QEI_CR_X2X4_Pos)
- #define QEI_CR_RSTSRC_Pos 6 //Reset Source 0 计数匹配复位 1 索引信号复位
- #define QEI_CR_RSTSRC_Msk (0x01 << QEI_CR_RSTSRC_Pos)
- #define QEI_CR_MODE_Pos 7 //工作模式选择 1 QEI模式
- #define QEI_CR_MODE_Msk (0x01 << QEI_CR_MODE_Pos)
- #define QEI_CR_INDEX_Pos 9 //0 索引引脚为低电平 1 索引引脚为高电平
- #define QEI_CR_INDEX_Msk (0x01 << QEI_CR_INDEX_Pos)
- #define QEI_CR_PAUSE_Pos 10 //1 空闲模式停止位
- #define QEI_CR_PAUSE_Msk (0x01 << QEI_CR_PAUSE_Pos)
- #define QEI_IE_INDEX_Pos 0 //检测到Index脉冲
- #define QEI_IE_INDEX_Msk (0x01 << QEI_IE_INDEX_Pos)
- #define QEI_IE_MATCH_Pos 1 //POSCNT递增到与MAXCNT相等,或POSCNT从MAXCNT递减到0
- #define QEI_IE_MATCH_Msk (0x01 << QEI_IE_MATCH_Pos)
- #define QEI_IE_CNTOV_Pos 2 //Counter Overrun,计数器溢出
- #define QEI_IE_CNTOV_Msk (0x01 << QEI_IE_CNTOV_Pos)
- #define QEI_IE_ERROR_Pos 3 //计数器错误
- #define QEI_IE_ERROR_Msk (0x01 << QEI_IE_ERROR_Pos)
- #define QEI_IM_INDEX_Pos 0
- #define QEI_IM_INDEX_Msk (0x01 << QEI_IM_INDEX_Pos)
- #define QEI_IM_MATCH_Pos 1
- #define QEI_IM_MATCH_Msk (0x01 << QEI_IM_MATCH_Pos)
- #define QEI_IM_CNTOV_Pos 2
- #define QEI_IM_CNTOV_Msk (0x01 << QEI_IM_CNTOV_Pos)
- #define QEI_IM_ERROR_Pos 3
- #define QEI_IM_ERROR_Msk (0x01 << QEI_IM_ERROR_Pos)
- #define QEI_IC_INDEX_Pos 0
- #define QEI_IC_INDEX_Msk (0x01 << QEI_IC_INDEX_Pos)
- #define QEI_IC_MATCH_Pos 1
- #define QEI_IC_MATCH_Msk (0x01 << QEI_IC_MATCH_Pos)
- #define QEI_IC_CNTOV_Pos 2
- #define QEI_IC_CNTOV_Msk (0x01 << QEI_IC_CNTOV_Pos)
- #define QEI_IC_ERROR_Pos 3
- #define QEI_IC_ERROR_Msk (0x01 << QEI_IC_ERROR_Pos)
- #define QEI_IF_INDEX_Pos 0
- #define QEI_IF_INDEX_Msk (0x01 << QEI_IF_INDEX_Pos)
- #define QEI_IF_MATCH_Pos 1
- #define QEI_IF_MATCH_Msk (0x01 << QEI_IF_MATCH_Pos)
- #define QEI_IF_CNTOV_Pos 2
- #define QEI_IF_CNTOV_Msk (0x01 << QEI_IF_CNTOV_Pos)
- #define QEI_IF_ERROR_Pos 3
- #define QEI_IF_ERROR_Msk (0x01 << QEI_IF_ERROR_Pos)
- #define QEI_IFOV_INDEX_Pos 0
- #define QEI_IFOV_INDEX_Msk (0x01 << QEI_IFOV_INDEX_Pos)
- #define QEI_IFOV_MATCH_Pos 1
- #define QEI_IFOV_MATCH_Msk (0x01 << QEI_IFOV_MATCH_Pos)
- #define QEI_IFOV_CNTOV_Pos 2
- #define QEI_IFOV_CNTOV_Msk (0x01 << QEI_IFOV_CNTOV_Pos)
- #define QEI_IFOV_ERROR_Pos 3
- #define QEI_IFOV_ERROR_Msk (0x01 << QEI_IFOV_ERROR_Pos)
- typedef struct {
- __IO uint32_t EN; //[0] ENABLE
- __IO uint32_t IE; //只有为1时,IF[CHx]在DMA传输结束时才能变为1,否则将一直保持在0
- __IO uint32_t IM; //当为1时,即使IF[CHx]为1,dma_int也不会因此变1
- __IO uint32_t IF; //写1清零
- __IO uint32_t DSTSGIE; //只在Scatter Gather模式下使用
- __IO uint32_t DSTSGIM; //只在Scatter Gather模式下使用
- __IO uint32_t DSTSGIF; //只在Scatter Gather模式下使用
- __IO uint32_t SRCSGIE; //只在Scatter Gather模式下使用
- __IO uint32_t SRCSGIM; //只在Scatter Gather模式下使用
- __IO uint32_t SRCSGIF; //只在Scatter Gather模式下使用
- uint32_t RESERVED[5];
- __IO uint32_t PRI; //优先级,1 高优先级 0 低优先级
- struct {
- __IO uint32_t CR;
- __IO uint32_t AM; //Adress Mode
- __IO uint32_t DST;
- __IO uint32_t DSTSGADDR1; //只在Scatter Gather模式下使用
- __IO uint32_t DSTSGADDR2; //只在Scatter Gather模式下使用
- __IO uint32_t DSTSGADDR3; //只在Scatter Gather模式下使用
- __IO uint32_t MUX;
- __IO uint32_t SRC;
- __IO uint32_t SRCSGADDR1; //只在Scatter Gather模式下使用
- __IO uint32_t SRCSGADDR2; //只在Scatter Gather模式下使用
- __IO uint32_t SRCSGADDR3; //只在Scatter Gather模式下使用
- __I uint32_t DSTSR;
- __I uint32_t SRCSR;
- uint32_t RESERVED[3];
- } CH[4];
- } DMA_TypeDef;
- #define DMA_IE_CH0_Pos 0
- #define DMA_IE_CH0_Msk (0x01 << DMA_IE_CH0_Pos)
- #define DMA_IE_CH1_Pos 1
- #define DMA_IE_CH1_Msk (0x01 << DMA_IE_CH1_Pos)
- #define DMA_IE_CH2_Pos 2
- #define DMA_IE_CH2_Msk (0x01 << DMA_IE_CH2_Pos)
- #define DMA_IE_CH3_Pos 3
- #define DMA_IE_CH3_Msk (0x01 << DMA_IE_CH3_Pos)
- #define DMA_IM_CH0_Pos 0
- #define DMA_IM_CH0_Msk (0x01 << DMA_IM_CH0_Pos)
- #define DMA_IM_CH1_Pos 1
- #define DMA_IM_CH1_Msk (0x01 << DMA_IM_CH1_Pos)
- #define DMA_IM_CH2_Pos 2
- #define DMA_IM_CH2_Msk (0x01 << DMA_IM_CH2_Pos)
- #define DMA_IM_CH3_Pos 3
- #define DMA_IM_CH3_Msk (0x01 << DMA_IM_CH3_Pos)
- #define DMA_IF_CH0_Pos 0
- #define DMA_IF_CH0_Msk (0x01 << DMA_IF_CH0_Pos)
- #define DMA_IF_CH1_Pos 1
- #define DMA_IF_CH1_Msk (0x01 << DMA_IF_CH1_Pos)
- #define DMA_IF_CH2_Pos 2
- #define DMA_IF_CH2_Msk (0x01 << DMA_IF_CH2_Pos)
- #define DMA_IF_CH3_Pos 3
- #define DMA_IF_CH3_Msk (0x01 << DMA_IF_CH3_Pos)
- #define DMA_CR_LEN_Pos 0 //此通道传输单位个数
- #define DMA_CR_LEN_Msk (0xFFFFF<< DMA_CR_LEN_Pos)
- #define DMA_CR_RXEN_Pos 24 //软件启动传输,传输方向为SRC-->DST
- #define DMA_CR_RXEN_Msk (0x01 << DMA_CR_RXEN_Pos)
- #define DMA_CR_TXEN_Pos 25 //软件启动传输,传输方向为DST-->SRC
- #define DMA_CR_TXEN_Msk (0x01 << DMA_CR_TXEN_Pos)
- #define DMA_CR_AUTORE_Pos 26 //Auto Restart, 通道在传输完成后,是否自动重新启动
- #define DMA_CR_AUTORE_Msk (0x01 << DMA_CR_AUTORE_Pos)
- #define DMA_CR_STEPOP_Pos 27 //Step Operation, 步进传输,触发1次传送1个单位数据
- #define DMA_CR_STEPOP_Msk (0x01 << DMA_CR_STEPOP_Pos)
- #define DMA_AM_DSTAM_Pos 0 //Address Mode 0 地址固定 1 地址递增 2 scatter gather模式
- #define DMA_AM_DSTAM_Msk (0x03 << DMA_AM_DSTAM_Pos)
- #define DMA_AM_DSTBIT_Pos 2 //传输位宽,0 字节 1 半字 2 字
- #define DMA_AM_DSTBIT_Msk (0x03 << DMA_AM_DSTBIT_Pos)
- #define DMA_AM_DSTBURST_Pos 4 //传输类型,0 Single 1 Burst(Inc4)
- #define DMA_AM_DSTBURST_Msk (0x01 << DMA_AM_DSTBURST_Pos)
- #define DMA_AM_SRCAM_Pos 8
- #define DMA_AM_SRCAM_Msk (0x03 << DMA_AM_SRCAM_Pos)
- #define DMA_AM_SRCBIT_Pos 10
- #define DMA_AM_SRCBIT_Msk (0x03 << DMA_AM_SRCBIT_Pos)
- #define DMA_AM_SRCBURST_Pos 12
- #define DMA_AM_SRCBURST_Msk (0x01 << DMA_AM_SRCBURST_Pos)
- #define DMA_MUX_DSTHSSIG_Pos 0 //目标侧握手信号(handshake signal)
- #define DMA_MUX_DSTHSSIG_Msk (0x03 << DMA_MUX_DSTHSSIG_Pos)
- #define DMA_MUX_DSTHSEN_Pos 2 //目标侧握手使能(handshake enable)
- #define DMA_MUX_DSTHSEN_Msk (0x01 << DMA_MUX_DSTHSEN_Pos)
- #define DMA_MUX_SRCHSSIG_Pos 8 //源侧握手信号
- #define DMA_MUX_SRCHSSIG_Msk (0x03 << DMA_MUX_SRCHSSIG_Pos)
- #define DMA_MUX_SRCHSEN_Pos 10 //源侧握手使能
- #define DMA_MUX_SRCHSEN_Msk (0x01 << DMA_MUX_SRCHSEN_Pos)
- #define DMA_MUX_EXTHSSIG_Pos 16 //外部握手信号,0 TIMR0 1 TIMR1 2 TIMR2 3 TIMR3 4 TIMR4 5 DMA_TRIG0 6 DMA_TRIG1
- #define DMA_MUX_EXTHSSIG_Msk (0x07 << DMA_MUX_EXTHSSIG_Pos)
- #define DMA_MUX_EXTHSEN_Pos 19 //外部握手使能,0 软件置位CR.RXEN/TXEN启动传输 1 EXTHSSRC选中的触发源启动传输
- #define DMA_MUX_EXTHSEN_Msk (0x01 << DMA_MUX_EXTHSEN_Pos)
- #define DMA_DSTSR_LEN_Pos 0 //剩余传输量
- #define DMA_DSTSR_LEN_Msk (0xFFFFF<<DMA_DSTSR_LEN_Pos)
- #define DMA_DSTSR_ERR_Pos 31 //长度配置错误
- #define DMA_DSTSR_ERR_Msk (0x01u<< DMA_DSTSR_ERR_Pos)
- #define DMA_SRCSR_LEN_Pos 0
- #define DMA_SRCSR_LEN_Msk (0xFFFFF<<DMA_SRCSR_LEN_Pos)
- #define DMA_SRCSR_ERR_Pos 31
- #define DMA_SRCSR_ERR_Msk (0x01u<< DMA_SRCSR_ERR_Pos)
- typedef struct {
- __IO uint32_t CR; //Control Register
- __O uint32_t CMD; //Command Register
- __I uint32_t SR; //Status Register
- __IO uint32_t IF; //Interrupt Flag,读取清零
- __IO uint32_t IE; //Interrupt Enable
- __IO uint32_t BT2;
- __IO uint32_t BT0; //Bit Time Register 0
- __IO uint32_t BT1; //Bit Time Register 1
- uint32_t RESERVED;
- __IO uint32_t AFM; //Acceptance Filter Mode
- __IO uint32_t AFE; //Acceptance Filter Enable
- __I uint32_t ALC; //Arbitration Lost Capture, 仲裁丢失捕捉
- __I uint32_t ECC; //Error code capture, 错误代码捕捉
- __IO uint32_t EWLIM; //Error Warning Limit, 错误报警限制
- __IO uint32_t RXERR; //RX错误计数
- __IO uint32_t TXERR; //TX错误计数
- struct {
- __IO uint32_t INFO; //读访问接收Buffer,写访问发送Buffer
- __IO uint32_t DATA[12];
- } FRAME;
- __I uint32_t RMCNT; //Receive Message Count
- uint32_t RESERVED2[162];
- __IO uint32_t ACR[16]; //Acceptance Check Register, 验收寄存器
- uint32_t RESERVED3[16];
- __IO uint32_t AMR[16]; //Acceptance Mask Register, 验收屏蔽寄存器;对应位写0,ID必须和验收寄存器匹配
- } CAN_TypeDef;
- #define CAN_CR_RST_Pos 0
- #define CAN_CR_RST_Msk (0x01 << CAN_CR_RST_Pos)
- #define CAN_CR_LOM_Pos 1 //Listen Only Mode
- #define CAN_CR_LOM_Msk (0x01 << CAN_CR_LOM_Pos)
- #define CAN_CR_STM_Pos 2 //Self Test Mode, 此模式下即使没有应答,CAN控制器也可以成功发送
- #define CAN_CR_STM_Msk (0x01 << CAN_CR_STM_Pos)
- #define CAN_CR_SLEEP_Pos 4 //写1进入睡眠模式,有总线活动或中断时唤醒并自动清零此位
- #define CAN_CR_SLEEP_Msk (0x01 << CAN_CR_SLEEP_Pos)
- #define CAN_CMD_TXREQ_Pos 0 //Transmission Request
- #define CAN_CMD_TXREQ_Msk (0x01 << CAN_CMD_TXREQ_Pos)
- #define CAN_CMD_ABTTX_Pos 1 //Abort Transmission
- #define CAN_CMD_ABTTX_Msk (0x01 << CAN_CMD_ABTTX_Pos)
- #define CAN_CMD_RRB_Pos 2 //Release Receive Buffer
- #define CAN_CMD_RRB_Msk (0x01 << CAN_CMD_RRB_Pos)
- #define CAN_CMD_CLROV_Pos 3 //Clear Data Overrun
- #define CAN_CMD_CLROV_Msk (0x01 << CAN_CMD_CLROV_Pos)
- #define CAN_CMD_SRR_Pos 4 //Self Reception Request
- #define CAN_CMD_SRR_Msk (0x01 << CAN_CMD_SRR_Pos)
- #define CAN_SR_RXDA_Pos 0 //Receive Data Available,接收FIFO中有完整消息可以读取
- #define CAN_SR_RXDA_Msk (0x01 << CAN_SR_RXDA_Pos)
- #define CAN_SR_RXOV_Pos 1 //Receive FIFO Overrun,新接收的信息由于接收FIFO已满而丢掉
- #define CAN_SR_RXOV_Msk (0x01 << CAN_SR_RXOV_Pos)
- #define CAN_SR_TXBR_Pos 2 //Transmit Buffer Release,0 正在处理前面的发送,现在不能写新的消息 1 可以写入新的消息发送
- #define CAN_SR_TXBR_Msk (0x01 << CAN_SR_TXBR_Pos)
- #define CAN_SR_TXOK_Pos 3 //Transmit OK,successfully completed
- #define CAN_SR_TXOK_Msk (0x01 << CAN_SR_TXOK_Pos)
- #define CAN_SR_RXBUSY_Pos 4 //Receive Busy,正在接收
- #define CAN_SR_RXBUSY_Msk (0x01 << CAN_SR_RXBUSY_Pos)
- #define CAN_SR_TXBUSY_Pos 5 //Transmit Busy,正在发送
- #define CAN_SR_TXBUSY_Msk (0x01 << CAN_SR_TXBUSY_Pos)
- #define CAN_SR_ERRWARN_Pos 6 //1 至少一个错误计数器达到 Warning Limit
- #define CAN_SR_ERRWARN_Msk (0x01 << CAN_SR_ERRWARN_Pos)
- #define CAN_SR_BUSOFF_Pos 7 //1 CAN 控制器处于总线关闭状态,没有参与到总线活动
- #define CAN_SR_BUSOFF_Msk (0x01 << CAN_SR_BUSOFF_Pos)
- #define CAN_IF_RXDA_Pos 0 //IF.RXDA = SR.RXDA & IE.RXDA
- #define CAN_IF_RXDA_Msk (0x01 << CAN_IF_RXDA_Pos)
- #define CAN_IF_TXBR_Pos 1 //当IE.TXBR=1时,SR.TXBR由0变成1将置位此位
- #define CAN_IF_TXBR_Msk (0x01 << CAN_IF_TXBR_Pos)
- #define CAN_IF_ERRWARN_Pos 2 //当IE.ERRWARN=1时,SR.ERRWARN或SR.BUSOFF 0-to-1 或 1-to-0将置位此位
- #define CAN_IF_ERRWARN_Msk (0x01 << CAN_IF_ERRWARN_Pos)
- #define CAN_IF_RXOV_Pos 3 //IF.RXOV = SR.RXOV & IE.RXOV
- #define CAN_IF_RXOV_Msk (0x01 << CAN_IF_RXOV_Pos)
- #define CAN_IF_WKUP_Pos 4 //当IE.WKUP=1时,在睡眠模式下的CAN控制器检测到总线活动时硬件置位
- #define CAN_IF_WKUP_Msk (0x01 << CAN_IF_WKUP_Pos)
- #define CAN_IF_ERRPASS_Pos 5 //
- #define CAN_IF_ERRPASS_Msk (0x01 << CAN_IF_ERRPASS_Pos)
- #define CAN_IF_ARBLOST_Pos 6 //Arbitration Lost,当IE.ARBLOST=1时,CAN控制器丢失仲裁变成接收方时硬件置位
- #define CAN_IF_ARBLOST_Msk (0x01 << CAN_IF_ARBLOST_Pos)
- #define CAN_IF_BUSERR_Pos 7 //当IE.BUSERR=1时,CAN控制器检测到总线错误时硬件置位
- #define CAN_IF_BUSERR_Msk (0x01 << CAN_IF_BUSERR_Pos)
- #define CAN_IE_RXDA_Pos 0
- #define CAN_IE_RXDA_Msk (0x01 << CAN_IE_RXDA_Pos)
- #define CAN_IE_TXBR_Pos 1
- #define CAN_IE_TXBR_Msk (0x01 << CAN_IE_TXBR_Pos)
- #define CAN_IE_ERRWARN_Pos 2
- #define CAN_IE_ERRWARN_Msk (0x01 << CAN_IE_ERRWARN_Pos)
- #define CAN_IE_RXOV_Pos 3
- #define CAN_IE_RXOV_Msk (0x01 << CAN_IE_RXOV_Pos)
- #define CAN_IE_WKUP_Pos 4
- #define CAN_IE_WKUP_Msk (0x01 << CAN_IE_WKUP_Pos)
- #define CAN_IE_ERRPASS_Pos 5
- #define CAN_IE_ERRPASS_Msk (0x01 << CAN_IE_ERRPASS_Pos)
- #define CAN_IE_ARBLOST_Pos 6
- #define CAN_IE_ARBLOST_Msk (0x01 << CAN_IE_ARBLOST_Pos)
- #define CAN_IE_BUSERR_Pos 7
- #define CAN_IE_BUSERR_Msk (0x01 << CAN_IE_BUSERR_Pos)
- #define CAN_BT2_BRP_Pos 0
- #define CAN_BT2_BRP_Msk (0x0F << CAN_BT2_BRP_Pos)
- #define CAN_BT0_BRP_Pos 0 //Baud Rate Prescaler,CAN时间单位=2*Tsysclk*((BT2.BRP<<6) + BT0.BRP + 1)
- #define CAN_BT0_BRP_Msk (0x3F << CAN_BT0_BRP_Pos)
- #define CAN_BT0_SJW_Pos 6 //Synchronization Jump Width
- #define CAN_BT0_SJW_Msk (0x03 << CAN_BT0_SJW_Pos)
- #define CAN_BT1_TSEG1_Pos 0 //t_tseg1 = CAN时间单位 * (TSEG1+1)
- #define CAN_BT1_TSEG1_Msk (0x0F << CAN_BT1_TSEG1_Pos)
- #define CAN_BT1_TSEG2_Pos 4 //t_tseg2 = CAN时间单位 * (TSEG2+1)
- #define CAN_BT1_TSEG2_Msk (0x07 << CAN_BT1_TSEG2_Pos)
- #define CAN_BT1_SAM_Pos 7 //采样次数 0: sampled once 1: sampled three times
- #define CAN_BT1_SAM_Msk (0x01 << CAN_BT1_SAM_Pos)
- #define CAN_ECC_SEGCODE_Pos 0 //Segment Code
- #define CAN_ECC_SEGCODE_Msk (0x1F << CAN_ECC_SEGCODE_Pos)
- #define CAN_ECC_DIR_Pos 5 //0 error occurred during transmission 1 during reception
- #define CAN_ECC_DIR_Msk (0x01 << CAN_ECC_DIR_Pos)
- #define CAN_ECC_ERRCODE_Pos 6 //Error Code:0 Bit error 1 Form error 2 Stuff error 3 other error
- #define CAN_ECC_ERRCODE_Msk (0x03 << CAN_ECC_ERRCODE_Pos)
- #define CAN_INFO_DLC_Pos 0 //Data Length Control
- #define CAN_INFO_DLC_Msk (0x0F << CAN_INFO_DLC_Pos)
- #define CAN_INFO_RTR_Pos 6 //Remote Frame,1 远程帧 0 数据帧
- #define CAN_INFO_RTR_Msk (0x01 << CAN_INFO_RTR_Pos)
- #define CAN_INFO_FF_Pos 7 //Frame Format,0 标准帧格式 1 扩展帧格式
- #define CAN_INFO_FF_Msk (0x01 << CAN_INFO_FF_Pos)
- typedef struct {
- __IO uint32_t DMA_MEM_ADDR;
- __IO uint32_t BLK; //Block Size and Count
- __IO uint32_t ARG; //Argument
- __IO uint32_t CMD; //Command
- __IO uint32_t RESP[4]; //Response
- __IO uint32_t DATA;
- __IO uint32_t STAT;
- __IO uint32_t CR1;
- __IO uint32_t CR2;
- __IO uint32_t IF;
- __IO uint32_t IM; //Interrupt Mask (Interrupt Flag Enable)
- __IO uint32_t IE; //Interrupt Enalbe
- __IO uint32_t CMD12ERR; //Auto CMD12 error status
- } SDIO_TypeDef;
- #define SDIO_BLK_SIZE_Pos 0 //0x200 512字节 0x400 1024字节 0x800 2048字节
- #define SDIO_BLK_SIZE_Msk (0xFFF << SDIO_BLK_SIZE_Pos)
- #define SDIO_BLK_COUNT_Pos 16 //0 Stop Transfer 1 1块 2 2块 ... ...
- #define SDIO_BLK_COUNT_Msk (0xFFF << SDIO_BLK_COUNT_Pos)
- #define SDIO_CMD_DMAEN_Pos 0
- #define SDIO_CMD_DMAEN_Msk (0x01 << SDIO_CMD_DMAEN_Pos)
- #define SDIO_CMD_BLKCNTEN_Pos 1
- #define SDIO_CMD_BLKCNTEN_Msk (0x01 << SDIO_CMD_BLKCNTEN_Pos)
- #define SDIO_CMD_AUTOCMD12_Pos 2
- #define SDIO_CMD_AUTOCMD12_Msk (0x01 << SDIO_CMD_AUTOCMD12_Pos)
- #define SDIO_CMD_DIRREAD_Pos 4 //0 Write, Host to Card 1 Read, Card to Host
- #define SDIO_CMD_DIRREAD_Msk (0x01 << SDIO_CMD_DIRREAD_Pos)
- #define SDIO_CMD_MULTBLK_Pos 5 //0 Single Block 1 Multiple Block
- #define SDIO_CMD_MULTBLK_Msk (0x01 << SDIO_CMD_MULTBLK_Pos)
- #define SDIO_CMD_RESPTYPE_Pos 16 //响应类型,0 无响应 1 136位响应 2 48位响应 3 48位响应,Busy after response
- #define SDIO_CMD_RESPTYPE_Msk (0x03 << SDIO_CMD_RESPTYPE_Pos)
- #define SDIO_CMD_CRCCHECK_Pos 19 //Command CRC Check Enable
- #define SDIO_CMD_CRCCHECK_Msk (0x01 << SDIO_CMD_CRCCHECK_Pos)
- #define SDIO_CMD_IDXCHECK_Pos 20 //Command Index Check Enable
- #define SDIO_CMD_IDXCHECK_Msk (0x01 << SDIO_CMD_IDXCHECK_Pos)
- #define SDIO_CMD_HAVEDATA_Pos 21 //0 No Data Present 1 Data Present
- #define SDIO_CMD_HAVEDATA_Msk (0x01 << SDIO_CMD_HAVEDATA_Pos)
- #define SDIO_CMD_CMDTYPE_Pos 22 //0 NORMAL 1 SUSPEND 2 RESUME 3 ABORT
- #define SDIO_CMD_CMDTYPE_Msk (0x03 << SDIO_CMD_CMDTYPE_Pos)
- #define SDIO_CMD_CMDINDX_Pos 24 //Command Index,CMD0-63、ACMD0-63
- #define SDIO_CMD_CMDINDX_Msk (0x3F << SDIO_CMD_CMDINDX_Pos)
- #define SDIO_CR1_4BIT_Pos 1 //1 4 bit mode 0 1 bit mode
- #define SDIO_CR1_4BIT_Msk (0x01 << SDIO_CR1_4BIT_Pos)
- #define SDIO_CR1_8BIT_Pos 5 //1 8 bit mode is selected 0 8 bit mode is not selected
- #define SDIO_CR1_8BIT_Msk (0x01 << SDIO_CR1_8BIT_Pos)
- #define SDIO_CR1_CDBIT_Pos 6 //0 No Card 1 Card Inserted
- #define SDIO_CR1_CDBIT_Msk (0x01 << SDIO_CR1_CDBIT_Pos)
- #define SDIO_CR1_CDSRC_Pos 7 //Card Detect Source, 1 CR1.CDBIT位 0 SD_Detect引脚
- #define SDIO_CR1_CDSRC_Msk (0x01 << SDIO_CR1_CDSRC_Pos)
- #define SDIO_CR1_PWRON_Pos 8 //1 Power on 0 Power off
- #define SDIO_CR1_PWRON_Msk (0x01 << SDIO_CR1_PWRON_Pos)
- #define SDIO_CR1_VOLT_Pos 9 //7 3.3V 6 3.0V 5 1.8V
- #define SDIO_CR1_VOLT_Msk (0x07 << SDIO_CR1_VOLT_Pos)
- #define SDIO_CR2_CLKEN_Pos 0 //Internal Clock Enable
- #define SDIO_CR2_CLKEN_Msk (0x01 << SDIO_CR2_CLKEN_Pos)
- #define SDIO_CR2_CLKRDY_Pos 1 //Internal Clock Stable/Ready
- #define SDIO_CR2_CLKRDY_Msk (0x01 << SDIO_CR2_CLKRDY_Pos)
- #define SDIO_CR2_SDCLKEN_Pos 2 //SDCLK Enable
- #define SDIO_CR2_SDCLKEN_Msk (0x01 << SDIO_CR2_SDCLKEN_Pos)
- #define SDIO_CR2_SDCLKDIV_Pos 8 //SDCLK Frequency Div, 0x00 不分频 0x01 2分频 0x02 4分频 0x04 8分频 0x08 16分频 ... 0x80 256分频
- #define SDIO_CR2_SDCLKDIV_Msk (0xFF << SDIO_CR2_SDCLKDIV_Pos)
- #define SDIO_CR2_TIMEOUT_Pos 16 //0 TMCLK*2^13 1 TMCLK*2^14 ... 14 TMCLK*2^27
- #define SDIO_CR2_TIMEOUT_Msk (0x0F << SDIO_CR2_TIMEOUT_Pos)
- #define SDIO_CR2_RSTALL_Pos 24 //Software Reset for All
- #define SDIO_CR2_RSTALL_Msk (0x01 << SDIO_CR2_RSTALL_Pos)
- #define SDIO_CR2_RSTCMD_Pos 25 //Software Reset for CMD Line
- #define SDIO_CR2_RSTCMD_Msk (0x01 << SDIO_CR2_RSTCMD_Pos)
- #define SDIO_CR2_RSTDAT_Pos 26 //Software Reset for DAT Line
- #define SDIO_CR2_RSTDAT_Msk (0x01 << SDIO_CR2_RSTDAT_Pos)
- #define SDIO_IF_CMDDONE_Pos 0
- #define SDIO_IF_CMDDONE_Msk (0x01 << SDIO_IF_CMDDONE_Pos)
- #define SDIO_IF_TRXDONE_Pos 1
- #define SDIO_IF_TRXDONE_Msk (0x01 << SDIO_IF_TRXDONE_Pos)
- #define SDIO_IF_BLKGAP_Pos 2
- #define SDIO_IF_BLKGAP_Msk (0x01 << SDIO_IF_BLKGAP_Pos)
- #define SDIO_IF_DMADONE_Pos 3
- #define SDIO_IF_DMADONE_Msk (0x01 << SDIO_IF_DMADONE_Pos)
- #define SDIO_IF_BUFWRRDY_Pos 4
- #define SDIO_IF_BUFWRRDY_Msk (0x01 << SDIO_IF_BUFWRRDY_Pos)
- #define SDIO_IF_BUFRDRDY_Pos 5
- #define SDIO_IF_BUFRDRDY_Msk (0x01 << SDIO_IF_BUFRDRDY_Pos)
- #define SDIO_IF_CARDINSR_Pos 6
- #define SDIO_IF_CARDINSR_Msk (0x01 << SDIO_IF_CARDINSR_Pos)
- #define SDIO_IF_CARDRMOV_Pos 7
- #define SDIO_IF_CARDRMOV_Msk (0x01 << SDIO_IF_CARDRMOV_Pos)
- #define SDIO_IF_CARD_Pos 8
- #define SDIO_IF_CARD_Msk (0x01 << SDIO_IF_CARD_Pos)
- #define SDIO_IF_ERROR_Pos 15
- #define SDIO_IF_ERROR_Msk (0x01 << SDIO_IF_ERROR_Pos)
- #define SDIO_IF_CMDTIMEOUT_Pos 16
- #define SDIO_IF_CMDTIMEOUT_Msk (0x01 << SDIO_IF_CMDTIMEOUT_Pos)
- #define SDIO_IF_CMDCRCERR_Pos 17
- #define SDIO_IF_CMDCRCERR_Msk (0x01 << SDIO_IF_CMDCRCERR_Pos)
- #define SDIO_IF_CMDENDERR_Pos 18
- #define SDIO_IF_CMDENDERR_Msk (0x01 << SDIO_IF_CMDENDCERR_Pos)
- #define SDIO_IF_CMDIDXERR_Pos 19
- #define SDIO_IF_CMDIDXERR_Msk (0x01 << SDIO_IF_CMDIDXCERR_Pos)
- #define SDIO_IF_DATTIMEOUT_Pos 20
- #define SDIO_IF_DATTIMEOUT_Msk (0x01 << SDIO_IF_DATTIMEOUT_Pos)
- #define SDIO_IF_DATCRCERR_Pos 21
- #define SDIO_IF_DATCRCERR_Msk (0x01 << SDIO_IF_DATCRCERR_Pos)
- #define SDIO_IF_DATENDERR_Pos 22
- #define SDIO_IF_DATENDERR_Msk (0x01 << SDIO_IF_DATENDCERR_Pos)
- #define SDIO_IF_CURLIMERR_Pos 23
- #define SDIO_IF_CURLIMERR_Msk (0x01 << SDIO_IF_CURLIMERR_Pos)
- #define SDIO_IF_CMD12ERR_Pos 24
- #define SDIO_IF_CMD12ERR_Msk (0x01 << SDIO_IF_CMD12ERR_Pos)
- #define SDIO_IF_DMAERR_Pos 25
- #define SDIO_IF_DMAERR_Msk (0x01 << SDIO_IF_DMAERR_Pos)
- #define SDIO_IF_RESPERR_Pos 28
- #define SDIO_IF_RESPERR_Msk (0x01 << SDIO_IF_RESPERR_Pos)
- #define SDIO_IE_CMDDONE_Pos 0 //Command Complete Status Enable
- #define SDIO_IE_CMDDONE_Msk (0x01 << SDIO_IE_CMDDONE_Pos)
- #define SDIO_IE_TRXDONE_Pos 1 //Transfer Complete Status Enable
- #define SDIO_IE_TRXDONE_Msk (0x01 << SDIO_IE_TRXDONE_Pos)
- #define SDIO_IE_BLKGAP_Pos 2 //Block Gap Event Status Enable
- #define SDIO_IE_BLKGAP_Msk (0x01 << SDIO_IE_BLKGAP_Pos)
- #define SDIO_IE_DMADONE_Pos 3 //DMA Interrupt Status Enable
- #define SDIO_IE_DMADONE_Msk (0x01 << SDIO_IE_DMADONE_Pos)
- #define SDIO_IE_BUFWRRDY_Pos 4 //Buffer Write Ready Status Enable
- #define SDIO_IE_BUFWRRDY_Msk (0x01 << SDIO_IE_BUFWRRDY_Pos)
- #define SDIO_IE_BUFRDRDY_Pos 5 //Buffer Read Ready Status Enable
- #define SDIO_IE_BUFRDRDY_Msk (0x01 << SDIO_IE_BUFRDRDY_Pos)
- #define SDIO_IE_CARDINSR_Pos 6 //Card Insertion Status Enable
- #define SDIO_IE_CARDINSR_Msk (0x01 << SDIO_IE_CARDINSR_Pos)
- #define SDIO_IE_CARDRMOV_Pos 7 //Card Removal Status Enable
- #define SDIO_IE_CARDRMOV_Msk (0x01 << SDIO_IE_CARDRMOV_Pos)
- #define SDIO_IE_CARD_Pos 8
- #define SDIO_IE_CARD_Msk (0x01 << SDIO_IE_CARD_Pos)
- #define SDIO_IE_CMDTIMEOUT_Pos 16 //Command Timeout Error Status Enable
- #define SDIO_IE_CMDTIMEOUT_Msk (0x01 << SDIO_IE_CMDTIMEOUT_Pos)
- #define SDIO_IE_CMDCRCERR_Pos 17 //Command CRC Error Status Enable
- #define SDIO_IE_CMDCRCERR_Msk (0x01 << SDIO_IE_CMDCRCERR_Pos)
- #define SDIO_IE_CMDENDERR_Pos 18 //Command End Bit Error Status Enable
- #define SDIO_IE_CMDENDERR_Msk (0x01 << SDIO_IE_CMDENDCERR_Pos)
- #define SDIO_IE_CMDIDXERR_Pos 19 //Command Index Error Status Enable
- #define SDIO_IE_CMDIDXERR_Msk (0x01 << SDIO_IE_CMDIDXCERR_Pos)
- #define SDIO_IE_DATTIMEOUT_Pos 20 //Data Timeout Error Status Enable
- #define SDIO_IE_DATTIMEOUT_Msk (0x01 << SDIO_IE_DATTIMEOUT_Pos)
- #define SDIO_IE_DATCRCERR_Pos 21 //Data CRC Error Status Enable
- #define SDIO_IE_DATCRCERR_Msk (0x01 << SDIO_IE_DATCRCERR_Pos)
- #define SDIO_IE_DATENDERR_Pos 22 //Data End Bit Error Status Enable
- #define SDIO_IE_DATENDERR_Msk (0x01 << SDIO_IE_DATENDCERR_Pos)
- #define SDIO_IE_CURLIMERR_Pos 23 //Current Limit Error Status Enable
- #define SDIO_IE_CURLIMERR_Msk (0x01 << SDIO_IE_CURLIMERR_Pos)
- #define SDIO_IE_CMD12ERR_Pos 24 //Auto CMD12 Error Status Enable
- #define SDIO_IE_CMD12ERR_Msk (0x01 << SDIO_IE_CMD12ERR_Pos)
- #define SDIO_IE_DMAERR_Pos 25 //ADMA Error Status Enable
- #define SDIO_IE_DMAERR_Msk (0x01 << SDIO_IE_DMAERR_Pos)
- #define SDIO_IE_RESPERR_Pos 28 //Target Response Error Status Enable
- #define SDIO_IE_RESPERR_Msk (0x01 << SDIO_IE_RESPERR_Pos)
- #define SDIO_IM_CMDDONE_Pos 0
- #define SDIO_IM_CMDDONE_Msk (0x01 << SDIO_IM_CMDDONE_Pos)
- #define SDIO_IM_TRXDONE_Pos 1
- #define SDIO_IM_TRXDONE_Msk (0x01 << SDIO_IM_TRXDONE_Pos)
- #define SDIO_IM_BLKGAP_Pos 2
- #define SDIO_IM_BLKGAP_Msk (0x01 << SDIO_IM_BLKGAP_Pos)
- #define SDIO_IM_DMADONE_Pos 3
- #define SDIO_IM_DMADONE_Msk (0x01 << SDIO_IM_DMADONE_Pos)
- #define SDIO_IM_BUFWRRDY_Pos 4
- #define SDIO_IM_BUFWRRDY_Msk (0x01 << SDIO_IM_BUFWRRDY_Pos)
- #define SDIO_IM_BUFRDRDY_Pos 5
- #define SDIO_IM_BUFRDRDY_Msk (0x01 << SDIO_IM_BUFRDRDY_Pos)
- #define SDIO_IM_CARDINSR_Pos 6
- #define SDIO_IM_CARDINSR_Msk (0x01 << SDIO_IM_CARDINSR_Pos)
- #define SDIO_IM_CARDRMOV_Pos 7
- #define SDIO_IM_CARDRMOV_Msk (0x01 << SDIO_IM_CARDRMOV_Pos)
- #define SDIO_IM_CARD_Pos 8
- #define SDIO_IM_CARD_Msk (0x01 << SDIO_IM_CARD_Pos)
- #define SDIO_IM_CMDTIMEOUT_Pos 16
- #define SDIO_IM_CMDTIMEOUT_Msk (0x01 << SDIO_IM_CMDTIMEOUT_Pos)
- #define SDIO_IM_CMDCRCERR_Pos 17
- #define SDIO_IM_CMDCRCERR_Msk (0x01 << SDIO_IM_CMDCRCERR_Pos)
- #define SDIO_IM_CMDENDERR_Pos 18
- #define SDIO_IM_CMDENDERR_Msk (0x01 << SDIO_IM_CMDENDCERR_Pos)
- #define SDIO_IM_CMDIDXERR_Pos 19
- #define SDIO_IM_CMDIDXERR_Msk (0x01 << SDIO_IM_CMDIDXCERR_Pos)
- #define SDIO_IM_DATTIMEOUT_Pos 20
- #define SDIO_IM_DATTIMEOUT_Msk (0x01 << SDIO_IM_DATTIMEOUT_Pos)
- #define SDIO_IM_DATCRCERR_Pos 21
- #define SDIO_IM_DATCRCERR_Msk (0x01 << SDIO_IM_DATCRCERR_Pos)
- #define SDIO_IM_DATENDERR_Pos 22
- #define SDIO_IM_DATENDERR_Msk (0x01 << SDIO_IM_DATENDCERR_Pos)
- #define SDIO_IM_CURLIMERR_Pos 23
- #define SDIO_IM_CURLIMERR_Msk (0x01 << SDIO_IM_CURLIMERR_Pos)
- #define SDIO_IM_CMD12ERR_Pos 24
- #define SDIO_IM_CMD12ERR_Msk (0x01 << SDIO_IM_CMD12ERR_Pos)
- #define SDIO_IM_DMAERR_Pos 25
- #define SDIO_IM_DMAERR_Msk (0x01 << SDIO_IM_DMAERR_Pos)
- #define SDIO_IM_RESPERR_Pos 28
- #define SDIO_IM_RESPERR_Msk (0x01 << SDIO_IM_RESPERR_Pos)
- #define SDIO_CMD12ERR_NE_Pos 0 //Auto CMD12 not Executed
- #define SDIO_CMD12ERR_NE_Msk (0x01 << SDIO_CMD12ERR_NE_Pos)
- #define SDIO_CMD12ERR_TO_Pos 1 //Auto CMD12 Timeout Error
- #define SDIO_CMD12ERR_TO_Msk (0x01 << SDIO_CMD12ERR_TO_Pos)
- #define SDIO_CMD12ERR_CRC_Pos 2 //Auto CMD12 CRC Error
- #define SDIO_CMD12ERR_CRC_Msk (0x01 << SDIO_CMD12ERR_CRC_Pos)
- #define SDIO_CMD12ERR_END_Pos 3 //Auto CMD12 End Bit Error
- #define SDIO_CMD12ERR_END_Msk (0x01 << SDIO_CMD12ERR_END_Pos)
- #define SDIO_CMD12ERR_INDEX_Pos 4 //Auto CMD12 Index Error
- #define SDIO_CMD12ERR_INDEX_Msk (0x01 << SDIO_CMD12ERR_INDEX_Pos)
- typedef struct {
- __IO uint32_t IF; //[0] 数据传输结束时置位,写1清零
- __IO uint32_t IE;
- uint32_t RESERVED;
- __IO uint32_t START;
- __IO uint32_t RESERVED2;
- __IO uint32_t CR;
- __IO uint32_t CRH;
- __IO uint32_t CRV;
- uint32_t RESERVED3;
- __IO uint32_t BGC; //Background color
- uint32_t RESERVED4[6];
- struct {
- __IO uint32_t LCR; //Layer Control Register
- __IO uint32_t WHP; //Window Horizon Position
- __IO uint32_t WVP; //Window Vertical Position
- __IO uint32_t ADDR; //display data Address
- __IO uint32_t LLEN; //display data Line Length
- __IO uint32_t CK; //Color Key
- uint32_t RESERVED5[10];
- } L[2]; //Layer
- uint32_t RESERVED5[16];
- __IO uint32_t MPUCR;
- __IO uint32_t MPUIR;
- __IO uint32_t MPUDR;
- __IO uint32_t MPUAR;
- __IO uint32_t MPULEN;
- } LCD_TypeDef;
- #define LCD_START_GO_Pos 1 //写1开始传输数据,数据传输结束后自动清零
- #define LCD_START_GO_Msk (0x01 << LCD_START_GO_Pos)
- #define LCD_CR_CLKDIV_Pos 0 //DOTCLK相对于模块时钟的分频比,0表示2分频,1表示3分频 ...
- #define LCD_CR_CLKDIV_Msk (0x3F << LCD_CR_CLKDIV_Pos)
- #define LCD_CR_CLKINV_Pos 6 //1 输出DOTCLK反向,用于DOTCLK下降沿采样数据的屏
- #define LCD_CR_CLKINV_Msk (0x01 << LCD_CR_CLKINV_Pos)
- #define LCD_CR_CLKALW_Pos 7 //DOTCLK Always,1 DOTCLK一直翻转 0 DOTCLK在空闲时停在1
- #define LCD_CR_CLKALW_Msk (0x01 << LCD_CR_CLKALW_Pos)
- #define LCD_CR_BURSTEN_Pos 8 //Burst Enable,0 只进行SINGLE读 1 优先Burst读
- #define LCD_CR_BURSTEN_Msk (0x01 << LCD_CR_BURSTEN_Pos)
- #define LCD_CR_BURSTLEN_Pos 9 //Burst Length,0 Burst INCR4 1 Burst INCR8
- #define LCD_CR_BURSTLEN_Msk (0x01 << LCD_CR_BURSTLEN_Pos)
- #define LCD_CR_AUTORESTA_Pos 13 //Auto Restart,1 刷新完一帧后自动重启刷新
- #define LCD_CR_AUTORESTA_Msk (0x01 << LCD_CR_AUTORESTA_Pos)
- #define LCD_CR_IMMRELOAD_Pos 14 //Immediate Reload,立即将层配置寄存器的值加载到层工作寄存器
- #define LCD_CR_IMMRELOAD_Msk (0x01 << LCD_CR_IMMRELOAD_Pos)
- #define LCD_CR_VBPRELOAD_Pos 15 //VBP Period Relaod
- #define LCD_CR_VBPRELOAD_Msk (0x01 << LCD_CR_VBPRELOAD_Pos)
- #define LCD_CR_FORMAT_Pos 16 //0 RGB565 1 RGB888
- #define LCD_CR_FORMAT_Msk (0x01 << LCD_CR_FORMAT_Pos)
- #define LCD_CR_SEREN_Pos 17 //Serial RGB Enable
- #define LCD_CR_SEREN_Msk (0x01 << LCD_CR_SEREN_Pos)
- #define LCD_CR_MPUEN_Pos 18 //MPU Interface Enable
- #define LCD_CR_MPUEN_Msk (0x01 << LCD_CR_MPUEN_Pos)
- #define LCD_CR_VSYNCINV_Pos 19 //1 VSYNC反相输出
- #define LCD_CR_VSYNCINV_Msk (0x01 << LCD_CR_VSYNCINV_Pos)
- #define LCD_CR_HSYNCINV_Pos 20 //1 HSYNC反相输出
- #define LCD_CR_HSYNCINV_Msk (0x01 << LCD_CR_HSYNCINV_Pos)
- #define LCD_CRH_HSW_Pos 0 //Hsync Width, 输出HSYNC低电平持续多少个DOTCLK周期,0表示1个周期
- #define LCD_CRH_HSW_Msk (0xFF << LCD_CRH_HSW_Pos)
- #define LCD_CRH_HBP_Pos 8 //0表示1个DOTCLK周期
- #define LCD_CRH_HBP_Msk (0xFF << LCD_CRH_HBP_Pos)
- #define LCD_CRH_PIX_Pos 16 //水平方向的像素个数,0表示1个,最大为1023
- #define LCD_CRH_PIX_Msk (0x3FF<< LCD_CRH_PIX_Pos)
- #define LCD_CRH_HFP_Pos 26 //0表示1个DOTCLK周期
- #define LCD_CRH_HFP_Msk (0x3Fu<< LCD_CRH_HFP_Pos)
- #define LCD_CRV_VSW_Pos 0 //Vsync Width,输出VSYNC低电平持续多少个行周期,0表示1个周期
- #define LCD_CRV_VSW_Msk (0xFF << LCD_CRV_VSW_Pos)
- #define LCD_CRV_VBP_Pos 8 //0表示1个水平行周期
- #define LCD_CRV_VBP_Msk (0xFF << LCD_CRV_VBP_Pos)
- #define LCD_CRV_PIX_Pos 16 //垂直方向的像素个数,0表示1个,最大为1023
- #define LCD_CRV_PIX_Msk (0x3FF<< LCD_CRV_PIX_Pos)
- #define LCD_CRV_VFP_Pos 26 //0表示1个水平行周期
- #define LCD_CRV_VFP_Msk (0x3Fu<< LCD_CRV_VFP_Pos)
- #define LCD_LCR_ALPHA_Pos 0 //Blend时该层的Alpha值
- #define LCD_LCR_ALPHA_Msk (0xFF << LCD_LCR_ALPHA_Pos)
- #define LCD_LCR_EN_Pos 8 //Layer Enable
- #define LCD_LCR_EN_Msk (0x01 << LCD_LCR_EN_Pos)
- #define LCD_LCR_CKEN_Pos 9 //Layer Color Key Enable
- #define LCD_LCR_CKEN_Msk (0x01 << LCD_LCR_CKEN_Pos)
- #define LCD_WHP_STA_Pos 0 //Layer Window 水平起始点
- #define LCD_WHP_STA_Msk (0x3FF<< LCD_WHP_STA_Pos)
- #define LCD_WHP_STP_Pos 16 //Layer Window 水平结束点
- #define LCD_WHP_STP_Msk (0x3FF<< LCD_WHP_STP_Pos)
- #define LCD_WVP_STA_Pos 0 //Layer Window 竖直起始点
- #define LCD_WVP_STA_Msk (0x3FF<< LCD_WVP_STA_Pos)
- #define LCD_WVP_STP_Pos 16 //Layer Window 竖直结束点
- #define LCD_WVP_STP_Msk (0x3FF<< LCD_WVP_STP_Pos)
- #define LCD_MPUCR_RCS1_0_Pos 0 //读操作时,CS上升沿到下降沿时间间隔,0 1个时钟中期
- #define LCD_MPUCR_RCS1_0_Msk (0x1F << LCD_MPUCR_RCS1_0_Pos)
- #define LCD_MPUCR_RDHOLD_Pos 5 //RD低电平保持时间
- #define LCD_MPUCR_RDHOLD_Msk (0x1F << LCD_MPUCR_RDHOLD_Pos)
- #define LCD_MPUCR_WCS1_0_Pos 10 //写操作时,CS上升沿到下降沿时间间隔
- #define LCD_MPUCR_WCS1_0_Msk (0x0F << LCD_MPUCR_WCS1_0_Pos)
- #define LCD_MPUCR_WR1CS1_Pos 14 //WR上升沿到CS上升沿延时
- #define LCD_MPUCR_WR1CS1_Msk (0x03 << LCD_MPUCR_WR1CS1_Pos)
- #define LCD_MPUCR_WRHOLD_Pos 16 //WR低电平保持时间
- #define LCD_MPUCR_WRHOLD_Msk (0x0F << LCD_MPUCR_WRHOLD_Pos)
- #define LCD_MPUCR_CS0WR0_Pos 20 //CS下降沿到WR下降沿延时
- #define LCD_MPUCR_CS0WR0_Msk (0x03 << LCD_MPUCR_CS0WR0_Pos)
- #define LCD_MPULEN_VPIX_Pos 0 //行数,0表示1行
- #define LCD_MPULEN_VPIX_Msk (0x3FF<< LCD_MPULEN_VPIX_Pos)
- #define LCD_MPULEN_HPIX_Pos 16 //每行像素数,0表示1个像素,只能赋奇数值,保证偶数个像素
- #define LCD_MPULEN_HPIX_Msk (0x3FF<< LCD_MPULEN_HPIX_Pos)
- typedef struct {
- __IO uint32_t IF;
- __IO uint32_t IE;
- __IO uint32_t CR;
- uint32_t RESERVED;
- struct {
- __IO uint32_t MAR; //Memory Address Register,word对齐(低两位固定为0)
- __IO uint32_t OR; //Offset Register, added at the end of each line to determine the starting address of the next line
- __IO uint32_t PFCCR; //Pixel Format Converter Control Register
- __IO uint32_t COLOR;
- } L[3]; //Layer: 0 Foreground 1 Background 2 Output
- __IO uint32_t NLR; //Number of Line Register
- } DMA2D_TypeDef;
- #define DMA2D_IF_DONE_Pos 1 //传输完成,写1清零
- #define DMA2D_IF_DONE_Msk (0x01 << DMA2D_IF_DONE_Pos)
- #define DMA2D_IE_DONE_Pos 1
- #define DMA2D_IE_DONE_Msk (0x01 << DMA2D_IE_DONE_Pos)
- #define DMA2D_CR_START_Pos 0 //开始传输
- #define DMA2D_CR_START_Msk (0x01 << DMA2D_CR_START_Pos)
- #define DMA2D_CR_MODE_Pos 8 //0 存储器到存储器 1 存储器到存储器并执行PFC 2 存储器到存储器并执行混合 3 寄存器到存储器(仅输出阶段激合)
- #define DMA2D_CR_MODE_Msk (0x03 << DMA2D_CR_MODE_Pos)
- #define DMA2D_CR_WAIT_Pos 22 //每传输一块数据(64个字),等待指定个系统周期后再传输下一个块,防止DMA2D占用过多SDRAM带宽,影响LCD读取显示数据
- #define DMA2D_CR_WAIT_Msk (0x3FFu<<DMA2D_CR_WAIT_Pos)
- #define DMA2D_PFCCR_CFMT_Pos 0 //Color Format, 0 ARGB8888 1 RGB8888 2 RGB565
- #define DMA2D_PFCCR_CFMT_Msk (0x07 << DMA2D_CFMT_FORMAT_Pos)
- #define DMA2D_PFCCR_AINV_Pos 3 //Alpha Invert
- #define DMA2D_PFCCR_AINV_Msk (0x01 << DMA2D_PFCCR_AINV_Pos)
- #define DMA2D_PFCCR_RBSWAP_Pos 4 //RB Swap, 0 RGB 1 BGR
- #define DMA2D_PFCCR_RBSWAP_Msk (0x01 << DMA2D_PFCCR_RBSWAP_Pos)
- #define DMA2D_PFCCR_AMODE_Pos 8 //Alpha Mode, 0 使用像素点自带Alpha值 1 使用PFCCR.ALPHA值 2 使用像素点自带Alpha值与PFCCR.ALPHA值的乘积
- #define DMA2D_PFCCR_AMODE_Msk (0x03 << DMA2D_PFCCR_AMODE_Pos)
- #define DMA2D_PFCCR_ALPHA_Pos 24
- #define DMA2D_PFCCR_ALPHA_Msk (0xFFu<< DMA2D_PFCCR_ALPHA_Pos)
- #define DMA2D_NLR_NLINE_Pos 0 //Number of Line
- #define DMA2D_NLR_NLINE_Msk (0xFFFF<<DMA2D_NLR_NLINE_Pos)
- #define DMA2D_NLR_NPIXEL_Pos 16 //Number of Pixel per line
- #define DMA2D_NLR_NPIXEL_Msk (0x3FFF<<DMA2D_NLR_NPIXEL_Pos)
- typedef struct {
- __IO uint32_t TIM; //SDRAM时序配置
- __IO uint32_t CFG;
- __IO uint32_t T64; //64ms刷新周期配置
- __IO uint32_t CR;
- __IO uint32_t SR; //0 Idle 1 Init 2 Self-refresh 4 Operating 5 Auto-refresh
- } SDRAMC_TypeDef;
- #define SDRAMC_TIM_TRCD_Pos 0 //Row to column delay, Ie. Activate to Command delay
- #define SDRAMC_TIM_TRCD_Msk (0x03 << SDRAMC_TIM_TRCD_Pos)
- #define SDRAMC_TIM_TRC_Pos 2 //Activate to Activate on same bank
- #define SDRAMC_TIM_TRC_Msk (0x0F << SDRAMC_TIM_TRC_Pos)
- #define SDRAMC_TIM_TRP_Pos 6 //Row precharge time, Ie. Precharge to Activate delay
- #define SDRAMC_TIM_TRP_Msk (0x03 << SDRAMC_TIM_TRP_Pos)
- #define SDRAMC_TIM_T100US_Pos 8
- #define SDRAMC_TIM_T100US_Msk (0x7FFF<<SDRAMC_TIM_T100US_Pos)
- #define SDRAMC_CFG_CLKDIV_Pos 0 //0 SYSCLK/1 1 SYSCLK/2
- #define SDRAMC_CFG_CLKDIV_Msk (0x01 << SDRAMC_CFG_CLKDIV_Pos)
- #define SDRAMC_CFG_CASDELAY_Pos 1 //CAS Latency, 0 2 1 3
- #define SDRAMC_CFG_CASDELAY_Msk (0x01 << SDRAMC_CFG_CASDELAY_Pos)
- #define SDRAMC_CFG_HIGHFREQ_Pos 2 //SDRAM工作时钟是否大于66MHz
- #define SDRAMC_CFG_HIGHFREQ_Msk (0x01 << SDRAMC_CFG_HIGHFREQ_Pos)
- #define SDRAMC_CFG_SIZE_Pos 3 //0 8MB 1 16MB 2 32MB
- #define SDRAMC_CFG_SIZE_Msk (0x03 << SDRAMC_CFG_SIZE_Pos)
- #define SDRAMC_CR_ENTERSRF_Pos 0 //Enter Self-refresh
- #define SDRAMC_CR_ENTERSRF_Msk (0x01 << SDRAMC_CR_ENTERSRF_Pos)
- #define SDRAMC_CR_PWRON_Pos 1 //置位开始初始化流程,完成初始化自动清零
- #define SDRAMC_CR_PWRON_Msk (0x01 << SDRAMC_CR_PWRON_Pos)
- typedef struct {
- __IO uint32_t CMD;
- __IO uint32_t INPUT; //CORDIC计算输入数据,计算SIN和COS时,表示待计算的弧度
- //计算ARCTAN时,为防止溢出,需要将待计算数处理后再写入INPUT寄存器:
- //待计算数 ∈ (0.05, 0.5]时,将待计算数乘以2后写入INPUT
- //待计算数 ∈ (0.5, 2]时, 将待计算数直接写入INPUT
- //待计算数 > 2时, 将待计算数除以2后写入INPUT
- __IO uint32_t COS; //COS计算结果
- __IO uint32_t SIN; //SIN计算结果
- __IO uint32_t ARCTAN; //ARCTAN计算结果
- __IO uint32_t IF;
- __IO uint32_t IE;
- __IO uint32_t TANH; //写启动TANH计算,写完再读,返回计算结果
- } CORDIC_TypeDef;
- #define CORDIC_CMD_START_Pos 0 //写1启动运算,运算完成后自动清零
- #define CORDIC_CMD_START_Msk (0x01 << CORDIC_CMD_START_Pos)
- #define CORDIC_CMD_RANGE_Pos 1 //计算ARCTAN时输入数值的范围 0 (0.05, 0.5] 1 (0.5, 2] 2 >2
- #define CORDIC_CMD_RANGE_Msk (0x03 << CORDIC_CMD_RANGE_Pos)
- #define CORDIC_CMD_SINCOS_Pos 3 //1 计算SIN和COS 0 计算ARCTAN
- #define CORDIC_CMD_SINCOS_Msk (0x01 << CORDIC_CMD_SINCOS_Pos)
- #define CORDIC_CMD_MULDIV_Pos 4 //0 计算SIN\COS\ARCTAN,具体由SINCOS位决定 2 计算除法 3 计算乘法
- #define CORDIC_CMD_MULDIV_Msk (0x03 << CORDIC_CMD_MULDIV_Pos)
- #define CORDIC_INPUT_F_Pos 0 //输入数据小数部分
- #define CORDIC_INPUT_F_Msk (0x3FFF << CORDIC_INPUT_F_Pos)
- #define CORDIC_INPUT_I_Pos 14 //输入数据整数部分
- #define CORDIC_INPUT_I_Msk (0x03 << CORDIC_INPUT_I_Pos)
- #define CORDIC_INPUT_F2_Pos 16 //输入数据小数部分,乘法中的第二个参数、除法中的被除数,乘法结果存于SIN、除法结果存于ARCTAN
- #define CORDIC_INPUT_F2_Msk (0x3FFF << CORDIC_INPUT_F2_Pos)
- #define CORDIC_INPUT_I2_Pos 30 //输入数据整数部分,乘法中的第二个参数、除法中的被除数,乘法结果存于SIN、除法结果存于ARCTAN
- #define CORDIC_INPUT_I2_Msk (0x03u<< CORDIC_INPUT_I2_Pos)
- #define CORDIC_COS_F_Pos 0 //COS计算结果的小数部分
- #define CORDIC_COS_F_Msk (0x3FFF << CORDIC_COS_F_Pos)
- #define CORDIC_COS_I_Pos 14 //COS计算结果的整数部分
- #define CORDIC_COS_I_Msk (0x03 << CORDIC_COS_I_Pos)
- #define CORDIC_COS_DONE_Pos 16 //1 COS计算已完成
- #define CORDIC_COS_DONE_Msk (0x01 << CORDIC_COS_DONE_Pos)
- #define CORDIC_SIN_F_Pos 0 //SIN计算结果的小数部分
- #define CORDIC_SIN_F_Msk (0x3FFF << CORDIC_SIN_F_Pos)
- #define CORDIC_SIN_I_Pos 14 //SIN计算结果的整数部分
- #define CORDIC_SIN_I_Msk (0x03 << CORDIC_SIN_I_Pos)
- #define CORDIC_SIN_DONE_Pos 16 //1 SIN计算已完成
- #define CORDIC_SIN_DONE_Msk (0x01 << CORDIC_SIN_DONE_Pos)
- #define CORDIC_ARCTAN_F_Pos 0 //ARCTAN计算结果的小数部分
- #define CORDIC_ARCTAN_F_Msk (0x3FFF << CORDIC_ARCTAN_F_Pos)
- #define CORDIC_ARCTAN_I_Pos 14 //ARCTAN计算结果的整数部分
- #define CORDIC_ARCTAN_I_Msk (0x03 << CORDIC_ARCTAN_I_Pos)
- #define CORDIC_ARCTAN_DONE_Pos 16 //1 ARCTAN计算已完成
- #define CORDIC_ARCTAN_DONE_Msk (0x01 << CORDIC_ARCTAN_DONE_Pos)
- #define CORDIC_IF_DONE_Pos 0 //1 计算完成,写1清零
- #define CORDIC_IF_DONE_Msk (0x01 << CORDIC_IF_DONE_Pos)
- #define CORDIC_IF_ERR_Pos 1 //1 计算出错,SIN或COS结果不在[0, 1]范围内,或ARCTAN计算结果不在[0, 2]范围内时置位,写1清零
- #define CORDIC_IF_ERR_Msk (0x01 << CORDIC_IF_ERR_Pos)
- #define CORDIC_IE_DONE_Pos 0
- #define CORDIC_IE_DONE_Msk (0x01 << CORDIC_IE_DONE_Pos)
- #define CORDIC_IE_ERR_Pos 1
- #define CORDIC_IE_ERR_Msk (0x01 << CORDIC_IE_ERR_Pos)
- #define CORDIC_TANH_F_Pos 0 //TANH输入和计算结果的小数部分
- #define CORDIC_TANH_F_Msk (0x3FFF << CORDIC_TANH_F_Pos)
- #define CORDIC_TANH_I_Pos 14 //TANH输入和计算结果的整数部分
- #define CORDIC_TANH_I_Msk (0x03 << CORDIC_TANH_I_Pos)
- typedef struct {
- __IO uint32_t CR;
- __IO uint32_t SR;
- uint32_t RESERVED[2];
- __IO uint32_t DIVIDEND; //被除数
- __IO uint32_t DIVISOR; //除数
- __IO uint32_t QUO; //商
- __IO uint32_t REMAIN; //余数
- __IO uint32_t RADICAND; //被开方数
- __IO uint32_t ROOT; //平方根,低16位为小数部分,高16位为整数部分
- } DIV_TypeDef;
- #define DIV_CR_DIVGO_Pos 0 //写1启动除法运算,运算完成后自动清零
- #define DIV_CR_DIVGO_Msk (0x01 << DIV_CR_DIVGO_Pos)
- #define DIV_CR_DIVSIGN_Pos 1 //0 有符号除法 1 无符号除法
- #define DIV_CR_DIVSIGN_Msk (0x01 << DIV_CR_DIVSIGN_Pos)
- #define DIV_CR_ROOTGO_Pos 8 //写1启动开平方根运算,运算完成后自动清零
- #define DIV_CR_ROOTGO_Msk (0x01 << DIV_CR_ROOTGO_Pos)
- #define DIV_CR_ROOTMOD_Pos 9 //开平方根模式:0 结果为整数 1 结果既有整数部分又有小数部分
- #define DIV_CR_ROOTMOD_Msk (0x01 << DIV_CR_ROOTMOD_Pos)
- #define DIV_SR_DIVEND_Pos 0 //除法运算完成标志,写1清零
- #define DIV_SR_DIVEND_Msk (0x01 << DIV_SR_DIVEND_Pos)
- #define DIV_SR_DIVBUSY_Pos 1 //1 除法运算计算中
- #define DIV_SR_DIVBUSY_Msk (0x01 << DIV_SR_DIVBUSY_Pos)
- #define DIV_SR_ROOTENDI_Pos 8 //开方整数运算完成标志,写1清零
- #define DIV_SR_ROOTENDI_Msk (0x01 << DIV_SR_ROOTENDI_Pos)
- #define DIV_SR_ROOTENDF_Pos 9 //开方小数运算完成标志,写1清零
- #define DIV_SR_ROOTENDF_Msk (0x01 << DIV_SR_ROOTENDF_Pos)
- #define DIV_SR_ROOTBUSY_Pos 10 //1 开方运算计算中
- #define DIV_SR_ROOTBUSY_Msk (0x01 << DIV_SR_ROOTBUSY_Pos)
- typedef struct {
- __IO uint32_t DATA;
- __IO uint32_t ADDR;
- __IO uint32_t ERASE;
- __IO uint32_t CACHE;
- __IO uint32_t CFG0;
- __IO uint32_t CFG1;
- __IO uint32_t CFG2;
- __IO uint32_t CFG3;
- __IO uint32_t CFG4;
- __IO uint32_t STAT;
- } FMC_TypeDef;
- #define FMC_ERASE_ADDR_Pos 0 //4K每页
- #define FMC_ERASE_ADDR_Msk (0x7FFFF << FMC_ERASE_ADDR_Pos)
- #define FMC_ERASE_REQ_Pos 27
- #define FMC_ERASE_REQ_Msk (0x1Fu<< FMC_ERASE_REQ_Pos)
- #define FMC_CACHE_PROGEN_Pos 0 //Flash Program Enable
- #define FMC_CACHE_PROGEN_Msk (0x01 << FMC_CACHE_PROGEN_Pos)
- #define FMC_CACHE_CEN_Pos 16 //Cache Enable
- #define FMC_CACHE_CEN_Msk (0x01 << FMC_CACHE_CEN_Pos)
- #define FMC_CACHE_CPEN_Pos 17 //Cache Predict Enable
- #define FMC_CACHE_CPEN_Msk (0x01 << FMC_CACHE_CPEN_Pos)
- #define FMC_CACHE_CCLR_Pos 18 //Cache Clear,自动清零
- #define FMC_CACHE_CCLR_Msk (0x01 << FMC_CACHE_CCLR_Pos)
- #define FMC_STAT_ERASEBUSY_Pos 0
- #define FMC_STAT_ERASEBUSY_Msk (0x01 << FMC_STAT_ERASEBUSY_Pos)
- #define FMC_STAT_PROGBUSY_Pos 1
- #define FMC_STAT_PROGBUSY_Msk (0x01 << FMC_STAT_PROGBUSY_Pos)
- #define FMC_STAT_READBUSY_Pos 2
- #define FMC_STAT_READBUSY_Msk (0x01 << FMC_STAT_READBUSY_Pos)
- #define FMC_STAT_FIFOEMPTY_Pos 3 //Write FIFO Empty
- #define FMC_STAT_FIFOEMPTY_Msk (0x01 << FMC_STAT_FIFOEMPTY_Pos)
- #define FMC_STAT_FIFOFULL_Pos 4 //Write FIFO Full
- #define FMC_STAT_FIFOFULL_Msk (0x01 << FMC_STAT_FIFOFULL_Pos)
- #define FMC_STAT_IDLE_Pos 31
- #define FMC_STAT_IDLE_Msk (0x01u<< FMC_STAT_IDLE_Pos)
- typedef struct {
- __IO uint32_t CFG;
- __IO uint32_t TIM;
- __I uint32_t SR;
- __IO uint32_t IF;
- __IO uint32_t IE;
- __IO uint32_t GO; //写1开始执行
- __IO uint32_t ADDR;
- __IO uint32_t DATA;
- __IO uint32_t CMDAHB; //通过AHB总线读写Flash时使用的命令码
- __IO uint32_t CMD; //通过寄存器 读写Flash时使用的命令码
- } SFC_TypeDef; //Serial Flash Controller
- #define SFC_CFG_CMDTYPE_Pos 0 //0 无地址、无数据、无WIP,用于写使能、写禁止
- //1 无地址、有数据(读1字节)、无WIP,用于读状态寄存器高8位、读状态寄存器低8位
- //2 无地址、有数据(读3字节)、无WIP,用于读Identification
- //3 有地址、有数据(读2字节)、无WIP,用于读MID、读DID
- //4 无地址、无数据、有WIP
- //5 无地址、无数据、有WIP(自动写使能),用于片擦
- //6 无地址、有数据(写2字节)、有WIP(自动写使能),用于写16位状态寄存器
- //7 有地址、无数据、有WIP(自动写使能),用于扇区擦
- #define SFC_CFG_CMDTYPE_Msk (0x0F << SFC_CFG_CMDTYPE_Pos)
- #define SFC_CFG_CMDWREN_Pos 5 //SFC->CMD寄存器写使能,使能后可将命令码写入CMD寄存器
- #define SFC_CFG_CMDWREN_Msk (0x01 << SFC_CFG_CMDWREN_Pos)
- #define SFC_CFG_CLKDIV_Pos 6 //时钟分频:0 1分频 1 2分频 2 4分频 3 8分频
- #define SFC_CFG_CLKDIV_Msk (0x03 << SFC_CFG_CLKDIV_Pos)
- #define SFC_CFG_ADDR4L_Pos 8 //编程操作的地址阶段使用4条数据线
- #define SFC_CFG_ADDR4L_Msk (0x01 << SFC_CFG_ADDR4L_Pos)
- #define SFC_CFG_DATA4L_PP_Pos 9 //编程操作的数据阶段使用4条数据线
- #define SFC_CFG_DATA4L_PP_Msk (0x01 << SFC_CFG_DATA4L_PP_Pos)
- #define SFC_CFG_DATA4L_RD_Pos 10 //读取操作的地址阶段和数据阶段使用:0 1条数据线 1 2条数据线 2 4条数据线
- #define SFC_CFG_DATA4L_RD_Msk (0x03 << SFC_CFG_DATA4L_RD_Pos)
- #define SFC_CFG_WREN_Pos 12 //Flash写使能
- #define SFC_CFG_WREN_Msk (0x01 << SFC_CFG_WREN_Pos)
- #define SFC_TIM_WIP_CHK_ITV_Pos 0 //硬件自动查询WIP时间间隔
- #define SFC_TIM_WIP_CHK_ITV_Msk (0xFF << SFC_TIM_WIP_CHK_ITV_Pos)
- #define SFC_TIM_WIP_CHK_LMT_Pos 8 //硬件自动查询WIP次数限值
- #define SFC_TIM_WIP_CHK_LMT_Msk (0xFF << SFC_TIM_WIP_CHK_LMT_Pos)
- #define SFC_TIM_IDLETO_Pos 16 //空闲超时,超时后释放CS
- #define SFC_TIM_IDLETO_Msk (0x3F << SFC_TIM_IDLETO_Pos)
- #define SFC_TIM_CSHIGH_Pos 22 //CS拉高时间:0 1个SCLK时钟周期 1 2个 2 3个 3 4个
- #define SFC_TIM_CSHIGH_Msk (0x03 << SFC_TIM_CSHIGH_Pos)
- #define SFC_SR_BUSY_Pos 0
- #define SFC_SR_BUSY_Msk (0x01 << SFC_SR_BUSY_Pos)
- #define SFC_SR_FIFOLVL_Pos 24 //FIFO Level
- #define SFC_SR_FIFOLVL_Msk (0x07 << SFC_SR_FIFOLVL_Pos)
- #define SFC_SR_FIFOEMPTY_Pos 27 //FIFO Empty
- #define SFC_SR_FIFOEMPTY_Msk (0x01 << SFC_SR_FIFOEMPTY_Pos)
- #define SFC_SR_FIFOHFULL_Pos 28 //FIFO Half Full
- #define SFC_SR_FIFOHFULL_Msk (0x01 << SFC_SR_FIFOHFULL_Pos)
- #define SFC_SR_FIFOFULL_Pos 29 //FIFO Full
- #define SFC_SR_FIFOFULL_Msk (0x01 << SFC_SR_FIFOFULL_Pos)
- #define SFC_SR_FIFOOVF_Pos 30 //FIFO Overflow
- #define SFC_SR_FIFOOVF_Msk (0x01 << SFC_SR_FIFOOVF_Pos)
- #define SFC_SR_FIFOUVF_Pos 31 //FIFO Underflow
- #define SFC_SR_FIFOUVF_Msk (0x01u<< SFC_SR_FIFOUVF_Pos)
- #define SFC_IF_OVER_Pos 0 //操作结束,写1清零
- #define SFC_IF_OVER_Msk (0x01 << SFC_IF_OVER_Pos)
- #define SFC_IF_ERR_Pos 1 //Error
- #define SFC_IF_ERR_Msk (0x01 << SFC_IF_ERR_Pos)
- #define SFC_IF_TO_Pos 2 //Timeout
- #define SFC_IF_TO_Msk (0x01 << SFC_IF_TO_Pos)
- #define SFC_IF_FIFOEMPTY_Pos 27
- #define SFC_IF_FIFOEMPTY_Msk (0x01 << SFC_IF_FIFOEMPTY_Pos)
- #define SFC_IF_FIFOHFULL_Pos 28
- #define SFC_IF_FIFOHFULL_Msk (0x01 << SFC_IF_FIFOHFULL_Pos)
- #define SFC_IF_FIFOFULL_Pos 29
- #define SFC_IF_FIFOFULL_Msk (0x01 << SFC_IF_FIFOFULL_Pos)
- #define SFC_IF_FIFOOVF_Pos 30
- #define SFC_IF_FIFOOVF_Msk (0x01 << SFC_IF_FIFOOVF_Pos)
- #define SFC_IF_FIFOUVF_Pos 31
- #define SFC_IF_FIFOUVF_Msk (0x01u<< SFC_IF_FIFOUVF_Pos)
- #define SFC_IE_OVER_Pos 0 //操作结束
- #define SFC_IE_OVER_Msk (0x01 << SFC_IE_OVER_Pos)
- #define SFC_IE_ERR_Pos 1
- #define SFC_IE_ERR_Msk (0x01 << SFC_IE_ERR_Pos)
- #define SFC_IE_TO_Pos 2 //Timeout
- #define SFC_IE_TO_Msk (0x01 << SFC_IE_TO_Pos)
- #define SFC_IE_FIFOEMPTY_Pos 27
- #define SFC_IE_FIFOEMPTY_Msk (0x01 << SFC_IE_FIFOEMPTY_Pos)
- #define SFC_IE_FIFOHFULL_Pos 28
- #define SFC_IE_FIFOHFULL_Msk (0x01 << SFC_IE_FIFOHFULL_Pos)
- #define SFC_IE_FIFOFULL_Pos 29
- #define SFC_IE_FIFOFULL_Msk (0x01 << SFC_IE_FIFOFULL_Pos)
- #define SFC_IE_FIFOOVF_Pos 30
- #define SFC_IE_FIFOOVF_Msk (0x01 << SFC_IE_FIFOOVF_Pos)
- #define SFC_IE_FIFOUVF_Pos 31
- #define SFC_IE_FIFOUVF_Msk (0x01u<< SFC_IE_FIFOUVF_Pos)
- #define SFC_CMDAHB_WREN_Pos 0 //Flash命令码:写使能
- #define SFC_CMDAHB_WREN_Msk (0xFF << SFC_CMDAHB_WREN_Pos)
- #define SFC_CMDAHB_PP_Pos 8 //Flash命令码:页编程
- #define SFC_CMDAHB_PP_Msk (0xFF << SFC_CMDAHB_PP_Pos)
- #define SFC_CMDAHB_RDSRL_Pos 16 //Flash命令码:读STATUS REG低8位
- #define SFC_CMDAHB_RDSRL_Msk (0xFF << SFC_CMDAHB_RDSRL_Pos)
- #define SFC_CMDAHB_READ_Pos 24 //Flash命令码:读数据
- #define SFC_CMDAHB_READ_Msk (0xFFu<< SFC_CMDAHB_READ_Pos)
- typedef struct {
- __IO uint32_t CR;
- __I uint32_t SR;
- __O uint32_t SWTRG; //Software trigger
- __IO uint32_t DHR;
- } DAC_TypeDef;
- #define DAC_CR_EN_Pos 0
- #define DAC_CR_EN_Msk (0x01 << DAC_CR_EN_Pos)
- #define DAC_CR_DMAEN_Pos 3
- #define DAC_CR_DMAEN_Msk (0x01 << DAC_CR_DMAEN_Pos)
- #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]
- #define DAC_CR_DHRFMT_Msk (0x03 << DAC_CR_DHRFMT_Pos)
- #define DAC_SR_DHRFULL_Pos 0 //0 DHR not Full, can write now
- #define DAC_SR_DHRFULL_Msk (0x01 << DAC_SR_DHRFULL_Pos)
- typedef struct {
- __IO uint32_t CR;
- __O uint32_t DATAIN;
- __IO uint32_t INIVAL; //CR.EN写1时,INIVAL中的值写入RESULT
- __I uint32_t RESULT;
- } CRC_TypeDef;
- #define CRC_CR_EN_Pos 0
- #define CRC_CR_EN_Msk (0x01 << CRC_CR_EN_Pos)
- #define CRC_CR_IREV_Pos 1 //输入数据是否翻转,0 bit顺序不变 1 bit顺序完全翻转 2 bit顺序字节内翻转 3 仅字节顺序翻转
- #define CRC_CR_IREV_Msk (0x03 << CRC_CR_IREV_Pos)
- #define CRC_CR_INOT_Pos 3 //输入数据是否取反
- #define CRC_CR_INOT_Msk (0x01 << CRC_CR_INOT_Pos)
- #define CRC_CR_OREV_Pos 4 //输出结果是否翻转,0 bit顺序不变 1 bit顺序完全翻转 2 bit顺序字节内翻转 3 仅字节顺序翻转
- #define CRC_CR_OREV_Msk (0x03 << CRC_CR_OREV_Pos)
- #define CRC_CR_ONOT_Pos 6 //输出结果是否取反
- #define CRC_CR_ONOT_Msk (0x01 << CRC_CR_ONOT_Pos)
- #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
- #define CRC_CR_POLY_Msk (0x03 << CRC_CR_POLY_Pos)
- #define CRC_CR_IBIT_Pos 9 //输入数据有效位数 0 32位 1 16位 2 8位
- #define CRC_CR_IBIT_Msk (0x03 << CRC_CR_IBIT_Pos)
- typedef struct {
- __IO uint32_t MINSEC; //分秒计数
- __IO uint32_t DATHUR; //日时计数
- __IO uint32_t MONDAY; //月周计数
- __IO uint32_t YEAR; //[11:0] 年计数,支持1901-2199
- __IO uint32_t MINSECAL; //分秒闹铃设置
- __IO uint32_t DAYHURAL; //周时闹铃设置
- __IO uint32_t LOAD; //将设置寄存器中的值同步到RTC中,同步完成自动清零
- __IO uint32_t IE;
- __IO uint32_t IF; //写1清零
- __IO uint32_t EN; //[0] 1 RTC使能
- __IO uint32_t CFGABLE; //[0] 1 RTC可配置
- __IO uint32_t TRIM; //时钟调整
- __IO uint32_t TRIMM; //时钟微调整
- } RTC_TypeDef;
- #define RTC_LOAD_TIME_Pos 0
- #define RTC_LOAD_TIME_Msk (0x01 << RTC_LOAD_TIME_Pos)
- #define RTC_LOAD_ALARM_Pos 1
- #define RTC_LOAD_ALARM_Msk (0x01 << RTC_LOAD_ALARM_Pos)
- #define RTC_MINSEC_SEC_Pos 0 //秒计数,取值0--59
- #define RTC_MINSEC_SEC_Msk (0x3F << RTC_MINSEC_SEC_Pos)
- #define RTC_MINSEC_MIN_Pos 6 //分钟计数,取值0--59
- #define RTC_MINSEC_MIN_Msk (0x3F << RTC_MINSEC_MIN_Pos)
- #define RTC_DATHUR_HOUR_Pos 0 //小时计数,取值0--23
- #define RTC_DATHUR_HOUR_Msk (0x1F << RTC_DATHUR_HOUR_Pos)
- #define RTC_DATHUR_DATE_Pos 5 //date of month,取值1--31
- #define RTC_DATHUR_DATE_Msk (0x1F << RTC_DATHUR_DATE_Pos)
- #define RTC_MONDAY_DAY_Pos 0 //day of week,取值0--6
- #define RTC_MONDAY_DAY_Msk (0x07 << RTC_MONDAY_DAY_Pos)
- #define RTC_MONDAY_MON_Pos 3 //月份计数,取值1--12
- #define RTC_MONDAY_MON_Msk (0x0F << RTC_MONDAY_MON_Pos)
- #define RTC_MINSECAL_SEC_Pos 0 //闹钟秒设置
- #define RTC_MINSECAL_SEC_Msk (0x3F << RTC_MINSECAL_SEC_Pos)
- #define RTC_MINSECAL_MIN_Pos 6 //闹钟分钟设置
- #define RTC_MINSECAL_MIN_Msk (0x3F << RTC_MINSECAL_MIN_Pos)
- #define RTC_DAYHURAL_HOUR_Pos 0 //闹钟小时设置
- #define RTC_DAYHURAL_HOUR_Msk (0x1F << RTC_DAYHURAL_HOUR_Pos)
- #define RTC_DAYHURAL_SUN_Pos 5 //周日闹钟有效
- #define RTC_DAYHURAL_SUN_Msk (0x01 << RTC_DAYHURAL_SUN_Pos)
- #define RTC_DAYHURAL_MON_Pos 6 //周一闹钟有效
- #define RTC_DAYHURAL_MON_Msk (0x01 << RTC_DAYHURAL_MON_Pos)
- #define RTC_DAYHURAL_TUE_Pos 7 //周二闹钟有效
- #define RTC_DAYHURAL_TUE_Msk (0x01 << RTC_DAYHURAL_TUE_Pos)
- #define RTC_DAYHURAL_WED_Pos 8 //周三闹钟有效
- #define RTC_DAYHURAL_WED_Msk (0x01 << RTC_DAYHURAL_WED_Pos)
- #define RTC_DAYHURAL_THU_Pos 9 //周四闹钟有效
- #define RTC_DAYHURAL_THU_Msk (0x01 << RTC_DAYHURAL_THU_Pos)
- #define RTC_DAYHURAL_FRI_Pos 10 //周五闹钟有效
- #define RTC_DAYHURAL_FRI_Msk (0x01 << RTC_DAYHURAL_FRI_Pos)
- #define RTC_DAYHURAL_SAT_Pos 11 //周六闹钟有效
- #define RTC_DAYHURAL_SAT_Msk (0x01 << RTC_DAYHURAL_SAT_Pos)
- #define RTC_IE_SEC_Pos 0 //秒中断使能
- #define RTC_IE_SEC_Msk (0x01 << RTC_IE_SEC_Pos)
- #define RTC_IE_MIN_Pos 1
- #define RTC_IE_MIN_Msk (0x01 << RTC_IE_MIN_Pos)
- #define RTC_IE_HOUR_Pos 2
- #define RTC_IE_HOUR_Msk (0x01 << RTC_IE_HOUR_Pos)
- #define RTC_IE_DATE_Pos 3
- #define RTC_IE_DATE_Msk (0x01 << RTC_IE_DATE_Pos)
- #define RTC_IE_ALARM_Pos 4
- #define RTC_IE_ALARM_Msk (0x01 << RTC_IE_ALARM_Pos)
- #define RTC_IE_TRIM_Pos 5 //校准完成中断使能
- #define RTC_IE_TRIM_Msk (0x01 << RTC_IE_TRIM_Pos)
- #define RTC_IE_HSEC_Pos 6 //半秒中断使能
- #define RTC_IE_HSEC_Msk (0x01 << RTC_IE_HSEC_Pos)
- #define RTC_IE_QSEC_Pos 7 //四分之一秒中断使能
- #define RTC_IE_QSEC_Msk (0x01 << RTC_IE_QSEC_Pos)
- #define RTC_IF_SEC_Pos 0 //写1清零
- #define RTC_IF_SEC_Msk (0x01 << RTC_IF_SEC_Pos)
- #define RTC_IF_MIN_Pos 1
- #define RTC_IF_MIN_Msk (0x01 << RTC_IF_MIN_Pos)
- #define RTC_IF_HOUR_Pos 2
- #define RTC_IF_HOUR_Msk (0x01 << RTC_IF_HOUR_Pos)
- #define RTC_IF_DATE_Pos 3
- #define RTC_IF_DATE_Msk (0x01 << RTC_IF_DATE_Pos)
- #define RTC_IF_ALARM_Pos 4
- #define RTC_IF_ALARM_Msk (0x01 << RTC_IF_ALARM_Pos)
- #define RTC_IF_TRIM_Pos 5
- #define RTC_IF_TRIM_Msk (0x01 << RTC_IF_TRIM_Pos)
- #define RTC_IF_HSEC_Pos 6
- #define RTC_IF_HSEC_Msk (0x01 << RTC_IF_HSEC_Pos)
- #define RTC_IF_QSEC_Pos 7
- #define RTC_IF_QSEC_Msk (0x01 << RTC_IF_QSEC_Pos)
- #define RTC_TRIM_ADJ_Pos 0 //用于调整BASECNT的计数周期,默认为32768,如果DEC为1,则计数周期调整为32768-ADJ,否则调整为32768+ADJ
- #define RTC_TRIM_ADJ_Msk (0xFF << RTC_TRIM_ADJ_Pos)
- #define RTC_TRIM_DEC_Pos 8
- #define RTC_TRIM_DEC_Msk (0x01 << RTC_TRIM_DEC_Pos)
- #define RTC_TRIMM_CYCLE_Pos 0 //用于计数周期微调,如果INC为1,则第n个计数周期调整为(32768±ADJ)+1,否则调整为(32768±ADJ)-1
- //cycles=0时,不进行微调整;cycles=1,则n为2;cycles=7,则n为8;以此类推
- #define RTC_TRIMM_CYCLE_Msk (0x07 << RTC_TRIMM_CYCLE_Pos)
- #define RTC_TRIMM_INC_Pos 3
- #define RTC_TRIMM_INC_Msk (0x01 << RTC_TRIMM_INC_Pos)
- typedef struct {
- __IO uint32_t RSTVAL; //计数器计数到此值时产生复位
- __IO uint32_t INTVAL; //计数器计数到此值时产生中断
- __IO uint32_t CR;
- __IO uint32_t IF; //[0] 中断标志,写1清零
- __IO uint32_t FEED; //写0x55喂狗
- } WDT_TypeDef;
- #define WDT_CR_EN_Pos 0
- #define WDT_CR_EN_Msk (0x01 << WDT_CR_EN_Pos)
- #define WDT_CR_RSTEN_Pos 1
- #define WDT_CR_RSTEN_Msk (0x01 << WDT_CR_RSTEN_Pos)
- #define WDT_CR_INTEN_Pos 2
- #define WDT_CR_INTEN_Msk (0x01 << WDT_CR_INTEN_Pos)
- #define WDT_CR_WINEN_Pos 3 // 窗口功能使能
- #define WDT_CR_WINEN_Msk (0x01 << WDT_CR_WINEN_Pos)
- #define WDT_CR_CKDIV_Pos 8 // 时钟预分频,0 2分频 1 4分频 2 8分频 ...
- #define WDT_CR_CKDIV_Msk (0x0F << WDT_CR_CKDIV_Pos)
- typedef struct {
- __IO uint32_t TXBUF[16][0x100]; //0x4000, 16KB
- __IO uint32_t RXBUF[0x100]; //0x4400,17KB
- struct {
- __IO uint32_t TXCR; //Tx Control
- __IO uint32_t TXSR; //Tx Status
- uint32_t RESERVED;
- __IO uint32_t TXTRSZ; //Tx Transfer Size,以字节为单位
- } INEP[16];
- struct {
- __IO uint32_t RXCR; //Rx Control
- uint32_t RESERVED[3];
- } OUTEP[16]; //0x4600
- __IO uint32_t DEVCR; //Device Control
- __I uint32_t DEVSR; //Device Status
- __IO uint32_t DEVIF; //Device Interrupt Flag
- __IO uint32_t DEVIE; //Device Interrupt Enable
- uint32_t RESERVED;
- __IO uint32_t EPIE; //Endpoint Interrupt Enable
- __IO uint32_t FFTHR; //FIFO Threshold
- __IO uint32_t RXSR; //Rx Status
- __IO uint32_t SETUPSR; //Setup Status
- __IO uint32_t EPIF; //Endpoint Interrupt Flag
- __IO uint32_t FRAMENR; //Frame Number
- uint32_t RESERVED1[(0x4700-0x4628)/4-1];
- __IO uint32_t SETUPD1;
- __IO uint32_t SETUPD2;
- uint32_t RESERVED2[(0x4804-0x4704)/4-1];
- __IO uint32_t EPCFG[16];
- } USBD_TypeDef;
- #define USBD_TXCR_SNDSTALL_Pos 0 //Send Stall
- #define USBD_TXCR_SNDSTALL_Msk (0x01 << USBD_TXCR_SNDSTALL_Pos)
- #define USBD_TXCR_FLUSHFF_Pos 2 //Flush FIFO
- #define USBD_TXCR_FLUSHFF_Msk (0x01 << USBD_TXCR_FLUSHFF_Pos)
- #define USBD_TXCR_FFRDY_Pos 3 //FIFO Ready
- #define USBD_TXCR_FFRDY_Msk (0x01 << USBD_TXCR_FFRDY_Pos)
- #define USBD_TXSR_SUCC_Pos 0 //Success
- #define USBD_TXSR_SUCC_Msk (0x01 << USBD_TXSR_SUCC_Pos)
- #define USBD_TXSR_DATSNT_Pos 1 //Data Sent
- #define USBD_TXSR_DATSNT_Msk (0x01 << USBD_TXSR_DATSNT_Pos)
- #define USBD_TXSR_NAKSNT_Pos 3 //NAK Sent
- #define USBD_TXSR_NAKSNT_Msk (0x01 << USBD_TXSR_NAKSNT_Pos)
- #define USBD_RXCR_SNDSTALL_Pos 0 //Send Stall
- #define USBD_RXCR_SNDSTALL_Msk (0x01 << USBD_RXCR_SNDSTALL_Pos)
- #define USBD_RXCR_FLUSHFF_Pos 2 //Flush FIFO
- #define USBD_RXCR_FLUSHFF_Msk (0x01 << USBD_RXCR_FLUSHFF_Pos)
- #define USBD_RXCR_FFRDY_Pos 3 //FIFO Ready
- #define USBD_RXCR_FFRDY_Msk (0x01 << USBD_RXCR_FFRDY_Pos)
- #define USBD_DEVCR_SPEED_Pos 0 //2 LS 3 FS
- #define USBD_DEVCR_SPEED_Msk (0x03 << USBD_DEVCR_SPEED_Pos)
- #define USBD_DEVCR_REMOTEWKUP_Pos 2
- #define USBD_DEVCR_REMOTEWKUP_Msk (0x01 << USBD_DEVCR_REMOTEWKUP_Pos)
- #define USBD_DEVCR_SELFPWRD_Pos 3 //Self Powered
- #define USBD_DEVCR_SELFPWRD_Msk (0x01 << USBD_DEVCR_SELFPWRD_Pos)
- #define USBD_DEVCR_SYNCFRAME_Pos 4 //Sync Frame Command Support
- #define USBD_DEVCR_SYNCFRAME_Msk (0x01 << USBD_DEVCR_SYNCFRAME_Pos)
- #define USBD_DEVCR_CSRDONE_Pos 6 //CSR Configured Done
- #define USBD_DEVCR_CSRDONE_Msk (0x01 << USBD_DEVCR_CSRDONE_Pos)
- #define USBD_DEVCR_SETDESC_Pos 7 //Set Descriptor Command Support
- #define USBD_DEVCR_SETDESC_Msk (0x01 << USBD_DEVCR_SETDESC_Pos)
- #define USBD_DEVCR_DEVICE_Pos 8 //1 Device 0 Host
- #define USBD_DEVCR_DEVICE_Msk (0x01 << USBD_DEVCR_DEVICE_Pos)
- #define USBD_DEVSR_CFG_Pos 0 //value set by Set Configuration command
- #define USBD_DEVSR_CFG_Msk (0x0F << USBD_DEVSR_CFG_Pos)
- #define USBD_DEVSR_INTF_Pos 4 //value set by Set Interface command
- #define USBD_DEVSR_INTF_Msk (0x0F << USBD_DEVSR_INTF_Pos)
- #define USBD_DEVSR_ALT_Pos 8 //value set by Set Alternate command
- #define USBD_DEVSR_ALT_Msk (0x0F << USBD_DEVSR_ALT_Pos)
- #define USBD_DEVSR_SUSP_Pos 12 //set when Suspend condition detected on the USB
- #define USBD_DEVSR_SUSP_Msk (0x01 << USBD_DEVSR_SUSP_Pos)
- #define USBD_DEVSR_FRNR_Pos 21 //Frame Number of received SOF
- #define USBD_DEVSR_FRNR_Msk (0x7FF<< USBD_DEVSR_FRNR_Pos)
- #define USBD_DEVIF_SETCFG_Pos 0 //Set when receive Set Configuration command,写1清零
- #define USBD_DEVIF_SETCFG_Msk (0x01 << USBD_DEVIF_SETCFG_Pos)
- #define USBD_DEVIF_SETINTF_Pos 1 //Set when receive Set Interface command
- #define USBD_DEVIF_SETINTF_Msk (0x01 << USBD_DEVIF_SETINTF_Pos)
- #define USBD_DEVIF_RST_Pos 3 //Set when Reset detected on the USB
- #define USBD_DEVIF_RST_Msk (0x01 << USBD_DEVIF_RST_Pos)
- #define USBD_DEVIF_SUSP_Pos 4 //Set when Suspend detected on the USB
- #define USBD_DEVIF_SUSP_Msk (0x01 << USBD_DEVIF_SUSP_Pos)
- #define USBD_DEVIF_SOF_Pos 5 //Set when SOF received
- #define USBD_DEVIF_SOF_Msk (0x01 << USBD_DEVIF_SOF_Pos)
- #define USBD_DEVIF_SETUP_Pos 6 //Set when Setup received
- #define USBD_DEVIF_SETUP_Msk (0x01 << USBD_DEVIF_SETUP_Pos)
- #define USBD_DEVIF_OUT_Pos 7 //Set when OUT received
- #define USBD_DEVIF_OUT_Msk (0x01 << USBD_DEVIF_OUT_Pos)
- #define USBD_DEVIE_SETCFG_Pos 0
- #define USBD_DEVIE_SETCFG_Msk (0x01 << USBD_DEVIE_SETCFG_Pos)
- #define USBD_DEVIE_SETINTF_Pos 1
- #define USBD_DEVIE_SETINTF_Msk (0x01 << USBD_DEVIE_SETINTF_Pos)
- #define USBD_DEVIE_RST_Pos 3
- #define USBD_DEVIE_RST_Msk (0x01 << USBD_DEVIE_RST_Pos)
- #define USBD_DEVIE_SUSP_Pos 4
- #define USBD_DEVIE_SUSP_Msk (0x01 << USBD_DEVIE_SUSP_Pos)
- #define USBD_DEVIE_SOF_Pos 5
- #define USBD_DEVIE_SOF_Msk (0x01 << USBD_DEVIE_SOF_Pos)
- #define USBD_DEVIE_SETUP_Pos 6
- #define USBD_DEVIE_SETUP_Msk (0x01 << USBD_DEVIE_SETUP_Pos)
- #define USBD_DEVIE_OUT_Pos 7
- #define USBD_DEVIE_OUT_Msk (0x01 << USBD_DEVIE_OUT_Pos)
- #define USBD_EPIE_INEP0_Pos 0
- #define USBD_EPIE_INEP0_Msk (0x01 << USBD_EPIE_INEP0_Pos)
- #define USBD_EPIE_INEP1_Pos 1
- #define USBD_EPIE_INEP1_Msk (0x01 << USBD_EPIE_INEP1_Pos)
- #define USBD_EPIE_INEP2_Pos 2
- #define USBD_EPIE_INEP2_Msk (0x01 << USBD_EPIE_INEP2_Pos)
- #define USBD_EPIE_INEP3_Pos 3
- #define USBD_EPIE_INEP3_Msk (0x01 << USBD_EPIE_INEP3_Pos)
- #define USBD_EPIE_INEP4_Pos 4
- #define USBD_EPIE_INEP4_Msk (0x01 << USBD_EPIE_INEP4_Pos)
- #define USBD_EPIE_INEP5_Pos 5
- #define USBD_EPIE_INEP5_Msk (0x01 << USBD_EPIE_INEP5_Pos)
- #define USBD_EPIE_INEP6_Pos 6
- #define USBD_EPIE_INEP6_Msk (0x01 << USBD_EPIE_INEP6_Pos)
- #define USBD_EPIE_INEP7_Pos 7
- #define USBD_EPIE_INEP7_Msk (0x01 << USBD_EPIE_INEP7_Pos)
- #define USBD_EPIE_OUTEP0_Pos 16
- #define USBD_EPIE_OUTEP0_Msk (0x01 << USBD_EPIE_OUTEP0_Pos)
- #define USBD_EPIE_OUTEP1_Pos 17
- #define USBD_EPIE_OUTEP1_Msk (0x01 << USBD_EPIE_OUTEP1_Pos)
- #define USBD_EPIE_OUTEP2_Pos 18
- #define USBD_EPIE_OUTEP2_Msk (0x01 << USBD_EPIE_OUTEP2_Pos)
- #define USBD_EPIE_OUTEP3_Pos 19
- #define USBD_EPIE_OUTEP3_Msk (0x01 << USBD_EPIE_OUTEP3_Pos)
- #define USBD_EPIE_OUTEP4_Pos 20
- #define USBD_EPIE_OUTEP4_Msk (0x01 << USBD_EPIE_OUTEP4_Pos)
- #define USBD_EPIE_OUTEP5_Pos 21
- #define USBD_EPIE_OUTEP5_Msk (0x01 << USBD_EPIE_OUTEP5_Pos)
- #define USBD_EPIE_OUTEP6_Pos 22
- #define USBD_EPIE_OUTEP6_Msk (0x01 << USBD_EPIE_OUTEP6_Pos)
- #define USBD_EPIE_OUTEP7_Pos 23
- #define USBD_EPIE_OUTEP7_Msk (0x01 << USBD_EPIE_OUTEP7_Pos)
- #define USBD_RXSR_SUCC_Pos 0 //Success
- #define USBD_RXSR_SUCC_Msk (0x01 << USBD_RXSR_SUCC_Pos)
- #define USBD_RXSR_DONE_Pos 1 //1 Transfer completed
- #define USBD_RXSR_DONE_Msk (0x01 << USBD_RXSR_DONE_Pos)
- #define USBD_RXSR_EPNR_Pos 16 //Endpoint Number
- #define USBD_RXSR_EPNR_Msk (0x0F << USBD_RXSR_EPNR_Pos)
- #define USBD_RXSR_TRSZ_Pos 22 //Transfer Size in byte
- #define USBD_RXSR_TRSZ_Msk (0x3FFu<<USBD_RXSR_TRSZ_Pos)
- #define USBD_SETUPSR_SUCC_Pos 0 //Success
- #define USBD_SETUPSR_SUCC_Msk (0x01 << USBD_SETUPSR_SUCC_Pos)
- #define USBD_SETUPSR_DONE_Pos 1 //1 Transfer completed
- #define USBD_SETUPSR_DONE_Msk (0x01 << USBD_SETUPSR_DONE_Pos)
- #define USBD_SETUPSR_EPNR_Pos 16
- #define USBD_SETUPSR_EPNR_Msk (0x0F << USBD_SETUPSR_EPNR_Pos)
- #define USBD_EPIF_INEP0_Pos 0 //data sent or NAK sent
- #define USBD_EPIF_INEP0_Msk (0x01 << USBD_EPIF_INEP0_Pos)
- #define USBD_EPIF_INEP1_Pos 1
- #define USBD_EPIF_INEP1_Msk (0x01 << USBD_EPIF_INEP1_Pos)
- #define USBD_EPIF_INEP2_Pos 2
- #define USBD_EPIF_INEP2_Msk (0x01 << USBD_EPIF_INEP2_Pos)
- #define USBD_EPIF_INEP3_Pos 3
- #define USBD_EPIF_INEP3_Msk (0x01 << USBD_EPIF_INEP3_Pos)
- #define USBD_EPIF_INEP4_Pos 4
- #define USBD_EPIF_INEP4_Msk (0x01 << USBD_EPIF_INEP4_Pos)
- #define USBD_EPIF_INEP5_Pos 5
- #define USBD_EPIF_INEP5_Msk (0x01 << USBD_EPIF_INEP5_Pos)
- #define USBD_EPIF_INEP6_Pos 6
- #define USBD_EPIF_INEP6_Msk (0x01 << USBD_EPIF_INEP6_Pos)
- #define USBD_EPIF_INEP7_Pos 7
- #define USBD_EPIF_INEP7_Msk (0x01 << USBD_EPIF_INEP7_Pos)
- #define USBD_EPIF_OUTEP0_Pos 16 //data available
- #define USBD_EPIF_OUTEP0_Msk (0x01 << USBD_EPIF_OUTEP0_Pos)
- #define USBD_EPIF_OUTEP1_Pos 17
- #define USBD_EPIF_OUTEP1_Msk (0x01 << USBD_EPIF_OUTEP1_Pos)
- #define USBD_EPIF_OUTEP2_Pos 18
- #define USBD_EPIF_OUTEP2_Msk (0x01 << USBD_EPIF_OUTEP2_Pos)
- #define USBD_EPIF_OUTEP3_Pos 19
- #define USBD_EPIF_OUTEP3_Msk (0x01 << USBD_EPIF_OUTEP3_Pos)
- #define USBD_EPIF_OUTEP4_Pos 20
- #define USBD_EPIF_OUTEP4_Msk (0x01 << USBD_EPIF_OUTEP4_Pos)
- #define USBD_EPIF_OUTEP5_Pos 21
- #define USBD_EPIF_OUTEP5_Msk (0x01 << USBD_EPIF_OUTEP5_Pos)
- #define USBD_EPIF_OUTEP6_Pos 22
- #define USBD_EPIF_OUTEP6_Msk (0x01 << USBD_EPIF_OUTEP6_Pos)
- #define USBD_EPIF_OUTEP7_Pos 23
- #define USBD_EPIF_OUTEP7_Msk (0x01 << USBD_EPIF_OUTEP7_Pos)
- #define USBD_EPCFG_EPNR_Pos 0 //Endpoint Number
- #define USBD_EPCFG_EPNR_Msk (0x0F << USBD_EPCFG_EPNR_Pos)
- #define USBD_EPCFG_DIR_Pos 4 //Endpoint Direction,0 OUT 1 IN
- #define USBD_EPCFG_DIR_Msk (0x01 << USBD_EPCFG_DIR_Pos)
- #define USBD_EPCFG_TYPE_Pos 5 //Endpoint Type,0 Control 1 Isochronous 2 Bulk 3 Interrupt
- #define USBD_EPCFG_TYPE_Msk (0x03 << USBD_EPCFG_TYPE_Pos)
- #define USBD_EPCFG_CFG_Pos 7 //Configuration number to which this endpoint belongs
- #define USBD_EPCFG_CFG_Msk (0x0F << USBD_EPCFG_CFG_Pos)
- #define USBD_EPCFG_INTF_Pos 11 //Interface number to which this endpoint belongs
- #define USBD_EPCFG_INTF_Msk (0x0F << USBD_EPCFG_INTF_Pos)
- #define USBD_EPCFG_ALT_Pos 15 //Alternate setting to which this endpoint belongs
- #define USBD_EPCFG_ALT_Msk (0x0F << USBD_EPCFG_ALT_Pos)
- #define USBD_EPCFG_PKSZ_Pos 19 //Maximum packet size
- #define USBD_EPCFG_PKSZ_Msk (0xFF << USBD_EPCFG_PKSZ_Pos)
- typedef struct {
- __IO uint32_t TXBUF[0x100];
- uint32_t RESERVED1[15][0x100]; //0x4000, 16KB
- __IO uint32_t RXBUF[0x100];
- uint32_t RESERVED2[0x200]; //0x4C00
- __IO uint32_t IF; //Interrupt Flag
- __IO uint32_t IE; //Interrupt Enable
- __IO uint32_t SR; //Status Register
- __IO uint32_t CR; //Control Register
- __IO uint32_t FFSZ; //FIFO Size
- __IO uint32_t FFTHR; //FIFO Threshold
- __IO uint32_t TXTRSZ; //Tx Transfer Size in byte
- uint32_t RESERVED3[(0x5034-0x4C18)/4-1];
- __IO uint32_t FRAMEIV; //Frame Interval, 11999 for 1ms
- __IO uint32_t FRAMERM; //Frame Remaining
- __IO uint32_t FRAMENR; //Frame Number
- uint32_t RESERVED4[(0x5054-0x503C)/4-1];
- __IO uint32_t PORTSR; //Port Status
- uint32_t RESERVED5[(0x5090-0x5054)/4-1];
- __IO uint32_t TOKEN;
- __IO uint32_t OTGCSR; //OTG Control and Status
- } USBH_TypeDef;
- #define USBH_IF_RXSTAT_Pos 0 //receive a status write form device
- #define USBH_IF_RXSTAT_Msk (0x01 << USBH_IF_RXSTAT_Pos)
- #define USBH_IF_ABVTHR_Pos 1 //RX FIFO Above Threshold
- #define USBH_IF_ABVTHR_Msk (0x01 << USBH_IF_ABVTHR_Pos)
- #define USBH_IF_BLWTHR_Pos 2 //TX FIFO Below Threshold
- #define USBH_IF_BLWTHR_Msk (0x01 << USBH_IF_BLWTHR_Pos)
- #define USBH_IF_SOF_Pos 3 //SOF sent
- #define USBH_IF_SOF_Msk (0x01 << USBH_IF_SOF_Pos)
- #define USBH_IF_PORT_Pos 8 //Port status changed
- #define USBH_IF_PORT_Msk (0x01 << USBH_IF_PORT_Pos)
- #define USBH_IF_OTG_Pos 9 //SRP or HNP
- #define USBH_IF_OTG_Msk (0x01 << USBH_IF_OTG_Pos)
- #define USBH_IE_RXSTAT_Pos 0
- #define USBH_IE_RXSTAT_Msk (0x01 << USBH_IE_RXSTAT_Pos)
- #define USBH_IE_ABVTHR_Pos 1
- #define USBH_IE_ABVTHR_Msk (0x01 << USBH_IE_ABVTHR_Pos)
- #define USBH_IE_BLWTHR_Pos 2
- #define USBH_IE_BLWTHR_Msk (0x01 << USBH_IE_BLWTHR_Pos)
- #define USBH_IE_SOF_Pos 3
- #define USBH_IE_SOF_Msk (0x01 << USBH_IE_SOF_Pos)
- #define USBH_IE_PORT_Pos 8
- #define USBH_IE_PORT_Msk (0x01 << USBH_IE_PORT_Pos)
- #define USBH_IE_OTG_Pos 9
- #define USBH_IE_OTG_Msk (0x01 << USBH_IE_OTG_Pos)
- #define USBH_SR_RESP_Pos 0 //Response Code
- #define USBH_SR_RESP_Msk (0x0F << USBH_SR_RESP_Pos)
- #define USBH_SR_TRSZ_Pos 4 //Transfer Size in previous transaction
- #define USBH_SR_TRSZ_Msk (0x3FF<< USBH_SR_TRSZ_Pos)
- #define USBH_CR_FLUSHFF_Pos 0 //Flush FIFO
- #define USBH_CR_FLUSHFF_Msk (0x01 << USBH_CR_FLUSHFF_Pos)
- #define USBH_FFSZ_RX_Pos 0 //RX FIFO Size in word
- #define USBH_FFSZ_RX_Msk (0x3FF<< USBH_FFSZ_RX_Pos)
- #define USBH_FFSZ_TX_Pos 16 //TX FIFO Size in word
- #define USBH_FFSZ_TX_Msk (0x3FF<< USBH_FFSZ_TX_Pos)
- #define USBH_FFTHR_TX_Pos 0 //TX FIFO Threshold in word
- #define USBH_FFTHR_TX_Msk (0x3FF<< USBH_FFTHR_TX_Pos)
- #define USBH_FFTHR_RX_Pos 16 //RX FIFO Threshold in word
- #define USBH_FFTHR_RX_Msk (0x3FF<< USBH_FFTHR_RX_Pos)
- #define USBH_PORTSR_CONN_Pos 0 //Read: 1 Device connected 0 Device not connected
- #define USBH_PORTSR_CONN_Msk (0x01 << USBH_PORTSR_CONN_Pos)
- #define USBH_PORTSR_CLRENA_Pos 0 //Write: Clear Port Enable, 写1清除PORTSR.ENA
- #define USBH_PORTSR_CLRENA_Msk (0x01 << USBH_PORTSR_CLRENA_Pos)
- #define USBH_PORTSR_ENA_Pos 1 //1 Port enabled 0 Port disabled
- #define USBH_PORTSR_ENA_Msk (0x01 << USBH_PORTSR_ENA_Pos)
- #define USBH_PORTSR_SUSP_Pos 2 //1 Port is suspended 0 Port is not suspended
- #define USBH_PORTSR_SUSP_Msk (0x01 << USBH_PORTSR_SUSP_Pos)
- #define USBH_PORTSR_CLRSUSP_Pos 3 //Write: Clear Suspend Status, 写1清除PORTSR.SUSP,Initiate Resume
- #define USBH_PORTSR_CLRSUSP_Msk (0x01 << USBH_PORTSR_CLRSUSP_Pos)
- #define USBH_PORTSR_RESET_Pos 4 //1 Port Reset signalling active 0 Port Reset signalling not active
- #define USBH_PORTSR_RESET_Msk (0x01 << USBH_PORTSR_RESET_Pos)
- #define USBH_PORTSR_POWER_Pos 8 //1 Port power on 0 Port power off
- #define USBH_PORTSR_POWER_Msk (0x01 << USBH_PORTSR_POWER_Pos)
- #define USBH_PORTSR_SPEED_Pos 9 //Read: 1 Low-Speed device attached 0 Full-Speed device attached
- #define USBH_PORTSR_SPEED_Msk (0x01 << USBH_PORTSR_SPEED_Pos)
- #define USBH_PORTSR_CLRPOWER_Pos 9 //Write: Clear Port Power status, 写1清除PORTSR.POWER
- #define USBH_PORTSR_CLRPOWER_Msk (0x01 << USBH_PORTSR_CLRPOWER_Pos)
- #define USBH_PORTSR_CONNCHG_Pos 16 //1 PORTSR.CONN changed,写1清零
- #define USBH_PORTSR_CONNCHG_Msk (0x01 << USBH_PORTSR_CONNCHG_Pos)
- #define USBH_PORTSR_ENACHG_Pos 17 //1 PORTSR.ENA changed,写1清零
- #define USBH_PORTSR_ENACHG_Msk (0x01 << USBH_PORTSR_ENACHG_Pos)
- #define USBH_PORTSR_SUSPCHG_Pos 18 //set when a full Resume sequence is finished,写1清零
- #define USBH_PORTSR_SUSPCHG_Msk (0x01 << USBH_PORTSR_SUSPCHG_Pos)
- #define USBH_PORTSR_RSTCHG_Pos 20 //set at the end of the Port Reset signal,写1清零
- #define USBH_PORTSR_RSTCHG_Msk (0x01 << USBH_PORTSR_RSTCHG_Pos)
- #define USBH_TOKEN_ADDR_Pos 0
- #define USBH_TOKEN_ADDR_Msk (0x7F << USBH_TOKEN_ADDR_Pos)
- #define USBH_TOKEN_EPNR_Pos 7 //Endport Number
- #define USBH_TOKEN_EPNR_Msk (0x0F << USBH_TOKEN_EPNR_Pos)
- #define USBH_TOKEN_DATAX_Pos 11 //0 DATA0 1 DATA1
- #define USBH_TOKEN_DATAX_Msk (0x01 << USBH_TOKEN_DATAX_Pos)
- #define USBH_TOKEN_TYPE_Pos 13 //13 SETUP 1 OUT 9 IN
- #define USBH_TOKEN_TYPE_Msk (0x0F << USBH_TOKEN_TYPE_Pos)
- #define USBH_TOKEN_ISO_Pos 17 //1 ISO transfer 0 Non-ISO transfer
- #define USBH_TOKEN_ISO_Msk (0x01 << USBH_TOKEN_ISO_Pos)
- #define USBH_TOKEN_SPEED_Pos 18 //2 LS 3 FS
- #define USBH_TOKEN_SPEED_Msk (0x03 << USBH_TOKEN_SPEED_Pos)
- #define USBH_TOKEN_TRSZ_Pos 20 //Transfer Size in byte
- #define USBH_TOKEN_TRSZ_Msk (0x3FF<< USBH_TOKEN_TRSZ_Pos)
- #define USBH_OTGCSR_SRSUCC_Pos 0 //Session Request Success
- #define USBH_OTGCSR_SRSUCC_Msk (0x01 << USBH_OTGCSR_SRSUCC_Pos)
- #define USBH_OTGCSR_SRSCHG_Pos 1 //Session Request Status Change, set to 1 on Session Request Success, 写1清零
- #define USBH_OTGCSR_SRSCHG_Msk (0x01 << USBH_OTGCSR_SRSCHG_Pos)
- #define USBH_OTGCSR_HNSUCC_Pos 2 //Host Negotiation Success
- #define USBH_OTGCSR_HNSUCC_Msk (0x01 << USBH_OTGCSR_HNSUCC_Pos)
- #define USBH_OTGCSR_HNSCHG_Pos 3 //Host Negotiation Status Change, set to 1 on Host Negotiation Success,写1清零
- #define USBH_OTGCSR_HNSCHG_Msk (0x01 << USBH_OTGCSR_HNSCHG_Pos)
- #define USBH_OTGCSR_SRDET_Pos 4 //Session Request Detected
- #define USBH_OTGCSR_SRDET_Msk (0x01 << USBH_OTGCSR_SRDET_Pos)
- #define USBH_OTGCSR_SRDCHG_Pos 5 //Session Request Detected Change, set to 1 when a Session Request is detected,写1清零
- #define USBH_OTGCSR_SRDCHG_Msk (0x01 << USBH_OTGCSR_SRDCHG_Pos)
- #define USBH_OTGCSR_HNDET_Pos 6 //Host Negotiation Detected
- #define USBH_OTGCSR_HNDET_Msk (0x01 << USBH_OTGCSR_HNDET_Pos)
- #define USBH_OTGCSR_HNDCHG_Pos 7 //Host Negotiation Detect Change, set to 1 when a Host Negotiation is detected, 写1清零
- #define USBH_OTGCSR_HNDCHG_Msk (0x01 << USBH_OTGCSR_HNDCHG_Pos)
- #define USBH_OTGCSR_ID_Pos 8 //Connector ID Status, 0 in A-device mode, 1 in B-device mode
- #define USBH_OTGCSR_ID_Msk (0x01 << USBH_OTGCSR_ID_Pos)
- #define USBH_OTGCSR_IDCHG_Pos 9 //set when OTGCSR.ID changed, 写1清零
- #define USBH_OTGCSR_IDCHG_Msk (0x01 << USBH_OTGCSR_IDCHG_Pos)
- #define USBH_OTGCSR_MODE_Pos 10 //0 Host mode 1 Device mode
- #define USBH_OTGCSR_MODE_Msk (0x01 << USBH_OTGCSR_MODE_Pos)
- #define USBH_OTGCSR_SRPREQ_Pos 16 //SRP Request
- #define USBH_OTGCSR_SRPREQ_Msk (0x01 << USBH_OTGCSR_SRPREQ_Pos)
- #define USBH_OTGCSR_HNPREQ_Pos 17 //HNP Request
- #define USBH_OTGCSR_HNPREQ_Msk (0x01 << USBH_OTGCSR_HNPREQ_Pos)
- #define USBH_OTGCSR_HHNPENA_Pos 18 //Host HNP Enable, set by app when Set Feature Set HNP Enable is successful on connected device
- #define USBH_OTGCSR_HHNPENA_Msk (0x01 << USBH_OTGCSR_HHNPENA_Pos)
- #define USBH_OTGCSR_HNPENA_Pos 19 //set by app when receives Set Feature Set HNP Enable command
- #define USBH_OTGCSR_HNPENA_Msk (0x01 << USBH_OTGCSR_HNPENA_Pos)
- #define USBH_OTGCSR_SRPCAP_Pos 20 //SRP Capable
- #define USBH_OTGCSR_SRPCAP_Msk (0x01 << USBH_OTGCSR_SRPCAP_Pos)
- #define USBH_OTGCSR_HNPCAP_Pos 21 //HNP Capable
- #define USBH_OTGCSR_HNPCAP_Msk (0x01 << USBH_OTGCSR_HNPCAP_Pos)
- typedef struct {
- __IO uint32_t CFG; //JPEG DEC configure register
- __IO uint32_t CR; //JPEG DEC control register
- __IO uint32_t IR; //JPEG DEC interrupt register
- __IO uint32_t SR; //JPEG DEC status register
- __IO uint32_t IMGSIZ; //JPEG image size
- __IO uint32_t IMGSTR; //JPEG image size virtual stride
- __IO uint32_t CSBASE; //JPEG code-stream base address
- union {
- __IO uint32_t YBASE; //YUV image Y base address
- __IO uint32_t RGBASE; //RGB image base address
- };
- __IO uint32_t UBASE; //YUV image U base address
- __IO uint32_t VBASE; //YUV image V base address
- __IO uint32_t QTBASE; //JPEG quantization table base address
- __IO uint32_t HTBASE; //JPEG huffman table base address
- __IO uint32_t CODLEN; //JPEG code stream total length in byte
- uint32_t RESERVED[51];
- __O uint32_t QTABLE[3][16]; //Quantization table
- uint32_t RESERVED2[16];
- struct {
- __O uint32_t DC_CODEWORD[6];
- __O uint32_t DC_CODELEN[2];
- __O uint32_t DC_CODEVAL[2];
- __O uint32_t AC_CODEWORD[8];
- __O uint32_t AC_CODEADDR[4];
- __O uint32_t AC_CODEVAL[41];
- uint32_t RESERVED;
- } HTABLE[2]; //Huffman table
- } JPEG_TypeDef;
- #define JPEG_CFG_SRCFMT_Pos 0 //JPEG Source Format, 0 YUV420(H2V2) 1 YUV422(H2V1) 2 YUV444(H1V1)
- #define JPEG_CFG_SRCFMT_Msk (0x03 << JPEG_CFG_SRCFMT_Pos)
- #define JPEG_CFG_SCANMOD_Pos 2 //JPEG scan mode, 0 interleaved (three components) 1 non-interleaved (single component)
- #define JPEG_CFG_SCANMOD_Msk (0x01 << JPEG_CFG_SCANMOD_Pos)
- #define JPEG_CFG_NISCOMP_Pos 3 //Non-Interleaved Scanning Component, 0 component 1 1 component 2 2 component 3
- #define JPEG_CFG_NISCOMP_Msk (0x03 << JPEG_CFG_NISCOMP_Pos)
- #define JPEG_CFG_HT1COMP_Pos 5 //Huffman Table for Component 1, 0 table 0 1 table 1
- #define JPEG_CFG_HT1COMP_Msk (0x01 << JPEG_CFG_HT1COMP_Pos)
- #define JPEG_CFG_HT2COMP_Pos 6
- #define JPEG_CFG_HT2COMP_Msk (0x01 << JPEG_CFG_HT2COMP_Pos)
- #define JPEG_CFG_HT3COMP_Pos 7
- #define JPEG_CFG_HT3COMP_Msk (0x01 << JPEG_CFG_HT3COMP_Pos)
- #define JPEG_CFG_QT1COMP_Pos 8 //Quantization Table for Component 1, 0 table 0 1 table 1 2 table 2
- #define JPEG_CFG_QT1COMP_Msk (0x03 << JPEG_CFG_QT1COMP_Pos)
- #define JPEG_CFG_QT2COMP_Pos 10
- #define JPEG_CFG_QT2COMP_Msk (0x03 << JPEG_CFG_QT2COMP_Pos)
- #define JPEG_CFG_QT3COMP_Pos 12
- #define JPEG_CFG_QT3COMP_Msk (0x03 << JPEG_CFG_QT3COMP_Pos)
- #define JPEG_CFG_OUTFMT_Pos 14 //Image data output format, 0 YUV planar 1 YUV semi-planar 2 XRGB888 3 RGB888 4 RGB565
- #define JPEG_CFG_OUTFMT_Msk (0x07 << JPEG_CFG_OUTFMT_Pos)
- #define JPEG_CFG_YUV2RGB_Pos 17 //YUV2RGB translation, 0 Disable 1 Enable
- #define JPEG_CFG_YUV2RGB_Msk (0x01 << JPEG_CFG_YUV2RGB_Pos)
- #define JPEG_CFG_UVSWAP_Pos 18 //UV output swap, 0 YUV 1 YVU
- #define JPEG_CFG_UVSWAP_Msk (0x01 << JPEG_CFG_UVSWAP_Pos)
- #define JPEG_CFG_RBSWAP_Pos 19 //RB output swap, 0 RGB 1 BGR
- #define JPEG_CFG_RBSWAP_Msk (0x01 << JPEG_CFG_RBSWAP_Pos)
- #define JPEG_CFG_EDSWAP_Pos 20 //endian swap, 0 XRGB 1 BGRX
- #define JPEG_CFG_EDSWAP_Msk (0x01 << JPEG_CFG_EDSWAP_Pos)
- #define JPEG_CFG_565DITH_Pos 21 //RGB565 dithering, 0 Disable 1 Enable
- #define JPEG_CFG_565DITH_Msk (0x01 << JPEG_CFG_565DITH_Pos)
- #define JPEG_CR_START_Pos 0 //JPEG DEC frame start,解码完成自动清零
- #define JPEG_CR_START_Msk (0x01 << JPEG_CR_START_Pos)
- #define JPEG_CR_RESTART_Pos 1 //Decoder stream buffering restart
- #define JPEG_CR_RESTART_Msk (0x01 << JPEG_CR_RESTART_Pos)
- #define JPEG_CR_RESET_Pos 3 //JPEG DEC core reset,自动清零
- #define JPEG_CR_RESET_Msk (0x01 << JPEG_CR_RESET_Pos)
- #define JPEG_CR_REINTRV_Pos 4 //Restart interval marker enable
- #define JPEG_CR_REINTRV_Msk (0x01 << JPEG_CR_REINTRV_Pos)
- #define JPEG_CR_LASTBUF_Pos 5 //Decoder last stream buffering
- #define JPEG_CR_LASTBUF_Msk (0x01 << JPEG_CR_LASTBUF_Pos)
- #define JPEG_CR_QTAUTO_Pos 7 //JPEG quantization tables auto refresh enable
- #define JPEG_CR_QTAUTO_Msk (0x01 << JPEG_CR_QTAUTO_Pos)
- #define JPEG_CR_HTAUTO_Pos 8 //JPEG huffman tables auto refresh enable
- #define JPEG_CR_HTAUTO_Msk (0x01 << JPEG_CR_HTAUTO_Pos)
- #define JPEG_CR_QTCNT_Pos 9 //Number of quantization tables
- #define JPEG_CR_QTCNT_Msk (0x03 << JPEG_CR_QTCNT_Pos)
- #define JPEG_CR_HTCNT_Pos 11 //Number of huffman tables
- #define JPEG_CR_HTCNT_Msk (0x01 << JPEG_CR_HTCNT_Pos)
- #define JPEG_CR_CUCNT_Pos 12 //The number of CU in the restart interval
- #define JPEG_CR_CUCNT_Msk (0xFFFF<<JPEG_CR_CUCNT_Pos)
- #define JPEG_IR_IEDONE_Pos 0 //Frame processing finish interrupt enable
- #define JPEG_IR_IEDONE_Msk (0x01 << JPEG_IR_IEDONE_Pos)
- #define JPEG_IR_IEEMPTY_Pos 2 //JPEG decoder stream buffering empty interrupt enable
- #define JPEG_IR_IEEMPTY_Msk (0x01 << JPEG_IR_IEEMPTY_Pos)
- #define JPEG_IR_IEERROR_Pos 3 //JPEG error interrupt enable
- #define JPEG_IR_IEERROR_Msk (0x01 << JPEG_IR_IEERROR_Pos)
- #define JPEG_IR_ICDONE_Pos 5 //Interrupt Clear, write-ongly
- #define JPEG_IR_ICDONE_Msk (0x01 << JPEG_IR_ICDONE_Pos)
- #define JPEG_IR_ICEMPTY_Pos 7
- #define JPEG_IR_ICEMPTY_Msk (0x01 << JPEG_IR_ICEMPTY_Pos)
- #define JPEG_IR_ICERROR_Pos 8
- #define JPEG_IR_ICERROR_Msk (0x01 << JPEG_IR_ICERROR_Pos)
- #define JPEG_IR_IFDONE_Pos 10 //Interrupt Flag, read-only
- #define JPEG_IR_IFDONE_Msk (0x01 << JPEG_IR_IFDONE_Pos)
- #define JPEG_IR_IFEMPTY_Pos 12
- #define JPEG_IR_IFEMPTY_Msk (0x01 << JPEG_IR_IFEMPTY_Pos)
- #define JPEG_IR_IFERROR_Pos 13
- #define JPEG_IR_IFERROR_Msk (0x01 << JPEG_IR_IFERROR_Pos)
- #define JPEG_SR_BUSY_Pos 0
- #define JPEG_SR_BUSY_Msk (0x01 << JPEG_SR_BUSY_Pos)
- #define JPEG_SR_CUOVR_Pos 1 //JPEG CU run length overflow error
- #define JPEG_SR_CUOVR_Msk (0x01 << JPEG_SR_CUOVR_Pos)
- #define JPEG_SR_REIMERR_Pos 2 //JPEG Restart interval marker error
- #define JPEG_SR_REIMERR_Msk (0x01 << JPEG_SR_REIMERR_Pos)
- #define JPEG_SR_BUFBUSY_Pos 4 //JPEG decoder stream buffering status
- #define JPEG_SR_BUFBUSY_Msk (0x01 << JPEG_SR_BUFBUSY_Pos)
- #define JPEG_SR_DMARDBUSY_Pos 5
- #define JPEG_SR_DMARDBUSY_Msk (0x01 << JPEG_SR_DMARDBUSY_Pos)
- #define JPEG_SR_DMAWRBUSY_Pos 6
- #define JPEG_SR_DMAWRBUSY_Msk (0x01 << JPEG_SR_DMAWRBUSY_Pos)
- #define JPEG_IMGSIZ_HPIX_Pos 0 //JPEG image width (minus 1)
- #define JPEG_IMGSIZ_HPIX_Msk (0x3FF<< JPEG_IMGSIZ_HPIX_Pos)
- #define JPEG_IMGSIZ_VPIX_Pos 16 //JPEG image height (minus 1)
- #define JPEG_IMGSIZ_VPIX_Msk (0x3FF<< JPEG_IMGSIZ_VPIX_Pos)
- #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)
- #define JPEG_IMGSTR_RGBLINE_Msk (0x7FF<< JPEG_IMGSTR_RGBLINE_Pos)
- #define JPEG_IMGSTR_YLINE_Pos 0 //number of words of Y line width, ceil(img_width/4)
- #define JPEG_IMGSTR_YLINE_Msk (0x7FF<< JPEG_IMGSTR_YLINE_Pos)
- #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)
- // UV-semi planer 444: ceil(img_width/2) UV-semi planer 420/422: ceil(img_width/4)
- #define JPEG_IMGSTR_UVLINE_Msk (0x7FF<< JPEG_IMGSTR_UVLINE_Pos)
- /******************************************************************************/
- /* Peripheral memory map */
- /******************************************************************************/
- #define RAM_BASE 0x20000000
- #define AHB_BASE 0x40000000
- #define APB1_BASE 0x40040000
- #define APB2_BASE 0x400A0000
- #define SFLASH_BASE 0x70000000 //Serial Flash
- #define SDRAMM_BASE 0x80000000
- #define SDRAMC_BASE 0x88000000
- /* AHB Peripheral memory map */
- #define SYS_BASE (AHB_BASE + 0x00000)
- #define DMA_BASE (AHB_BASE + 0x00800)
- #define SDIO_BASE (AHB_BASE + 0x01800)
- #define LCD_BASE (AHB_BASE + 0x02000)
- #define CRC_BASE (AHB_BASE + 0x02800)
- #define CORDIC_BASE (AHB_BASE + 0x03000)
- #define DIV_BASE (AHB_BASE + 0x03800)
- #define GPIOM_BASE (AHB_BASE + 0x04000)
- #define GPION_BASE (AHB_BASE + 0x04800)
- #define USBD_BASE (AHB_BASE + 0x05000)
- #define USBH_BASE (AHB_BASE + 0x05000)
- #define JPEG_BASE (AHB_BASE + 0x0B000)
- #define DMA2D_BASE (AHB_BASE + 0x0C000)
- /* APB Peripheral memory map */
- #define GPIOA_BASE (APB1_BASE + 0x00000)
- #define GPIOB_BASE (APB1_BASE + 0x00800)
- #define GPIOC_BASE (APB1_BASE + 0x01000)
- #define GPIOD_BASE (APB1_BASE + 0x01800)
- #define UART0_BASE (APB1_BASE + 0x02000)
- #define UART1_BASE (APB1_BASE + 0x02800)
- #define UART2_BASE (APB1_BASE + 0x03000)
- #define UART3_BASE (APB1_BASE + 0x03800)
- #define SPI0_BASE (APB1_BASE + 0x04000)
- #define SPI1_BASE (APB1_BASE + 0x04800)
- #define PWM0_BASE (APB1_BASE + 0x06000)
- #define PWM1_BASE (APB1_BASE + 0x06080)
- #define PWM2_BASE (APB1_BASE + 0x06100)
- #define PWM3_BASE (APB1_BASE + 0x06180)
- #define PWM4_BASE (APB1_BASE + 0x06200)
- #define PWMG_BASE (APB1_BASE + 0x06400)
- #define TIMR0_BASE (APB1_BASE + 0x06800)
- #define TIMR1_BASE (APB1_BASE + 0x06840)
- #define TIMR2_BASE (APB1_BASE + 0x06880)
- #define TIMR3_BASE (APB1_BASE + 0x068C0)
- #define TIMR4_BASE (APB1_BASE + 0x06900)
- #define TIMRG_BASE (APB1_BASE + 0x06C00)
- #define BTIMR0_BASE (APB1_BASE + 0x08800)
- #define BTIMR1_BASE (APB1_BASE + 0x08840)
- #define BTIMR2_BASE (APB1_BASE + 0x08880)
- #define BTIMR3_BASE (APB1_BASE + 0x088C0)
- #define BTIMR4_BASE (APB1_BASE + 0x08900)
- #define BTIMR5_BASE (APB1_BASE + 0x08940)
- #define BTIMR6_BASE (APB1_BASE + 0x08980)
- #define BTIMR7_BASE (APB1_BASE + 0x089C0)
- #define BTIMR8_BASE (APB1_BASE + 0x08A00)
- #define BTIMR9_BASE (APB1_BASE + 0x08A40)
- #define BTIMR10_BASE (APB1_BASE + 0x08A80)
- #define BTIMR11_BASE (APB1_BASE + 0x08AC0)
- #define BTIMRG_BASE (APB1_BASE + 0x08C00)
- #define ADC0_BASE (APB1_BASE + 0x09000)
- #define ADC1_BASE (APB1_BASE + 0x09800)
- #define FMC_BASE (APB1_BASE + 0x0A000) //Flash Memory Controller
- #define SFC_BASE (APB1_BASE + 0x0A800) //Serial Flash Controller
- #define RTC_BASE (APB1_BASE + 0x0B800)
- #define DAC_BASE (APB1_BASE + 0x0C000)
- #define QEI_BASE (APB1_BASE + 0x0C800)
- #define PORTA_BASE (APB2_BASE + 0x00000)
- #define PORTB_BASE (APB2_BASE + 0x00010)
- #define PORTC_BASE (APB2_BASE + 0x00020)
- #define PORTD_BASE (APB2_BASE + 0x00030)
- #define PORTE_BASE (APB2_BASE + 0x00040)
- #define PORTM_BASE (APB2_BASE + 0x00080)
- #define PORTN_BASE (APB2_BASE + 0x00090)
- #define WDT_BASE (APB2_BASE + 0x00800)
- #define GPIOE_BASE (APB2_BASE + 0x01000)
- #define I2C0_BASE (APB2_BASE + 0x06000)
- #define I2C1_BASE (APB2_BASE + 0x06800)
- #define CAN0_BASE (APB2_BASE + 0x08000)
- #define CAN1_BASE (APB2_BASE + 0x08800)
- /******************************************************************************/
- /* Peripheral declaration */
- /******************************************************************************/
- #define SYS ((SYS_TypeDef *) SYS_BASE)
- #define PORTA ((PORT_TypeDef *) PORTA_BASE)
- #define PORTB ((PORT_TypeDef *) PORTB_BASE)
- #define PORTC ((PORT_TypeDef *) PORTC_BASE)
- #define PORTD ((PORT_TypeDef *) PORTD_BASE)
- #define PORTE ((PORT_TypeDef *) PORTE_BASE)
- #define PORTM ((PORT_TypeDef *) PORTM_BASE)
- #define PORTN ((PORT_TypeDef *) PORTN_BASE)
- #define GPIOA ((GPIO_TypeDef *) GPIOA_BASE)
- #define GPIOB ((GPIO_TypeDef *) GPIOB_BASE)
- #define GPIOC ((GPIO_TypeDef *) GPIOC_BASE)
- #define GPIOD ((GPIO_TypeDef *) GPIOD_BASE)
- #define GPIOE ((GPIO_TypeDef *) GPIOE_BASE)
- #define GPIOM ((GPIO_TypeDef *) GPIOM_BASE)
- #define GPION ((GPIO_TypeDef *) GPION_BASE)
- #define TIMR0 ((TIMR_TypeDef *) TIMR0_BASE)
- #define TIMR1 ((TIMR_TypeDef *) TIMR1_BASE)
- #define TIMR2 ((TIMR_TypeDef *) TIMR2_BASE)
- #define TIMR3 ((TIMR_TypeDef *) TIMR3_BASE)
- #define TIMR4 ((TIMR_TypeDef *) TIMR4_BASE)
- #define TIMRG ((TIMRG_TypeDef*) TIMRG_BASE)
- #define BTIMR0 ((TIMR_TypeDef *) BTIMR0_BASE)
- #define BTIMR1 ((TIMR_TypeDef *) BTIMR1_BASE)
- #define BTIMR2 ((TIMR_TypeDef *) BTIMR2_BASE)
- #define BTIMR3 ((TIMR_TypeDef *) BTIMR3_BASE)
- #define BTIMR4 ((TIMR_TypeDef *) BTIMR4_BASE)
- #define BTIMR5 ((TIMR_TypeDef *) BTIMR5_BASE)
- #define BTIMR6 ((TIMR_TypeDef *) BTIMR6_BASE)
- #define BTIMR7 ((TIMR_TypeDef *) BTIMR7_BASE)
- #define BTIMR8 ((TIMR_TypeDef *) BTIMR8_BASE)
- #define BTIMR9 ((TIMR_TypeDef *) BTIMR9_BASE)
- #define BTIMR10 ((TIMR_TypeDef *) BTIMR10_BASE)
- #define BTIMR11 ((TIMR_TypeDef *) BTIMR11_BASE)
- #define BTIMRG ((TIMRG_TypeDef*) BTIMRG_BASE)
- #define UART0 ((UART_TypeDef *) UART0_BASE)
- #define UART1 ((UART_TypeDef *) UART1_BASE)
- #define UART2 ((UART_TypeDef *) UART2_BASE)
- #define UART3 ((UART_TypeDef *) UART3_BASE)
- #define SPI0 ((SPI_TypeDef *) SPI0_BASE)
- #define SPI1 ((SPI_TypeDef *) SPI1_BASE)
- #define I2C0 ((I2C_TypeDef *) I2C0_BASE)
- #define I2C1 ((I2C_TypeDef *) I2C1_BASE)
- #define ADC0 ((ADC_TypeDef *) ADC0_BASE)
- #define ADC1 ((ADC_TypeDef *) ADC1_BASE)
- #define PWM0 ((PWM_TypeDef *) PWM0_BASE)
- #define PWM1 ((PWM_TypeDef *) PWM1_BASE)
- #define PWM2 ((PWM_TypeDef *) PWM2_BASE)
- #define PWM3 ((PWM_TypeDef *) PWM3_BASE)
- #define PWM4 ((PWM_TypeDef *) PWM4_BASE)
- #define PWMG ((PWMG_TypeDef *) PWMG_BASE)
- #define CAN0 ((CAN_TypeDef *) CAN0_BASE)
- #define CAN1 ((CAN_TypeDef *) CAN1_BASE)
- #define USBD ((USBD_TypeDef *) USBD_BASE)
- #define USBH ((USBH_TypeDef *) USBH_BASE)
- #define SDIO ((SDIO_TypeDef *) SDIO_BASE)
- #define SDRAMC ((SDRAMC_TypeDef*)SDRAMC_BASE)
- #define DMA ((DMA_TypeDef *) DMA_BASE)
- #define LCD ((LCD_TypeDef *) LCD_BASE)
- #define DMA2D ((DMA2D_TypeDef*) DMA2D_BASE)
- #define DAC ((DAC_TypeDef *) DAC_BASE)
- #define CRC ((CRC_TypeDef *) CRC_BASE)
- #define CORDIC ((CORDIC_TypeDef*)CORDIC_BASE)
- #define DIV ((DIV_TypeDef *) DIV_BASE)
- #define RTC ((RTC_TypeDef *) RTC_BASE)
- #define WDT ((WDT_TypeDef *) WDT_BASE)
- #define QEI ((QEI_TypeDef *) QEI_BASE)
- #define FMC ((FMC_TypeDef *) FMC_BASE)
- #define SFC ((SFC_TypeDef *) SFC_BASE)
- #define JPEG ((JPEG_TypeDef *) JPEG_BASE)
- #include "SWM341_port.h"
- #include "SWM341_gpio.h"
- #include "SWM341_exti.h"
- #include "SWM341_timr.h"
- #include "SWM341_uart.h"
- #include "SWM341_spi.h"
- #include "SWM341_i2c.h"
- #include "SWM341_adc.h"
- #include "SWM341_pwm.h"
- #include "SWM341_dma.h"
- #include "SWM341_can.h"
- #include "SWM341_sdio.h"
- #include "SWM341_sdram.h"
- #include "SWM341_flash.h"
- #include "SWM341_lcd.h"
- #include "SWM341_sfc.h"
- #include "SWM341_dac.h"
- #include "SWM341_cordic.h"
- #include "SWM341_crc.h"
- #include "SWM341_div.h"
- #include "SWM341_rtc.h"
- #include "SWM341_wdt.h"
- #include "SWM341_qei.h"
- #include "SWM341_usb.h"
- #include "SWM341_usbd.h"
- #include "SWM341_usbh.h"
- #include "SWM341_jpeg.h"
- #include "SWM341_dma2d.h"
- #include "SWM341_iofilt.h"
- #ifdef SW_LOG_RTT
- #define log_printf(...) SEGGER_RTT_printf(0, __VA_ARGS__)
- #else
- #define log_printf(...) printf(__VA_ARGS__)
- #endif
- #ifndef SW_LOG_LEVEL
- #define SW_LOG_LEVEL 0
- #endif
- #if (SW_LOG_LEVEL > 0)
- #define SW_LOG_ERR(...) { \
- log_printf("ERROR: "); \
- log_printf(__VA_ARGS__); \
- log_printf("\n"); \
- }
- #if (SW_LOG_LEVEL > 1)
- #define SW_LOG_WARN(...) { \
- log_printf("WARN : "); \
- log_printf(__VA_ARGS__); \
- log_printf("\n"); \
- }
- #if (SW_LOG_LEVEL > 2)
- #define SW_LOG_INFO(...) { \
- log_printf("INFO : "); \
- log_printf(__VA_ARGS__); \
- log_printf("\n"); \
- }
- #else
- #define SW_LOG_INFO(...)
- #endif
- #else
- #define SW_LOG_WARN(...)
- #define SW_LOG_INFO(...)
- #endif
- #else
- #define SW_LOG_ERR(...)
- #define SW_LOG_WARN(...)
- #define SW_LOG_INFO(...)
- #endif
- #endif //__SWM341_H__
|